Name: series-workflows2cn9 Phase: Succeeded StartedAt: 2026-08-24 18:59:35 +0000 UTC FinishedAt: 2026-08-24 23:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[0] Phase: Succeeded StartedAt: 2026-08-24 18:59:35 +0000 UTC FinishedAt: 2026-08-24 19:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 18:59:35 +0000 UTC FinishedAt: 2026-08-24 19:50:48 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "4336b6a4-5d65-4dcb-bf6d-a946e14a8870" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "copy_from_kernel_nofault", "copy_to_kernel_nofault", "strncpy_from_kernel_nofault", "bpf_strcmp", "bpf_strcasecmp", "bpf_strncasecmp", "bpf_strstr", "bpf_strcasestr", "bpf_strnstr", "bpf_strncasestr", "bpf_strnchr", "bpf_strchrnul", "bpf_strrchr", "bpf_strnlen", "bpf_strspn", "bpf_strcspn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2NvcHlfdG9fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7c3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9zdHJjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5zdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2hyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjaHJudWwmIzM0OywKICAgICYjMzQ7YnBmX3N0cnJjaHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5sZW4mIzM0OywKICAgICYjMzQ7YnBmX3N0cnNwbiYjMzQ7LAogICAgJiMzNDticGZfc3RyY3NwbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBhbmQgc2V2ZXJhbCBCUEYgc3RyaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gb3B0aW1pemUgVGFnIENoZWNrIE92ZXJyaWRlIChUQ08pIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl0IGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gYmUgdXNlZCB3aXRoaW4gYSBndWFyZGVkIHJlZ2lvbiAoYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSlgKSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHRvZ2dsaW5nIFRDTyBvbiBldmVyeSBtZW1vcnkgYWNjZXNzIGluc2lkZSBsb29wcy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDUxNjAzNGJiZGFjYWI4YjJiNjY0NGQ5YjhhNDBhYjYzZGEyMmVlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE5OjQ5OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDlmNWJkOWM2OWMyNDkuLjFhMTRlYjJhNTFkY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbkBAIC0yNzAsMjggJiM0MzsyNzAsNDMgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gI2RlZmluZSBnZXRfdXNlclx0X19nZXRfdXNlclxuIFxuIC8qXG4tICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXG4tICogX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKS4gQXMgYGRzdGAgYW5kIGBzcmNgIG1heSBjb250YWluIGJsb2NraW5nXG4tICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG4mIzQzOyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGFcbiYjNDM7ICogX19iZWdpbi9fX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkgcmVnaW9uLlxuICAqL1xuLSNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XFxcbiBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oZHN0KSBfX2drbl9kc3QgPSAoZHN0KTtcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKHNyYykgX19na25fc3JjID0gKHNyYyk7XHRcdFx0XHRcXFxuIFx0ZG8geyBcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0X19sYWJlbF9fIF9fZ2tuX2xhYmVsO1x0XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdF9fcmF3X2dldF9tZW0oXCYjMzQ7bGRyXCYjMzQ7LCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLFx0XHRcXFxuIFx0XHQgICAgICAoX19mb3JjZSB0eXBlICopKF9fZ2tuX3NyYyksIF9fZ2tuX2xhYmVsLCBLKTtcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX2drbl9sYWJlbDpcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMCk7XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuJiM0MzsgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsXG4mIzQzOyAqIGV2YWx1YXRlIHRoZW0gYmVmb3JlIG92ZXJyaWRpbmcgVENPLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4mIzQzO2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fbGFiZWxfXyBfX2drbl90Y29fZXJyO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oZHN0KSBfX2drbl90Y29fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oc3JjKSBfX2drbl90Y29fc3JjID0gKHNyYyk7XHRcdFx0XHRcXFxuJiM0MztcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fZ2tuX3Rjb19kc3QsIF9fZ2tuX3Rjb19zcmMsIHR5cGUsXHRcXFxuJiM0MztcdFx0XHRcdCAgICAgX19na25fdGNvX2Vycik7XHRcdFx0XFxcbiYjNDM7XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuJiM0MztcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztfX2drbl90Y29fZXJyOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9IHdoaWxlICgwKVxuJiM0MztcbiAjZGVmaW5lIF9fcHV0X21lbV9hc20oc3RvcmUsIHJlZywgeCwgYWRkciwgbGFiZWwsIHR5cGUpXHRcdFx0XFxcbiBcdGFzbSBnb3RvKFx0XHRcdFx0XHRcdFx0XFxcbiBcdFwmIzM0OzE6XHRcJiMzNDsgc3RvcmUgXCYjMzQ7XHRcJiMzNDsgcmVnIFwmIzM0OzAsIFslMV1cXG5cJiMzNDtcdFx0XHRcXFxuQEAgLTM2NiwyOCAmIzQzOzM4MSw0OCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZGVmaW5lIHB1dF91c2VyXHRfX3B1dF91c2VyXG4gXG4tLypcbi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbi0gKi9cbi0jZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFx0XFxcbiYjNDM7LyogTm9mYXVsdCBzdG9yZSB3aXRob3V0IFRDTyBtYW5hZ2VtZW50OyBzZWUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZS4gKi9cbiYjNDM7I2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKGRzdCkgX19wa25fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRfX2xhYmVsX18gX19wa25fZXJyO1x0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRfX3Jhd19wdXRfbWVtKFwmIzM0O3N0clwmIzM0OywgKigodHlwZSAqKShfX3Brbl9zcmMpKSxcdFx0XFxcbiBcdFx0XHQgICAgICAoX19mb3JjZSB0eXBlICopKF9fcGtuX2RzdCksIF9fcGtuX2VyciwgSyk7XHRcXFxuLVx0XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcXFxuIFx0X19wa25fZXJyOlx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFxcXG4gXHR9IHdoaWxlICgwKTtcdFx0XHRcdFx0XHRcdFxcXG4tfSB3aGlsZSgwKVxuJiM0Mzt9IHdoaWxlICgwKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXG4mIzQzOyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuJiM0MzsgKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuJiM0MztkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX2xhYmVsX18gX19wa25fdGNvX2VycjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKGRzdCkgX19wa25fdGNvX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKHNyYykgX19wa25fdGNvX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShfX3Brbl90Y29fZHN0LCBfX3Brbl90Y29fc3JjLCB0eXBlLFx0XFxcbiYjNDM7XHRcdFx0XHQgICAgIF9fcGtuX3Rjb19lcnIpO1x0XHRcdFxcXG4mIzQzO1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7X19wa25fdGNvX2VycjpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuJiM0MztcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgY29udGV4dCBzd2l0Y2ggcmUtZW5hYmxlcyB0YWcgY2hlY2tpbmcsIGhlbmNlIHRoZSBuby1zY2hlZHVsaW5nXG4mIzQzOyAqIHJlcXVpcmVtZW50IGZvciBhIGJhcmUgbm9mYXVsdCByZWdpb24uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKClcbiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKClcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTtcbiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbilcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5pbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5AQCAtNjM3LDYgJiM0Mzs2MzcsMjYgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZW5kaWYgIC8qICFfX2dldF9rZXJuZWxfbm9mYXVsdCAqL1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBBcmNoaXRlY3R1cmVzIG1heSB1c2UgdGhlIGJlZ2luL2VuZCBob29rcyB0byBlc3RhYmxpc2ggc3RhdGUgc2hhcmVkIGJ5IGFcbiYjNDM7ICogc2VxdWVuY2Ugb2YgYmFyZSBub2ZhdWx0IGFjY2Vzc2VzLiBFdmVyeSBwYXRoIG91dCBvZiB0aGUgcmVnaW9uIG11c3QgY2FsbFxuJiM0MzsgKiB0aGUgZW5kIGhvb2suIFRoZSByZWdpb24sIGluY2x1ZGluZyBleHByZXNzaW9ucyBwYXNzZWQgdG8gdGhlIGJhcmVcbiYjNDM7ICogYWNjZXNzb3JzLCBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlci5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZVxuJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0XG4mIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZVx0X19wdXRfa2VybmVsX25vZmF1bHRcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZVxuJiM0MzsjZGVmaW5lIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpXHRkbyB7fSB3aGlsZSAoMClcbiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdGRvIHt9IHdoaWxlICgwKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO0RFRklORV9MT0NLX0dVQVJEXzAoX19rZXJuZWxfbm9mYXVsdF9iYXJlLFxuJiM0MztcdFx0ICAgIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpLFxuJiM0MztcdFx0ICAgIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSlcbiYjNDM7XG4gLyoqXG4gICogZ2V0X2tlcm5lbF9ub2ZhdWx0KCk6IHNhZmVseSBhdHRlbXB0IHRvIHJlYWQgZnJvbSBhIGxvY2F0aW9uXG4gICogQHZhbDogcmVhZCBpbnRvIHRoaXMgdmFyaWFibGVcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5mOGM1NTcxNjE1ODRlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzcyNiw3ICYjNDM7MzcyNiw4IEBAIF9fYnBmX2tmdW5jIHZvaWQgX19icGZfdHJhcCh2b2lkKVxuICAqXG4gICogU2luY2Ugc3RyaW5ncyBhcmUgbm90IG5lY2Vzc2FyaWx5ICVOVUwtdGVybWluYXRlZCwgd2UgY2Fubm90IGRpcmVjdGx5IGNhbGxcbiAgKiBpbi1rZXJuZWwgaW1wbGVtZW50YXRpb25zLiBJbnN0ZWFkLCB3ZSBvcGVuLWNvZGUgdGhlIGltcGxlbWVudGF0aW9ucyB1c2luZ1xuLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuXG4mIzQzOyAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUgdW5kZXIgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpIHRvIG1ha2UgdGhlbVxuJiM0MzsgKiBzYWZlLlxuICAqL1xuIFxuIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxuQEAgLTM3MzgsMTEgJiM0MzszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzXG4gXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHMyLCAxKSkge1xuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiYjNDM7XHRpZiAoIWxlbilcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbiBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMyLCBzMiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChpZ25vcmVfY2FzZSkge1xuIFx0XHRcdGMxID0gdG9sb3dlcihjMSk7XG4gXHRcdFx0YzIgPSB0b2xvd2VyKGMyKTtcbkBAIC0zODM3LDEwICYjNDM7Mzg0MSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jaHIoY29uc3QgY2hhciAqc19faWduLCBzaXplX3QgY291bnQsIGNoYXIgYylcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0aWYgKCFjb3VudClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gYylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0aWYgKHNjID09ICYjMzk7XFwwJiMzOTspXG5AQCAtMzg5Myw4ICYjNDM7MzkwMCw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY2hybnVsKGNvbnN0IGNoYXIgKnNfX2lnbiwgY2hhciBjKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gJiMzOTtcXDAmIzM5OyB8fCBzYyA9PSBjKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRzX19pZ24mIzQzOyYjNDM7O1xuQEAgLTM5MjUsOCAmIzQzOzM5MzMsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnJjaHIoY29uc3QgY2hhciAqc19faWduLCBpbnQgYylcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4mIzQzO1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKHNjID09IGMpXG4gXHRcdFx0bGFzdCA9IGk7XG4gXHRcdGlmIChzYyA9PSAmIzM5O1xcMCYjMzk7KVxuQEAgLTM5NTYsMTAgJiM0MzszOTY1LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3Rybmxlbihjb25zdCBjaGFyICpzX19pZ24sIHNpemVfdCBjb3VudClcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0aWYgKCFjb3VudClcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGMgPT0gJiMzOTtcXDAmIzM5OylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0c19faWduJiM0MzsmIzQzOztcbkBAIC00MDA4LDEyICYjNDM7NDAyMCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnNwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChjcyA9PSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjYSwgYWNjZXB0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRcdGlmIChjcyA9PSBjYSB8fCBjYSA9PSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC00MDUyLDEyICYjNDM7NDA2NSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbiBcdH1cbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoY3MgPT0gJiMzOTtcXDAmIzM5OylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3IsIHJlamVjdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNyLCByZWplY3RfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoY3MgPT0gY3IgfHwgY3IgPT0gJiMzOTtcXDAmIzM5OylcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDA4NCw5ICYjNDM7NDA5OCwxMCBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykge1xuIFx0XHRmb3IgKGogPSAwOyBpICYjNDM7IGogXHUwMDNjPSBsZW4gXHUwMDI2XHUwMDI2IGogXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjMiwgczIgJiM0MzsgaiwgY2hhciwgZXJyX291dCk7XG4gXHRcdFx0aWYgKGMyID09ICYjMzk7XFwwJiMzOTspXG4gXHRcdFx0XHRyZXR1cm4gaTtcbiBcdFx0XHQvKlxuQEAgLTQwOTYsNyAmIzQzOzQxMTEsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICYjNDM7IGogPT0gbGVuKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHMxICYjNDM7IGosIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcbiBcdFx0XHRpZiAoaWdub3JlX2Nhc2UpIHtcbiBcdFx0XHRcdGMxID0gdG9sb3dlcihjMSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWFjY2Vzcy5jIGIvbW0vbWFjY2Vzcy5jXG5pbmRleCA0ODY1NTlkNjg4NTgzLi44NzQ4NmJmOThkMTVhIDEwMDY0NFxuLS0tIGEvbW0vbWFjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWNjZXNzLmNcbkBAIC0xOSw3ICYjNDM7MTksNyBAQCBib29sIF9fd2VhayBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChjb25zdCB2b2lkICp1bnNhZmVfc3JjLFxuICAqL1xuICNkZWZpbmUgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVx0XFxcbiBcdHdoaWxlIChsZW4gXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcdFx0XHRcdFx0XFxcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGttc2FuX2NoZWNrX21lbW9yeShzcmMsIHNpemVvZih0eXBlKSk7XHRcdFx0XFxcbiBcdFx0ZHN0ICYjNDM7PSBzaXplb2YodHlwZSk7XHRcdFx0XHRcdFxcXG4gXHRcdHNyYyAmIzQzOz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuQEAgLTM1LDI2ICYjNDM7MzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuIFxuIFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHRpZiAoIXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4tXHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkge1xuJiM0MztcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4mIzQzO1x0XHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbiYjNDM7XHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDMpKVxuJiM0MztcdFx0XHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4mIzQzO1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAxKSlcbiYjNDM7XHRcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuJiM0MztcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gRWZhdWx0OlxuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCk7XG4gXG4gI2RlZmluZSBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVx0XFxcbiBcdHdoaWxlIChsZW4gXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcdFx0XHRcdFx0XFxcbi1cdFx0X19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuJiM0MztcdFx0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGluc3RydW1lbnRfd3JpdGUoZHN0LCBzaXplb2YodHlwZSkpO1x0XHRcdFxcXG4gXHRcdGRzdCAmIzQzOz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuIFx0XHRzcmMgJiM0Mzs9IHNpemVvZih0eXBlKTtcdFx0XHRcdFx0XFxcbkBAIC02NSwyMSAmIzQzOzY4LDI1IEBAIGxvbmcgY29weV90b19rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDA7XG4gXG4mIzQzO1x0aWYgKCFzaXplKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSlcbiBcdFx0YWxpZ24gPSAodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylzcmM7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuLVx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbi1cdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbi1cdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuLVx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTtcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiYjNDM7XHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XG4mIzQzO1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiA3KSlcbiYjNDM7XHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbiYjNDM7XHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDMpKVxuJiM0MztcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuJiM0MztcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4mIzQzO1x0XHRcdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4mIzQzO1x0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gRWZhdWx0OlxuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuQEAgLTkyLDE4ICYjNDM7OTksMTkgQEAgbG9uZyBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoY2hhciAqZHN0LCBjb25zdCB2b2lkICp1bnNhZmVfYWRkciwgbG9uZyBjb3VudClcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQodW5zYWZlX2FkZHIsIGNvdW50KSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0ZG8ge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdTgsIEVmYXVsdCk7XG4tXHRcdGRzdCYjNDM7JiM0Mzs7XG4tXHRcdHNyYyYjNDM7JiM0Mzs7XG4tXHR9IHdoaWxlIChkc3RbLTFdIFx1MDAyNlx1MDAyNiBzcmMgLSB1bnNhZmVfYWRkciBcdTAwM2MgY291bnQpO1xuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuJiM0MztcdHNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHU4LCBFZmF1bHQpO1xuJiM0MztcdFx0XHRcdGRzdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0c3JjJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0fSB3aGlsZSAoZHN0Wy0xXSBcdTAwMjZcdTAwMjYgc3JjIC0gdW5zYWZlX2FkZHIgXHUwMDNjIGNvdW50KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRkc3RbLTFdID0gJiMzOTtcXDAmIzM5OztcbiBcdHJldHVybiBzcmMgLSB1bnNhZmVfYWRkcjtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRkc3RbMF0gPSAmIzM5O1xcMCYjMzk7O1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCYjMzQ7LAogICAgJiMzNDtjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O3N0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCYjMzQ7LAogICAgJiMzNDticGZfc3RyY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjYXNlY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2FzZWNtcCYjMzQ7LAogICAgJiMzNDticGZfc3Ryc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjYXNlc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2FzZXN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RybmNociYjMzQ7LAogICAgJiMzNDticGZfc3RyY2hybnVsJiMzNDssCiAgICAmIzM0O2JwZl9zdHJyY2hyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJubGVuJiMzNDssCiAgICAmIzM0O2JwZl9zdHJzcG4mIzM0OywKICAgICYjMzQ7YnBmX3N0cmNzcG4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBvcHRpbWl6ZSBUQ08gKFRhZyBDaGVjayBPdmVycmlkZSkgbWFuYWdlbWVudCBvbiBBUk02NCwgYW5kIHVwZGF0ZXMgYG1hY2Nlc3MuY2AgYW5kIEJQRiBzdHJpbmcgaGVscGVycyB0byB1c2UgdGhlbSB1bmRlciBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IGFjY2VzcyByb3V0aW5lcyBhbmQgQlBGIGhlbHBlcnMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGlmIHRoZSBub2ZhdWx0IHJlZ2lvbnMgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MTYwMzRiYmRhY2FiOGIyYjY2NDRkOWI4YTQwYWI2M2RhMjJlZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxOTo0OToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggOWY1YmQ5YzY5YzI0OS4uMWExNGViMmE1MWRjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTI3MCwyOCAmIzQzOzI3MCw0MyBAQCBkbyB7CQkJCQkJCQkJXAogI2RlZmluZSBnZXRfdXNlcglfX2dldF91c2VyCiAKIC8qCi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmQKLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZwotICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uCiYjNDM7ICogTm9mYXVsdCBsb2FkIHdpdGhvdXQgVENPIG1hbmFnZW1lbnQgZm9yIHVzZSBpbnNpZGUgYQomIzQzOyAqIF9fYmVnaW4vX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpIHJlZ2lvbi4KICAqLwotI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJCVwKJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXyhkc3QpIF9fZ2tuX2RzdCA9IChkc3QpOwkJCQlcCiAJX190eXBlb2ZfXyhzcmMpIF9fZ2tuX3NyYyA9IChzcmMpOwkJCQlcCiAJZG8geyAJCQkJCQkJCVwKIAkJX19sYWJlbF9fIF9fZ2tuX2xhYmVsOwkJCQkJXAotCQkJCQkJCQkJXAotCQlfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7CQkJCVwKIAkJX19yYXdfZ2V0X21lbSgmIzM0O2xkciYjMzQ7LCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLAkJXAogCQkgICAgICAoX19mb3JjZSB0eXBlICopKF9fZ2tuX3NyYyksIF9fZ2tuX2xhYmVsLCBLKTsJXAotCQlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJX19na25fbGFiZWw6CQkJCQkJCVwKLQkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlnb3RvIGVycl9sYWJlbDsJCQkJCQlcCiAJfSB3aGlsZSAoMCk7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKJiM0MzsvKgomIzQzOyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZAomIzQzOyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGRzdCBhbmQgc3JjIG1heSBjb250YWluIGJsb2NraW5nIGZ1bmN0aW9ucywKJiM0MzsgKiBldmFsdWF0ZSB0aGVtIGJlZm9yZSBvdmVycmlkaW5nIFRDTy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQkJXAomIzQzO2RvIHsJCQkJCQkJCQlcCiYjNDM7CV9fbGFiZWxfXyBfX2drbl90Y29fZXJyOwkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKGRzdCkgX19na25fdGNvX2RzdCA9IChkc3QpOwkJCQlcCiYjNDM7CV9fdHlwZW9mX18oc3JjKSBfX2drbl90Y29fc3JjID0gKHNyYyk7CQkJCVwKJiM0MzsJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fZ2tuX3Rjb19kc3QsIF9fZ2tuX3Rjb19zcmMsIHR5cGUsCVwKJiM0MzsJCQkJICAgICBfX2drbl90Y29fZXJyKTsJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWJyZWFrOwkJCQkJCQkJXAomIzQzO19fZ2tuX3Rjb19lcnI6CQkJCQkJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWdvdG8gZXJyX2xhYmVsOwkJCQkJCQlcCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKICNkZWZpbmUgX19wdXRfbWVtX2FzbShzdG9yZSwgcmVnLCB4LCBhZGRyLCBsYWJlbCwgdHlwZSkJCQlcCiAJYXNtIGdvdG8oCQkJCQkJCVwKIAkmIzM0OzE6CSYjMzQ7IHN0b3JlICYjMzQ7CSYjMzQ7IHJlZyAmIzM0OzAsIFslMV1cbiYjMzQ7CQkJXApAQCAtMzY2LDI4ICYjNDM7MzgxLDQ4IEBAIGRvIHsJCQkJCQkJCQlcCiAKICNkZWZpbmUgcHV0X3VzZXIJX19wdXRfdXNlcgogCi0vKgotICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kCi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmcKLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgotICovCi0jZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQkJXAomIzQzOy8qIE5vZmF1bHQgc3RvcmUgd2l0aG91dCBUQ08gbWFuYWdlbWVudDsgc2VlIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUuICovCiYjNDM7I2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQlcCiBkbyB7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oZHN0KSBfX3Brbl9kc3QgPSAoZHN0KTsJCQkJXAogCV9fdHlwZW9mX18oc3JjKSBfX3Brbl9zcmMgPSAoc3JjKTsJCQkJXAogCQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJX19sYWJlbF9fIF9fcGtuX2VycjsJCQkJCVwKLQkJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCV9fcmF3X3B1dF9tZW0oJiMzNDtzdHImIzM0OywgKigodHlwZSAqKShfX3Brbl9zcmMpKSwJCVwKIAkJCSAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19wa25fZHN0KSwgX19wa25fZXJyLCBLKTsJXAotCQlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJX19wa25fZXJyOgkJCQkJCQlcCi0JCV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCVwKIAkJZ290byBlcnJfbGFiZWw7CQkJCQkJXAogCX0gd2hpbGUgKDApOwkJCQkJCQlcCi19IHdoaWxlKDApCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZAomIzQzOyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZwomIzQzOyAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCkJCQlcCiYjNDM7ZG8gewkJCQkJCQkJCVwKJiM0MzsJX19sYWJlbF9fIF9fcGtuX3Rjb19lcnI7CQkJCQlcCiYjNDM7CV9fdHlwZW9mX18oZHN0KSBfX3Brbl90Y29fZHN0ID0gKGRzdCk7CQkJCVwKJiM0MzsJX190eXBlb2ZfXyhzcmMpIF9fcGtuX3Rjb19zcmMgPSAoc3JjKTsJCQkJXAomIzQzOwlfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CV9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoX19wa25fdGNvX2RzdCwgX19wa25fdGNvX3NyYywgdHlwZSwJXAomIzQzOwkJCQkgICAgIF9fcGtuX3Rjb19lcnIpOwkJCVwKJiM0MzsJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJCVwKJiM0MzsJYnJlYWs7CQkJCQkJCQlcCiYjNDM7X19wa25fdGNvX2VycjoJCQkJCQkJCVwKJiM0MzsJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJCVwKJiM0MzsJZ290byBlcnJfbGFiZWw7CQkJCQkJCVwKJiM0Mzt9IHdoaWxlICgwKQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBjb250ZXh0IHN3aXRjaCByZS1lbmFibGVzIHRhZyBjaGVja2luZywgaGVuY2UgdGhlIG5vLXNjaGVkdWxpbmcKJiM0MzsgKiByZXF1aXJlbWVudCBmb3IgYSBiYXJlIG5vZmF1bHQgcmVnaW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpCiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKICNkZWZpbmUgcmF3X2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmggYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAppbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaApAQCAtNjM3LDYgJiM0Mzs2MzcsMjYgQEAgZG8gewkJCQkJCQlcCiAKICNlbmRpZiAgLyogIV9fZ2V0X2tlcm5lbF9ub2ZhdWx0ICovCiAKJiM0MzsvKgomIzQzOyAqIEFyY2hpdGVjdHVyZXMgbWF5IHVzZSB0aGUgYmVnaW4vZW5kIGhvb2tzIHRvIGVzdGFibGlzaCBzdGF0ZSBzaGFyZWQgYnkgYQomIzQzOyAqIHNlcXVlbmNlIG9mIGJhcmUgbm9mYXVsdCBhY2Nlc3Nlcy4gRXZlcnkgcGF0aCBvdXQgb2YgdGhlIHJlZ2lvbiBtdXN0IGNhbGwKJiM0MzsgKiB0aGUgZW5kIGhvb2suIFRoZSByZWdpb24sIGluY2x1ZGluZyBleHByZXNzaW9ucyBwYXNzZWQgdG8gdGhlIGJhcmUKJiM0MzsgKiBhY2Nlc3NvcnMsIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyLgomIzQzOyAqLwomIzQzOyNpZm5kZWYgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZQomIzQzOyNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZQlfX2dldF9rZXJuZWxfbm9mYXVsdAomIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZQlfX3B1dF9rZXJuZWxfbm9mYXVsdAomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlCiYjNDM7I2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKQlkbyB7fSB3aGlsZSAoMCkKJiM0MzsjZGVmaW5lIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKQlkbyB7fSB3aGlsZSAoMCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztERUZJTkVfTE9DS19HVUFSRF8wKF9fa2VybmVsX25vZmF1bHRfYmFyZSwKJiM0MzsJCSAgICBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSwKJiM0MzsJCSAgICBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkpCiYjNDM7CiAvKioKICAqIGdldF9rZXJuZWxfbm9mYXVsdCgpOiBzYWZlbHkgYXR0ZW1wdCB0byByZWFkIGZyb20gYSBsb2NhdGlvbgogICogQHZhbDogcmVhZCBpbnRvIHRoaXMgdmFyaWFibGUKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYjNjYzVjOGZjODc1Ni4uZjhjNTU3MTYxNTg0ZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTM3MjYsNyAmIzQzOzM3MjYsOCBAQCBfX2JwZl9rZnVuYyB2b2lkIF9fYnBmX3RyYXAodm9pZCkKICAqCiAgKiBTaW5jZSBzdHJpbmdzIGFyZSBub3QgbmVjZXNzYXJpbHkgJU5VTC10ZXJtaW5hdGVkLCB3ZSBjYW5ub3QgZGlyZWN0bHkgY2FsbAogICogaW4ta2VybmVsIGltcGxlbWVudGF0aW9ucy4gSW5zdGVhZCwgd2Ugb3Blbi1jb2RlIHRoZSBpbXBsZW1lbnRhdGlvbnMgdXNpbmcKLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuCiYjNDM7ICogX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSB1bmRlciBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCkgdG8gbWFrZSB0aGVtCiYjNDM7ICogc2FmZS4KICAqLwogCiBzdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbikKQEAgLTM3MzgsMTEgJiM0MzszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzCiAJICAgICFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzMiwgMSkpIHsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQomIzQzOwlpZiAoIWxlbikKJiM0MzsJCXJldHVybiAwOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGxlbiAmYW1wOyZhbXA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgczEsIGNoYXIsIGVycl9vdXQpOwotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBzMiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjMiwgczIsIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoaWdub3JlX2Nhc2UpIHsKIAkJCWMxID0gdG9sb3dlcihjMSk7CiAJCQljMiA9IHRvbG93ZXIoYzIpOwpAQCAtMzgzNywxMCAmIzQzOzM4NDEsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJuY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50LCBjaGFyIGMpCiAKIAlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpCiAJCXJldHVybiAtRVJBTkdFOwomIzQzOwlpZiAoIWNvdW50KQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQgJmFtcDsmYW1wOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiAJCWlmIChzYyA9PSBjKQogCQkJcmV0dXJuIGk7CiAJCWlmIChzYyA9PSAmIzM5O1wwJiMzOTspCkBAIC0zODkzLDggJiM0MzszOTAwLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjaHJudWwoY29uc3QgY2hhciAqc19faWduLCBjaGFyIGMpCiAJCXJldHVybiAtRVJBTkdFOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoc2MgPT0gJiMzOTtcMCYjMzk7IHx8IHNjID09IGMpCiAJCQlyZXR1cm4gaTsKIAkJc19faWduJiM0MzsmIzQzOzsKQEAgLTM5MjUsOCAmIzQzOzM5MzMsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnJjaHIoY29uc3QgY2hhciAqc19faWduLCBpbnQgYykKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiAJCWlmIChzYyA9PSBjKQogCQkJbGFzdCA9IGk7CiAJCWlmIChzYyA9PSAmIzM5O1wwJiMzOTspCkBAIC0zOTU2LDEwICYjNDM7Mzk2NSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5sZW4oY29uc3QgY2hhciAqc19faWduLCBzaXplX3QgY291bnQpCiAKIAlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpCiAJCXJldHVybiAtRVJBTkdFOwomIzQzOwlpZiAoIWNvdW50KQomIzQzOwkJcmV0dXJuIDA7CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQgJmFtcDsmYW1wOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoYyA9PSAmIzM5O1wwJiMzOTspCiAJCQlyZXR1cm4gaTsKIAkJc19faWduJiM0MzsmIzQzOzsKQEAgLTQwMDgsMTIgJiM0Mzs0MDIwLDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3Ryc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pCiAJfQogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQogCQkJcmV0dXJuIGk7CiAJCWZvciAoaiA9IDA7IGogJmx0OyBYQVRUUl9TSVpFX01BWDsgaiYjNDM7JiM0MzspIHsKLQkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjYSwgYWNjZXB0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiAJCQlpZiAoY3MgPT0gY2EgfHwgY2EgPT0gJiMzOTtcMCYjMzk7KQogCQkJCWJyZWFrOwogCQl9CkBAIC00MDUyLDEyICYjNDM7NDA2NSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbikKIAl9CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiAJCWlmIChjcyA9PSAmIzM5O1wwJiMzOTspCiAJCQlyZXR1cm4gaTsKIAkJZm9yIChqID0gMDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewotCQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjciwgcmVqZWN0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2NyLCByZWplY3RfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKIAkJCWlmIChjcyA9PSBjciB8fCBjciA9PSAmIzM5O1wwJiMzOTspCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTQwODQsOSAmIzQzOzQwOTgsMTAgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbiwKIAl9CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7CiAJCWZvciAoaiA9IDA7IGkgJiM0MzsgaiAmbHQ7PSBsZW4gJmFtcDsmYW1wOyBqICZsdDsgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7Ci0JCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBzMiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzIsIHMyICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwogCQkJaWYgKGMyID09ICYjMzk7XDAmIzM5OykKIAkJCQlyZXR1cm4gaTsKIAkJCS8qCkBAIC00MDk2LDcgJiM0Mzs0MTExLDcgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbiwKIAkJCSAqLwogCQkJaWYgKGkgJiM0MzsgaiA9PSBsZW4pCiAJCQkJYnJlYWs7Ci0JCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MxLCBzMSAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzEsIHMxICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwogCiAJCQlpZiAoaWdub3JlX2Nhc2UpIHsKIAkJCQljMSA9IHRvbG93ZXIoYzEpOwpkaWZmIC0tZ2l0IGEvbW0vbWFjY2Vzcy5jIGIvbW0vbWFjY2Vzcy5jCmluZGV4IDQ4NjU1OWQ2ODg1ODMuLjg3NDg2YmY5OGQxNWEgMTAwNjQ0Ci0tLSBhL21tL21hY2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWNjZXNzLmMKQEAgLTE5LDcgJiM0MzsxOSw3IEBAIGJvb2wgX193ZWFrIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGNvbnN0IHZvaWQgKnVuc2FmZV9zcmMsCiAgKi8KICNkZWZpbmUgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKQlcCiAJd2hpbGUgKGxlbiAmZ3Q7PSBzaXplb2YodHlwZSkpIHsJCQkJCVwKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKIAkJa21zYW5fY2hlY2tfbWVtb3J5KHNyYywgc2l6ZW9mKHR5cGUpKTsJCQlcCiAJCWRzdCAmIzQzOz0gc2l6ZW9mKHR5cGUpOwkJCQkJXAogCQlzcmMgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKQEAgLTM1LDI2ICYjNDM7MzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQogCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKQogCQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIDA7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWlmICghKGFsaWduICZhbXA7IDcpKQotCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpOwotCWlmICghKGFsaWduICZhbXA7IDMpKQotCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpOwotCWlmICghKGFsaWduICZhbXA7IDEpKQotCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpOwotCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiYjNDM7CXNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyA3KSkKJiM0MzsJCQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyAzKSkKJiM0MzsJCQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKJiM0MzsJCQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTsKJiM0MzsJCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7CiYjNDM7CQl9CiYjNDM7CX0KIAlyZXR1cm4gMDsKIEVmYXVsdDoKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpOwogCiAjZGVmaW5lIGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgbGVuLCB0eXBlLCBlcnJfbGFiZWwpCVwKIAl3aGlsZSAobGVuICZndDs9IHNpemVvZih0eXBlKSkgewkJCQkJXAotCQlfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTsJXAomIzQzOwkJX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTsJXAogCQlpbnN0cnVtZW50X3dyaXRlKGRzdCwgc2l6ZW9mKHR5cGUpKTsJCQlcCiAJCWRzdCAmIzQzOz0gc2l6ZW9mKHR5cGUpOwkJCQkJXAogCQlzcmMgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKQEAgLTY1LDIxICYjNDM7NjgsMjUgQEAgbG9uZyBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFsaWduID0gMDsKIAomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpKQogCQlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKWRzdCB8ICh1bnNpZ25lZCBsb25nKXNyYzsKIAotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0JaWYgKCEoYWxpZ24gJmFtcDsgNykpCi0JCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpOwotCWlmICghKGFsaWduICZhbXA7IDMpKQotCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKLQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7Ci0JY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiYjNDM7CXNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyA3KSkKJiM0MzsJCQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgMykpCiYjNDM7CQkJCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpOwomIzQzOwkJCWlmICghKGFsaWduICZhbXA7IDEpKQomIzQzOwkJCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTsKJiM0MzsJCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpOwomIzQzOwkJfQomIzQzOwl9CiAJcmV0dXJuIDA7CiBFZmF1bHQ6Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwogCXJldHVybiAtRUZBVUxUOwogfQogCkBAIC05MiwxOCAmIzQzOzk5LDE5IEBAIGxvbmcgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0KGNoYXIgKmRzdCwgY29uc3Qgdm9pZCAqdW5zYWZlX2FkZHIsIGxvbmcgY291bnQpCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZCh1bnNhZmVfYWRkciwgY291bnQpKQogCQlyZXR1cm4gLUVSQU5HRTsKIAotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0JZG8gewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdTgsIEVmYXVsdCk7Ci0JCWRzdCYjNDM7JiM0Mzs7Ci0JCXNyYyYjNDM7JiM0Mzs7Ci0JfSB3aGlsZSAoZHN0Wy0xXSAmYW1wOyZhbXA7IHNyYyAtIHVuc2FmZV9hZGRyICZsdDsgY291bnQpOwotCXBhZ2VmYXVsdF9lbmFibGUoKTsKJiM0MzsJc2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkgewomIzQzOwkJc2NvcGVkX2d1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkgewomIzQzOwkJCWRvIHsKJiM0MzsJCQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdTgsIEVmYXVsdCk7CiYjNDM7CQkJCWRzdCYjNDM7JiM0Mzs7CiYjNDM7CQkJCXNyYyYjNDM7JiM0Mzs7CiYjNDM7CQkJfSB3aGlsZSAoZHN0Wy0xXSAmYW1wOyZhbXA7IHNyYyAtIHVuc2FmZV9hZGRyICZsdDsgY291bnQpOwomIzQzOwkJfQomIzQzOwl9CiAKIAlkc3RbLTFdID0gJiMzOTtcMCYjMzk7OwogCXJldHVybiBzcmMgLSB1bnNhZmVfYWRkcjsKIEVmYXVsdDoKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJZHN0WzBdID0gJiMzOTtcMCYjMzk7OwogCXJldHVybiAtRUZBVUxUOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBOZXcgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgdXNlcyB0aGVtIHdpdGhpbiBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKCkpYCBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBgbW0vbWFjY2Vzcy5jYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyBob3cgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVycyBhcmUgaW1wbGVtZW50ZWQuIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgYmVuZWZpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSBUQ08gbWFuYWdlbWVudCBvbiBBUk02NCBieSByZWR1Y2luZyBvdmVyaGVhZC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggZnV6emluZz8mIzM0OyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IEJQRiBoZWxwZXJzIGFuZCBtZW1vcnkgYWNjZXNzIG1lY2hhbmlzbXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpOb3csIGxldCBtZSBsaXN0IHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQ6CiogICBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgCiogICBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYF9fYnBmX3N0cm5jYXNlY21wYAoqICAgYGJwZl9zdHJuY2hyYAoqICAgYGJwZl9zdHJjaHJudWxgCiogICBgYnBmX3N0cnJjaHJgCiogICBgYnBmX3N0cm5sZW5gCiogICBgYnBmX3N0cnNwbmAKKiAgIGBicGZfc3RyY3NwbmAKKiAgIGBfX2JwZl9zdHJuc3RyYAoKVGhlc2UgYXJlIGFsbCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIEkgY2FuIHNlZSBjbGVhciBwYXRocyB0byBmdXp6aW5nIHRoZXNlIHRvIGV4cG9zZSBhbnkgbmV3IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgVENPIG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgRm9jdXNTeW1ib2xzIGZvciB0aGUgZnV6emVyLiBJIG5lZWQgdG8gbGlzdCB0aGVtIGFsbDoKCiogICBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgCiogICBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYGJwZl9zdHJuY2hyYAoqICAgYGJwZl9zdHJjaHJudWxgCiogICBgYnBmX3N0cnJjaHJgCiogICBgYnBmX3N0cm5sZW5gCiogICBgYnBmX3N0cnNwbmAKKiAgIGBicGZfc3RyY3NwbmAKCkhtbSwgYF9fYnBmX3N0cm5jYXNlY21wYCBhbmQgYF9fYnBmX3N0cm5zdHJgIGFyZSBzdGF0aWMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGV5JiMzOTtyZSBpbmxpbmVkIG9yIGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYF9fYnBmX3N0cm5jYXNlY21wYCBhbmQgYF9fYnBmX3N0cm5zdHJgLiBUaGF0IHdpbGwgbWFrZSBzdXJlIEkmIzM5O20gY2FwdHVyaW5nIGFsbCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9zdHJuY2FzZWNtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTM3MjA9X19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzczMi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjM3MzM6c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzM0LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzc5PV9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzgwLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3ODE6XHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgZmFsc2UsIFhBVFRSX1NJWkVfTUFYKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3ODItfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTM3OTc9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzk4LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3OTk6XHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgWEFUVFJfU0laRV9NQVgpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzgwMC19XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzgxNj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sIHNpemVfdCBsZW4pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zODE3LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjM4MTg6XHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgbGVuKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTM4MTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBTdHJpbmcgQ29tcGFyaXNvbnMgaW4gQlBGKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgc3RyaW5nIGNvbXBhcmlzb25zIGFyZSBoYW5kbGVkIGluIEJQRi4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb25zIGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYW5kIGBicGZfc3RybmNhc2VjbXBgIGFsbCBzZWVtIHRvIGZ1bm5lbCBkb3duIHRvIGEgY29tbW9uIGltcGxlbWVudGF0aW9uOiBgX19icGZfc3RybmNhc2VjbXBgLiBUaGlzIHN1Z2dlc3RzIGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24sIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBhbmQgbWFrZXMgc2Vuc2UgZm9yIGNvZGUgcmV1c2UgYW5kIHBvdGVudGlhbGx5IGZvciBvcHRpbWl6YXRpb24gbGF0ZXIuIFRoZSBjb3JlIHN0cmluZyBjb21wYXJpc29uLCBlc3BlY2lhbGx5IGNhc2UtaW5zZW5zaXRpdmUgdmVyc2lvbnMsIGlzIGNsZWFybHkgY2VudHJhbGl6ZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXItbGV2ZWwgY29tcGFyaXNvbiBpcyB3b3JraW5nLiBMZXQmIzM5O3MgbW92ZSBvbiBhbmQgZXhhbWluZSBgX19icGZfc3RybnN0cmAgbmV4dC4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGBfX2JwZl9zdHJuY2FzZWNtcGAgd291bGQgbGlrZWx5IHV0aWxpemUgc29tZXRoaW5nIGxpa2UgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9zdHJuc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDA1Nz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MDg4LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDA4OTpzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA5MC1cdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MTUwPV9fYnBmX2tmdW5jIGludCBicGZfc3Ryc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTUxLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQxNTI6XHRyZXR1cm4gX19icGZfc3RybnN0cihzMV9faWduLCBzMl9faWduLCBYQVRUUl9TSVpFX01BWCwgZmFsc2UpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDE1My19XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE2OT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxNzAte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDE3MTpcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIFhBVFRSX1NJWkVfTUFYLCB0cnVlKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxNzItfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQxODg9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDE5MC17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MTkxOlx0cmV0dXJuIF9fYnBmX3N0cm5zdHIoczFfX2lnbiwgczJfX2lnbiwgbGVuLCBmYWxzZSk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTkyLX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MjA5PV9fYnBmX2tmdW5jIGludCBicGZfc3RybmNhc2VzdHIoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbixcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjExLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQyMTI6XHRyZXR1cm4gX19icGZfc3RybnN0cihzMV9faWduLCBzMl9faWduLCBsZW4sIHRydWUpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIxMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIFN0cmluZyBIZWxwZXIgYW5kIGBtYWNjZXNzYCBGdW5jdGlvbiBDaGVja2xpc3QqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIEJQRiBzdHJpbmcgZnVuY3Rpb25zLiBSaWdodCwgdGhvc2UgaGVscGVycyBhcmU6IGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYGJwZl9zdHJuY2FzZWNtcGAsIGBicGZfc3Ryc3RyYCwgYGJwZl9zdHJjYXNlc3RyYCwgYGJwZl9zdHJuc3RyYCwgYGJwZl9zdHJuY2FzZXN0cmAsIGBicGZfc3RybmNocmAsIGBicGZfc3RyY2hybnVsYCwgYGJwZl9zdHJyY2hyYCwgYGJwZl9zdHJubGVuYCwgYGJwZl9zdHJzcG5gLCBhbmQgYGJwZl9zdHJjc3BuYC4gQW5kIHRoZW4sIG9uIHRoZSBtZW1vcnkgYWNjZXNzIHNpZGUsIHdlIGhhdmUgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLgoKTm93LCBiZWZvcmUgSSBzdGFydCB3cml0aW5nIGFueXRoaW5nIHVzaW5nIHRoZXNlLCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgYW55IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIEkga25vdyBCUEYgaGVscGVycyBnZW5lcmFsbHkgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgdGhlc2UgZGF5cywgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4gSSB0aGluayB0aGUgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAgZnVuY3Rpb25zIGFyZSBhbHdheXMgYXZhaWxhYmxlLCBidXQgSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3IgdGhvc2Ugd2hlbiB0cmFjaW5nIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBiZWhhdmluZyBjb3JyZWN0bHkuCgpBbHJpZ2h0LCB0aGUgbW9zdCByZWxpYWJsZSB0aGluZyB0byBkbyBpcyBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIHRob3NlIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zLiBCZXR0ZXIgdG8gYmUgc3VyZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyY21wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MzczMz1zdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzY2LS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc2NzogKiBicGZfc3RyY21wIC0gQ29tcGFyZSB0d28gc3RyaW5nc1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2OC0gKiBAczFfX2lnbjogT25lIHN0cmluZ1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NzgtICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzc5Ol9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTY0PUJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNtcCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZWNtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipWZXJpZnlpbmcgQlBGIEhlbHBlciBDb21waWxhdGlvbioqCgpSaWdodCwgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGRvbiYjMzk7dCBzZWVtIHRvIGJlIGd1YXJkZWQgYnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYC4gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLCBub3JtYWxseSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgc29tZSBraW5kIG9mIGNoZWNrIGFyb3VuZCB0aGlzLCBidXQgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIFRoZSBmYWN0IHRoYXQgdGhlIGVudGlyZSBmaWxlIGV4aXN0cyB3aXRoaW4gYSBCUEYgY29udGV4dCBtYWtlcyBtZSBhc3N1bWUgaXQmIzM5O3MgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgSSBzaG91bGQgdmVyaWZ5LCBidXQgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBxdWlja2x5IHNlZSB0aGF0IHRoZSBNYWtlZmlsZSBkaWN0YXRlcyB0aGlzIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyB0aGVpciBpbmNsdXNpb24gYmFzZWQgb24gdGhhdCBjb25maWcgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiAgMTI6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbiAgMTQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuICAxNTpcdG9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xuICAxNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbiAgMTc6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuICAxODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4gIDE5Olx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiAgMjA6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBkaXNwYXRjaGVyLm9cbiAgMjM6XHRpZmVxICgkKENPTkZJR19ORVQpLHkpXG4gIDI0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbiAgMjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xuICAyNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xuICAyNzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xuICAyODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4gIDI5Olx0ZW5kaWZcbiAgMzA6XHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbiAgMzE6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG4gIDMyOlx0ZW5kaWZcbiAgMzM6XHRpZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxuICAzNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG4gIDM1Olx0ZW5kaWZcbiAgMzY6XHRvYmotJChDT05GSUdfQ0dST1VQX0JQRikgJiM0Mzs9IGNncm91cC5vXG4gIDM3Olx0aWZlcSAoJChDT05GSUdfSU5FVCkseSlcbiAgMzg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xuICAzOTpcdGVuZGlmXG4gIDQwOlx0aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG4gIDQxOlx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0gc3lzZnNfYnRmLm9cbiAgNDI6XHRlbmRpZlxuICA0MzpcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG4gIDQ0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xuICA0NTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xuICA0NjpcdCMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xuICA0NzpcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXG4gIDQ4Olx0IyBidGZfZW5jb2Rlcl9fYWRkX3NhdmVkX2Z1bmMoKSBieSBrZWVwaW5nIHRoZSBmaXJzdCBpbnN0YW5jZSBzZWVuLiBXZVxuICA0OTpcdCMgbmVlZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlKHMpIGluIGJwZl9sc21fcHJvdG8ubyB0byB0YWtlIHByZWNlZGVuY2VcbiAgNTA6XHQjIG92ZXIgdGhvc2Ugd2l0aGluIGJwZl9sc20uby4gSGF2aW5nIGJwZl9sc21fcHJvdG8ubyBwcmVjZWRlXG4gIDUxOlx0IyBicGZfbHNtLm8gZW5zdXJlcyBpdHMgRFdBUkYgQ1UgaXMgcHJvY2Vzc2VkIGVhcmx5LCBmb3JjaW5nIHRoZVxuICA1MjpcdCMgZ2VuZXJhdGVkIEJURiB0byBjb250YWluIHRoZSBvdmVycmlkZXMuXG4gIDUzOlx0I1xuICA1NDpcdCMgTm90YWJseSwgdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWxzdCB0aGUgZGVkdXBsaWNhdGlvblxuICA1NTpcdCMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cbiAgNTY6XHRvYmotJHtDT05GSUdfQlBGX0xTTX0gJiM0Mzs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cbiAgNTc6XHRlbmRpZlxuICA1ODpcdGlmbmVxICgkKENPTkZJR19DUllQVE8pLClcbiAgNTk6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcnlwdG8ub1xuICA2MDpcdGVuZGlmXG4gIDYxOlx0b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbiAgNjI6XHRcbiAgNjM6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xuICA2NDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9pdGVyLm9cbiAgNjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfcmVsb2NhdGUub1xuICA2NjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG4gIDY3Olx0aWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXG4gIDY4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZG1hYnVmX2l0ZXIub1xuICA2OTpcdGVuZGlmXG4gIDcwOlx0XG4gIDcxOlx0Q0ZMQUdTX1JFTU9WRV9wZXJjcHVfZnJlZWxpc3QubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3MjpcdENGTEFHU19SRU1PVkVfYnBmX2xydV9saXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzM6XHRDRkxBR1NfUkVNT1ZFX3F1ZXVlX3N0YWNrX21hcHMubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3NDpcdENGTEFHU19SRU1PVkVfbHBtX3RyaWUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3NTpcdENGTEFHU19SRU1PVkVfcmluZ2J1Zi5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gIDc2Olx0Q0ZMQUdTX1JFTU9WRV9ycXNwaW5sb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOgoKKipJbnZlc3RpZ2F0aW5nIGVCUEYgSGVscGVyIEF2YWlsYWJpbGl0eSBhbmQgTWVtb3J5IEFjY2VzcyBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgaGVscGVycy5vYCBpcyBpbmRlZWQgY29uZGl0aW9uYWwgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuIEdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24gcmVnYXJkaW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhvc2UgZUJQRiBoZWxwZXIgZnVuY3Rpb25zLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB0cmFjayBkb3duIHRoaXMgaXNzdWUgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUga2VybmVsIGRlZmluZXMgYG1hY2Nlc3Mub2AuIE15IGd1dCB0ZWxscyBtZSBpdCB3aWxsIGJlIGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0eXBpY2FsbHkgcmVzaWRlcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSBhbmQgZ2V0IHRoZSByZWxldmFudCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG1lbW9yeSBtYW5hZ2VyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRLQVNBTl9TQU5JVElaRV9zbGFiX2NvbW1vbi5vIDo9IG5cbiAgIDc6XHRLQVNBTl9TQU5JVElaRV9zbHViLm8gOj0gblxuICAgODpcdEtBU0FOX1NBTklUSVpFX2ttZW1sZWFrLm8gOj0gblxuICAgOTpcdEtDU0FOX1NBTklUSVpFX2ttZW1sZWFrLm8gOj0gblxuICAxMDpcdFxuICAxMTpcdCMgVGhlc2UgcHJvZHVjZSBmcmVxdWVudCBkYXRhIHJhY2UgcmVwb3J0czogbW9zdCBvZiB0aGVtIGFyZSBkdWUgdG8gcmFjZXMgb25cbiAgMTI6XHQjIHRoZSBzYW1lIHdvcmQgYnV0IGFjY2Vzc2VzIHRvIGRpZmZlcmVudCBiaXRzIG9mIHRoYXQgd29yZC4gUmUtZW5hYmxlIEtDU0FOXG4gIDEzOlx0IyBmb3IgdGhlc2Ugd2hlbiB3ZSBoYXZlIG1vcmUgY29uc2Vuc3VzIG9uIHdoYXQgdG8gZG8gYWJvdXQgdGhlbS5cbiAgMTQ6XHRLQ1NBTl9TQU5JVElaRV9zbGFiX2NvbW1vbi5vIDo9IG5cbiAgMTU6XHRLQ1NBTl9TQU5JVElaRV9zbHViLm8gOj0gblxuICAxNjpcdEtDU0FOX1NBTklUSVpFX3BhZ2VfYWxsb2MubyA6PSBuXG4gIDE3Olx0IyBCdXQgZW5hYmxlIGV4cGxpY2l0IGluc3RydW1lbnRhdGlvbiBmb3IgbWVtb3J5IGJhcnJpZXJzLlxuICAxODpcdEtDU0FOX0lOU1RSVU1FTlRfQkFSUklFUlMgOj0geVxuICAxOTpcdFxuICAyMDpcdCMgVGhlc2UgZmlsZXMgYXJlIGRpc2FibGVkIGJlY2F1c2UgdGhleSBwcm9kdWNlIG5vbi1pbnRlcmVzdGluZyBhbmQvb3JcbiAgMjE6XHQjIGZsYWt5IGNvdmVyYWdlIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb2Ygc3lzY2FsbCBpbnB1dHMuIEUuZy4gc2xhYiBpcyBvdXQgb2ZcbiAgMjI6XHQjIGZyZWUgcGFnZXMsIG9yIGEgdGFzayBpcyBtaWdyYXRlZCBiZXR3ZWVuIG5vZGVzLlxuICAyMzpcdEtDT1ZfSU5TVFJVTUVOVF9zbGFiX2NvbW1vbi5vIDo9IG5cbiAgMjQ6XHRLQ09WX0lOU1RSVU1FTlRfc2x1Yi5vIDo9IG5cbiAgMjU6XHRLQ09WX0lOU1RSVU1FTlRfcGFnZV9hbGxvYy5vIDo9IG5cbiAgMjY6XHRLQ09WX0lOU1RSVU1FTlRfZGVidWctcGFnZWFsbG9jLm8gOj0gblxuICAyNzpcdEtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbiAgMjg6XHRLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbiAgMjk6XHRLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbiAgMzA6XHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuICAzMTpcdEtDT1ZfSU5TVFJVTUVOVF92bXN0YXQubyA6PSBuXG4gIDMyOlx0S0NPVl9JTlNUUlVNRU5UX2ZhaWxzbGFiLm8gOj0gblxuICAzMzpcdFxuICAzNDpcdENGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuICAzNTpcdFxuICAzNjpcdG1tdS15XHRcdFx0Oj0gbm9tbXUub1xuICAzNzpcdG1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4gIDM4Olx0XHRcdFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcbiAgMzk6XHRcdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbiAgNDA6XHRcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbiAgNDE6XHRcbiAgNDI6XHRcbiAgNDM6XHRpZmRlZiBDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSFxuICA0NDpcdG1tdS0kKENPTkZJR19NTVUpXHQmIzQzOz0gcHJvY2Vzc192bV9hY2Nlc3Mub1xuICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0aWZkZWYgQ09ORklHXzY0QklUXG4gIDQ4Olx0bW11LSQoQ09ORklHX01NVSlcdCYjNDM7PSBtc2VhbC5vXG4gIDQ5Olx0ZW5kaWZcbiAgNTA6XHRcbiAgNTE6XHRvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiAgNTI6XHRcdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuICA1MzpcdFx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbiAgNTQ6XHRcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4gIDU1Olx0XHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiAgNTY6XHRcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxuICA1NzpcdFx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxuICA1ODpcdFx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuICA1OTpcdFxuICA2MDpcdCMgR2l2ZSAmIzM5O3BhZ2VfYWxsb2MmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG4gIDYxOlx0cGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2Mub1xuICA2MjpcdHBhZ2UtYWxsb2MtJChDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUikgJiM0Mzs9IHNodWZmbGUub1xuICA2MzpcdFxuICA2NDpcdCMgR2l2ZSAmIzM5O21lbW9yeV9ob3RwbHVnJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxuICA2NTpcdG1lbW9yeS1ob3RwbHVnLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSAmIzQzOz0gbWVtb3J5X2hvdHBsdWcub1xuICA2NjpcdFxuICA2NzpcdG9iai15ICYjNDM7PSBwYWdlLWFsbG9jLm9cbiAgNjg6XHRvYmoteSAmIzQzOz0gcGFnZV9mcmFnX2NhY2hlLm9cbiAgNjk6XHRvYmoteSAmIzQzOz0gaW5pdC1tbS5vXG4gIDcwOlx0b2JqLXkgJiM0Mzs9IG1lbWJsb2NrLm9cbiAgNzE6XHRvYmoteSAmIzQzOz0gJChtZW1vcnktaG90cGx1Zy15KVxuICA3MjpcdG9iai15ICYjNDM7PSBzbHViLm9cbiAgNzM6XHRcbiAgNzQ6XHRpZmRlZiBDT05GSUdfTU1VXG4gIDc1Olx0XHRvYmotJChDT05GSUdfQURWSVNFX1NZU0NBTExTKVx0JiM0Mzs9IG1hZHZpc2Uub1xuICA3NjpcdGVuZGlmXG4gIDc3Olx0XG4gIDc4Olx0b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG4gIDc5Olx0b2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiAgODA6XHRvYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiAgODE6XHRvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xuICA4MjpcdGlmZGVmIENPTkZJR19DTUFcbiAgODM6XHRvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbiAgODQ6XHRlbmRpZlxuICA4NTpcdG9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xuICA4NjpcdG9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xuICA4NzpcdG9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiAgODg6XHRvYmotJChDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVApICYjNDM7PSBzcGFyc2Utdm1lbW1hcC5vXG4gIDg5Olx0b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgJiM0Mzs9IG1tdV9ub3RpZmllci5vXG4gIDkwOlx0b2JqLSQoQ09ORklHX0tTTSkgJiM0Mzs9IGtzbS5vXG4gIDkxOlx0b2JqLSQoQ09ORklHX1BBR0VfUE9JU09OSU5HKSAmIzQzOz0gcGFnZV9wb2lzb24ub1xuICA5MjpcdG9iai0kKENPTkZJR19LQVNBTilcdCYjNDM7PSBrYXNhbi9cbiAgOTM6XHRvYmotJChDT05GSUdfS0ZFTkNFKSAmIzQzOz0ga2ZlbmNlL1xuICA5NDpcdG9iai0kKENPTkZJR19LTVNBTilcdCYjNDM7PSBrbXNhbi9cbiAgOTU6XHRvYmotJChDT05GSUdfRkFJTFNMQUIpICYjNDM7PSBmYWlsc2xhYi5vXG4gIDk2Olx0b2JqLSQoQ09ORklHX0ZBSUxfUEFHRV9BTExPQykgJiM0Mzs9IGZhaWxfcGFnZV9hbGxvYy5vXG4gIDk3Olx0b2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbiAgOTg6XHRvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG4gIDk5Olx0b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuIDEwMDpcdG9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk3NAoJCQkJCQkJb3V0cHV0OiAyODQKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtYWNjZXNzLm9gIENoYW5nZXMqKgoKT2theSwgc28gYG1hY2Nlc3Mub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIGBvYmoteWAsIG1lYW5pbmcgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBpdCwgcGFydGljdWxhcmx5IHRoZXNlIHN0cmluZyBmdW5jdGlvbnM6IGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBhbmQgYWxsIHRob3NlIGBicGZfYCBzdHJpbmcgY29tcGFyaXNvbiBhbmQgc2VhcmNoIGZ1bmN0aW9ucyBsaWtlIGBicGZfc3RyY21wYCwgYGJwZl9zdHJzdHJgLCBhbmQgdGhlaXIgdmFyaWF0aW9ucy4KCldhaXQgYSBtaW51dGUuLi4gSSBzZWUgdGhhdCBgYnBmX3N0cmNtcGAsIGBicGZfc3RyY2FzZWNtcGAsIGBicGZfc3RybmNhc2VjbXBgIGFyZSBhY3R1YWxseSBqdXN0IHdyYXBwZXJzIGFyb3VuZCBgX19icGZfc3RybmNhc2VjbXBgLiBBbmQgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYGJwZl9zdHJzdHJgIGFuZCBmcmllbmRzLCB3aGljaCB3cmFwIGBfX2JwZl9zdHJuc3RyYC4gU2luY2UgdGhlIHJlYWwgbG9naWMgbGl2ZXMgaW4gdGhvc2UgYF9fYnBmX2AgZnVuY3Rpb25zIGFuZCB0aGV5IGFyZSBzdGF0aWMsIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhleSBhcmUgaW5saW5lZC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhpcy4KCkJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gQXJlIHRob3NlIGBicGZfYCBmdW5jdGlvbnMgYWN0dWFsbHkgZXhwb3J0ZWQsIG9yIGFyZSB0aGV5IGp1c3QgQlBGIGtmdW5jcz8gWWVzLCB0aGV5JiMzOTtyZSBgX19icGZfa2Z1bmNgLiBTbywgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSBCUEYgcHJvZ3JhbXMuCgpUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24gYXJvdW5kIFRDTyBtYW5hZ2VtZW50IG9uIEFSTTY0LiBJdOKAmXMgc3VwcG9zZWQgdG8gcGVyZm9ybSB0aGUgVENPIGNoZWNrIG9uY2UgcGVyIGxvb3AsIGluc3RlYWQgb2Ygb24gZXZlcnkgYnl0ZS93b3JkIGFjY2Vzcy4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhvc2UgYWx3YXlzIG1ha2UgbWUgYSBsaXR0bGUgbmVydm91cy4gVGhlcmUgY291bGQgYmUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBsb29wIGdldHMgYmxvY2tlZC9zY2hlZHVsZWQgKHdoaWNoIHNob3VsZG4mIzM5O3QgaGFwcGVuLCBidXQgeW91IG5ldmVyIGtub3cpLCBvciBpZiB0aGUgZ3VhcmQgaXNuJiMzOTt0IHByb3Blcmx5IHBsYWNlZC4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbi4gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0aGUgb25seSBvbmUsIHNvIEkgd2lsbCBjaGVjay4gYG1hY2Nlc3MuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLiBgaGVscGVycy5jYCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKQWgsIGhlcmUgd2UgZ28uLi4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLiBPa2F5LCBzbyB0aGlzIGlzIEFSTTY0LXNwZWNpZmljLCBidXQgdGhlcmUgYXJlIGZhbGxiYWNrcyBpbiB0aGUgZ2VuZXJpYyBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgLiBXaGljaCBtZWFucyB0aGlzIHNob3VsZCBiZSB0ZXN0YWJsZSBvbiBhbnkgYXJjaGl0ZWN0dXJlLCBhbHRob3VnaCB0aGUgc3BlY2lmaWMgQVJNNjQgb3B0aW1pemF0aW9uIHdpbGwgb25seSBiZSBkaXJlY3RseSB0ZXN0ZWQgb24gQVJNNjQuIFN5emthbGxlciBzaG91bGQgcGljayB0aGlzIHVwIG9uIEFSTTY0IGluc3RhbmNlcywgc28gdGhhdCYjMzk7cyBnb29kLgoKQWxyaWdodCwgdGltZSB0byBwcmVwYXJlIHRoZSBzZXQtcmVzdWx0cyBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7Y29weV90b19rZXJuZWxfbm9mYXVsdCYjMzQ7LAogICAgJiMzNDtzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX3N0cmNtcCYjMzQ7LAogICAgJiMzNDticGZfc3RyY2FzZWNtcCYjMzQ7LAogICAgJiMzNDticGZfc3RybmNhc2VjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cnN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RyY2FzZXN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RybnN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RybmNhc2VzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jaHImIzM0OywKICAgICYjMzQ7YnBmX3N0cmNocm51bCYjMzQ7LAogICAgJiMzNDticGZfc3RycmNociYjMzQ7LAogICAgJiMzNDticGZfc3RybmxlbiYjMzQ7LAogICAgJiMzNDticGZfc3Ryc3BuJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjc3BuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gb3B0aW1pemUgVENPIChUYWcgQ2hlY2sgT3ZlcnJpZGUpIG1hbmFnZW1lbnQgb24gQVJNNjQsIGFuZCB1cGRhdGVzIGBtYWNjZXNzLmNgIGFuZCBCUEYgc3RyaW5nIGhlbHBlcnMgdG8gdXNlIHRoZW0gdW5kZXIgYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBhY2Nlc3Mgcm91dGluZXMgYW5kIEJQRiBoZWxwZXJzLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBpZiB0aGUgbm9mYXVsdCByZWdpb25zIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2NvcHlfdG9fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7c3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9zdHJjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5zdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2hyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjaHJudWwmIzM0OywKICAgICYjMzQ7YnBmX3N0cnJjaHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5sZW4mIzM0OywKICAgICYjMzQ7YnBmX3N0cnNwbiYjMzQ7LAogICAgJiMzNDticGZfc3RyY3NwbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBhbmQgc2V2ZXJhbCBCUEYgc3RyaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gb3B0aW1pemUgVGFnIENoZWNrIE92ZXJyaWRlIChUQ08pIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl0IGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gYmUgdXNlZCB3aXRoaW4gYSBndWFyZGVkIHJlZ2lvbiAoYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSlgKSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHRvZ2dsaW5nIFRDTyBvbiBldmVyeSBtZW1vcnkgYWNjZXNzIGluc2lkZSBsb29wcy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNTE2MDM0YmJkYWNhYjhiMmI2NjQ0ZDliOGE0MGFiNjNkYTIyZWUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTk6NDk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDlmNWJkOWM2OWMyNDkuLjFhMTRlYjJhNTFkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yNzAsMjggJiM0MzsyNzAsNDMgQEAgZG8gewkJCQkJCQkJCVwKICNkZWZpbmUgZ2V0X3VzZXIJX19nZXRfdXNlcgogCiAvKgotICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kCi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmcKLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgomIzQzOyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGEKJiM0MzsgKiBfX2JlZ2luL19fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSByZWdpb24uCiAgKi8KLSNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCkJCQlcCiYjNDM7I2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQlcCiBkbyB7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oZHN0KSBfX2drbl9kc3QgPSAoZHN0KTsJCQkJXAogCV9fdHlwZW9mX18oc3JjKSBfX2drbl9zcmMgPSAoc3JjKTsJCQkJXAogCWRvIHsgCQkJCQkJCQlcCiAJCV9fbGFiZWxfXyBfX2drbl9sYWJlbDsJCQkJCVwKLQkJCQkJCQkJCVwKLQkJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCV9fcmF3X2dldF9tZW0oJiMzNDtsZHImIzM0OywgKigodHlwZSAqKShfX2drbl9kc3QpKSwJCVwKIAkJICAgICAgKF9fZm9yY2UgdHlwZSAqKShfX2drbl9zcmMpLCBfX2drbl9sYWJlbCwgSyk7CVwKLQkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCV9fZ2tuX2xhYmVsOgkJCQkJCQlcCi0JCV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCVwKIAkJZ290byBlcnJfbGFiZWw7CQkJCQkJXAogCX0gd2hpbGUgKDApOwkJCQkJCQlcCiB9IHdoaWxlICgwKQogCiYjNDM7LyoKJiM0MzsgKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmQKJiM0MzsgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsCiYjNDM7ICogZXZhbHVhdGUgdGhlbSBiZWZvcmUgb3ZlcnJpZGluZyBUQ08uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJCVwKJiM0MztkbyB7CQkJCQkJCQkJXAomIzQzOwlfX2xhYmVsX18gX19na25fdGNvX2VycjsJCQkJCVwKJiM0MzsJX190eXBlb2ZfXyhkc3QpIF9fZ2tuX3Rjb19kc3QgPSAoZHN0KTsJCQkJXAomIzQzOwlfX3R5cGVvZl9fKHNyYykgX19na25fdGNvX3NyYyA9IChzcmMpOwkJCQlcCiYjNDM7CV9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTsJCQkJCVwKJiM0MzsJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShfX2drbl90Y29fZHN0LCBfX2drbl90Y29fc3JjLCB0eXBlLAlcCiYjNDM7CQkJCSAgICAgX19na25fdGNvX2Vycik7CQkJXAomIzQzOwlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlicmVhazsJCQkJCQkJCVwKJiM0MztfX2drbl90Y29fZXJyOgkJCQkJCQkJXAomIzQzOwlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlnb3RvIGVycl9sYWJlbDsJCQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiAjZGVmaW5lIF9fcHV0X21lbV9hc20oc3RvcmUsIHJlZywgeCwgYWRkciwgbGFiZWwsIHR5cGUpCQkJXAogCWFzbSBnb3RvKAkJCQkJCQlcCiAJJiMzNDsxOgkmIzM0OyBzdG9yZSAmIzM0OwkmIzM0OyByZWcgJiMzNDswLCBbJTFdXG4mIzM0OwkJCVwKQEAgLTM2NiwyOCAmIzQzOzM4MSw0OCBAQCBkbyB7CQkJCQkJCQkJXAogCiAjZGVmaW5lIHB1dF91c2VyCV9fcHV0X3VzZXIKIAotLyoKLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZAotICogX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKS4gQXMgYGRzdGAgYW5kIGBzcmNgIG1heSBjb250YWluIGJsb2NraW5nCi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqLwotI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJCVwKJiM0MzsvKiBOb2ZhdWx0IHN0b3JlIHdpdGhvdXQgVENPIG1hbmFnZW1lbnQ7IHNlZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlLiAqLwomIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJXAogZG8gewkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKGRzdCkgX19wa25fZHN0ID0gKGRzdCk7CQkJCVwKIAlfX3R5cGVvZl9fKHNyYykgX19wa25fc3JjID0gKHNyYyk7CQkJCVwKIAkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCV9fbGFiZWxfXyBfX3Brbl9lcnI7CQkJCQlcCi0JCV9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlfX3Jhd19wdXRfbWVtKCYjMzQ7c3RyJiMzNDssICooKHR5cGUgKikoX19wa25fc3JjKSksCQlcCiAJCQkgICAgICAoX19mb3JjZSB0eXBlICopKF9fcGtuX2RzdCksIF9fcGtuX2VyciwgSyk7CVwKLQkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCV9fcGtuX2VycjoJCQkJCQkJXAotCQlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCWdvdG8gZXJyX2xhYmVsOwkJCQkJCVwKIAl9IHdoaWxlICgwKTsJCQkJCQkJXAotfSB3aGlsZSgwKQomIzQzO30gd2hpbGUgKDApCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmQKJiM0MzsgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmcKJiM0MzsgKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQkJXAomIzQzO2RvIHsJCQkJCQkJCQlcCiYjNDM7CV9fbGFiZWxfXyBfX3Brbl90Y29fZXJyOwkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKGRzdCkgX19wa25fdGNvX2RzdCA9IChkc3QpOwkJCQlcCiYjNDM7CV9fdHlwZW9mX18oc3JjKSBfX3Brbl90Y29fc3JjID0gKHNyYyk7CQkJCVwKJiM0MzsJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fcGtuX3Rjb19kc3QsIF9fcGtuX3Rjb19zcmMsIHR5cGUsCVwKJiM0MzsJCQkJICAgICBfX3Brbl90Y29fZXJyKTsJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWJyZWFrOwkJCQkJCQkJXAomIzQzO19fcGtuX3Rjb19lcnI6CQkJCQkJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWdvdG8gZXJyX2xhYmVsOwkJCQkJCQlcCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgY29udGV4dCBzd2l0Y2ggcmUtZW5hYmxlcyB0YWcgY2hlY2tpbmcsIGhlbmNlIHRoZSBuby1zY2hlZHVsaW5nCiYjNDM7ICogcmVxdWlyZW1lbnQgZm9yIGEgYmFyZSBub2ZhdWx0IHJlZ2lvbi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpCV9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKQomIzQzOyNkZWZpbmUgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpCV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fYXJjaF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKaW5kZXggZWRkYmJiNjVjY2M0Zi4uYjI1ZTc3OGRkYzM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKQEAgLTYzNyw2ICYjNDM7NjM3LDI2IEBAIGRvIHsJCQkJCQkJXAogCiAjZW5kaWYgIC8qICFfX2dldF9rZXJuZWxfbm9mYXVsdCAqLwogCiYjNDM7LyoKJiM0MzsgKiBBcmNoaXRlY3R1cmVzIG1heSB1c2UgdGhlIGJlZ2luL2VuZCBob29rcyB0byBlc3RhYmxpc2ggc3RhdGUgc2hhcmVkIGJ5IGEKJiM0MzsgKiBzZXF1ZW5jZSBvZiBiYXJlIG5vZmF1bHQgYWNjZXNzZXMuIEV2ZXJ5IHBhdGggb3V0IG9mIHRoZSByZWdpb24gbXVzdCBjYWxsCiYjNDM7ICogdGhlIGVuZCBob29rLiBUaGUgcmVnaW9uLCBpbmNsdWRpbmcgZXhwcmVzc2lvbnMgcGFzc2VkIHRvIHRoZSBiYXJlCiYjNDM7ICogYWNjZXNzb3JzLCBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlci4KJiM0MzsgKi8KJiM0MzsjaWZuZGVmIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUKJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUJX19nZXRfa2VybmVsX25vZmF1bHQKJiM0MzsjZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUJX19wdXRfa2VybmVsX25vZmF1bHQKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZQomIzQzOyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJZG8ge30gd2hpbGUgKDApCiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJZG8ge30gd2hpbGUgKDApCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7REVGSU5FX0xPQ0tfR1VBUkRfMChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUsCiYjNDM7CQkgICAgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCksCiYjNDM7CQkgICAgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpKQomIzQzOwogLyoqCiAgKiBnZXRfa2VybmVsX25vZmF1bHQoKTogc2FmZWx5IGF0dGVtcHQgdG8gcmVhZCBmcm9tIGEgbG9jYXRpb24KICAqIEB2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGIzY2M1YzhmYzg3NTYuLmY4YzU1NzE2MTU4NGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jCkBAIC0zNzI2LDcgJiM0MzszNzI2LDggQEAgX19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpCiAgKgogICogU2luY2Ugc3RyaW5ncyBhcmUgbm90IG5lY2Vzc2FyaWx5ICVOVUwtdGVybWluYXRlZCwgd2UgY2Fubm90IGRpcmVjdGx5IGNhbGwKICAqIGluLWtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsIHdlIG9wZW4tY29kZSB0aGUgaW1wbGVtZW50YXRpb25zIHVzaW5nCi0gKiBfX2dldF9rZXJuZWxfbm9mYXVsdCBpbnN0ZWFkIG9mIHBsYWluIGRlcmVmZXJlbmNlIHRvIG1ha2UgdGhlbSBzYWZlLgomIzQzOyAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUgdW5kZXIgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpIHRvIG1ha2UgdGhlbQomIzQzOyAqIHNhZmUuCiAgKi8KIAogc3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pCkBAIC0zNzM4LDExICYjNDM7MzczOSwxNCBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgcwogCSAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoczIsIDEpKSB7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm4gMDsKIAogCWd1YXJkKHBhZ2VmYXVsdCkoKTsKJiM0MzsJZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBsZW4gJmFtcDsmYW1wOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMiwgczIsIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2MxLCBzMSwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKGlnbm9yZV9jYXNlKSB7CiAJCQljMSA9IHRvbG93ZXIoYzEpOwogCQkJYzIgPSB0b2xvd2VyKGMyKTsKQEAgLTM4MzcsMTAgJiM0MzszODQxLDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RybmNocihjb25zdCBjaGFyICpzX19pZ24sIHNpemVfdCBjb3VudCwgY2hhciBjKQogCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKQogCQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJaWYgKCFjb3VudCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50ICZhbXA7JmFtcDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoc2MgPT0gYykKIAkJCXJldHVybiBpOwogCQlpZiAoc2MgPT0gJiMzOTtcMCYjMzk7KQpAQCAtMzg5Myw4ICYjNDM7MzkwMCw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY2hybnVsKGNvbnN0IGNoYXIgKnNfX2lnbiwgY2hhciBjKQogCQlyZXR1cm4gLUVSQU5HRTsKIAogCWd1YXJkKHBhZ2VmYXVsdCkoKTsKJiM0MzsJZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKHNjID09ICYjMzk7XDAmIzM5OyB8fCBzYyA9PSBjKQogCQkJcmV0dXJuIGk7CiAJCXNfX2lnbiYjNDM7JiM0Mzs7CkBAIC0zOTI1LDggJiM0MzszOTMzLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJyY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgaW50IGMpCiAJCXJldHVybiAtRVJBTkdFOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoc2MgPT0gYykKIAkJCWxhc3QgPSBpOwogCQlpZiAoc2MgPT0gJiMzOTtcMCYjMzk7KQpAQCAtMzk1NiwxMCAmIzQzOzM5NjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJubGVuKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50KQogCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKQogCQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJaWYgKCFjb3VudCkKJiM0MzsJCXJldHVybiAwOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50ICZhbXA7JmFtcDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKGMgPT0gJiMzOTtcMCYjMzk7KQogCQkJcmV0dXJuIGk7CiAJCXNfX2lnbiYjNDM7JiM0Mzs7CkBAIC00MDA4LDEyICYjNDM7NDAyMCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnNwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKQogCX0KIAogCWd1YXJkKHBhZ2VmYXVsdCkoKTsKJiM0MzsJZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKGNzID09ICYjMzk7XDAmIzM5OykKIAkJCXJldHVybiBpOwogCQlmb3IgKGogPSAwOyBqICZsdDsgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7Ci0JCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2NhLCBhY2NlcHRfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwogCQkJaWYgKGNzID09IGNhIHx8IGNhID09ICYjMzk7XDAmIzM5OykKIAkJCQlicmVhazsKIAkJfQpAQCAtNDA1MiwxMiAmIzQzOzQwNjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pCiAJfQogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQogCQkJcmV0dXJuIGk7CiAJCWZvciAoaiA9IDA7IGogJmx0OyBYQVRUUl9TSVpFX01BWDsgaiYjNDM7JiM0MzspIHsKLQkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3IsIHJlamVjdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjciwgcmVqZWN0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiAJCQlpZiAoY3MgPT0gY3IgfHwgY3IgPT0gJiMzOTtcMCYjMzk7KQogCQkJCWJyZWFrOwogCQl9CkBAIC00MDg0LDkgJiM0Mzs0MDk4LDEwIEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sCiAJfQogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewogCQlmb3IgKGogPSAwOyBpICYjNDM7IGogJmx0Oz0gbGVuICZhbXA7JmFtcDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewotCQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMiwgczIgJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2MyLCBzMiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKIAkJCWlmIChjMiA9PSAmIzM5O1wwJiMzOTspCiAJCQkJcmV0dXJuIGk7CiAJCQkvKgpAQCAtNDA5Niw3ICYjNDM7NDExMSw3IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sCiAJCQkgKi8KIAkJCWlmIChpICYjNDM7IGogPT0gbGVuKQogCQkJCWJyZWFrOwotCQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgczEgJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2MxLCBzMSAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKIAogCQkJaWYgKGlnbm9yZV9jYXNlKSB7CiAJCQkJYzEgPSB0b2xvd2VyKGMxKTsKZGlmZiAtLWdpdCBhL21tL21hY2Nlc3MuYyBiL21tL21hY2Nlc3MuYwppbmRleCA0ODY1NTlkNjg4NTgzLi44NzQ4NmJmOThkMTVhIDEwMDY0NAotLS0gYS9tbS9tYWNjZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFjY2Vzcy5jCkBAIC0xOSw3ICYjNDM7MTksNyBAQCBib29sIF9fd2VhayBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChjb25zdCB2b2lkICp1bnNhZmVfc3JjLAogICovCiAjZGVmaW5lIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbCkJXAogCXdoaWxlIChsZW4gJmd0Oz0gc2l6ZW9mKHR5cGUpKSB7CQkJCQlcCi0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpOwlcCiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpOwlcCiAJCWttc2FuX2NoZWNrX21lbW9yeShzcmMsIHNpemVvZih0eXBlKSk7CQkJXAogCQlkc3QgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKIAkJc3JjICYjNDM7PSBzaXplb2YodHlwZSk7CQkJCQlcCkBAIC0zNSwyNiAmIzQzOzM1LDI5IEBAIGxvbmcgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKIAogCWlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc3JjLCBzaXplKSkKIAkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CWlmICghc2l6ZSkKJiM0MzsJCXJldHVybiAwOwogCi0JcGFnZWZhdWx0X2Rpc2FibGUoKTsKLQlpZiAoIShhbGlnbiAmYW1wOyA3KSkKLQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAzKSkKLQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKLQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTsKLQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwomIzQzOwlzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7CiYjNDM7CQlzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgNykpCiYjNDM7CQkJCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgMykpCiYjNDM7CQkJCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgMSkpCiYjNDM7CQkJCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7CiYjNDM7CQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpOwomIzQzOwkJfQomIzQzOwl9CiAJcmV0dXJuIDA7CiBFZmF1bHQ6Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwogCXJldHVybiAtRUZBVUxUOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0KTsKIAogI2RlZmluZSBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKQlcCiAJd2hpbGUgKGxlbiAmZ3Q7PSBzaXplb2YodHlwZSkpIHsJCQkJCVwKLQkJX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKJiM0MzsJCV9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKIAkJaW5zdHJ1bWVudF93cml0ZShkc3QsIHNpemVvZih0eXBlKSk7CQkJXAogCQlkc3QgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKIAkJc3JjICYjNDM7PSBzaXplb2YodHlwZSk7CQkJCQlcCkBAIC02NSwyMSAmIzQzOzY4LDI1IEBAIGxvbmcgY29weV90b19rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDA7CiAKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSkKIAkJYWxpZ24gPSAodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylzcmM7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWlmICghKGFsaWduICZhbXA7IDcpKQotCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAzKSkKLQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7Ci0JaWYgKCEoYWxpZ24gJmFtcDsgMSkpCi0JCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpOwotCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwomIzQzOwlzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7CiYjNDM7CQlzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgNykpCiYjNDM7CQkJCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpOwomIzQzOwkJCWlmICghKGFsaWduICZhbXA7IDMpKQomIzQzOwkJCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKJiM0MzsJCQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7CiYjNDM7CQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTsKJiM0MzsJCX0KJiM0MzsJfQogCXJldHVybiAwOwogRWZhdWx0OgotCXBhZ2VmYXVsdF9lbmFibGUoKTsKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIApAQCAtOTIsMTggJiM0Mzs5OSwxOSBAQCBsb25nIHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChjaGFyICpkc3QsIGNvbnN0IHZvaWQgKnVuc2FmZV9hZGRyLCBsb25nIGNvdW50KQogCWlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQodW5zYWZlX2FkZHIsIGNvdW50KSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWRvIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHU4LCBFZmF1bHQpOwotCQlkc3QmIzQzOyYjNDM7OwotCQlzcmMmIzQzOyYjNDM7OwotCX0gd2hpbGUgKGRzdFstMV0gJmFtcDsmYW1wOyBzcmMgLSB1bnNhZmVfYWRkciAmbHQ7IGNvdW50KTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiYjNDM7CXNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHsKJiM0MzsJCQlkbyB7CiYjNDM7CQkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHU4LCBFZmF1bHQpOwomIzQzOwkJCQlkc3QmIzQzOyYjNDM7OwomIzQzOwkJCQlzcmMmIzQzOyYjNDM7OwomIzQzOwkJCX0gd2hpbGUgKGRzdFstMV0gJmFtcDsmYW1wOyBzcmMgLSB1bnNhZmVfYWRkciAmbHQ7IGNvdW50KTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJZHN0Wy0xXSA9ICYjMzk7XDAmIzM5OzsKIAlyZXR1cm4gc3JjIC0gdW5zYWZlX2FkZHI7CiBFZmF1bHQ6Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwogCWRzdFswXSA9ICYjMzk7XDAmIzM5OzsKIAlyZXR1cm4gLUVGQVVMVDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDMKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFwcGxpY2FiaWxpdHkgQW5hbHlzaXMgZm9yIEtlcm5lbCBNZW1vcnkgQWNjZXNzIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXRzIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaXRzIGltcGFjdCBvbiBLTVNBTi4gVGhpcyBwYXRjaCB0b3VjaGVzIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAsIGBpbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaGAsIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AsIGFuZCBgbW0vbWFjY2Vzcy5jYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXJzLiBUaGUgZ29hbCBpcyB0byBvcHRpbWl6ZSB0aGUgTWVtb3J5IFRhZ2dpbmcgRXh0ZW5zaW9uIChNVEUpIG9uIEFSTTY0LCBuYW1lbHkgdGhlIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50LiBJdCBhY2hpZXZlcyB0aGlzIGJ5IGludHJvZHVjaW5nIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gZGVmaW5lZCBieSBgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClgIC8gYF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKWAuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciBLTVNBTiB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCBkb2VzbiYjMzk7dC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLiBJdCBkb2VzbiYjMzk7dCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdG8gY29udHJvbCBwcm9ncmFtIGZsb3cuIEl0IGFsc28gZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgc2lnbmlmaWNhbnQgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gb3B0aW1pemluZyBob3cgZXhpc3RpbmcgbWVtb3J5IHJlZ2lvbnMgYXJlIGFjY2Vzc2VkIHNhZmVseS4gSXQmIzM5O3MgcmVhbGx5IGFib3V0IG1pbmltaXppbmcgb3ZlcmhlYWQsIHNwZWNpZmljYWxseSB0aGUgVENPIHRvZ2dsZSwgd2hpY2ggd291bGQgaGF2ZSBiZWVuIGV4cGVuc2l2ZSBpbiB0aGUgbG9vcC4KCkkgc2VlIHRoYXQgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wYCBhbHJlYWR5IGNhbGxzIGBrbXNhbl9jaGVja19tZW1vcnkoc3JjLCBzaXplb2YodHlwZSkpO2AuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCByZW1vdmUgdGhpcy4gSXQganVzdCBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBoZWxwZXIgY2FsbHMgd2l0aGluIHRoZSBsb29wIGZyb20gYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0YCB0byBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAsIGFuZCB3cmFwcyB0aGUgd2hvbGUgbG9vcCBpbiB0aGUgZ3VhcmRlZCByZWdpb24uIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLCBiZWNhdXNlIHRoZSBLTVNBTiBjaGVja3MgYWxyZWFkeSBleGlzdC4KCk15IGNvbmNsdXNpb24/IFRoaXMgcGF0Y2ggaXMgYSByZWZhY3RvcmluZy9vcHRpbWl6YXRpb24uIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGludHJvZHVjZSBuZXcgS01TQU4tc3BlY2lmaWMgcmlza3MuIElmIHRoZXJlIHdlcmUgYnVncyBpbnRyb2R1Y2VkIGhlcmUsIHRoZXkmIzM5O2QgbGlrZWx5IG1hbmlmZXN0IGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBsb2dpY2FsIGVycm9ycy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0cyB3b3VsZCwgaW4gbXkgZXhwZXJpZW5jZSwgY2F0Y2ggdGhvc2UuIFRoZXJlZm9yZSwgS01TQU4gZG9lc24mIzM5O3QgbmVlZCB0byBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQgd2l0aCBhZGRpdGlvbmFsIGZ1enppbmcgc2Vzc2lvbnMgZm9yIHRoaXMgY2hhbmdlLiBUaGUgZXhpc3RpbmcgbWVtb3J5IHNhZmV0eSBpbmZyYXN0cnVjdHVyZSBzaG91bGQgY292ZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBhbmQgc2V2ZXJhbCBCUEYgc3RyaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gb3B0aW1pemUgVGFnIENoZWNrIE92ZXJyaWRlIChUQ08pIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl0IGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gYmUgdXNlZCB3aXRoaW4gYSBndWFyZGVkIHJlZ2lvbiAoYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSlgKSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHRvZ2dsaW5nIFRDTyBvbiBldmVyeSBtZW1vcnkgYWNjZXNzIGluc2lkZSBsb29wcy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBUYWcgQ2hlY2sgT3ZlcnJpZGUgKFRDTykgbWFuYWdlbWVudCBvbiBBUk02NC4gSXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBiZSB1c2VkIHdpdGhpbiBhIGd1YXJkZWQgcmVnaW9uIChgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKWApLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdG9nZ2xpbmcgVENPIG9uIGV2ZXJ5IG1lbW9yeSBhY2Nlc3MgaW5zaWRlIGxvb3BzLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZXhpc3RpbmcgYGttc2FuX2NoZWNrX21lbW9yeWAgY2FsbHMgYXJlIHByZXNlcnZlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyAoc3VjaCBhcyBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nLCBtaXNzaW5nIGVhcmx5IHJldHVybnMsIG9yIGltcHJvcGVyIHBhZ2UgZmF1bHQgaGFuZGxpbmcpIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbnZhbGlkIG1lbW9yeSBkZXJlZmVyZW5jZXMsIG9yIGNyYXNoZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBhY2Nlc3MgdmlvbGF0aW9ucyBhcmUgYWxyZWFkeSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjI3LjYyOTY0ODA3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Mjk2NDcyMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0XCIsXG4gICAgXCJjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0XCIsXG4gICAgXCJzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRcIixcbiAgICBcImJwZl9zdHJjbXBcIixcbiAgICBcImJwZl9zdHJjYXNlY21wXCIsXG4gICAgXCJicGZfc3RybmNhc2VjbXBcIixcbiAgICBcImJwZl9zdHJzdHJcIixcbiAgICBcImJwZl9zdHJjYXNlc3RyXCIsXG4gICAgXCJicGZfc3RybnN0clwiLFxuICAgIFwiYnBmX3N0cm5jYXNlc3RyXCIsXG4gICAgXCJicGZfc3RybmNoclwiLFxuICAgIFwiYnBmX3N0cmNocm51bFwiLFxuICAgIFwiYnBmX3N0cnJjaHJcIixcbiAgICBcImJwZl9zdHJubGVuXCIsXG4gICAgXCJicGZfc3Ryc3BuXCIsXG4gICAgXCJicGZfc3RyY3NwblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBUYWcgQ2hlY2sgT3ZlcnJpZGUgKFRDTykgbWFuYWdlbWVudCBvbiBBUk02NC4gSXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBiZSB1c2VkIHdpdGhpbiBhIGd1YXJkZWQgcmVnaW9uIChgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKWApLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdG9nZ2xpbmcgVENPIG9uIGV2ZXJ5IG1lbW9yeSBhY2Nlc3MgaW5zaWRlIGxvb3BzLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBleGlzdGluZyBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxscyBhcmUgcHJlc2VydmVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIChzdWNoIGFzIGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcsIG1pc3NpbmcgZWFybHkgcmV0dXJucywgb3IgaW1wcm9wZXIgcGFnZSBmYXVsdCBoYW5kbGluZykgd291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGludmFsaWQgbWVtb3J5IGRlcmVmZXJlbmNlcywgb3IgY3Jhc2hlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGFjY2VzcyB2aW9sYXRpb25zIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo0OToyNy42Mjk2NTQyMThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU1NzUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNTE2MDM0YmJkYWNhYjhiMmI2NjQ0ZDliOGE0MGFiNjNkYTIyZWUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE5OjQ5OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG5pbmRleCA5ZjViZDljNjljMjQ5Li4xYTE0ZWIyYTUxZGNlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG5AQCAtMjcwLDI4ICsyNzAsNDMgQEAgZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gI2RlZmluZSBnZXRfdXNlclxcdF9fZ2V0X3VzZXJcXG4gXFxuIC8qXFxuLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcXG4tICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXFxuKyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGFcXG4rICogX19iZWdpbi9fX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkgcmVnaW9uLlxcbiAgKi9cXG4tI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVxcdFxcdFxcdFxcXFxcXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXFx0XFx0XFxcXFxcbiBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX3R5cGVvZl9fKGRzdCkgX19na25fZHN0ID0gKGRzdCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX3R5cGVvZl9fKHNyYykgX19na25fc3JjID0gKHNyYyk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRkbyB7IFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0X19sYWJlbF9fIF9fZ2tuX2xhYmVsO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRfX3Jhd19nZXRfbWVtKFxcXCJsZHJcXFwiLCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLFxcdFxcdFxcXFxcXG4gXFx0XFx0ICAgICAgKF9fZm9yY2UgdHlwZSAqKShfX2drbl9zcmMpLCBfX2drbl9sYWJlbCwgSyk7XFx0XFxcXFxcbi1cXHRcXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX2drbl9sYWJlbDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRnb3RvIGVycl9sYWJlbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdH0gd2hpbGUgKDApO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSB3aGlsZSAoMClcXG4gXFxuKy8qXFxuKyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxcbisgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsXFxuKyAqIGV2YWx1YXRlIHRoZW0gYmVmb3JlIG92ZXJyaWRpbmcgVENPLlxcbisgKi9cXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVxcdFxcdFxcdFxcXFxcXG4rZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19sYWJlbF9fIF9fZ2tuX3Rjb19lcnI7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3R5cGVvZl9fKGRzdCkgX19na25fdGNvX2RzdCA9IChkc3QpO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X190eXBlb2ZfXyhzcmMpIF9fZ2tuX3Rjb19zcmMgPSAoc3JjKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoX19na25fdGNvX2RzdCwgX19na25fdGNvX3NyYywgdHlwZSxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgX19na25fdGNvX2Vycik7XFx0XFx0XFx0XFxcXFxcbitcXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitfX2drbl90Y29fZXJyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGdvdG8gZXJyX2xhYmVsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSB3aGlsZSAoMClcXG4rXFxuICNkZWZpbmUgX19wdXRfbWVtX2FzbShzdG9yZSwgcmVnLCB4LCBhZGRyLCBsYWJlbCwgdHlwZSlcXHRcXHRcXHRcXFxcXFxuIFxcdGFzbSBnb3RvKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFxcIjE6XFx0XFxcIiBzdG9yZSBcXFwiXFx0XFxcIiByZWcgXFxcIjAsIFslMV1cXFxcblxcXCJcXHRcXHRcXHRcXFxcXFxuQEAgLTM2NiwyOCArMzgxLDQ4IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcbiAjZGVmaW5lIHB1dF91c2VyXFx0X19wdXRfdXNlclxcbiBcXG4tLypcXG4tICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXFxuLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cXG4tICovXFxuLSNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcXHRcXHRcXHRcXFxcXFxuKy8qIE5vZmF1bHQgc3RvcmUgd2l0aG91dCBUQ08gbWFuYWdlbWVudDsgc2VlIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUuICovXFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVxcdFxcdFxcXFxcXG4gZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X190eXBlb2ZfXyhkc3QpIF9fcGtuX2RzdCA9IChkc3QpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3NyYyA9IChzcmMpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRfX2xhYmVsX18gX19wa25fZXJyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0X19yYXdfcHV0X21lbShcXFwic3RyXFxcIiwgKigodHlwZSAqKShfX3Brbl9zcmMpKSxcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdCAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19wa25fZHN0KSwgX19wa25fZXJyLCBLKTtcXHRcXFxcXFxuLVxcdFxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRicmVhaztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fcGtuX2VycjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRnb3RvIGVycl9sYWJlbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdH0gd2hpbGUgKDApO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tfSB3aGlsZSgwKVxcbit9IHdoaWxlICgwKVxcbitcXG4rLypcXG4rICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXFxuKyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xcbisgKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cXG4rICovXFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcXHRcXHRcXHRcXFxcXFxuK2RvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fbGFiZWxfXyBfX3Brbl90Y29fZXJyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X190eXBlb2ZfXyhkc3QpIF9fcGtuX3Rjb19kc3QgPSAoZHN0KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fdHlwZW9mX18oc3JjKSBfX3Brbl90Y29fc3JjID0gKHNyYyk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fcGtuX3Rjb19kc3QsIF9fcGtuX3Rjb19zcmMsIHR5cGUsXFx0XFxcXFxcbitcXHRcXHRcXHRcXHQgICAgIF9fcGtuX3Rjb19lcnIpO1xcdFxcdFxcdFxcXFxcXG4rXFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rX19wa25fdGNvX2VycjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIGVycl9sYWJlbDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbisvKlxcbisgKiBBIGNvbnRleHQgc3dpdGNoIHJlLWVuYWJsZXMgdGFnIGNoZWNraW5nLCBoZW5jZSB0aGUgbm8tc2NoZWR1bGluZ1xcbisgKiByZXF1aXJlbWVudCBmb3IgYSBiYXJlIG5vZmF1bHQgcmVnaW9uLlxcbisgKi9cXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKVxcbisjZGVmaW5lIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKClcXG4gXFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2FyY2hfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pO1xcbiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcXG5pbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcXG5AQCAtNjM3LDYgKzYzNywyNiBAQCBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXG4gI2VuZGlmICAvKiAhX19nZXRfa2VybmVsX25vZmF1bHQgKi9cXG4gXFxuKy8qXFxuKyAqIEFyY2hpdGVjdHVyZXMgbWF5IHVzZSB0aGUgYmVnaW4vZW5kIGhvb2tzIHRvIGVzdGFibGlzaCBzdGF0ZSBzaGFyZWQgYnkgYVxcbisgKiBzZXF1ZW5jZSBvZiBiYXJlIG5vZmF1bHQgYWNjZXNzZXMuIEV2ZXJ5IHBhdGggb3V0IG9mIHRoZSByZWdpb24gbXVzdCBjYWxsXFxuKyAqIHRoZSBlbmQgaG9vay4gVGhlIHJlZ2lvbiwgaW5jbHVkaW5nIGV4cHJlc3Npb25zIHBhc3NlZCB0byB0aGUgYmFyZVxcbisgKiBhY2Nlc3NvcnMsIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyLlxcbisgKi9cXG4rI2lmbmRlZiBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlXFxuKyNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZVxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0XFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZVxcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0XFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmVcXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdGRvIHt9IHdoaWxlICgwKVxcbisjZGVmaW5lIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdGRvIHt9IHdoaWxlICgwKVxcbisjZW5kaWZcXG4rXFxuK0RFRklORV9MT0NLX0dVQVJEXzAoX19rZXJuZWxfbm9mYXVsdF9iYXJlLFxcbitcXHRcXHQgICAgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCksXFxuK1xcdFxcdCAgICBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkpXFxuK1xcbiAvKipcXG4gICogZ2V0X2tlcm5lbF9ub2ZhdWx0KCk6IHNhZmVseSBhdHRlbXB0IHRvIHJlYWQgZnJvbSBhIGxvY2F0aW9uXFxuICAqIEB2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5mOGM1NTcxNjE1ODRlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtMzcyNiw3ICszNzI2LDggQEAgX19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXFxuICAqXFxuICAqIFNpbmNlIHN0cmluZ3MgYXJlIG5vdCBuZWNlc3NhcmlseSAlTlVMLXRlcm1pbmF0ZWQsIHdlIGNhbm5vdCBkaXJlY3RseSBjYWxsXFxuICAqIGluLWtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsIHdlIG9wZW4tY29kZSB0aGUgaW1wbGVtZW50YXRpb25zIHVzaW5nXFxuLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuXFxuKyAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUgdW5kZXIgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpIHRvIG1ha2UgdGhlbVxcbisgKiBzYWZlLlxcbiAgKi9cXG4gXFxuIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxcbkBAIC0zNzM4LDExICszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzXFxuIFxcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoczIsIDEpKSB7XFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjMSwgczEsIGNoYXIsIGVycl9vdXQpO1xcbi1cXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFx0XFx0aWYgKGlnbm9yZV9jYXNlKSB7XFxuIFxcdFxcdFxcdGMxID0gdG9sb3dlcihjMSk7XFxuIFxcdFxcdFxcdGMyID0gdG9sb3dlcihjMik7XFxuQEAgLTM4MzcsMTAgKzM4NDEsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJuY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50LCBjaGFyIGMpXFxuIFxcbiBcXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXHRpZiAoIWNvdW50KVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcXG4tXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFx0XFx0aWYgKHNjID09IGMpXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHRpZiAoc2MgPT0gJ1xcXFwwJylcXG5AQCAtMzg5Myw4ICszOTAwLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjaHJudWwoY29uc3QgY2hhciAqc19faWduLCBjaGFyIGMpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdGlmIChzYyA9PSAnXFxcXDAnIHx8IHNjID09IGMpXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHRzX19pZ24rKztcXG5AQCAtMzkyNSw4ICszOTMzLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJyY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgaW50IGMpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdGlmIChzYyA9PSBjKVxcbiBcXHRcXHRcXHRsYXN0ID0gaTtcXG4gXFx0XFx0aWYgKHNjID09ICdcXFxcMCcpXFxuQEAgLTM5NTYsMTAgKzM5NjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJubGVuKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50KVxcbiBcXG4gXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0aWYgKCFjb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRndWFyZChwYWdlZmF1bHQpKCk7XFxuK1xcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50IFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbiBcXHRcXHRpZiAoYyA9PSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRyZXR1cm4gaTtcXG4gXFx0XFx0c19faWduKys7XFxuQEAgLTQwMDgsMTIgKzQwMjAsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcXG4gXFx0fVxcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdGlmIChjcyA9PSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRyZXR1cm4gaTtcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqKyspIHtcXG4tXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZjYSwgYWNjZXB0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFx0XFx0XFx0aWYgKGNzID09IGNhIHx8IGNhID09ICdcXFxcMCcpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTQwNTIsMTIgKzQwNjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXFxuIFxcdH1cXG4gXFxuIFxcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xcbi1cXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbiBcXHRcXHRpZiAoY3MgPT0gJ1xcXFwwJylcXG4gXFx0XFx0XFx0cmV0dXJuIGk7XFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XFxuLVxcdFxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjciwgcmVqZWN0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2Y3IsIHJlamVjdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdFxcdGlmIChjcyA9PSBjciB8fCBjciA9PSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC00MDg0LDkgKzQwOTgsMTAgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcXG4gXFx0fVxcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuIFxcdFxcdGZvciAoaiA9IDA7IGkgKyBqIFxcdTAwM2M9IGxlbiBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xcbi1cXHRcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2YzIsIHMyICsgaiwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXFx1MDAyNmMyLCBzMiArIGosIGNoYXIsIGVycl9vdXQpO1xcbiBcXHRcXHRcXHRpZiAoYzIgPT0gJ1xcXFwwJylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTQwOTYsNyArNDExMSw3IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoaSArIGogPT0gbGVuKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmMxLCBzMSArIGosIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZjMSwgczEgKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFxuIFxcdFxcdFxcdGlmIChpZ25vcmVfY2FzZSkge1xcbiBcXHRcXHRcXHRcXHRjMSA9IHRvbG93ZXIoYzEpO1xcbmRpZmYgLS1naXQgYS9tbS9tYWNjZXNzLmMgYi9tbS9tYWNjZXNzLmNcXG5pbmRleCA0ODY1NTlkNjg4NTgzLi44NzQ4NmJmOThkMTVhIDEwMDY0NFxcbi0tLSBhL21tL21hY2Nlc3MuY1xcbisrKyBiL21tL21hY2Nlc3MuY1xcbkBAIC0xOSw3ICsxOSw3IEBAIGJvb2wgX193ZWFrIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGNvbnN0IHZvaWQgKnVuc2FmZV9zcmMsXFxuICAqL1xcbiAjZGVmaW5lIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbClcXHRcXFxcXFxuIFxcdHdoaWxlIChsZW4gXFx1MDAzZT0gc2l6ZW9mKHR5cGUpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcXHRcXFxcXFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XFx0XFxcXFxcbiBcXHRcXHRrbXNhbl9jaGVja19tZW1vcnkoc3JjLCBzaXplb2YodHlwZSkpO1xcdFxcdFxcdFxcXFxcXG4gXFx0XFx0ZHN0ICs9IHNpemVvZih0eXBlKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdHNyYyArPSBzaXplb2YodHlwZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0zNSwyNiArMzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxcbiBcXG4gXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0aWYgKCFzaXplKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgNykpXFxuLVxcdFxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgMykpXFxuLVxcdFxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgMSkpXFxuLVxcdFxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XFxuLVxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTtcXG4tXFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbitcXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiA3KSlcXG4rXFx0XFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAzKSlcXG4rXFx0XFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAxKSlcXG4rXFx0XFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIEVmYXVsdDpcXG4tXFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbiBcXHRyZXR1cm4gLUVGQVVMVDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpO1xcbiBcXG4gI2RlZmluZSBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVxcdFxcXFxcXG4gXFx0d2hpbGUgKGxlbiBcXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1xcdFxcXFxcXG4rXFx0XFx0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcXHRcXFxcXFxuIFxcdFxcdGluc3RydW1lbnRfd3JpdGUoZHN0LCBzaXplb2YodHlwZSkpO1xcdFxcdFxcdFxcXFxcXG4gXFx0XFx0ZHN0ICs9IHNpemVvZih0eXBlKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdHNyYyArPSBzaXplb2YodHlwZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC02NSwyMSArNjgsMjUgQEAgbG9uZyBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFsaWduID0gMDtcXG4gXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpKVxcbiBcXHRcXHRhbGlnbiA9ICh1bnNpZ25lZCBsb25nKWRzdCB8ICh1bnNpZ25lZCBsb25nKXNyYztcXG4gXFxuLVxcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgNykpXFxuLVxcdFxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xcbi1cXHRpZiAoIShhbGlnbiBcXHUwMDI2IDMpKVxcbi1cXHRcXHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcXG4tXFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAxKSlcXG4tXFx0XFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XFxuLVxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XFxuLVxcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4rXFx0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xcbitcXHRcXHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XFxuK1xcdFxcdFxcdGlmICghKGFsaWduIFxcdTAwMjYgNykpXFxuK1xcdFxcdFxcdFxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xcbitcXHRcXHRcXHRpZiAoIShhbGlnbiBcXHUwMDI2IDMpKVxcbitcXHRcXHRcXHRcXHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAxKSlcXG4rXFx0XFx0XFx0XFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XFxuK1xcdFxcdFxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gRWZhdWx0Olxcbi1cXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcdHJldHVybiAtRUZBVUxUO1xcbiB9XFxuIFxcbkBAIC05MiwxOCArOTksMTkgQEAgbG9uZyBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoY2hhciAqZHN0LCBjb25zdCB2b2lkICp1bnNhZmVfYWRkciwgbG9uZyBjb3VudClcXG4gXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZCh1bnNhZmVfYWRkciwgY291bnQpKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFxuLVxcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuLVxcdGRvIHtcXG4tXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHU4LCBFZmF1bHQpO1xcbi1cXHRcXHRkc3QrKztcXG4tXFx0XFx0c3JjKys7XFxuLVxcdH0gd2hpbGUgKGRzdFstMV0gXFx1MDAyNlxcdTAwMjYgc3JjIC0gdW5zYWZlX2FkZHIgXFx1MDAzYyBjb3VudCk7XFxuLVxcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4rXFx0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xcbitcXHRcXHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XFxuK1xcdFxcdFxcdGRvIHtcXG4rXFx0XFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdTgsIEVmYXVsdCk7XFxuK1xcdFxcdFxcdFxcdGRzdCsrO1xcbitcXHRcXHRcXHRcXHRzcmMrKztcXG4rXFx0XFx0XFx0fSB3aGlsZSAoZHN0Wy0xXSBcXHUwMDI2XFx1MDAyNiBzcmMgLSB1bnNhZmVfYWRkciBcXHUwMDNjIGNvdW50KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRkc3RbLTFdID0gJ1xcXFwwJztcXG4gXFx0cmV0dXJuIHNyYyAtIHVuc2FmZV9hZGRyO1xcbiBFZmF1bHQ6XFxuLVxcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4gXFx0ZHN0WzBdID0gJ1xcXFwwJztcXG4gXFx0cmV0dXJuIC1FRkFVTFQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6MjkuMjU2MjA5MTExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDAxNTkxMzI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRcIixcbiAgICBcImNvcHlfdG9fa2VybmVsX25vZmF1bHRcIixcbiAgICBcInN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwiYnBmX3N0cmNtcFwiLFxuICAgIFwiYnBmX3N0cmNhc2VjbXBcIixcbiAgICBcImJwZl9zdHJuY2FzZWNtcFwiLFxuICAgIFwiYnBmX3N0cnN0clwiLFxuICAgIFwiYnBmX3N0cmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuc3RyXCIsXG4gICAgXCJicGZfc3RybmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuY2hyXCIsXG4gICAgXCJicGZfc3RyY2hybnVsXCIsXG4gICAgXCJicGZfc3RycmNoclwiLFxuICAgIFwiYnBmX3N0cm5sZW5cIixcbiAgICBcImJwZl9zdHJzcG5cIixcbiAgICBcImJwZl9zdHJjc3BuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBvcHRpbWl6ZSBUQ08gKFRhZyBDaGVjayBPdmVycmlkZSkgbWFuYWdlbWVudCBvbiBBUk02NCwgYW5kIHVwZGF0ZXMgYG1hY2Nlc3MuY2AgYW5kIEJQRiBzdHJpbmcgaGVscGVycyB0byB1c2UgdGhlbSB1bmRlciBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IGFjY2VzcyByb3V0aW5lcyBhbmQgQlBGIGhlbHBlcnMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGlmIHRoZSBub2ZhdWx0IHJlZ2lvbnMgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDUxNjAzNGJiZGFjYWI4YjJiNjY0NGQ5YjhhNDBhYjYzZGEyMmVlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE5OjQ5OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuaW5kZXggOWY1YmQ5YzY5YzI0OS4uMWExNGViMmE1MWRjZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuQEAgLTI3MCwyOCArMjcwLDQzIEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICNkZWZpbmUgZ2V0X3VzZXJcdF9fZ2V0X3VzZXJcbiBcbiAvKlxuLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuKyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGFcbisgKiBfX2JlZ2luL19fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSByZWdpb24uXG4gICovXG4tI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKGRzdCkgX19na25fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhzcmMpIF9fZ2tuX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiBcdGRvIHsgXHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdF9fbGFiZWxfXyBfX2drbl9sYWJlbDtcdFx0XHRcdFx0XFxcbi1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRfX3Jhd19nZXRfbWVtKFwibGRyXCIsICooKHR5cGUgKikoX19na25fZHN0KSksXHRcdFxcXG4gXHRcdCAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19na25fc3JjKSwgX19na25fbGFiZWwsIEspO1x0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XFxcbiBcdF9fZ2tuX2xhYmVsOlx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFxcXG4gXHR9IHdoaWxlICgwKTtcdFx0XHRcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbisvKlxuKyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuKyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGRzdCBhbmQgc3JjIG1heSBjb250YWluIGJsb2NraW5nIGZ1bmN0aW9ucyxcbisgKiBldmFsdWF0ZSB0aGVtIGJlZm9yZSBvdmVycmlkaW5nIFRDTy5cbisgKi9cbisjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFx0XFxcbitkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fbGFiZWxfXyBfX2drbl90Y29fZXJyO1x0XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhkc3QpIF9fZ2tuX3Rjb19kc3QgPSAoZHN0KTtcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKHNyYykgX19na25fdGNvX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbitcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoX19na25fdGNvX2RzdCwgX19na25fdGNvX3NyYywgdHlwZSxcdFxcXG4rXHRcdFx0XHQgICAgIF9fZ2tuX3Rjb19lcnIpO1x0XHRcdFxcXG4rXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4rX19na25fdGNvX2VycjpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcdFxcXG4rfSB3aGlsZSAoMClcbitcbiAjZGVmaW5lIF9fcHV0X21lbV9hc20oc3RvcmUsIHJlZywgeCwgYWRkciwgbGFiZWwsIHR5cGUpXHRcdFx0XFxcbiBcdGFzbSBnb3RvKFx0XHRcdFx0XHRcdFx0XFxcbiBcdFwiMTpcdFwiIHN0b3JlIFwiXHRcIiByZWcgXCIwLCBbJTFdXFxuXCJcdFx0XHRcXFxuQEAgLTM2NiwyOCArMzgxLDQ4IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFxuICNkZWZpbmUgcHV0X3VzZXJcdF9fcHV0X3VzZXJcbiBcbi0vKlxuLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuLSAqL1xuLSNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuKy8qIE5vZmF1bHQgc3RvcmUgd2l0aG91dCBUQ08gbWFuYWdlbWVudDsgc2VlIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUuICovXG4rI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKGRzdCkgX19wa25fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRfX2xhYmVsX18gX19wa25fZXJyO1x0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRfX3Jhd19wdXRfbWVtKFwic3RyXCIsICooKHR5cGUgKikoX19wa25fc3JjKSksXHRcdFxcXG4gXHRcdFx0ICAgICAgKF9fZm9yY2UgdHlwZSAqKShfX3Brbl9kc3QpLCBfX3Brbl9lcnIsIEspO1x0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XFxcbiBcdF9fcGtuX2VycjpcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMCk7XHRcdFx0XHRcdFx0XHRcXFxuLX0gd2hpbGUoMClcbit9IHdoaWxlICgwKVxuK1xuKy8qXG4rICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXG4rICogX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKS4gQXMgYGRzdGAgYW5kIGBzcmNgIG1heSBjb250YWluIGJsb2NraW5nXG4rICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG4rICovXG4rI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4rZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX2xhYmVsX18gX19wa25fdGNvX2VycjtcdFx0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oZHN0KSBfX3Brbl90Y29fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3Rjb19zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4rXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fcGtuX3Rjb19kc3QsIF9fcGtuX3Rjb19zcmMsIHR5cGUsXHRcXFxuK1x0XHRcdFx0ICAgICBfX3Brbl90Y29fZXJyKTtcdFx0XHRcXFxuK1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuK19fcGtuX3Rjb19lcnI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4rLypcbisgKiBBIGNvbnRleHQgc3dpdGNoIHJlLWVuYWJsZXMgdGFnIGNoZWNraW5nLCBoZW5jZSB0aGUgbm8tc2NoZWR1bGluZ1xuKyAqIHJlcXVpcmVtZW50IGZvciBhIGJhcmUgbm9mYXVsdCByZWdpb24uXG4rICovXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpXG4rI2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKClcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTtcbiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbilcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5pbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5AQCAtNjM3LDYgKzYzNywyNiBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcXFxuIFxuICNlbmRpZiAgLyogIV9fZ2V0X2tlcm5lbF9ub2ZhdWx0ICovXG4gXG4rLypcbisgKiBBcmNoaXRlY3R1cmVzIG1heSB1c2UgdGhlIGJlZ2luL2VuZCBob29rcyB0byBlc3RhYmxpc2ggc3RhdGUgc2hhcmVkIGJ5IGFcbisgKiBzZXF1ZW5jZSBvZiBiYXJlIG5vZmF1bHQgYWNjZXNzZXMuIEV2ZXJ5IHBhdGggb3V0IG9mIHRoZSByZWdpb24gbXVzdCBjYWxsXG4rICogdGhlIGVuZCBob29rLiBUaGUgcmVnaW9uLCBpbmNsdWRpbmcgZXhwcmVzc2lvbnMgcGFzc2VkIHRvIHRoZSBiYXJlXG4rICogYWNjZXNzb3JzLCBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlci5cbisgKi9cbisjaWZuZGVmIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVcbisjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0XG4rI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlXHRfX3B1dF9rZXJuZWxfbm9mYXVsdFxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVx0ZG8ge30gd2hpbGUgKDApXG4rI2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdGRvIHt9IHdoaWxlICgwKVxuKyNlbmRpZlxuK1xuK0RFRklORV9MT0NLX0dVQVJEXzAoX19rZXJuZWxfbm9mYXVsdF9iYXJlLFxuK1x0XHQgICAgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCksXG4rXHRcdCAgICBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkpXG4rXG4gLyoqXG4gICogZ2V0X2tlcm5lbF9ub2ZhdWx0KCk6IHNhZmVseSBhdHRlbXB0IHRvIHJlYWQgZnJvbSBhIGxvY2F0aW9uXG4gICogQHZhbDogcmVhZCBpbnRvIHRoaXMgdmFyaWFibGVcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5mOGM1NTcxNjE1ODRlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzcyNiw3ICszNzI2LDggQEAgX19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXG4gICpcbiAgKiBTaW5jZSBzdHJpbmdzIGFyZSBub3QgbmVjZXNzYXJpbHkgJU5VTC10ZXJtaW5hdGVkLCB3ZSBjYW5ub3QgZGlyZWN0bHkgY2FsbFxuICAqIGluLWtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsIHdlIG9wZW4tY29kZSB0aGUgaW1wbGVtZW50YXRpb25zIHVzaW5nXG4tICogX19nZXRfa2VybmVsX25vZmF1bHQgaW5zdGVhZCBvZiBwbGFpbiBkZXJlZmVyZW5jZSB0byBtYWtlIHRoZW0gc2FmZS5cbisgKiBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlIHVuZGVyIGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKSB0byBtYWtlIHRoZW1cbisgKiBzYWZlLlxuICAqL1xuIFxuIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxuQEAgLTM3MzgsMTEgKzM3MzksMTQgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNcbiBcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoczIsIDEpKSB7XG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFx0fVxuK1x0aWYgKCFsZW4pXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjMiwgczIsIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoaWdub3JlX2Nhc2UpIHtcbiBcdFx0XHRjMSA9IHRvbG93ZXIoYzEpO1xuIFx0XHRcdGMyID0gdG9sb3dlcihjMik7XG5AQCAtMzgzNywxMCArMzg0MSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jaHIoY29uc3QgY2hhciAqc19faWduLCBzaXplX3QgY291bnQsIGNoYXIgYylcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHRpZiAoIWNvdW50KVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gYylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0aWYgKHNjID09ICdcXDAnKVxuQEAgLTM4OTMsOCArMzkwMCw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY2hybnVsKGNvbnN0IGNoYXIgKnNfX2lnbiwgY2hhciBjKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChzYyA9PSAnXFwwJyB8fCBzYyA9PSBjKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRzX19pZ24rKztcbkBAIC0zOTI1LDggKzM5MzMsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnJjaHIoY29uc3QgY2hhciAqc19faWduLCBpbnQgYylcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gYylcbiBcdFx0XHRsYXN0ID0gaTtcbiBcdFx0aWYgKHNjID09ICdcXDAnKVxuQEAgLTM5NTYsMTAgKzM5NjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJubGVuKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50KVxuIFxuIFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbitcdGlmICghY291bnQpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoYyA9PSAnXFwwJylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0c19faWduKys7XG5AQCAtNDAwOCwxMiArNDAyMCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnNwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGNzID09ICdcXDAnKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y2EsIGFjY2VwdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XG4rXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjYSwgYWNjZXB0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoY3MgPT0gY2EgfHwgY2EgPT0gJ1xcMCcpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQwNTIsMTIgKzQwNjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXG4gXHR9XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoY3MgPT0gJ1xcMCcpXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqKyspIHtcbi1cdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjciwgcmVqZWN0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNyLCByZWplY3RfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRcdGlmIChjcyA9PSBjciB8fCBjciA9PSAnXFwwJylcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDA4NCw5ICs0MDk4LDEwIEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXG4gXHR9XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4gXHRcdGZvciAoaiA9IDA7IGkgKyBqIFx1MDAzYz0gbGVuIFx1MDAyNlx1MDAyNiBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzIsIHMyICsgaiwgY2hhciwgZXJyX291dCk7XG4rXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjMiwgczIgKyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoYzIgPT0gJ1xcMCcpXG4gXHRcdFx0XHRyZXR1cm4gaTtcbiBcdFx0XHQvKlxuQEAgLTQwOTYsNyArNDExMSw3IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgKyBqID09IGxlbilcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBzMSArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzEsIHMxICsgaiwgY2hhciwgZXJyX291dCk7XG4gXG4gXHRcdFx0aWYgKGlnbm9yZV9jYXNlKSB7XG4gXHRcdFx0XHRjMSA9IHRvbG93ZXIoYzEpO1xuZGlmZiAtLWdpdCBhL21tL21hY2Nlc3MuYyBiL21tL21hY2Nlc3MuY1xuaW5kZXggNDg2NTU5ZDY4ODU4My4uODc0ODZiZjk4ZDE1YSAxMDA2NDRcbi0tLSBhL21tL21hY2Nlc3MuY1xuKysrIGIvbW0vbWFjY2Vzcy5jXG5AQCAtMTksNyArMTksNyBAQCBib29sIF9fd2VhayBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChjb25zdCB2b2lkICp1bnNhZmVfc3JjLFxuICAqL1xuICNkZWZpbmUgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVx0XFxcbiBcdHdoaWxlIChsZW4gXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcdFx0XHRcdFx0XFxcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1x0XFxcbiBcdFx0a21zYW5fY2hlY2tfbWVtb3J5KHNyYywgc2l6ZW9mKHR5cGUpKTtcdFx0XHRcXFxuIFx0XHRkc3QgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuIFx0XHRzcmMgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuQEAgLTM1LDI2ICszNSwyOSBAQCBsb25nIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG4gXG4gXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNyYywgc2l6ZSkpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4tXHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4rXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4rXHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4rXHRcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbitcdFx0XHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4rXHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDEpKVxuK1x0XHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcbitcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4rXHRcdH1cbitcdH1cbiBcdHJldHVybiAwO1xuIEVmYXVsdDpcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpO1xuIFxuICNkZWZpbmUgY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbClcdFxcXG4gXHR3aGlsZSAobGVuIFx1MDAzZT0gc2l6ZW9mKHR5cGUpKSB7XHRcdFx0XHRcdFxcXG4tXHRcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1x0XFxcbitcdFx0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGluc3RydW1lbnRfd3JpdGUoZHN0LCBzaXplb2YodHlwZSkpO1x0XHRcdFxcXG4gXHRcdGRzdCArPSBzaXplb2YodHlwZSk7XHRcdFx0XHRcdFxcXG4gXHRcdHNyYyArPSBzaXplb2YodHlwZSk7XHRcdFx0XHRcdFxcXG5AQCAtNjUsMjEgKzY4LDI1IEBAIGxvbmcgY29weV90b19rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDA7XG4gXG4rXHRpZiAoIXNpemUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSlcbiBcdFx0YWxpZ24gPSAodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylzcmM7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuLVx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbi1cdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbi1cdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuLVx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTtcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbitcdHNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHtcbitcdFx0c2NvcGVkX2d1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkge1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiA3KSlcbitcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbitcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAxKSlcbitcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuK1x0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4rXHRcdH1cbitcdH1cbiBcdHJldHVybiAwO1xuIEVmYXVsdDpcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbkBAIC05MiwxOCArOTksMTkgQEAgbG9uZyBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoY2hhciAqZHN0LCBjb25zdCB2b2lkICp1bnNhZmVfYWRkciwgbG9uZyBjb3VudClcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQodW5zYWZlX2FkZHIsIGNvdW50KSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0ZG8ge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdTgsIEVmYXVsdCk7XG4tXHRcdGRzdCsrO1xuLVx0XHRzcmMrKztcbi1cdH0gd2hpbGUgKGRzdFstMV0gXHUwMDI2XHUwMDI2IHNyYyAtIHVuc2FmZV9hZGRyIFx1MDAzYyBjb3VudCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4rXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4rXHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbitcdFx0XHRkbyB7XG4rXHRcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB1OCwgRWZhdWx0KTtcbitcdFx0XHRcdGRzdCsrO1xuK1x0XHRcdFx0c3JjKys7XG4rXHRcdFx0fSB3aGlsZSAoZHN0Wy0xXSBcdTAwMjZcdTAwMjYgc3JjIC0gdW5zYWZlX2FkZHIgXHUwMDNjIGNvdW50KTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0ZHN0Wy0xXSA9ICdcXDAnO1xuIFx0cmV0dXJuIHNyYyAtIHVuc2FmZV9hZGRyO1xuIEVmYXVsdDpcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdGRzdFswXSA9ICdcXDAnO1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6MjkuMjU2MjEwOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg1MTQwMDgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgTmV3IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCB1c2VzIHRoZW0gd2l0aGluIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSlgIGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgYW5kIGBtbS9tYWNjZXNzLmNgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgYWx0ZXJzIGhvdyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXJzIGFyZSBpbXBsZW1lbnRlZC4gSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBiZW5lZml0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIFRDTyBtYW5hZ2VtZW50IG9uIEFSTTY0IGJ5IHJlZHVjaW5nIG92ZXJoZWFkLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHdvcnRoIGZ1enppbmc/XCIgWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IEJQRiBoZWxwZXJzIGFuZCBtZW1vcnkgYWNjZXNzIG1lY2hhbmlzbXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQncyBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQgbWUgbGlzdCB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkOlxuKiAgIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgXG4qICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgXG4qICAgYHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGBcbiogICBgX19icGZfc3RybmNhc2VjbXBgXG4qICAgYGJwZl9zdHJuY2hyYFxuKiAgIGBicGZfc3RyY2hybnVsYFxuKiAgIGBicGZfc3RycmNocmBcbiogICBgYnBmX3N0cm5sZW5gXG4qICAgYGJwZl9zdHJzcG5gXG4qICAgYGJwZl9zdHJjc3BuYFxuKiAgIGBfX2JwZl9zdHJuc3RyYFxuXG5UaGVzZSBhcmUgYWxsIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSSBjYW4gc2VlIGNsZWFyIHBhdGhzIHRvIGZ1enppbmcgdGhlc2UgdG8gZXhwb3NlIGFueSBuZXcgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBUQ08gbWFuYWdlbWVudCBvcHRpbWl6YXRpb24uXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGUgRm9jdXNTeW1ib2xzIGZvciB0aGUgZnV6emVyLiBJIG5lZWQgdG8gbGlzdCB0aGVtIGFsbDpcblxuKiAgIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgXG4qICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgXG4qICAgYHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGBcbiogICBgYnBmX3N0cm5jaHJgXG4qICAgYGJwZl9zdHJjaHJudWxgXG4qICAgYGJwZl9zdHJyY2hyYFxuKiAgIGBicGZfc3RybmxlbmBcbiogICBgYnBmX3N0cnNwbmBcbiogICBgYnBmX3N0cmNzcG5gXG5cbkhtbSwgYF9fYnBmX3N0cm5jYXNlY21wYCBhbmQgYF9fYnBmX3N0cm5zdHJgIGFyZSBzdGF0aWMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGV5J3JlIGlubGluZWQgb3IgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgY2FsbCBgX19icGZfc3RybmNhc2VjbXBgIGFuZCBgX19icGZfc3RybnN0cmAuIFRoYXQgd2lsbCBtYWtlIHN1cmUgSSdtIGNhcHR1cmluZyBhbGwgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo0OTozOC4xMDc2MTQ1MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzI1MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX3N0cm5jYXNlY21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTM3MjA9X19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzMyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3MzM6c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzczNC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzc5PV9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc4MC17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc4MTpcXHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgZmFsc2UsIFhBVFRSX1NJWkVfTUFYKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzgyLX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTM3OTc9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc5OC17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc5OTpcXHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgWEFUVFJfU0laRV9NQVgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTM4MDAtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzgxNj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sIHNpemVfdCBsZW4pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzgxNy17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzgxODpcXHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgbGVuKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zODE5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6MzguMjE0MzQzNjg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NDE3MzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyBTdHJpbmcgQ29tcGFyaXNvbnMgaW4gQlBGKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHN0cmluZyBjb21wYXJpc29ucyBhcmUgaGFuZGxlZCBpbiBCUEYuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgYnBmX3N0cmNtcGAsIGBicGZfc3RyY2FzZWNtcGAsIGFuZCBgYnBmX3N0cm5jYXNlY21wYCBhbGwgc2VlbSB0byBmdW5uZWwgZG93biB0byBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbjogYF9fYnBmX3N0cm5jYXNlY21wYC4gVGhpcyBzdWdnZXN0cyBhIGxheWVyIG9mIGFic3RyYWN0aW9uLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgYW5kIG1ha2VzIHNlbnNlIGZvciBjb2RlIHJldXNlIGFuZCBwb3RlbnRpYWxseSBmb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBUaGUgY29yZSBzdHJpbmcgY29tcGFyaXNvbiwgZXNwZWNpYWxseSBjYXNlLWluc2Vuc2l0aXZlIHZlcnNpb25zLCBpcyBjbGVhcmx5IGNlbnRyYWxpemVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXItbGV2ZWwgY29tcGFyaXNvbiBpcyB3b3JraW5nLiBMZXQncyBtb3ZlIG9uIGFuZCBleGFtaW5lIGBfX2JwZl9zdHJuc3RyYCBuZXh0LiBJdCBzZWVtcyBsaWtlbHkgdGhhdCB0aGUgYF9fYnBmX3N0cm5jYXNlY21wYCB3b3VsZCBsaWtlbHkgdXRpbGl6ZSBzb21ldGhpbmcgbGlrZSB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6NDIuMDc4NTIwODIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTA3Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX3N0cm5zdHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9NDA1Nz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQwODgtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDA4OTpzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQwOTAtXFx0XFx0XFx0IGJvb2wgaWdub3JlX2Nhc2UpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MTUwPV9fYnBmX2tmdW5jIGludCBicGZfc3Ryc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDE1MS17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDE1MjpcXHRyZXR1cm4gX19icGZfc3RybnN0cihzMV9faWduLCBzMl9faWduLCBYQVRUUl9TSVpFX01BWCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxNTMtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE2OT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbilcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTcwLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MTcxOlxcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIFhBVFRSX1NJWkVfTUFYLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTcyLX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQxODg9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTkwLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MTkxOlxcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIGxlbiwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxOTItfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDIwOT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjExLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MjEyOlxcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIGxlbiwgdHJ1ZSk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIxMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjQyLjE2NTYzMzk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1ODY3MTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgU3RyaW5nIEhlbHBlciBhbmQgYG1hY2Nlc3NgIEZ1bmN0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIEJQRiBzdHJpbmcgZnVuY3Rpb25zLiBSaWdodCwgdGhvc2UgaGVscGVycyBhcmU6IGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYGJwZl9zdHJuY2FzZWNtcGAsIGBicGZfc3Ryc3RyYCwgYGJwZl9zdHJjYXNlc3RyYCwgYGJwZl9zdHJuc3RyYCwgYGJwZl9zdHJuY2FzZXN0cmAsIGBicGZfc3RybmNocmAsIGBicGZfc3RyY2hybnVsYCwgYGJwZl9zdHJyY2hyYCwgYGJwZl9zdHJubGVuYCwgYGJwZl9zdHJzcG5gLCBhbmQgYGJwZl9zdHJjc3BuYC4gQW5kIHRoZW4sIG9uIHRoZSBtZW1vcnkgYWNjZXNzIHNpZGUsIHdlIGhhdmUgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLlxuXG5Ob3csIGJlZm9yZSBJIHN0YXJ0IHdyaXRpbmcgYW55dGhpbmcgdXNpbmcgdGhlc2UsIEkgbmVlZCB0byB0aGluayBhYm91dCBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZS4gSSBrbm93IEJQRiBoZWxwZXJzIGdlbmVyYWxseSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCB0aGVzZSBkYXlzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEkgdGhpbmsgdGhlIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgYnV0IEknbGwgbmVlZCB0byB3YXRjaCBmb3IgdGhvc2Ugd2hlbiB0cmFjaW5nIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGJlaGF2aW5nIGNvcnJlY3RseS5cblxuQWxyaWdodCwgdGhlIG1vc3QgcmVsaWFibGUgdGhpbmcgdG8gZG8gaXMgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIHRob3NlIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zLiBCZXR0ZXIgdG8gYmUgc3VyZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6NDguMjI0MzA3OTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjI1MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJjbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MzczMz1zdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjYtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc2NzogKiBicGZfc3RyY21wIC0gQ29tcGFyZSB0d28gc3RyaW5nc1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjgtICogQHMxX19pZ246IE9uZSBzdHJpbmdcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NzgtICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc3OTpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3ODAte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2ND1CVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY21wKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZWNtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjQ4LjMwOTUzNjQ5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3OTAyMTUyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyBCUEYgSGVscGVyIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCBkb24ndCBzZWVtIHRvIGJlIGd1YXJkZWQgYnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYC4gVGhhdCdzIGEgYml0IHVudXN1YWwsIG5vcm1hbGx5IEknZCBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBjaGVjayBhcm91bmQgdGhpcywgYnV0IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIFRoZSBmYWN0IHRoYXQgdGhlIGVudGlyZSBmaWxlIGV4aXN0cyB3aXRoaW4gYSBCUEYgY29udGV4dCBtYWtlcyBtZSBhc3N1bWUgaXQncyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LCBJIHNob3VsZCB2ZXJpZnksIGJ1dCBJJ20gdGhpbmtpbmcgSSdsbCBxdWlja2x5IHNlZSB0aGF0IHRoZSBNYWtlZmlsZSBkaWN0YXRlcyB0aGlzIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZWlyIGluY2x1c2lvbiBiYXNlZCBvbiB0aGF0IGNvbmZpZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6NTQuMDk5NzU0NTI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDMxOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzI6XFx0ZW5kaWZcXG4gIDMzOlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzNTpcXHRlbmRpZlxcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICAzNzpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgMzk6XFx0ZW5kaWZcXG4gIDQwOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ1OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0NjpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDQ3OlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuICA0ODpcXHQjIGJ0Zl9lbmNvZGVyX19hZGRfc2F2ZWRfZnVuYygpIGJ5IGtlZXBpbmcgdGhlIGZpcnN0IGluc3RhbmNlIHNlZW4uIFdlXFxuICA0OTpcXHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXFxuICA1MDpcXHQjIG92ZXIgdGhvc2Ugd2l0aGluIGJwZl9sc20uby4gSGF2aW5nIGJwZl9sc21fcHJvdG8ubyBwcmVjZWRlXFxuICA1MTpcXHQjIGJwZl9sc20ubyBlbnN1cmVzIGl0cyBEV0FSRiBDVSBpcyBwcm9jZXNzZWQgZWFybHksIGZvcmNpbmcgdGhlXFxuICA1MjpcXHQjIGdlbmVyYXRlZCBCVEYgdG8gY29udGFpbiB0aGUgb3ZlcnJpZGVzLlxcbiAgNTM6XFx0I1xcbiAgNTQ6XFx0IyBOb3RhYmx5LCB0aGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpbHN0IHRoZSBkZWR1cGxpY2F0aW9uXFxuICA1NTpcXHQjIHNlbWFudGljcyB3aXRoaW4gcGFob2xlIGFyZSByZXZpc2l0ZWQgYWNjb3JkaW5nbHkuXFxuICA1NjpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX0gKz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ub1xcbiAgNTc6XFx0ZW5kaWZcXG4gIDU4OlxcdGlmbmVxICgkKENPTkZJR19DUllQVE8pLClcXG4gIDU5OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cXG4gIDYwOlxcdGVuZGlmXFxuICA2MTpcXHRvYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxuICA2MjpcXHRcXG4gIDYzOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG4gIDY0OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcbiAgNjU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfcmVsb2NhdGUub1xcbiAgNjY6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrbWVtX2NhY2hlX2l0ZXIub1xcbiAgNjc6XFx0aWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXFxuICA2ODpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRtYWJ1Zl9pdGVyLm9cXG4gIDY5OlxcdGVuZGlmXFxuICA3MDpcXHRcXG4gIDcxOlxcdENGTEFHU19SRU1PVkVfcGVyY3B1X2ZyZWVsaXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDcyOlxcdENGTEFHU19SRU1PVkVfYnBmX2xydV9saXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDczOlxcdENGTEFHU19SRU1PVkVfcXVldWVfc3RhY2tfbWFwcy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3NDpcXHRDRkxBR1NfUkVNT1ZFX2xwbV90cmllLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDc1OlxcdENGTEFHU19SRU1PVkVfcmluZ2J1Zi5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3NjpcXHRDRkxBR1NfUkVNT1ZFX3Jxc3BpbmxvY2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo0OTo1NC4wOTk4NjgwNTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMzQyMDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqSW52ZXN0aWdhdGluZyBlQlBGIEhlbHBlciBBdmFpbGFiaWxpdHkgYW5kIE1lbW9yeSBBY2Nlc3MgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgaGVscGVycy5vYCBpcyBpbmRlZWQgY29uZGl0aW9uYWwgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuIEdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24gcmVnYXJkaW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhvc2UgZUJQRiBoZWxwZXIgZnVuY3Rpb25zLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB0cmFjayBkb3duIHRoaXMgaXNzdWUgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUga2VybmVsIGRlZmluZXMgYG1hY2Nlc3Mub2AuIE15IGd1dCB0ZWxscyBtZSBpdCB3aWxsIGJlIGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHR5cGljYWxseSByZXNpZGVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gYW5kIGdldCB0aGUgcmVsZXZhbnQgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjU3LjgwMzI5MDg3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG1lbW9yeSBtYW5hZ2VyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRLQVNBTl9TQU5JVElaRV9zbGFiX2NvbW1vbi5vIDo9IG5cXG4gICA3OlxcdEtBU0FOX1NBTklUSVpFX3NsdWIubyA6PSBuXFxuICAgODpcXHRLQVNBTl9TQU5JVElaRV9rbWVtbGVhay5vIDo9IG5cXG4gICA5OlxcdEtDU0FOX1NBTklUSVpFX2ttZW1sZWFrLm8gOj0gblxcbiAgMTA6XFx0XFxuICAxMTpcXHQjIFRoZXNlIHByb2R1Y2UgZnJlcXVlbnQgZGF0YSByYWNlIHJlcG9ydHM6IG1vc3Qgb2YgdGhlbSBhcmUgZHVlIHRvIHJhY2VzIG9uXFxuICAxMjpcXHQjIHRoZSBzYW1lIHdvcmQgYnV0IGFjY2Vzc2VzIHRvIGRpZmZlcmVudCBiaXRzIG9mIHRoYXQgd29yZC4gUmUtZW5hYmxlIEtDU0FOXFxuICAxMzpcXHQjIGZvciB0aGVzZSB3aGVuIHdlIGhhdmUgbW9yZSBjb25zZW5zdXMgb24gd2hhdCB0byBkbyBhYm91dCB0aGVtLlxcbiAgMTQ6XFx0S0NTQU5fU0FOSVRJWkVfc2xhYl9jb21tb24ubyA6PSBuXFxuICAxNTpcXHRLQ1NBTl9TQU5JVElaRV9zbHViLm8gOj0gblxcbiAgMTY6XFx0S0NTQU5fU0FOSVRJWkVfcGFnZV9hbGxvYy5vIDo9IG5cXG4gIDE3OlxcdCMgQnV0IGVuYWJsZSBleHBsaWNpdCBpbnN0cnVtZW50YXRpb24gZm9yIG1lbW9yeSBiYXJyaWVycy5cXG4gIDE4OlxcdEtDU0FOX0lOU1RSVU1FTlRfQkFSUklFUlMgOj0geVxcbiAgMTk6XFx0XFxuICAyMDpcXHQjIFRoZXNlIGZpbGVzIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHRoZXkgcHJvZHVjZSBub24taW50ZXJlc3RpbmcgYW5kL29yXFxuICAyMTpcXHQjIGZsYWt5IGNvdmVyYWdlIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb2Ygc3lzY2FsbCBpbnB1dHMuIEUuZy4gc2xhYiBpcyBvdXQgb2ZcXG4gIDIyOlxcdCMgZnJlZSBwYWdlcywgb3IgYSB0YXNrIGlzIG1pZ3JhdGVkIGJldHdlZW4gbm9kZXMuXFxuICAyMzpcXHRLQ09WX0lOU1RSVU1FTlRfc2xhYl9jb21tb24ubyA6PSBuXFxuICAyNDpcXHRLQ09WX0lOU1RSVU1FTlRfc2x1Yi5vIDo9IG5cXG4gIDI1OlxcdEtDT1ZfSU5TVFJVTUVOVF9wYWdlX2FsbG9jLm8gOj0gblxcbiAgMjY6XFx0S0NPVl9JTlNUUlVNRU5UX2RlYnVnLXBhZ2VhbGxvYy5vIDo9IG5cXG4gIDI3OlxcdEtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG4gIDI4OlxcdEtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbiAgMjk6XFx0S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuICAzMDpcXHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbiAgMzE6XFx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cXG4gIDMyOlxcdEtDT1ZfSU5TVFJVTUVOVF9mYWlsc2xhYi5vIDo9IG5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Q0ZMQUdTX2luaXQtbW0ubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDM1OlxcdFxcbiAgMzY6XFx0bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxuICAzNzpcXHRtbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG4gIDQwOlxcdFxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXG4gIDQzOlxcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXFxuICA0NDpcXHRtbXUtJChDT05GSUdfTU1VKVxcdCs9IHByb2Nlc3Nfdm1fYWNjZXNzLm9cXG4gIDQ1OlxcdGVuZGlmXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGlmZGVmIENPTkZJR182NEJJVFxcbiAgNDg6XFx0bW11LSQoQ09ORklHX01NVSlcXHQrPSBtc2VhbC5vXFxuICA0OTpcXHRlbmRpZlxcbiAgNTA6XFx0XFxuICA1MTpcXHRvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbiAgNTI6XFx0XFx0XFx0XFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcXFxcbiAgNTM6XFx0XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxcXFxuICA1NDpcXHRcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4gIDU1OlxcdFxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxuICA1ODpcXHRcXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcXG4gIDU5OlxcdFxcbiAgNjA6XFx0IyBHaXZlICdwYWdlX2FsbG9jJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2MTpcXHRwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXFxuICA2MjpcXHRwYWdlLWFsbG9jLSQoQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IpICs9IHNodWZmbGUub1xcbiAgNjM6XFx0XFxuICA2NDpcXHQjIEdpdmUgJ21lbW9yeV9ob3RwbHVnJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2NTpcXHRtZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcub1xcbiAgNjY6XFx0XFxuICA2NzpcXHRvYmoteSArPSBwYWdlLWFsbG9jLm9cXG4gIDY4OlxcdG9iai15ICs9IHBhZ2VfZnJhZ19jYWNoZS5vXFxuICA2OTpcXHRvYmoteSArPSBpbml0LW1tLm9cXG4gIDcwOlxcdG9iai15ICs9IG1lbWJsb2NrLm9cXG4gIDcxOlxcdG9iai15ICs9ICQobWVtb3J5LWhvdHBsdWcteSlcXG4gIDcyOlxcdG9iai15ICs9IHNsdWIub1xcbiAgNzM6XFx0XFxuICA3NDpcXHRpZmRlZiBDT05GSUdfTU1VXFxuICA3NTpcXHRcXHRvYmotJChDT05GSUdfQURWSVNFX1NZU0NBTExTKVxcdCs9IG1hZHZpc2Uub1xcbiAgNzY6XFx0ZW5kaWZcXG4gIDc3OlxcdFxcbiAgNzg6XFx0b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxuICA3OTpcXHRvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbiAgODA6XFx0b2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuICA4MTpcXHRvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbiAgODI6XFx0aWZkZWYgQ09ORklHX0NNQVxcbiAgODM6XFx0b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHQrPSBodWdldGxiX2NtYS5vXFxuICA4NDpcXHRlbmRpZlxcbiAgODU6XFx0b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxuICA4NjpcXHRvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG4gIDg3OlxcdG9iai0kKENPTkZJR19TUEFSU0VNRU0pXFx0Kz0gc3BhcnNlLm9cXG4gIDg4OlxcdG9iai0kKENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCkgKz0gc3BhcnNlLXZtZW1tYXAub1xcbiAgODk6XFx0b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm9cXG4gIDkwOlxcdG9iai0kKENPTkZJR19LU00pICs9IGtzbS5vXFxuICA5MTpcXHRvYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IHBhZ2VfcG9pc29uLm9cXG4gIDkyOlxcdG9iai0kKENPTkZJR19LQVNBTilcXHQrPSBrYXNhbi9cXG4gIDkzOlxcdG9iai0kKENPTkZJR19LRkVOQ0UpICs9IGtmZW5jZS9cXG4gIDk0OlxcdG9iai0kKENPTkZJR19LTVNBTilcXHQrPSBrbXNhbi9cXG4gIDk1OlxcdG9iai0kKENPTkZJR19GQUlMU0xBQikgKz0gZmFpbHNsYWIub1xcbiAgOTY6XFx0b2JqLSQoQ09ORklHX0ZBSUxfUEFHRV9BTExPQykgKz0gZmFpbF9wYWdlX2FsbG9jLm9cXG4gIDk3OlxcdG9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbiAgOTg6XFx0b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxuICA5OTpcXHRvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG4gMTAwOlxcdG9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjU3LjgwMzQxNzQ5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ2NTIzMzI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYG1hY2Nlc3Mub2AgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGBtYWNjZXNzLm9gIGlzIGRlZmluaXRlbHkgcGFydCBvZiBgb2JqLXlgLCBtZWFuaW5nIGl0J3MgYWx3YXlzIGluY2x1ZGVkLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBpdCwgcGFydGljdWxhcmx5IHRoZXNlIHN0cmluZyBmdW5jdGlvbnM6IGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBhbmQgYWxsIHRob3NlIGBicGZfYCBzdHJpbmcgY29tcGFyaXNvbiBhbmQgc2VhcmNoIGZ1bmN0aW9ucyBsaWtlIGBicGZfc3RyY21wYCwgYGJwZl9zdHJzdHJgLCBhbmQgdGhlaXIgdmFyaWF0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSB0aGF0IGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYGJwZl9zdHJuY2FzZWNtcGAgYXJlIGFjdHVhbGx5IGp1c3Qgd3JhcHBlcnMgYXJvdW5kIGBfX2JwZl9zdHJuY2FzZWNtcGAuIEFuZCB0aGUgc2FtZSBpcyB0cnVlIGZvciBgYnBmX3N0cnN0cmAgYW5kIGZyaWVuZHMsIHdoaWNoIHdyYXAgYF9fYnBmX3N0cm5zdHJgLiBTaW5jZSB0aGUgcmVhbCBsb2dpYyBsaXZlcyBpbiB0aG9zZSBgX19icGZfYCBmdW5jdGlvbnMgYW5kIHRoZXkgYXJlIHN0YXRpYywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXkgYXJlIGlubGluZWQuIEl0J3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhpcy5cblxuQnV0IGxldCBtZSBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBBcmUgdGhvc2UgYGJwZl9gIGZ1bmN0aW9ucyBhY3R1YWxseSBleHBvcnRlZCwgb3IgYXJlIHRoZXkganVzdCBCUEYga2Z1bmNzPyBZZXMsIHRoZXkncmUgYF9fYnBmX2tmdW5jYC4gU28sIHRoZXkncmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSBCUEYgcHJvZ3JhbXMuXG5cblRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIG9wdGltaXphdGlvbiBhcm91bmQgVENPIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl04oCZcyBzdXBwb3NlZCB0byBwZXJmb3JtIHRoZSBUQ08gY2hlY2sgb25jZSBwZXIgbG9vcCwgaW5zdGVhZCBvZiBvbiBldmVyeSBieXRlL3dvcmQgYWNjZXNzLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRob3NlIGFsd2F5cyBtYWtlIG1lIGEgbGl0dGxlIG5lcnZvdXMuIFRoZXJlIGNvdWxkIGJlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbG9vcCBnZXRzIGJsb2NrZWQvc2NoZWR1bGVkICh3aGljaCBzaG91bGRuJ3QgaGFwcGVuLCBidXQgeW91IG5ldmVyIGtub3cpLCBvciBpZiB0aGUgZ3VhcmQgaXNuJ3QgcHJvcGVybHkgcGxhY2VkLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2FmZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbi4gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IG9uZSwgc28gSSB3aWxsIGNoZWNrLiBgbWFjY2Vzcy5jYCBpcyBhbHdheXMgY29tcGlsZWQuIGBoZWxwZXJzLmNgIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAuXG5cbkFoLCBoZXJlIHdlIGdvLi4uIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYC4gT2theSwgc28gdGhpcyBpcyBBUk02NC1zcGVjaWZpYywgYnV0IHRoZXJlIGFyZSBmYWxsYmFja3MgaW4gdGhlIGdlbmVyaWMgYGluY2x1ZGUvbGludXgvdWFjY2Vzcy5oYC4gV2hpY2ggbWVhbnMgdGhpcyBzaG91bGQgYmUgdGVzdGFibGUgb24gYW55IGFyY2hpdGVjdHVyZSwgYWx0aG91Z2ggdGhlIHNwZWNpZmljIEFSTTY0IG9wdGltaXphdGlvbiB3aWxsIG9ubHkgYmUgZGlyZWN0bHkgdGVzdGVkIG9uIEFSTTY0LiBTeXprYWxsZXIgc2hvdWxkIHBpY2sgdGhpcyB1cCBvbiBBUk02NCBpbnN0YW5jZXMsIHNvIHRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHByZXBhcmUgdGhlIHNldC1yZXN1bHRzIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTc0LCJPdXRwdXRUb2tlbnMiOjI4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjUwOjA5LjI2ODY1MzY3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjY4NDgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRcIixcbiAgICBcImNvcHlfdG9fa2VybmVsX25vZmF1bHRcIixcbiAgICBcInN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwiYnBmX3N0cmNtcFwiLFxuICAgIFwiYnBmX3N0cmNhc2VjbXBcIixcbiAgICBcImJwZl9zdHJuY2FzZWNtcFwiLFxuICAgIFwiYnBmX3N0cnN0clwiLFxuICAgIFwiYnBmX3N0cmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuc3RyXCIsXG4gICAgXCJicGZfc3RybmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuY2hyXCIsXG4gICAgXCJicGZfc3RyY2hybnVsXCIsXG4gICAgXCJicGZfc3RycmNoclwiLFxuICAgIFwiYnBmX3N0cm5sZW5cIixcbiAgICBcImJwZl9zdHJzcG5cIixcbiAgICBcImJwZl9zdHJjc3BuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBvcHRpbWl6ZSBUQ08gKFRhZyBDaGVjayBPdmVycmlkZSkgbWFuYWdlbWVudCBvbiBBUk02NCwgYW5kIHVwZGF0ZXMgYG1hY2Nlc3MuY2AgYW5kIEJQRiBzdHJpbmcgaGVscGVycyB0byB1c2UgdGhlbSB1bmRlciBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IGFjY2VzcyByb3V0aW5lcyBhbmQgQlBGIGhlbHBlcnMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGlmIHRoZSBub2ZhdWx0IHJlZ2lvbnMgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwiY29weV90b19rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwic3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0XCIsXG4gICAgXCJicGZfc3RyY21wXCIsXG4gICAgXCJicGZfc3RyY2FzZWNtcFwiLFxuICAgIFwiYnBmX3N0cm5jYXNlY21wXCIsXG4gICAgXCJicGZfc3Ryc3RyXCIsXG4gICAgXCJicGZfc3RyY2FzZXN0clwiLFxuICAgIFwiYnBmX3N0cm5zdHJcIixcbiAgICBcImJwZl9zdHJuY2FzZXN0clwiLFxuICAgIFwiYnBmX3N0cm5jaHJcIixcbiAgICBcImJwZl9zdHJjaHJudWxcIixcbiAgICBcImJwZl9zdHJyY2hyXCIsXG4gICAgXCJicGZfc3RybmxlblwiLFxuICAgIFwiYnBmX3N0cnNwblwiLFxuICAgIFwiYnBmX3N0cmNzcG5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo1MDowOS40MTUzNDUzMjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTEwNzY1Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NTA6MDkuNDE1ODAzMDM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNTEwMzA0NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zIHRvIG9wdGltaXplIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50IG9uIEFSTTY0LiBJdCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gKGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpYCksIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiB0b2dnbGluZyBUQ08gb24gZXZlcnkgbWVtb3J5IGFjY2VzcyBpbnNpZGUgbG9vcHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA1MTYwMzRiYmRhY2FiOGIyYjY2NDRkOWI4YTQwYWI2M2RhMjJlZTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxOTo0OToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDlmNWJkOWM2OWMyNDkuLjFhMTRlYjJhNTFkY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbkBAIC0yNzAsMjggKzI3MCw0MyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAjZGVmaW5lIGdldF91c2VyXHRfX2dldF91c2VyXG4gXG4gLypcbi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbisgKiBOb2ZhdWx0IGxvYWQgd2l0aG91dCBUQ08gbWFuYWdlbWVudCBmb3IgdXNlIGluc2lkZSBhXG4rICogX19iZWdpbi9fX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkgcmVnaW9uLlxuICAqL1xuLSNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuKyNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhkc3QpIF9fZ2tuX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oc3JjKSBfX2drbl9zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4gXHRkbyB7IFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRfX2xhYmVsX18gX19na25fbGFiZWw7XHRcdFx0XHRcdFxcXG4tXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0X19yYXdfZ2V0X21lbShcImxkclwiLCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLFx0XHRcXFxuIFx0XHQgICAgICAoX19mb3JjZSB0eXBlICopKF9fZ2tuX3NyYyksIF9fZ2tuX2xhYmVsLCBLKTtcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX2drbl9sYWJlbDpcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMCk7XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4rLypcbisgKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbisgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsXG4rICogZXZhbHVhdGUgdGhlbSBiZWZvcmUgb3ZlcnJpZGluZyBUQ08uXG4rICovXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4rZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX2xhYmVsX18gX19na25fdGNvX2VycjtcdFx0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oZHN0KSBfX2drbl90Y29fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhzcmMpIF9fZ2tuX3Rjb19zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4rXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fZ2tuX3Rjb19kc3QsIF9fZ2tuX3Rjb19zcmMsIHR5cGUsXHRcXFxuK1x0XHRcdFx0ICAgICBfX2drbl90Y29fZXJyKTtcdFx0XHRcXFxuK1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuK19fZ2tuX3Rjb19lcnI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4gI2RlZmluZSBfX3B1dF9tZW1fYXNtKHN0b3JlLCByZWcsIHgsIGFkZHIsIGxhYmVsLCB0eXBlKVx0XHRcdFxcXG4gXHRhc20gZ290byhcdFx0XHRcdFx0XHRcdFxcXG4gXHRcIjE6XHRcIiBzdG9yZSBcIlx0XCIgcmVnIFwiMCwgWyUxXVxcblwiXHRcdFx0XFxcbkBAIC0zNjYsMjggKzM4MSw0OCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZGVmaW5lIHB1dF91c2VyXHRfX3B1dF91c2VyXG4gXG4tLypcbi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbi0gKi9cbi0jZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFx0XFxcbisvKiBOb2ZhdWx0IHN0b3JlIHdpdGhvdXQgVENPIG1hbmFnZW1lbnQ7IHNlZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlLiAqL1xuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhkc3QpIF9fcGtuX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oc3JjKSBfX3Brbl9zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0X19sYWJlbF9fIF9fcGtuX2VycjtcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0X19yYXdfcHV0X21lbShcInN0clwiLCAqKCh0eXBlICopKF9fcGtuX3NyYykpLFx0XHRcXFxuIFx0XHRcdCAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19wa25fZHN0KSwgX19wa25fZXJyLCBLKTtcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3Brbl9lcnI6XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XFxcbiBcdH0gd2hpbGUgKDApO1x0XHRcdFx0XHRcdFx0XFxcbi19IHdoaWxlKDApXG4rfSB3aGlsZSAoMClcbitcbisvKlxuKyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuKyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuKyAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuKyAqL1xuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0X19sYWJlbF9fIF9fcGtuX3Rjb19lcnI7XHRcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKGRzdCkgX19wa25fdGNvX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oc3JjKSBfX3Brbl90Y29fc3JjID0gKHNyYyk7XHRcdFx0XHRcXFxuK1x0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShfX3Brbl90Y29fZHN0LCBfX3Brbl90Y29fc3JjLCB0eXBlLFx0XFxcbitcdFx0XHRcdCAgICAgX19wa25fdGNvX2Vycik7XHRcdFx0XFxcbitcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbitfX3Brbl90Y29fZXJyOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFx0XFxcbit9IHdoaWxlICgwKVxuK1xuKy8qXG4rICogQSBjb250ZXh0IHN3aXRjaCByZS1lbmFibGVzIHRhZyBjaGVja2luZywgaGVuY2UgdGhlIG5vLXNjaGVkdWxpbmdcbisgKiByZXF1aXJlbWVudCBmb3IgYSBiYXJlIG5vZmF1bHQgcmVnaW9uLlxuKyAqL1xuKyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKVxuKyNkZWZpbmUgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fYXJjaF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7XG4gI2RlZmluZSByYXdfY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pXHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmggYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuaW5kZXggZWRkYmJiNjVjY2M0Zi4uYjI1ZTc3OGRkYzM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuQEAgLTYzNyw2ICs2MzcsMjYgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZW5kaWYgIC8qICFfX2dldF9rZXJuZWxfbm9mYXVsdCAqL1xuIFxuKy8qXG4rICogQXJjaGl0ZWN0dXJlcyBtYXkgdXNlIHRoZSBiZWdpbi9lbmQgaG9va3MgdG8gZXN0YWJsaXNoIHN0YXRlIHNoYXJlZCBieSBhXG4rICogc2VxdWVuY2Ugb2YgYmFyZSBub2ZhdWx0IGFjY2Vzc2VzLiBFdmVyeSBwYXRoIG91dCBvZiB0aGUgcmVnaW9uIG11c3QgY2FsbFxuKyAqIHRoZSBlbmQgaG9vay4gVGhlIHJlZ2lvbiwgaW5jbHVkaW5nIGV4cHJlc3Npb25zIHBhc3NlZCB0byB0aGUgYmFyZVxuKyAqIGFjY2Vzc29ycywgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIuXG4rICovXG4rI2lmbmRlZiBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlXHRfX2dldF9rZXJuZWxfbm9mYXVsdFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZVx0X19wdXRfa2VybmVsX25vZmF1bHRcbisjZW5kaWZcbitcbisjaWZuZGVmIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZVxuKyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdGRvIHt9IHdoaWxlICgwKVxuKyNkZWZpbmUgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpXHRkbyB7fSB3aGlsZSAoMClcbisjZW5kaWZcbitcbitERUZJTkVfTE9DS19HVUFSRF8wKF9fa2VybmVsX25vZmF1bHRfYmFyZSxcbitcdFx0ICAgIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpLFxuK1x0XHQgICAgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpKVxuK1xuIC8qKlxuICAqIGdldF9rZXJuZWxfbm9mYXVsdCgpOiBzYWZlbHkgYXR0ZW1wdCB0byByZWFkIGZyb20gYSBsb2NhdGlvblxuICAqIEB2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjNjYzVjOGZjODc1Ni4uZjhjNTU3MTYxNTg0ZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTM3MjYsNyArMzcyNiw4IEBAIF9fYnBmX2tmdW5jIHZvaWQgX19icGZfdHJhcCh2b2lkKVxuICAqXG4gICogU2luY2Ugc3RyaW5ncyBhcmUgbm90IG5lY2Vzc2FyaWx5ICVOVUwtdGVybWluYXRlZCwgd2UgY2Fubm90IGRpcmVjdGx5IGNhbGxcbiAgKiBpbi1rZXJuZWwgaW1wbGVtZW50YXRpb25zLiBJbnN0ZWFkLCB3ZSBvcGVuLWNvZGUgdGhlIGltcGxlbWVudGF0aW9ucyB1c2luZ1xuLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuXG4rICogX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSB1bmRlciBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCkgdG8gbWFrZSB0aGVtXG4rICogc2FmZS5cbiAgKi9cbiBcbiBzdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbilcbkBAIC0zNzM4LDExICszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzXG4gXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHMyLCAxKSkge1xuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbiBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjMSwgczEsIGNoYXIsIGVycl9vdXQpO1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjMiwgczIsIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGlnbm9yZV9jYXNlKSB7XG4gXHRcdFx0YzEgPSB0b2xvd2VyKGMxKTtcbiBcdFx0XHRjMiA9IHRvbG93ZXIoYzIpO1xuQEAgLTM4MzcsMTAgKzM4NDEsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJuY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50LCBjaGFyIGMpXG4gXG4gXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0aWYgKCFjb3VudClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudCBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKHNjID09IGMpXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdGlmIChzYyA9PSAnXFwwJylcbkBAIC0zODkzLDggKzM5MDAsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNocm51bChjb25zdCBjaGFyICpzX19pZ24sIGNoYXIgYylcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gJ1xcMCcgfHwgc2MgPT0gYylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0c19faWduKys7XG5AQCAtMzkyNSw4ICszOTMzLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJyY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgaW50IGMpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKHNjID09IGMpXG4gXHRcdFx0bGFzdCA9IGk7XG4gXHRcdGlmIChzYyA9PSAnXFwwJylcbkBAIC0zOTU2LDEwICszOTY1LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3Rybmxlbihjb25zdCBjaGFyICpzX19pZ24sIHNpemVfdCBjb3VudClcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHRpZiAoIWNvdW50KVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGMgPT0gJ1xcMCcpXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdHNfX2lnbisrO1xuQEAgLTQwMDgsMTIgKzQwMjAsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbiBcdH1cbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChjcyA9PSAnXFwwJylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y2EsIGFjY2VwdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XG4gXHRcdFx0aWYgKGNzID09IGNhIHx8IGNhID09ICdcXDAnKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC00MDUyLDEyICs0MDY1LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGNzID09ICdcXDAnKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3IsIHJlamVjdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XG4rXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjciwgcmVqZWN0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoY3MgPT0gY3IgfHwgY3IgPT0gJ1xcMCcpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQwODQsOSArNDA5OCwxMCBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuIFx0XHRmb3IgKGogPSAwOyBpICsgaiBcdTAwM2M9IGxlbiBcdTAwMjZcdTAwMjYgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzIsIHMyICsgaiwgY2hhciwgZXJyX291dCk7XG4gXHRcdFx0aWYgKGMyID09ICdcXDAnKVxuIFx0XHRcdFx0cmV0dXJuIGk7XG4gXHRcdFx0LypcbkBAIC00MDk2LDcgKzQxMTEsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICsgaiA9PSBsZW4pXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjMSwgczEgKyBqLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSArIGosIGNoYXIsIGVycl9vdXQpO1xuIFxuIFx0XHRcdGlmIChpZ25vcmVfY2FzZSkge1xuIFx0XHRcdFx0YzEgPSB0b2xvd2VyKGMxKTtcbmRpZmYgLS1naXQgYS9tbS9tYWNjZXNzLmMgYi9tbS9tYWNjZXNzLmNcbmluZGV4IDQ4NjU1OWQ2ODg1ODMuLjg3NDg2YmY5OGQxNWEgMTAwNjQ0XG4tLS0gYS9tbS9tYWNjZXNzLmNcbisrKyBiL21tL21hY2Nlc3MuY1xuQEAgLTE5LDcgKzE5LDcgQEAgYm9vbCBfX3dlYWsgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoY29uc3Qgdm9pZCAqdW5zYWZlX3NyYyxcbiAgKi9cbiAjZGVmaW5lIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbClcdFxcXG4gXHR3aGlsZSAobGVuIFx1MDAzZT0gc2l6ZW9mKHR5cGUpKSB7XHRcdFx0XHRcdFxcXG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1x0XFxcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGttc2FuX2NoZWNrX21lbW9yeShzcmMsIHNpemVvZih0eXBlKSk7XHRcdFx0XFxcbiBcdFx0ZHN0ICs9IHNpemVvZih0eXBlKTtcdFx0XHRcdFx0XFxcbiBcdFx0c3JjICs9IHNpemVvZih0eXBlKTtcdFx0XHRcdFx0XFxcbkBAIC0zNSwyNiArMzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuIFxuIFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuLVx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDMpKVxuLVx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDEpKVxuLVx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuLVx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuK1x0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xuK1x0XHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XG4rXHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuK1x0XHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4rXHRcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAxKSlcbitcdFx0XHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4rXHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xuK1x0XHR9XG4rXHR9XG4gXHRyZXR1cm4gMDtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0KTtcbiBcbiAjZGVmaW5lIGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgbGVuLCB0eXBlLCBlcnJfbGFiZWwpXHRcXFxuIFx0d2hpbGUgKGxlbiBcdTAwM2U9IHNpemVvZih0eXBlKSkge1x0XHRcdFx0XHRcXFxuLVx0XHRfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4rXHRcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuIFx0XHRpbnN0cnVtZW50X3dyaXRlKGRzdCwgc2l6ZW9mKHR5cGUpKTtcdFx0XHRcXFxuIFx0XHRkc3QgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuIFx0XHRzcmMgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuQEAgLTY1LDIxICs2OCwyNSBAQCBsb25nIGNvcHlfdG9fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSAwO1xuIFxuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykpXG4gXHRcdGFsaWduID0gKHVuc2lnbmVkIGxvbmcpZHN0IHwgKHVuc2lnbmVkIGxvbmcpc3JjO1xuIFxuLVx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbi1cdGlmICghKGFsaWduIFx1MDAyNiA3KSlcbi1cdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4tXHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDEpKVxuLVx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcbi1cdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4rXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4rXHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4rXHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4rXHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4rXHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcbitcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xuK1x0XHR9XG4rXHR9XG4gXHRyZXR1cm4gMDtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gXG5AQCAtOTIsMTggKzk5LDE5IEBAIGxvbmcgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0KGNoYXIgKmRzdCwgY29uc3Qgdm9pZCAqdW5zYWZlX2FkZHIsIGxvbmcgY291bnQpXG4gXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHVuc2FmZV9hZGRyLCBjb3VudCkpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuLVx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbi1cdGRvIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHU4LCBFZmF1bHQpO1xuLVx0XHRkc3QrKztcbi1cdFx0c3JjKys7XG4tXHR9IHdoaWxlIChkc3RbLTFdIFx1MDAyNlx1MDAyNiBzcmMgLSB1bnNhZmVfYWRkciBcdTAwM2MgY291bnQpO1xuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuK1x0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xuK1x0XHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdTgsIEVmYXVsdCk7XG4rXHRcdFx0XHRkc3QrKztcbitcdFx0XHRcdHNyYysrO1xuK1x0XHRcdH0gd2hpbGUgKGRzdFstMV0gXHUwMDI2XHUwMDI2IHNyYyAtIHVuc2FmZV9hZGRyIFx1MDAzYyBjb3VudCk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGRzdFstMV0gPSAnXFwwJztcbiBcdHJldHVybiBzcmMgLSB1bnNhZmVfYWRkcjtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRkc3RbMF0gPSAnXFwwJztcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjUwOjA5LjQxNTgwNDA0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjUxMDI3Mzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBcHBsaWNhYmlsaXR5IEFuYWx5c2lzIGZvciBLZXJuZWwgTWVtb3J5IEFjY2VzcyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdHMgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IGFjY2VzcyByb3V0aW5lcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGl0cyBpbXBhY3Qgb24gS01TQU4uIFRoaXMgcGF0Y2ggdG91Y2hlcyBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLCBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgLCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBhbmQgYG1tL21hY2Nlc3MuY2AuIEVzc2VudGlhbGx5LCBpdCdzIHJlZmFjdG9yaW5nIHRoZSBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXJzLiBUaGUgZ29hbCBpcyB0byBvcHRpbWl6ZSB0aGUgTWVtb3J5IFRhZ2dpbmcgRXh0ZW5zaW9uIChNVEUpIG9uIEFSTTY0LCBuYW1lbHkgdGhlIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50LiBJdCBhY2hpZXZlcyB0aGlzIGJ5IGludHJvZHVjaW5nIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gZGVmaW5lZCBieSBgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClgIC8gYF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKWAuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIEtNU0FOIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IGZyb20gd2hhdCBJIGNhbiBzZWUsIGl0IGRvZXNuJ3QuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGEgY2hlY2suIEl0IGRvZXNuJ3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRvIGNvbnRyb2wgcHJvZ3JhbSBmbG93LiBJdCBhbHNvIGRvZXNuJ3QgaW52b2x2ZSBhbnkgc2lnbmlmaWNhbnQgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gb3B0aW1pemluZyBob3cgZXhpc3RpbmcgbWVtb3J5IHJlZ2lvbnMgYXJlIGFjY2Vzc2VkIHNhZmVseS4gSXQncyByZWFsbHkgYWJvdXQgbWluaW1pemluZyBvdmVyaGVhZCwgc3BlY2lmaWNhbGx5IHRoZSBUQ08gdG9nZ2xlLCB3aGljaCB3b3VsZCBoYXZlIGJlZW4gZXhwZW5zaXZlIGluIHRoZSBsb29wLlxuXG5JIHNlZSB0aGF0IGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcGAgYWxyZWFkeSBjYWxscyBga21zYW5fY2hlY2tfbWVtb3J5KHNyYywgc2l6ZW9mKHR5cGUpKTtgLiBUaGUgcGF0Y2ggZG9lc24ndCByZW1vdmUgdGhpcy4gSXQganVzdCBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBoZWxwZXIgY2FsbHMgd2l0aGluIHRoZSBsb29wIGZyb20gYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0YCB0byBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAsIGFuZCB3cmFwcyB0aGUgd2hvbGUgbG9vcCBpbiB0aGUgZ3VhcmRlZCByZWdpb24uIFRoYXQncyBhIGdvb2QgdGhpbmcsIGJlY2F1c2UgdGhlIEtNU0FOIGNoZWNrcyBhbHJlYWR5IGV4aXN0LlxuXG5NeSBjb25jbHVzaW9uPyBUaGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcvb3B0aW1pemF0aW9uLiBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGludHJvZHVjZSBuZXcgS01TQU4tc3BlY2lmaWMgcmlza3MuIElmIHRoZXJlIHdlcmUgYnVncyBpbnRyb2R1Y2VkIGhlcmUsIHRoZXknZCBsaWtlbHkgbWFuaWZlc3QgYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgcGFnZSBmYXVsdHMsIG9yIGxvZ2ljYWwgZXJyb3JzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzIHdvdWxkLCBpbiBteSBleHBlcmllbmNlLCBjYXRjaCB0aG9zZS4gVGhlcmVmb3JlLCBLTVNBTiBkb2Vzbid0IG5lZWQgdG8gYmUgc3BlY2lmaWNhbGx5IHRhcmdldGVkIHdpdGggYWRkaXRpb25hbCBmdXp6aW5nIHNlc3Npb25zIGZvciB0aGlzIGNoYW5nZS4gVGhlIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGNvdmVyIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQzLCJPdXRwdXRUb2tlbnMiOjI1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjUwOjIxLjkyNjA3OTgzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBUYWcgQ2hlY2sgT3ZlcnJpZGUgKFRDTykgbWFuYWdlbWVudCBvbiBBUk02NC4gSXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBiZSB1c2VkIHdpdGhpbiBhIGd1YXJkZWQgcmVnaW9uIChgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKWApLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdG9nZ2xpbmcgVENPIG9uIGV2ZXJ5IG1lbW9yeSBhY2Nlc3MgaW5zaWRlIGxvb3BzLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBleGlzdGluZyBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxscyBhcmUgcHJlc2VydmVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIChzdWNoIGFzIGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcsIG1pc3NpbmcgZWFybHkgcmV0dXJucywgb3IgaW1wcm9wZXIgcGFnZSBmYXVsdCBoYW5kbGluZykgd291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGludmFsaWQgbWVtb3J5IGRlcmVmZXJlbmNlcywgb3IgY3Jhc2hlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGFjY2VzcyB2aW9sYXRpb25zIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zIHRvIG9wdGltaXplIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50IG9uIEFSTTY0LiBJdCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gKGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpYCksIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiB0b2dnbGluZyBUQ08gb24gZXZlcnkgbWVtb3J5IGFjY2VzcyBpbnNpZGUgbG9vcHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 18:59:35 +0000 UTC FinishedAt: 2026-08-24 19:50:22 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "4336b6a4-5d65-4dcb-bf6d-a946e14a8870" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "copy_from_kernel_nofault", "copy_to_kernel_nofault", "strncpy_from_kernel_nofault", "bpf_strcmp", "bpf_strcasecmp", "bpf_strncasecmp", "bpf_strstr", "bpf_strcasestr", "bpf_strnstr", "bpf_strncasestr", "bpf_strnchr", "bpf_strchrnul", "bpf_strrchr", "bpf_strnlen", "bpf_strspn", "bpf_strcspn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2NvcHlfdG9fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7c3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9zdHJjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5zdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2hyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjaHJudWwmIzM0OywKICAgICYjMzQ7YnBmX3N0cnJjaHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5sZW4mIzM0OywKICAgICYjMzQ7YnBmX3N0cnNwbiYjMzQ7LAogICAgJiMzNDticGZfc3RyY3NwbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBhbmQgc2V2ZXJhbCBCUEYgc3RyaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gb3B0aW1pemUgVGFnIENoZWNrIE92ZXJyaWRlIChUQ08pIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl0IGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gYmUgdXNlZCB3aXRoaW4gYSBndWFyZGVkIHJlZ2lvbiAoYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSlgKSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHRvZ2dsaW5nIFRDTyBvbiBldmVyeSBtZW1vcnkgYWNjZXNzIGluc2lkZSBsb29wcy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDUxNjAzNGJiZGFjYWI4YjJiNjY0NGQ5YjhhNDBhYjYzZGEyMmVlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE5OjQ5OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDlmNWJkOWM2OWMyNDkuLjFhMTRlYjJhNTFkY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbkBAIC0yNzAsMjggJiM0MzsyNzAsNDMgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gI2RlZmluZSBnZXRfdXNlclx0X19nZXRfdXNlclxuIFxuIC8qXG4tICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXG4tICogX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKS4gQXMgYGRzdGAgYW5kIGBzcmNgIG1heSBjb250YWluIGJsb2NraW5nXG4tICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG4mIzQzOyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGFcbiYjNDM7ICogX19iZWdpbi9fX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkgcmVnaW9uLlxuICAqL1xuLSNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XFxcbiBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oZHN0KSBfX2drbl9kc3QgPSAoZHN0KTtcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKHNyYykgX19na25fc3JjID0gKHNyYyk7XHRcdFx0XHRcXFxuIFx0ZG8geyBcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0X19sYWJlbF9fIF9fZ2tuX2xhYmVsO1x0XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdF9fcmF3X2dldF9tZW0oXCYjMzQ7bGRyXCYjMzQ7LCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLFx0XHRcXFxuIFx0XHQgICAgICAoX19mb3JjZSB0eXBlICopKF9fZ2tuX3NyYyksIF9fZ2tuX2xhYmVsLCBLKTtcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX2drbl9sYWJlbDpcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMCk7XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuJiM0MzsgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsXG4mIzQzOyAqIGV2YWx1YXRlIHRoZW0gYmVmb3JlIG92ZXJyaWRpbmcgVENPLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4mIzQzO2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fbGFiZWxfXyBfX2drbl90Y29fZXJyO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oZHN0KSBfX2drbl90Y29fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oc3JjKSBfX2drbl90Y29fc3JjID0gKHNyYyk7XHRcdFx0XHRcXFxuJiM0MztcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fZ2tuX3Rjb19kc3QsIF9fZ2tuX3Rjb19zcmMsIHR5cGUsXHRcXFxuJiM0MztcdFx0XHRcdCAgICAgX19na25fdGNvX2Vycik7XHRcdFx0XFxcbiYjNDM7XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuJiM0MztcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztfX2drbl90Y29fZXJyOlx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9IHdoaWxlICgwKVxuJiM0MztcbiAjZGVmaW5lIF9fcHV0X21lbV9hc20oc3RvcmUsIHJlZywgeCwgYWRkciwgbGFiZWwsIHR5cGUpXHRcdFx0XFxcbiBcdGFzbSBnb3RvKFx0XHRcdFx0XHRcdFx0XFxcbiBcdFwmIzM0OzE6XHRcJiMzNDsgc3RvcmUgXCYjMzQ7XHRcJiMzNDsgcmVnIFwmIzM0OzAsIFslMV1cXG5cJiMzNDtcdFx0XHRcXFxuQEAgLTM2NiwyOCAmIzQzOzM4MSw0OCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZGVmaW5lIHB1dF91c2VyXHRfX3B1dF91c2VyXG4gXG4tLypcbi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbi0gKi9cbi0jZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFx0XFxcbiYjNDM7LyogTm9mYXVsdCBzdG9yZSB3aXRob3V0IFRDTyBtYW5hZ2VtZW50OyBzZWUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZS4gKi9cbiYjNDM7I2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKGRzdCkgX19wa25fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRfX2xhYmVsX18gX19wa25fZXJyO1x0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRfX3Jhd19wdXRfbWVtKFwmIzM0O3N0clwmIzM0OywgKigodHlwZSAqKShfX3Brbl9zcmMpKSxcdFx0XFxcbiBcdFx0XHQgICAgICAoX19mb3JjZSB0eXBlICopKF9fcGtuX2RzdCksIF9fcGtuX2VyciwgSyk7XHRcXFxuLVx0XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcXFxuIFx0X19wa25fZXJyOlx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFxcXG4gXHR9IHdoaWxlICgwKTtcdFx0XHRcdFx0XHRcdFxcXG4tfSB3aGlsZSgwKVxuJiM0Mzt9IHdoaWxlICgwKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXG4mIzQzOyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuJiM0MzsgKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuJiM0MztkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX2xhYmVsX18gX19wa25fdGNvX2VycjtcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKGRzdCkgX19wa25fdGNvX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKHNyYykgX19wa25fdGNvX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShfX3Brbl90Y29fZHN0LCBfX3Brbl90Y29fc3JjLCB0eXBlLFx0XFxcbiYjNDM7XHRcdFx0XHQgICAgIF9fcGtuX3Rjb19lcnIpO1x0XHRcdFxcXG4mIzQzO1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7X19wa25fdGNvX2VycjpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuJiM0MztcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgY29udGV4dCBzd2l0Y2ggcmUtZW5hYmxlcyB0YWcgY2hlY2tpbmcsIGhlbmNlIHRoZSBuby1zY2hlZHVsaW5nXG4mIzQzOyAqIHJlcXVpcmVtZW50IGZvciBhIGJhcmUgbm9mYXVsdCByZWdpb24uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKClcbiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKClcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTtcbiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbilcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5pbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5AQCAtNjM3LDYgJiM0Mzs2MzcsMjYgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZW5kaWYgIC8qICFfX2dldF9rZXJuZWxfbm9mYXVsdCAqL1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBBcmNoaXRlY3R1cmVzIG1heSB1c2UgdGhlIGJlZ2luL2VuZCBob29rcyB0byBlc3RhYmxpc2ggc3RhdGUgc2hhcmVkIGJ5IGFcbiYjNDM7ICogc2VxdWVuY2Ugb2YgYmFyZSBub2ZhdWx0IGFjY2Vzc2VzLiBFdmVyeSBwYXRoIG91dCBvZiB0aGUgcmVnaW9uIG11c3QgY2FsbFxuJiM0MzsgKiB0aGUgZW5kIGhvb2suIFRoZSByZWdpb24sIGluY2x1ZGluZyBleHByZXNzaW9ucyBwYXNzZWQgdG8gdGhlIGJhcmVcbiYjNDM7ICogYWNjZXNzb3JzLCBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlci5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZVxuJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0XG4mIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZVx0X19wdXRfa2VybmVsX25vZmF1bHRcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZVxuJiM0MzsjZGVmaW5lIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpXHRkbyB7fSB3aGlsZSAoMClcbiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdGRvIHt9IHdoaWxlICgwKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO0RFRklORV9MT0NLX0dVQVJEXzAoX19rZXJuZWxfbm9mYXVsdF9iYXJlLFxuJiM0MztcdFx0ICAgIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpLFxuJiM0MztcdFx0ICAgIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSlcbiYjNDM7XG4gLyoqXG4gICogZ2V0X2tlcm5lbF9ub2ZhdWx0KCk6IHNhZmVseSBhdHRlbXB0IHRvIHJlYWQgZnJvbSBhIGxvY2F0aW9uXG4gICogQHZhbDogcmVhZCBpbnRvIHRoaXMgdmFyaWFibGVcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5mOGM1NTcxNjE1ODRlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzcyNiw3ICYjNDM7MzcyNiw4IEBAIF9fYnBmX2tmdW5jIHZvaWQgX19icGZfdHJhcCh2b2lkKVxuICAqXG4gICogU2luY2Ugc3RyaW5ncyBhcmUgbm90IG5lY2Vzc2FyaWx5ICVOVUwtdGVybWluYXRlZCwgd2UgY2Fubm90IGRpcmVjdGx5IGNhbGxcbiAgKiBpbi1rZXJuZWwgaW1wbGVtZW50YXRpb25zLiBJbnN0ZWFkLCB3ZSBvcGVuLWNvZGUgdGhlIGltcGxlbWVudGF0aW9ucyB1c2luZ1xuLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuXG4mIzQzOyAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUgdW5kZXIgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpIHRvIG1ha2UgdGhlbVxuJiM0MzsgKiBzYWZlLlxuICAqL1xuIFxuIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxuQEAgLTM3MzgsMTEgJiM0MzszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzXG4gXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHMyLCAxKSkge1xuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiYjNDM7XHRpZiAoIWxlbilcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbiBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMyLCBzMiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChpZ25vcmVfY2FzZSkge1xuIFx0XHRcdGMxID0gdG9sb3dlcihjMSk7XG4gXHRcdFx0YzIgPSB0b2xvd2VyKGMyKTtcbkBAIC0zODM3LDEwICYjNDM7Mzg0MSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jaHIoY29uc3QgY2hhciAqc19faWduLCBzaXplX3QgY291bnQsIGNoYXIgYylcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0aWYgKCFjb3VudClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gYylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0aWYgKHNjID09ICYjMzk7XFwwJiMzOTspXG5AQCAtMzg5Myw4ICYjNDM7MzkwMCw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY2hybnVsKGNvbnN0IGNoYXIgKnNfX2lnbiwgY2hhciBjKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gJiMzOTtcXDAmIzM5OyB8fCBzYyA9PSBjKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRzX19pZ24mIzQzOyYjNDM7O1xuQEAgLTM5MjUsOCAmIzQzOzM5MzMsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnJjaHIoY29uc3QgY2hhciAqc19faWduLCBpbnQgYylcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4mIzQzO1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKHNjID09IGMpXG4gXHRcdFx0bGFzdCA9IGk7XG4gXHRcdGlmIChzYyA9PSAmIzM5O1xcMCYjMzk7KVxuQEAgLTM5NTYsMTAgJiM0MzszOTY1LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3Rybmxlbihjb25zdCBjaGFyICpzX19pZ24sIHNpemVfdCBjb3VudClcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0aWYgKCFjb3VudClcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGMgPT0gJiMzOTtcXDAmIzM5OylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0c19faWduJiM0MzsmIzQzOztcbkBAIC00MDA4LDEyICYjNDM7NDAyMCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnNwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChjcyA9PSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjYSwgYWNjZXB0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRcdGlmIChjcyA9PSBjYSB8fCBjYSA9PSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC00MDUyLDEyICYjNDM7NDA2NSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbiBcdH1cbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoY3MgPT0gJiMzOTtcXDAmIzM5OylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3IsIHJlamVjdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNyLCByZWplY3RfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoY3MgPT0gY3IgfHwgY3IgPT0gJiMzOTtcXDAmIzM5OylcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDA4NCw5ICYjNDM7NDA5OCwxMCBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuJiM0MztcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykge1xuIFx0XHRmb3IgKGogPSAwOyBpICYjNDM7IGogXHUwMDNjPSBsZW4gXHUwMDI2XHUwMDI2IGogXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjMiwgczIgJiM0MzsgaiwgY2hhciwgZXJyX291dCk7XG4gXHRcdFx0aWYgKGMyID09ICYjMzk7XFwwJiMzOTspXG4gXHRcdFx0XHRyZXR1cm4gaTtcbiBcdFx0XHQvKlxuQEAgLTQwOTYsNyAmIzQzOzQxMTEsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICYjNDM7IGogPT0gbGVuKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHMxICYjNDM7IGosIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcbiBcdFx0XHRpZiAoaWdub3JlX2Nhc2UpIHtcbiBcdFx0XHRcdGMxID0gdG9sb3dlcihjMSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWFjY2Vzcy5jIGIvbW0vbWFjY2Vzcy5jXG5pbmRleCA0ODY1NTlkNjg4NTgzLi44NzQ4NmJmOThkMTVhIDEwMDY0NFxuLS0tIGEvbW0vbWFjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWNjZXNzLmNcbkBAIC0xOSw3ICYjNDM7MTksNyBAQCBib29sIF9fd2VhayBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChjb25zdCB2b2lkICp1bnNhZmVfc3JjLFxuICAqL1xuICNkZWZpbmUgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVx0XFxcbiBcdHdoaWxlIChsZW4gXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcdFx0XHRcdFx0XFxcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGttc2FuX2NoZWNrX21lbW9yeShzcmMsIHNpemVvZih0eXBlKSk7XHRcdFx0XFxcbiBcdFx0ZHN0ICYjNDM7PSBzaXplb2YodHlwZSk7XHRcdFx0XHRcdFxcXG4gXHRcdHNyYyAmIzQzOz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuQEAgLTM1LDI2ICYjNDM7MzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuIFxuIFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHRpZiAoIXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4tXHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkge1xuJiM0MztcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4mIzQzO1x0XHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbiYjNDM7XHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDMpKVxuJiM0MztcdFx0XHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4mIzQzO1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAxKSlcbiYjNDM7XHRcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuJiM0MztcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gRWZhdWx0OlxuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCk7XG4gXG4gI2RlZmluZSBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVx0XFxcbiBcdHdoaWxlIChsZW4gXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcdFx0XHRcdFx0XFxcbi1cdFx0X19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuJiM0MztcdFx0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGluc3RydW1lbnRfd3JpdGUoZHN0LCBzaXplb2YodHlwZSkpO1x0XHRcdFxcXG4gXHRcdGRzdCAmIzQzOz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuIFx0XHRzcmMgJiM0Mzs9IHNpemVvZih0eXBlKTtcdFx0XHRcdFx0XFxcbkBAIC02NSwyMSAmIzQzOzY4LDI1IEBAIGxvbmcgY29weV90b19rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDA7XG4gXG4mIzQzO1x0aWYgKCFzaXplKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSlcbiBcdFx0YWxpZ24gPSAodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylzcmM7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuLVx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbi1cdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbi1cdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuLVx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTtcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiYjNDM7XHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XG4mIzQzO1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiA3KSlcbiYjNDM7XHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbiYjNDM7XHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDMpKVxuJiM0MztcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuJiM0MztcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4mIzQzO1x0XHRcdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4mIzQzO1x0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gRWZhdWx0OlxuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuQEAgLTkyLDE4ICYjNDM7OTksMTkgQEAgbG9uZyBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoY2hhciAqZHN0LCBjb25zdCB2b2lkICp1bnNhZmVfYWRkciwgbG9uZyBjb3VudClcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQodW5zYWZlX2FkZHIsIGNvdW50KSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0ZG8ge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdTgsIEVmYXVsdCk7XG4tXHRcdGRzdCYjNDM7JiM0Mzs7XG4tXHRcdHNyYyYjNDM7JiM0Mzs7XG4tXHR9IHdoaWxlIChkc3RbLTFdIFx1MDAyNlx1MDAyNiBzcmMgLSB1bnNhZmVfYWRkciBcdTAwM2MgY291bnQpO1xuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuJiM0MztcdHNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHU4LCBFZmF1bHQpO1xuJiM0MztcdFx0XHRcdGRzdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0c3JjJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0fSB3aGlsZSAoZHN0Wy0xXSBcdTAwMjZcdTAwMjYgc3JjIC0gdW5zYWZlX2FkZHIgXHUwMDNjIGNvdW50KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRkc3RbLTFdID0gJiMzOTtcXDAmIzM5OztcbiBcdHJldHVybiBzcmMgLSB1bnNhZmVfYWRkcjtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRkc3RbMF0gPSAmIzM5O1xcMCYjMzk7O1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCYjMzQ7LAogICAgJiMzNDtjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O3N0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCYjMzQ7LAogICAgJiMzNDticGZfc3RyY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjYXNlY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2FzZWNtcCYjMzQ7LAogICAgJiMzNDticGZfc3Ryc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjYXNlc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2FzZXN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RybmNociYjMzQ7LAogICAgJiMzNDticGZfc3RyY2hybnVsJiMzNDssCiAgICAmIzM0O2JwZl9zdHJyY2hyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJubGVuJiMzNDssCiAgICAmIzM0O2JwZl9zdHJzcG4mIzM0OywKICAgICYjMzQ7YnBmX3N0cmNzcG4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBvcHRpbWl6ZSBUQ08gKFRhZyBDaGVjayBPdmVycmlkZSkgbWFuYWdlbWVudCBvbiBBUk02NCwgYW5kIHVwZGF0ZXMgYG1hY2Nlc3MuY2AgYW5kIEJQRiBzdHJpbmcgaGVscGVycyB0byB1c2UgdGhlbSB1bmRlciBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IGFjY2VzcyByb3V0aW5lcyBhbmQgQlBGIGhlbHBlcnMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGlmIHRoZSBub2ZhdWx0IHJlZ2lvbnMgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MTYwMzRiYmRhY2FiOGIyYjY2NDRkOWI4YTQwYWI2M2RhMjJlZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxOTo0OToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggOWY1YmQ5YzY5YzI0OS4uMWExNGViMmE1MWRjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTI3MCwyOCAmIzQzOzI3MCw0MyBAQCBkbyB7CQkJCQkJCQkJXAogI2RlZmluZSBnZXRfdXNlcglfX2dldF91c2VyCiAKIC8qCi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmQKLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZwotICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uCiYjNDM7ICogTm9mYXVsdCBsb2FkIHdpdGhvdXQgVENPIG1hbmFnZW1lbnQgZm9yIHVzZSBpbnNpZGUgYQomIzQzOyAqIF9fYmVnaW4vX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpIHJlZ2lvbi4KICAqLwotI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJCVwKJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXyhkc3QpIF9fZ2tuX2RzdCA9IChkc3QpOwkJCQlcCiAJX190eXBlb2ZfXyhzcmMpIF9fZ2tuX3NyYyA9IChzcmMpOwkJCQlcCiAJZG8geyAJCQkJCQkJCVwKIAkJX19sYWJlbF9fIF9fZ2tuX2xhYmVsOwkJCQkJXAotCQkJCQkJCQkJXAotCQlfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7CQkJCVwKIAkJX19yYXdfZ2V0X21lbSgmIzM0O2xkciYjMzQ7LCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLAkJXAogCQkgICAgICAoX19mb3JjZSB0eXBlICopKF9fZ2tuX3NyYyksIF9fZ2tuX2xhYmVsLCBLKTsJXAotCQlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJX19na25fbGFiZWw6CQkJCQkJCVwKLQkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlnb3RvIGVycl9sYWJlbDsJCQkJCQlcCiAJfSB3aGlsZSAoMCk7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKJiM0MzsvKgomIzQzOyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZAomIzQzOyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGRzdCBhbmQgc3JjIG1heSBjb250YWluIGJsb2NraW5nIGZ1bmN0aW9ucywKJiM0MzsgKiBldmFsdWF0ZSB0aGVtIGJlZm9yZSBvdmVycmlkaW5nIFRDTy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQkJXAomIzQzO2RvIHsJCQkJCQkJCQlcCiYjNDM7CV9fbGFiZWxfXyBfX2drbl90Y29fZXJyOwkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKGRzdCkgX19na25fdGNvX2RzdCA9IChkc3QpOwkJCQlcCiYjNDM7CV9fdHlwZW9mX18oc3JjKSBfX2drbl90Y29fc3JjID0gKHNyYyk7CQkJCVwKJiM0MzsJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fZ2tuX3Rjb19kc3QsIF9fZ2tuX3Rjb19zcmMsIHR5cGUsCVwKJiM0MzsJCQkJICAgICBfX2drbl90Y29fZXJyKTsJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWJyZWFrOwkJCQkJCQkJXAomIzQzO19fZ2tuX3Rjb19lcnI6CQkJCQkJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWdvdG8gZXJyX2xhYmVsOwkJCQkJCQlcCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKICNkZWZpbmUgX19wdXRfbWVtX2FzbShzdG9yZSwgcmVnLCB4LCBhZGRyLCBsYWJlbCwgdHlwZSkJCQlcCiAJYXNtIGdvdG8oCQkJCQkJCVwKIAkmIzM0OzE6CSYjMzQ7IHN0b3JlICYjMzQ7CSYjMzQ7IHJlZyAmIzM0OzAsIFslMV1cbiYjMzQ7CQkJXApAQCAtMzY2LDI4ICYjNDM7MzgxLDQ4IEBAIGRvIHsJCQkJCQkJCQlcCiAKICNkZWZpbmUgcHV0X3VzZXIJX19wdXRfdXNlcgogCi0vKgotICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kCi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmcKLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgotICovCi0jZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQkJXAomIzQzOy8qIE5vZmF1bHQgc3RvcmUgd2l0aG91dCBUQ08gbWFuYWdlbWVudDsgc2VlIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUuICovCiYjNDM7I2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQlcCiBkbyB7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oZHN0KSBfX3Brbl9kc3QgPSAoZHN0KTsJCQkJXAogCV9fdHlwZW9mX18oc3JjKSBfX3Brbl9zcmMgPSAoc3JjKTsJCQkJXAogCQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJX19sYWJlbF9fIF9fcGtuX2VycjsJCQkJCVwKLQkJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCV9fcmF3X3B1dF9tZW0oJiMzNDtzdHImIzM0OywgKigodHlwZSAqKShfX3Brbl9zcmMpKSwJCVwKIAkJCSAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19wa25fZHN0KSwgX19wa25fZXJyLCBLKTsJXAotCQlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJX19wa25fZXJyOgkJCQkJCQlcCi0JCV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCVwKIAkJZ290byBlcnJfbGFiZWw7CQkJCQkJXAogCX0gd2hpbGUgKDApOwkJCQkJCQlcCi19IHdoaWxlKDApCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZAomIzQzOyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZwomIzQzOyAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCkJCQlcCiYjNDM7ZG8gewkJCQkJCQkJCVwKJiM0MzsJX19sYWJlbF9fIF9fcGtuX3Rjb19lcnI7CQkJCQlcCiYjNDM7CV9fdHlwZW9mX18oZHN0KSBfX3Brbl90Y29fZHN0ID0gKGRzdCk7CQkJCVwKJiM0MzsJX190eXBlb2ZfXyhzcmMpIF9fcGtuX3Rjb19zcmMgPSAoc3JjKTsJCQkJXAomIzQzOwlfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CV9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoX19wa25fdGNvX2RzdCwgX19wa25fdGNvX3NyYywgdHlwZSwJXAomIzQzOwkJCQkgICAgIF9fcGtuX3Rjb19lcnIpOwkJCVwKJiM0MzsJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJCVwKJiM0MzsJYnJlYWs7CQkJCQkJCQlcCiYjNDM7X19wa25fdGNvX2VycjoJCQkJCQkJCVwKJiM0MzsJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJCVwKJiM0MzsJZ290byBlcnJfbGFiZWw7CQkJCQkJCVwKJiM0Mzt9IHdoaWxlICgwKQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBjb250ZXh0IHN3aXRjaCByZS1lbmFibGVzIHRhZyBjaGVja2luZywgaGVuY2UgdGhlIG5vLXNjaGVkdWxpbmcKJiM0MzsgKiByZXF1aXJlbWVudCBmb3IgYSBiYXJlIG5vZmF1bHQgcmVnaW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpCiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKICNkZWZpbmUgcmF3X2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmggYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAppbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaApAQCAtNjM3LDYgJiM0Mzs2MzcsMjYgQEAgZG8gewkJCQkJCQlcCiAKICNlbmRpZiAgLyogIV9fZ2V0X2tlcm5lbF9ub2ZhdWx0ICovCiAKJiM0MzsvKgomIzQzOyAqIEFyY2hpdGVjdHVyZXMgbWF5IHVzZSB0aGUgYmVnaW4vZW5kIGhvb2tzIHRvIGVzdGFibGlzaCBzdGF0ZSBzaGFyZWQgYnkgYQomIzQzOyAqIHNlcXVlbmNlIG9mIGJhcmUgbm9mYXVsdCBhY2Nlc3Nlcy4gRXZlcnkgcGF0aCBvdXQgb2YgdGhlIHJlZ2lvbiBtdXN0IGNhbGwKJiM0MzsgKiB0aGUgZW5kIGhvb2suIFRoZSByZWdpb24sIGluY2x1ZGluZyBleHByZXNzaW9ucyBwYXNzZWQgdG8gdGhlIGJhcmUKJiM0MzsgKiBhY2Nlc3NvcnMsIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyLgomIzQzOyAqLwomIzQzOyNpZm5kZWYgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZQomIzQzOyNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZQlfX2dldF9rZXJuZWxfbm9mYXVsdAomIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZQlfX3B1dF9rZXJuZWxfbm9mYXVsdAomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlCiYjNDM7I2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKQlkbyB7fSB3aGlsZSAoMCkKJiM0MzsjZGVmaW5lIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKQlkbyB7fSB3aGlsZSAoMCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztERUZJTkVfTE9DS19HVUFSRF8wKF9fa2VybmVsX25vZmF1bHRfYmFyZSwKJiM0MzsJCSAgICBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSwKJiM0MzsJCSAgICBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkpCiYjNDM7CiAvKioKICAqIGdldF9rZXJuZWxfbm9mYXVsdCgpOiBzYWZlbHkgYXR0ZW1wdCB0byByZWFkIGZyb20gYSBsb2NhdGlvbgogICogQHZhbDogcmVhZCBpbnRvIHRoaXMgdmFyaWFibGUKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYjNjYzVjOGZjODc1Ni4uZjhjNTU3MTYxNTg0ZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTM3MjYsNyAmIzQzOzM3MjYsOCBAQCBfX2JwZl9rZnVuYyB2b2lkIF9fYnBmX3RyYXAodm9pZCkKICAqCiAgKiBTaW5jZSBzdHJpbmdzIGFyZSBub3QgbmVjZXNzYXJpbHkgJU5VTC10ZXJtaW5hdGVkLCB3ZSBjYW5ub3QgZGlyZWN0bHkgY2FsbAogICogaW4ta2VybmVsIGltcGxlbWVudGF0aW9ucy4gSW5zdGVhZCwgd2Ugb3Blbi1jb2RlIHRoZSBpbXBsZW1lbnRhdGlvbnMgdXNpbmcKLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuCiYjNDM7ICogX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSB1bmRlciBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCkgdG8gbWFrZSB0aGVtCiYjNDM7ICogc2FmZS4KICAqLwogCiBzdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbikKQEAgLTM3MzgsMTEgJiM0MzszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzCiAJICAgICFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzMiwgMSkpIHsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQomIzQzOwlpZiAoIWxlbikKJiM0MzsJCXJldHVybiAwOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGxlbiAmYW1wOyZhbXA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgczEsIGNoYXIsIGVycl9vdXQpOwotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBzMiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjMiwgczIsIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoaWdub3JlX2Nhc2UpIHsKIAkJCWMxID0gdG9sb3dlcihjMSk7CiAJCQljMiA9IHRvbG93ZXIoYzIpOwpAQCAtMzgzNywxMCAmIzQzOzM4NDEsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJuY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50LCBjaGFyIGMpCiAKIAlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpCiAJCXJldHVybiAtRVJBTkdFOwomIzQzOwlpZiAoIWNvdW50KQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQgJmFtcDsmYW1wOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiAJCWlmIChzYyA9PSBjKQogCQkJcmV0dXJuIGk7CiAJCWlmIChzYyA9PSAmIzM5O1wwJiMzOTspCkBAIC0zODkzLDggJiM0MzszOTAwLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjaHJudWwoY29uc3QgY2hhciAqc19faWduLCBjaGFyIGMpCiAJCXJldHVybiAtRVJBTkdFOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoc2MgPT0gJiMzOTtcMCYjMzk7IHx8IHNjID09IGMpCiAJCQlyZXR1cm4gaTsKIAkJc19faWduJiM0MzsmIzQzOzsKQEAgLTM5MjUsOCAmIzQzOzM5MzMsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnJjaHIoY29uc3QgY2hhciAqc19faWduLCBpbnQgYykKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiAJCWlmIChzYyA9PSBjKQogCQkJbGFzdCA9IGk7CiAJCWlmIChzYyA9PSAmIzM5O1wwJiMzOTspCkBAIC0zOTU2LDEwICYjNDM7Mzk2NSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5sZW4oY29uc3QgY2hhciAqc19faWduLCBzaXplX3QgY291bnQpCiAKIAlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpCiAJCXJldHVybiAtRVJBTkdFOwomIzQzOwlpZiAoIWNvdW50KQomIzQzOwkJcmV0dXJuIDA7CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQgJmFtcDsmYW1wOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoYyA9PSAmIzM5O1wwJiMzOTspCiAJCQlyZXR1cm4gaTsKIAkJc19faWduJiM0MzsmIzQzOzsKQEAgLTQwMDgsMTIgJiM0Mzs0MDIwLDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3Ryc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pCiAJfQogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQogCQkJcmV0dXJuIGk7CiAJCWZvciAoaiA9IDA7IGogJmx0OyBYQVRUUl9TSVpFX01BWDsgaiYjNDM7JiM0MzspIHsKLQkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjYSwgYWNjZXB0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiAJCQlpZiAoY3MgPT0gY2EgfHwgY2EgPT0gJiMzOTtcMCYjMzk7KQogCQkJCWJyZWFrOwogCQl9CkBAIC00MDUyLDEyICYjNDM7NDA2NSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbikKIAl9CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiAJCWlmIChjcyA9PSAmIzM5O1wwJiMzOTspCiAJCQlyZXR1cm4gaTsKIAkJZm9yIChqID0gMDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewotCQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjciwgcmVqZWN0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2NyLCByZWplY3RfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKIAkJCWlmIChjcyA9PSBjciB8fCBjciA9PSAmIzM5O1wwJiMzOTspCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTQwODQsOSAmIzQzOzQwOTgsMTAgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbiwKIAl9CiAKIAlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7CiAJCWZvciAoaiA9IDA7IGkgJiM0MzsgaiAmbHQ7PSBsZW4gJmFtcDsmYW1wOyBqICZsdDsgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7Ci0JCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBzMiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzIsIHMyICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwogCQkJaWYgKGMyID09ICYjMzk7XDAmIzM5OykKIAkJCQlyZXR1cm4gaTsKIAkJCS8qCkBAIC00MDk2LDcgJiM0Mzs0MTExLDcgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbiwKIAkJCSAqLwogCQkJaWYgKGkgJiM0MzsgaiA9PSBsZW4pCiAJCQkJYnJlYWs7Ci0JCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MxLCBzMSAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzEsIHMxICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwogCiAJCQlpZiAoaWdub3JlX2Nhc2UpIHsKIAkJCQljMSA9IHRvbG93ZXIoYzEpOwpkaWZmIC0tZ2l0IGEvbW0vbWFjY2Vzcy5jIGIvbW0vbWFjY2Vzcy5jCmluZGV4IDQ4NjU1OWQ2ODg1ODMuLjg3NDg2YmY5OGQxNWEgMTAwNjQ0Ci0tLSBhL21tL21hY2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWNjZXNzLmMKQEAgLTE5LDcgJiM0MzsxOSw3IEBAIGJvb2wgX193ZWFrIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGNvbnN0IHZvaWQgKnVuc2FmZV9zcmMsCiAgKi8KICNkZWZpbmUgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKQlcCiAJd2hpbGUgKGxlbiAmZ3Q7PSBzaXplb2YodHlwZSkpIHsJCQkJCVwKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKIAkJa21zYW5fY2hlY2tfbWVtb3J5KHNyYywgc2l6ZW9mKHR5cGUpKTsJCQlcCiAJCWRzdCAmIzQzOz0gc2l6ZW9mKHR5cGUpOwkJCQkJXAogCQlzcmMgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKQEAgLTM1LDI2ICYjNDM7MzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQogCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKQogCQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIDA7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWlmICghKGFsaWduICZhbXA7IDcpKQotCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpOwotCWlmICghKGFsaWduICZhbXA7IDMpKQotCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpOwotCWlmICghKGFsaWduICZhbXA7IDEpKQotCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpOwotCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiYjNDM7CXNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyA3KSkKJiM0MzsJCQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyAzKSkKJiM0MzsJCQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKJiM0MzsJCQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTsKJiM0MzsJCQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7CiYjNDM7CQl9CiYjNDM7CX0KIAlyZXR1cm4gMDsKIEVmYXVsdDoKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpOwogCiAjZGVmaW5lIGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgbGVuLCB0eXBlLCBlcnJfbGFiZWwpCVwKIAl3aGlsZSAobGVuICZndDs9IHNpemVvZih0eXBlKSkgewkJCQkJXAotCQlfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTsJXAomIzQzOwkJX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTsJXAogCQlpbnN0cnVtZW50X3dyaXRlKGRzdCwgc2l6ZW9mKHR5cGUpKTsJCQlcCiAJCWRzdCAmIzQzOz0gc2l6ZW9mKHR5cGUpOwkJCQkJXAogCQlzcmMgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKQEAgLTY1LDIxICYjNDM7NjgsMjUgQEAgbG9uZyBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFsaWduID0gMDsKIAomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpKQogCQlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKWRzdCB8ICh1bnNpZ25lZCBsb25nKXNyYzsKIAotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0JaWYgKCEoYWxpZ24gJmFtcDsgNykpCi0JCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpOwotCWlmICghKGFsaWduICZhbXA7IDMpKQotCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKLQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7Ci0JY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiYjNDM7CXNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyA3KSkKJiM0MzsJCQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgMykpCiYjNDM7CQkJCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpOwomIzQzOwkJCWlmICghKGFsaWduICZhbXA7IDEpKQomIzQzOwkJCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTsKJiM0MzsJCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpOwomIzQzOwkJfQomIzQzOwl9CiAJcmV0dXJuIDA7CiBFZmF1bHQ6Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwogCXJldHVybiAtRUZBVUxUOwogfQogCkBAIC05MiwxOCAmIzQzOzk5LDE5IEBAIGxvbmcgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0KGNoYXIgKmRzdCwgY29uc3Qgdm9pZCAqdW5zYWZlX2FkZHIsIGxvbmcgY291bnQpCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZCh1bnNhZmVfYWRkciwgY291bnQpKQogCQlyZXR1cm4gLUVSQU5HRTsKIAotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0JZG8gewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdTgsIEVmYXVsdCk7Ci0JCWRzdCYjNDM7JiM0Mzs7Ci0JCXNyYyYjNDM7JiM0Mzs7Ci0JfSB3aGlsZSAoZHN0Wy0xXSAmYW1wOyZhbXA7IHNyYyAtIHVuc2FmZV9hZGRyICZsdDsgY291bnQpOwotCXBhZ2VmYXVsdF9lbmFibGUoKTsKJiM0MzsJc2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkgewomIzQzOwkJc2NvcGVkX2d1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkgewomIzQzOwkJCWRvIHsKJiM0MzsJCQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdTgsIEVmYXVsdCk7CiYjNDM7CQkJCWRzdCYjNDM7JiM0Mzs7CiYjNDM7CQkJCXNyYyYjNDM7JiM0Mzs7CiYjNDM7CQkJfSB3aGlsZSAoZHN0Wy0xXSAmYW1wOyZhbXA7IHNyYyAtIHVuc2FmZV9hZGRyICZsdDsgY291bnQpOwomIzQzOwkJfQomIzQzOwl9CiAKIAlkc3RbLTFdID0gJiMzOTtcMCYjMzk7OwogCXJldHVybiBzcmMgLSB1bnNhZmVfYWRkcjsKIEVmYXVsdDoKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJZHN0WzBdID0gJiMzOTtcMCYjMzk7OwogCXJldHVybiAtRUZBVUxUOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBOZXcgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgdXNlcyB0aGVtIHdpdGhpbiBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKCkpYCBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBgbW0vbWFjY2Vzcy5jYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyBob3cgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVycyBhcmUgaW1wbGVtZW50ZWQuIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgYmVuZWZpdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIHRoZSBUQ08gbWFuYWdlbWVudCBvbiBBUk02NCBieSByZWR1Y2luZyBvdmVyaGVhZC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggZnV6emluZz8mIzM0OyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IEJQRiBoZWxwZXJzIGFuZCBtZW1vcnkgYWNjZXNzIG1lY2hhbmlzbXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpOb3csIGxldCBtZSBsaXN0IHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQ6CiogICBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgCiogICBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYF9fYnBmX3N0cm5jYXNlY21wYAoqICAgYGJwZl9zdHJuY2hyYAoqICAgYGJwZl9zdHJjaHJudWxgCiogICBgYnBmX3N0cnJjaHJgCiogICBgYnBmX3N0cm5sZW5gCiogICBgYnBmX3N0cnNwbmAKKiAgIGBicGZfc3RyY3NwbmAKKiAgIGBfX2JwZl9zdHJuc3RyYAoKVGhlc2UgYXJlIGFsbCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIEkgY2FuIHNlZSBjbGVhciBwYXRocyB0byBmdXp6aW5nIHRoZXNlIHRvIGV4cG9zZSBhbnkgbmV3IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgVENPIG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgRm9jdXNTeW1ib2xzIGZvciB0aGUgZnV6emVyLiBJIG5lZWQgdG8gbGlzdCB0aGVtIGFsbDoKCiogICBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgCiogICBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YAoqICAgYGJwZl9zdHJuY2hyYAoqICAgYGJwZl9zdHJjaHJudWxgCiogICBgYnBmX3N0cnJjaHJgCiogICBgYnBmX3N0cm5sZW5gCiogICBgYnBmX3N0cnNwbmAKKiAgIGBicGZfc3RyY3NwbmAKCkhtbSwgYF9fYnBmX3N0cm5jYXNlY21wYCBhbmQgYF9fYnBmX3N0cm5zdHJgIGFyZSBzdGF0aWMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGV5JiMzOTtyZSBpbmxpbmVkIG9yIGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYF9fYnBmX3N0cm5jYXNlY21wYCBhbmQgYF9fYnBmX3N0cm5zdHJgLiBUaGF0IHdpbGwgbWFrZSBzdXJlIEkmIzM5O20gY2FwdHVyaW5nIGFsbCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9zdHJuY2FzZWNtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTM3MjA9X19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzczMi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjM3MzM6c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzM0LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzc5PV9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzgwLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3ODE6XHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgZmFsc2UsIFhBVFRSX1NJWkVfTUFYKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3ODItfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTM3OTc9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzk4LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3OTk6XHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgWEFUVFJfU0laRV9NQVgpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzgwMC19XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzgxNj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sIHNpemVfdCBsZW4pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zODE3LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjM4MTg6XHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgbGVuKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTM4MTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBTdHJpbmcgQ29tcGFyaXNvbnMgaW4gQlBGKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgc3RyaW5nIGNvbXBhcmlzb25zIGFyZSBoYW5kbGVkIGluIEJQRi4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb25zIGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYW5kIGBicGZfc3RybmNhc2VjbXBgIGFsbCBzZWVtIHRvIGZ1bm5lbCBkb3duIHRvIGEgY29tbW9uIGltcGxlbWVudGF0aW9uOiBgX19icGZfc3RybmNhc2VjbXBgLiBUaGlzIHN1Z2dlc3RzIGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24sIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBhbmQgbWFrZXMgc2Vuc2UgZm9yIGNvZGUgcmV1c2UgYW5kIHBvdGVudGlhbGx5IGZvciBvcHRpbWl6YXRpb24gbGF0ZXIuIFRoZSBjb3JlIHN0cmluZyBjb21wYXJpc29uLCBlc3BlY2lhbGx5IGNhc2UtaW5zZW5zaXRpdmUgdmVyc2lvbnMsIGlzIGNsZWFybHkgY2VudHJhbGl6ZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXItbGV2ZWwgY29tcGFyaXNvbiBpcyB3b3JraW5nLiBMZXQmIzM5O3MgbW92ZSBvbiBhbmQgZXhhbWluZSBgX19icGZfc3RybnN0cmAgbmV4dC4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGBfX2JwZl9zdHJuY2FzZWNtcGAgd291bGQgbGlrZWx5IHV0aWxpemUgc29tZXRoaW5nIGxpa2UgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9zdHJuc3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDA1Nz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MDg4LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDA4OTpzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA5MC1cdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MTUwPV9fYnBmX2tmdW5jIGludCBicGZfc3Ryc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTUxLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQxNTI6XHRyZXR1cm4gX19icGZfc3RybnN0cihzMV9faWduLCBzMl9faWduLCBYQVRUUl9TSVpFX01BWCwgZmFsc2UpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDE1My19XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE2OT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxNzAte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDE3MTpcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIFhBVFRSX1NJWkVfTUFYLCB0cnVlKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxNzItfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQxODg9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDE5MC17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MTkxOlx0cmV0dXJuIF9fYnBmX3N0cm5zdHIoczFfX2lnbiwgczJfX2lnbiwgbGVuLCBmYWxzZSk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTkyLX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MjA5PV9fYnBmX2tmdW5jIGludCBicGZfc3RybmNhc2VzdHIoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbixcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjExLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQyMTI6XHRyZXR1cm4gX19icGZfc3RybnN0cihzMV9faWduLCBzMl9faWduLCBsZW4sIHRydWUpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIxMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIFN0cmluZyBIZWxwZXIgYW5kIGBtYWNjZXNzYCBGdW5jdGlvbiBDaGVja2xpc3QqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIEJQRiBzdHJpbmcgZnVuY3Rpb25zLiBSaWdodCwgdGhvc2UgaGVscGVycyBhcmU6IGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYGJwZl9zdHJuY2FzZWNtcGAsIGBicGZfc3Ryc3RyYCwgYGJwZl9zdHJjYXNlc3RyYCwgYGJwZl9zdHJuc3RyYCwgYGJwZl9zdHJuY2FzZXN0cmAsIGBicGZfc3RybmNocmAsIGBicGZfc3RyY2hybnVsYCwgYGJwZl9zdHJyY2hyYCwgYGJwZl9zdHJubGVuYCwgYGJwZl9zdHJzcG5gLCBhbmQgYGJwZl9zdHJjc3BuYC4gQW5kIHRoZW4sIG9uIHRoZSBtZW1vcnkgYWNjZXNzIHNpZGUsIHdlIGhhdmUgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLgoKTm93LCBiZWZvcmUgSSBzdGFydCB3cml0aW5nIGFueXRoaW5nIHVzaW5nIHRoZXNlLCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgYW55IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIEkga25vdyBCUEYgaGVscGVycyBnZW5lcmFsbHkgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgdGhlc2UgZGF5cywgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4gSSB0aGluayB0aGUgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAgZnVuY3Rpb25zIGFyZSBhbHdheXMgYXZhaWxhYmxlLCBidXQgSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3IgdGhvc2Ugd2hlbiB0cmFjaW5nIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBiZWhhdmluZyBjb3JyZWN0bHkuCgpBbHJpZ2h0LCB0aGUgbW9zdCByZWxpYWJsZSB0aGluZyB0byBkbyBpcyBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIHRob3NlIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zLiBCZXR0ZXIgdG8gYmUgc3VyZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyY21wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MzczMz1zdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzY2LS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc2NzogKiBicGZfc3RyY21wIC0gQ29tcGFyZSB0d28gc3RyaW5nc1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2OC0gKiBAczFfX2lnbjogT25lIHN0cmluZ1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NzgtICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzc5Ol9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTY0PUJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNtcCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZWNtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipWZXJpZnlpbmcgQlBGIEhlbHBlciBDb21waWxhdGlvbioqCgpSaWdodCwgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGRvbiYjMzk7dCBzZWVtIHRvIGJlIGd1YXJkZWQgYnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYC4gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLCBub3JtYWxseSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgc29tZSBraW5kIG9mIGNoZWNrIGFyb3VuZCB0aGlzLCBidXQgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIFRoZSBmYWN0IHRoYXQgdGhlIGVudGlyZSBmaWxlIGV4aXN0cyB3aXRoaW4gYSBCUEYgY29udGV4dCBtYWtlcyBtZSBhc3N1bWUgaXQmIzM5O3MgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgSSBzaG91bGQgdmVyaWZ5LCBidXQgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBxdWlja2x5IHNlZSB0aGF0IHRoZSBNYWtlZmlsZSBkaWN0YXRlcyB0aGlzIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyB0aGVpciBpbmNsdXNpb24gYmFzZWQgb24gdGhhdCBjb25maWcgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiAgMTI6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbiAgMTQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuICAxNTpcdG9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xuICAxNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbiAgMTc6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuICAxODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4gIDE5Olx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiAgMjA6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBkaXNwYXRjaGVyLm9cbiAgMjM6XHRpZmVxICgkKENPTkZJR19ORVQpLHkpXG4gIDI0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbiAgMjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xuICAyNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xuICAyNzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xuICAyODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4gIDI5Olx0ZW5kaWZcbiAgMzA6XHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbiAgMzE6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG4gIDMyOlx0ZW5kaWZcbiAgMzM6XHRpZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxuICAzNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG4gIDM1Olx0ZW5kaWZcbiAgMzY6XHRvYmotJChDT05GSUdfQ0dST1VQX0JQRikgJiM0Mzs9IGNncm91cC5vXG4gIDM3Olx0aWZlcSAoJChDT05GSUdfSU5FVCkseSlcbiAgMzg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xuICAzOTpcdGVuZGlmXG4gIDQwOlx0aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG4gIDQxOlx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0gc3lzZnNfYnRmLm9cbiAgNDI6XHRlbmRpZlxuICA0MzpcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG4gIDQ0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xuICA0NTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xuICA0NjpcdCMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xuICA0NzpcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXG4gIDQ4Olx0IyBidGZfZW5jb2Rlcl9fYWRkX3NhdmVkX2Z1bmMoKSBieSBrZWVwaW5nIHRoZSBmaXJzdCBpbnN0YW5jZSBzZWVuLiBXZVxuICA0OTpcdCMgbmVlZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlKHMpIGluIGJwZl9sc21fcHJvdG8ubyB0byB0YWtlIHByZWNlZGVuY2VcbiAgNTA6XHQjIG92ZXIgdGhvc2Ugd2l0aGluIGJwZl9sc20uby4gSGF2aW5nIGJwZl9sc21fcHJvdG8ubyBwcmVjZWRlXG4gIDUxOlx0IyBicGZfbHNtLm8gZW5zdXJlcyBpdHMgRFdBUkYgQ1UgaXMgcHJvY2Vzc2VkIGVhcmx5LCBmb3JjaW5nIHRoZVxuICA1MjpcdCMgZ2VuZXJhdGVkIEJURiB0byBjb250YWluIHRoZSBvdmVycmlkZXMuXG4gIDUzOlx0I1xuICA1NDpcdCMgTm90YWJseSwgdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWxzdCB0aGUgZGVkdXBsaWNhdGlvblxuICA1NTpcdCMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cbiAgNTY6XHRvYmotJHtDT05GSUdfQlBGX0xTTX0gJiM0Mzs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cbiAgNTc6XHRlbmRpZlxuICA1ODpcdGlmbmVxICgkKENPTkZJR19DUllQVE8pLClcbiAgNTk6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcnlwdG8ub1xuICA2MDpcdGVuZGlmXG4gIDYxOlx0b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbiAgNjI6XHRcbiAgNjM6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xuICA2NDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9pdGVyLm9cbiAgNjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfcmVsb2NhdGUub1xuICA2NjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG4gIDY3Olx0aWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXG4gIDY4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZG1hYnVmX2l0ZXIub1xuICA2OTpcdGVuZGlmXG4gIDcwOlx0XG4gIDcxOlx0Q0ZMQUdTX1JFTU9WRV9wZXJjcHVfZnJlZWxpc3QubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3MjpcdENGTEFHU19SRU1PVkVfYnBmX2xydV9saXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzM6XHRDRkxBR1NfUkVNT1ZFX3F1ZXVlX3N0YWNrX21hcHMubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3NDpcdENGTEFHU19SRU1PVkVfbHBtX3RyaWUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3NTpcdENGTEFHU19SRU1PVkVfcmluZ2J1Zi5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gIDc2Olx0Q0ZMQUdTX1JFTU9WRV9ycXNwaW5sb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOgoKKipJbnZlc3RpZ2F0aW5nIGVCUEYgSGVscGVyIEF2YWlsYWJpbGl0eSBhbmQgTWVtb3J5IEFjY2VzcyBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgaGVscGVycy5vYCBpcyBpbmRlZWQgY29uZGl0aW9uYWwgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuIEdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24gcmVnYXJkaW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhvc2UgZUJQRiBoZWxwZXIgZnVuY3Rpb25zLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB0cmFjayBkb3duIHRoaXMgaXNzdWUgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUga2VybmVsIGRlZmluZXMgYG1hY2Nlc3Mub2AuIE15IGd1dCB0ZWxscyBtZSBpdCB3aWxsIGJlIGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0eXBpY2FsbHkgcmVzaWRlcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSBhbmQgZ2V0IHRoZSByZWxldmFudCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG1lbW9yeSBtYW5hZ2VyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRLQVNBTl9TQU5JVElaRV9zbGFiX2NvbW1vbi5vIDo9IG5cbiAgIDc6XHRLQVNBTl9TQU5JVElaRV9zbHViLm8gOj0gblxuICAgODpcdEtBU0FOX1NBTklUSVpFX2ttZW1sZWFrLm8gOj0gblxuICAgOTpcdEtDU0FOX1NBTklUSVpFX2ttZW1sZWFrLm8gOj0gblxuICAxMDpcdFxuICAxMTpcdCMgVGhlc2UgcHJvZHVjZSBmcmVxdWVudCBkYXRhIHJhY2UgcmVwb3J0czogbW9zdCBvZiB0aGVtIGFyZSBkdWUgdG8gcmFjZXMgb25cbiAgMTI6XHQjIHRoZSBzYW1lIHdvcmQgYnV0IGFjY2Vzc2VzIHRvIGRpZmZlcmVudCBiaXRzIG9mIHRoYXQgd29yZC4gUmUtZW5hYmxlIEtDU0FOXG4gIDEzOlx0IyBmb3IgdGhlc2Ugd2hlbiB3ZSBoYXZlIG1vcmUgY29uc2Vuc3VzIG9uIHdoYXQgdG8gZG8gYWJvdXQgdGhlbS5cbiAgMTQ6XHRLQ1NBTl9TQU5JVElaRV9zbGFiX2NvbW1vbi5vIDo9IG5cbiAgMTU6XHRLQ1NBTl9TQU5JVElaRV9zbHViLm8gOj0gblxuICAxNjpcdEtDU0FOX1NBTklUSVpFX3BhZ2VfYWxsb2MubyA6PSBuXG4gIDE3Olx0IyBCdXQgZW5hYmxlIGV4cGxpY2l0IGluc3RydW1lbnRhdGlvbiBmb3IgbWVtb3J5IGJhcnJpZXJzLlxuICAxODpcdEtDU0FOX0lOU1RSVU1FTlRfQkFSUklFUlMgOj0geVxuICAxOTpcdFxuICAyMDpcdCMgVGhlc2UgZmlsZXMgYXJlIGRpc2FibGVkIGJlY2F1c2UgdGhleSBwcm9kdWNlIG5vbi1pbnRlcmVzdGluZyBhbmQvb3JcbiAgMjE6XHQjIGZsYWt5IGNvdmVyYWdlIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb2Ygc3lzY2FsbCBpbnB1dHMuIEUuZy4gc2xhYiBpcyBvdXQgb2ZcbiAgMjI6XHQjIGZyZWUgcGFnZXMsIG9yIGEgdGFzayBpcyBtaWdyYXRlZCBiZXR3ZWVuIG5vZGVzLlxuICAyMzpcdEtDT1ZfSU5TVFJVTUVOVF9zbGFiX2NvbW1vbi5vIDo9IG5cbiAgMjQ6XHRLQ09WX0lOU1RSVU1FTlRfc2x1Yi5vIDo9IG5cbiAgMjU6XHRLQ09WX0lOU1RSVU1FTlRfcGFnZV9hbGxvYy5vIDo9IG5cbiAgMjY6XHRLQ09WX0lOU1RSVU1FTlRfZGVidWctcGFnZWFsbG9jLm8gOj0gblxuICAyNzpcdEtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbiAgMjg6XHRLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbiAgMjk6XHRLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbiAgMzA6XHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuICAzMTpcdEtDT1ZfSU5TVFJVTUVOVF92bXN0YXQubyA6PSBuXG4gIDMyOlx0S0NPVl9JTlNUUlVNRU5UX2ZhaWxzbGFiLm8gOj0gblxuICAzMzpcdFxuICAzNDpcdENGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuICAzNTpcdFxuICAzNjpcdG1tdS15XHRcdFx0Oj0gbm9tbXUub1xuICAzNzpcdG1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4gIDM4Olx0XHRcdFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcbiAgMzk6XHRcdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbiAgNDA6XHRcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbiAgNDE6XHRcbiAgNDI6XHRcbiAgNDM6XHRpZmRlZiBDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSFxuICA0NDpcdG1tdS0kKENPTkZJR19NTVUpXHQmIzQzOz0gcHJvY2Vzc192bV9hY2Nlc3Mub1xuICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0aWZkZWYgQ09ORklHXzY0QklUXG4gIDQ4Olx0bW11LSQoQ09ORklHX01NVSlcdCYjNDM7PSBtc2VhbC5vXG4gIDQ5Olx0ZW5kaWZcbiAgNTA6XHRcbiAgNTE6XHRvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiAgNTI6XHRcdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuICA1MzpcdFx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbiAgNTQ6XHRcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4gIDU1Olx0XHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiAgNTY6XHRcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxuICA1NzpcdFx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxuICA1ODpcdFx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuICA1OTpcdFxuICA2MDpcdCMgR2l2ZSAmIzM5O3BhZ2VfYWxsb2MmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG4gIDYxOlx0cGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2Mub1xuICA2MjpcdHBhZ2UtYWxsb2MtJChDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUikgJiM0Mzs9IHNodWZmbGUub1xuICA2MzpcdFxuICA2NDpcdCMgR2l2ZSAmIzM5O21lbW9yeV9ob3RwbHVnJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxuICA2NTpcdG1lbW9yeS1ob3RwbHVnLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSAmIzQzOz0gbWVtb3J5X2hvdHBsdWcub1xuICA2NjpcdFxuICA2NzpcdG9iai15ICYjNDM7PSBwYWdlLWFsbG9jLm9cbiAgNjg6XHRvYmoteSAmIzQzOz0gcGFnZV9mcmFnX2NhY2hlLm9cbiAgNjk6XHRvYmoteSAmIzQzOz0gaW5pdC1tbS5vXG4gIDcwOlx0b2JqLXkgJiM0Mzs9IG1lbWJsb2NrLm9cbiAgNzE6XHRvYmoteSAmIzQzOz0gJChtZW1vcnktaG90cGx1Zy15KVxuICA3MjpcdG9iai15ICYjNDM7PSBzbHViLm9cbiAgNzM6XHRcbiAgNzQ6XHRpZmRlZiBDT05GSUdfTU1VXG4gIDc1Olx0XHRvYmotJChDT05GSUdfQURWSVNFX1NZU0NBTExTKVx0JiM0Mzs9IG1hZHZpc2Uub1xuICA3NjpcdGVuZGlmXG4gIDc3Olx0XG4gIDc4Olx0b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG4gIDc5Olx0b2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiAgODA6XHRvYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiAgODE6XHRvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xuICA4MjpcdGlmZGVmIENPTkZJR19DTUFcbiAgODM6XHRvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbiAgODQ6XHRlbmRpZlxuICA4NTpcdG9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xuICA4NjpcdG9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xuICA4NzpcdG9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiAgODg6XHRvYmotJChDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVApICYjNDM7PSBzcGFyc2Utdm1lbW1hcC5vXG4gIDg5Olx0b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgJiM0Mzs9IG1tdV9ub3RpZmllci5vXG4gIDkwOlx0b2JqLSQoQ09ORklHX0tTTSkgJiM0Mzs9IGtzbS5vXG4gIDkxOlx0b2JqLSQoQ09ORklHX1BBR0VfUE9JU09OSU5HKSAmIzQzOz0gcGFnZV9wb2lzb24ub1xuICA5MjpcdG9iai0kKENPTkZJR19LQVNBTilcdCYjNDM7PSBrYXNhbi9cbiAgOTM6XHRvYmotJChDT05GSUdfS0ZFTkNFKSAmIzQzOz0ga2ZlbmNlL1xuICA5NDpcdG9iai0kKENPTkZJR19LTVNBTilcdCYjNDM7PSBrbXNhbi9cbiAgOTU6XHRvYmotJChDT05GSUdfRkFJTFNMQUIpICYjNDM7PSBmYWlsc2xhYi5vXG4gIDk2Olx0b2JqLSQoQ09ORklHX0ZBSUxfUEFHRV9BTExPQykgJiM0Mzs9IGZhaWxfcGFnZV9hbGxvYy5vXG4gIDk3Olx0b2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbiAgOTg6XHRvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG4gIDk5Olx0b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuIDEwMDpcdG9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk3NAoJCQkJCQkJb3V0cHV0OiAyODQKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtYWNjZXNzLm9gIENoYW5nZXMqKgoKT2theSwgc28gYG1hY2Nlc3Mub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIGBvYmoteWAsIG1lYW5pbmcgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBpdCwgcGFydGljdWxhcmx5IHRoZXNlIHN0cmluZyBmdW5jdGlvbnM6IGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBhbmQgYWxsIHRob3NlIGBicGZfYCBzdHJpbmcgY29tcGFyaXNvbiBhbmQgc2VhcmNoIGZ1bmN0aW9ucyBsaWtlIGBicGZfc3RyY21wYCwgYGJwZl9zdHJzdHJgLCBhbmQgdGhlaXIgdmFyaWF0aW9ucy4KCldhaXQgYSBtaW51dGUuLi4gSSBzZWUgdGhhdCBgYnBmX3N0cmNtcGAsIGBicGZfc3RyY2FzZWNtcGAsIGBicGZfc3RybmNhc2VjbXBgIGFyZSBhY3R1YWxseSBqdXN0IHdyYXBwZXJzIGFyb3VuZCBgX19icGZfc3RybmNhc2VjbXBgLiBBbmQgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYGJwZl9zdHJzdHJgIGFuZCBmcmllbmRzLCB3aGljaCB3cmFwIGBfX2JwZl9zdHJuc3RyYC4gU2luY2UgdGhlIHJlYWwgbG9naWMgbGl2ZXMgaW4gdGhvc2UgYF9fYnBmX2AgZnVuY3Rpb25zIGFuZCB0aGV5IGFyZSBzdGF0aWMsIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhleSBhcmUgaW5saW5lZC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhpcy4KCkJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gQXJlIHRob3NlIGBicGZfYCBmdW5jdGlvbnMgYWN0dWFsbHkgZXhwb3J0ZWQsIG9yIGFyZSB0aGV5IGp1c3QgQlBGIGtmdW5jcz8gWWVzLCB0aGV5JiMzOTtyZSBgX19icGZfa2Z1bmNgLiBTbywgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSBCUEYgcHJvZ3JhbXMuCgpUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24gYXJvdW5kIFRDTyBtYW5hZ2VtZW50IG9uIEFSTTY0LiBJdOKAmXMgc3VwcG9zZWQgdG8gcGVyZm9ybSB0aGUgVENPIGNoZWNrIG9uY2UgcGVyIGxvb3AsIGluc3RlYWQgb2Ygb24gZXZlcnkgYnl0ZS93b3JkIGFjY2Vzcy4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhvc2UgYWx3YXlzIG1ha2UgbWUgYSBsaXR0bGUgbmVydm91cy4gVGhlcmUgY291bGQgYmUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBsb29wIGdldHMgYmxvY2tlZC9zY2hlZHVsZWQgKHdoaWNoIHNob3VsZG4mIzM5O3QgaGFwcGVuLCBidXQgeW91IG5ldmVyIGtub3cpLCBvciBpZiB0aGUgZ3VhcmQgaXNuJiMzOTt0IHByb3Blcmx5IHBsYWNlZC4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbi4gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0aGUgb25seSBvbmUsIHNvIEkgd2lsbCBjaGVjay4gYG1hY2Nlc3MuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLiBgaGVscGVycy5jYCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKQWgsIGhlcmUgd2UgZ28uLi4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLiBPa2F5LCBzbyB0aGlzIGlzIEFSTTY0LXNwZWNpZmljLCBidXQgdGhlcmUgYXJlIGZhbGxiYWNrcyBpbiB0aGUgZ2VuZXJpYyBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgLiBXaGljaCBtZWFucyB0aGlzIHNob3VsZCBiZSB0ZXN0YWJsZSBvbiBhbnkgYXJjaGl0ZWN0dXJlLCBhbHRob3VnaCB0aGUgc3BlY2lmaWMgQVJNNjQgb3B0aW1pemF0aW9uIHdpbGwgb25seSBiZSBkaXJlY3RseSB0ZXN0ZWQgb24gQVJNNjQuIFN5emthbGxlciBzaG91bGQgcGljayB0aGlzIHVwIG9uIEFSTTY0IGluc3RhbmNlcywgc28gdGhhdCYjMzk7cyBnb29kLgoKQWxyaWdodCwgdGltZSB0byBwcmVwYXJlIHRoZSBzZXQtcmVzdWx0cyBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7Y29weV90b19rZXJuZWxfbm9mYXVsdCYjMzQ7LAogICAgJiMzNDtzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX3N0cmNtcCYjMzQ7LAogICAgJiMzNDticGZfc3RyY2FzZWNtcCYjMzQ7LAogICAgJiMzNDticGZfc3RybmNhc2VjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cnN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RyY2FzZXN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RybnN0ciYjMzQ7LAogICAgJiMzNDticGZfc3RybmNhc2VzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jaHImIzM0OywKICAgICYjMzQ7YnBmX3N0cmNocm51bCYjMzQ7LAogICAgJiMzNDticGZfc3RycmNociYjMzQ7LAogICAgJiMzNDticGZfc3RybmxlbiYjMzQ7LAogICAgJiMzNDticGZfc3Ryc3BuJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjc3BuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gb3B0aW1pemUgVENPIChUYWcgQ2hlY2sgT3ZlcnJpZGUpIG1hbmFnZW1lbnQgb24gQVJNNjQsIGFuZCB1cGRhdGVzIGBtYWNjZXNzLmNgIGFuZCBCUEYgc3RyaW5nIGhlbHBlcnMgdG8gdXNlIHRoZW0gdW5kZXIgYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBhY2Nlc3Mgcm91dGluZXMgYW5kIEJQRiBoZWxwZXJzLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBpZiB0aGUgbm9mYXVsdCByZWdpb25zIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2NvcHlfdG9fa2VybmVsX25vZmF1bHQmIzM0OywKICAgICYjMzQ7c3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9zdHJjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VjbXAmIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlY21wJiMzNDssCiAgICAmIzM0O2JwZl9zdHJzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cmNhc2VzdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5zdHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5jYXNlc3RyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJuY2hyJiMzNDssCiAgICAmIzM0O2JwZl9zdHJjaHJudWwmIzM0OywKICAgICYjMzQ7YnBmX3N0cnJjaHImIzM0OywKICAgICYjMzQ7YnBmX3N0cm5sZW4mIzM0OywKICAgICYjMzQ7YnBmX3N0cnNwbiYjMzQ7LAogICAgJiMzNDticGZfc3RyY3NwbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBhbmQgc2V2ZXJhbCBCUEYgc3RyaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gb3B0aW1pemUgVGFnIENoZWNrIE92ZXJyaWRlIChUQ08pIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl0IGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gYmUgdXNlZCB3aXRoaW4gYSBndWFyZGVkIHJlZ2lvbiAoYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSlgKSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHRvZ2dsaW5nIFRDTyBvbiBldmVyeSBtZW1vcnkgYWNjZXNzIGluc2lkZSBsb29wcy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNTE2MDM0YmJkYWNhYjhiMmI2NjQ0ZDliOGE0MGFiNjNkYTIyZWUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTk6NDk6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDlmNWJkOWM2OWMyNDkuLjFhMTRlYjJhNTFkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yNzAsMjggJiM0MzsyNzAsNDMgQEAgZG8gewkJCQkJCQkJCVwKICNkZWZpbmUgZ2V0X3VzZXIJX19nZXRfdXNlcgogCiAvKgotICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kCi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmcKLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgomIzQzOyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGEKJiM0MzsgKiBfX2JlZ2luL19fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSByZWdpb24uCiAgKi8KLSNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCkJCQlcCiYjNDM7I2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQlcCiBkbyB7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oZHN0KSBfX2drbl9kc3QgPSAoZHN0KTsJCQkJXAogCV9fdHlwZW9mX18oc3JjKSBfX2drbl9zcmMgPSAoc3JjKTsJCQkJXAogCWRvIHsgCQkJCQkJCQlcCiAJCV9fbGFiZWxfXyBfX2drbl9sYWJlbDsJCQkJCVwKLQkJCQkJCQkJCVwKLQkJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCV9fcmF3X2dldF9tZW0oJiMzNDtsZHImIzM0OywgKigodHlwZSAqKShfX2drbl9kc3QpKSwJCVwKIAkJICAgICAgKF9fZm9yY2UgdHlwZSAqKShfX2drbl9zcmMpLCBfX2drbl9sYWJlbCwgSyk7CVwKLQkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCV9fZ2tuX2xhYmVsOgkJCQkJCQlcCi0JCV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCVwKIAkJZ290byBlcnJfbGFiZWw7CQkJCQkJXAogCX0gd2hpbGUgKDApOwkJCQkJCQlcCiB9IHdoaWxlICgwKQogCiYjNDM7LyoKJiM0MzsgKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmQKJiM0MzsgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsCiYjNDM7ICogZXZhbHVhdGUgdGhlbSBiZWZvcmUgb3ZlcnJpZGluZyBUQ08uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJCVwKJiM0MztkbyB7CQkJCQkJCQkJXAomIzQzOwlfX2xhYmVsX18gX19na25fdGNvX2VycjsJCQkJCVwKJiM0MzsJX190eXBlb2ZfXyhkc3QpIF9fZ2tuX3Rjb19kc3QgPSAoZHN0KTsJCQkJXAomIzQzOwlfX3R5cGVvZl9fKHNyYykgX19na25fdGNvX3NyYyA9IChzcmMpOwkJCQlcCiYjNDM7CV9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTsJCQkJCVwKJiM0MzsJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShfX2drbl90Y29fZHN0LCBfX2drbl90Y29fc3JjLCB0eXBlLAlcCiYjNDM7CQkJCSAgICAgX19na25fdGNvX2Vycik7CQkJXAomIzQzOwlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlicmVhazsJCQkJCQkJCVwKJiM0MztfX2drbl90Y29fZXJyOgkJCQkJCQkJXAomIzQzOwlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlnb3RvIGVycl9sYWJlbDsJCQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiAjZGVmaW5lIF9fcHV0X21lbV9hc20oc3RvcmUsIHJlZywgeCwgYWRkciwgbGFiZWwsIHR5cGUpCQkJXAogCWFzbSBnb3RvKAkJCQkJCQlcCiAJJiMzNDsxOgkmIzM0OyBzdG9yZSAmIzM0OwkmIzM0OyByZWcgJiMzNDswLCBbJTFdXG4mIzM0OwkJCVwKQEAgLTM2NiwyOCAmIzQzOzM4MSw0OCBAQCBkbyB7CQkJCQkJCQkJXAogCiAjZGVmaW5lIHB1dF91c2VyCV9fcHV0X3VzZXIKIAotLyoKLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZAotICogX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKS4gQXMgYGRzdGAgYW5kIGBzcmNgIG1heSBjb250YWluIGJsb2NraW5nCi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqLwotI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJCVwKJiM0MzsvKiBOb2ZhdWx0IHN0b3JlIHdpdGhvdXQgVENPIG1hbmFnZW1lbnQ7IHNlZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlLiAqLwomIzQzOyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKQkJXAogZG8gewkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKGRzdCkgX19wa25fZHN0ID0gKGRzdCk7CQkJCVwKIAlfX3R5cGVvZl9fKHNyYykgX19wa25fc3JjID0gKHNyYyk7CQkJCVwKIAkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCV9fbGFiZWxfXyBfX3Brbl9lcnI7CQkJCQlcCi0JCV9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlfX3Jhd19wdXRfbWVtKCYjMzQ7c3RyJiMzNDssICooKHR5cGUgKikoX19wa25fc3JjKSksCQlcCiAJCQkgICAgICAoX19mb3JjZSB0eXBlICopKF9fcGtuX2RzdCksIF9fcGtuX2VyciwgSyk7CVwKLQkJX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCV9fcGtuX2VycjoJCQkJCQkJXAotCQlfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpOwkJCQlcCiAJCWdvdG8gZXJyX2xhYmVsOwkJCQkJCVwKIAl9IHdoaWxlICgwKTsJCQkJCQkJXAotfSB3aGlsZSgwKQomIzQzO30gd2hpbGUgKDApCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmQKJiM0MzsgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmcKJiM0MzsgKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpCQkJXAomIzQzO2RvIHsJCQkJCQkJCQlcCiYjNDM7CV9fbGFiZWxfXyBfX3Brbl90Y29fZXJyOwkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKGRzdCkgX19wa25fdGNvX2RzdCA9IChkc3QpOwkJCQlcCiYjNDM7CV9fdHlwZW9mX18oc3JjKSBfX3Brbl90Y29fc3JjID0gKHNyYyk7CQkJCVwKJiM0MzsJX19tdGVfZW5hYmxlX3Rjb19hc3luYygpOwkJCQkJXAomIzQzOwlfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fcGtuX3Rjb19kc3QsIF9fcGtuX3Rjb19zcmMsIHR5cGUsCVwKJiM0MzsJCQkJICAgICBfX3Brbl90Y29fZXJyKTsJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWJyZWFrOwkJCQkJCQkJXAomIzQzO19fcGtuX3Rjb19lcnI6CQkJCQkJCQlcCiYjNDM7CV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7CQkJCQlcCiYjNDM7CWdvdG8gZXJyX2xhYmVsOwkJCQkJCQlcCiYjNDM7fSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgY29udGV4dCBzd2l0Y2ggcmUtZW5hYmxlcyB0YWcgY2hlY2tpbmcsIGhlbmNlIHRoZSBuby1zY2hlZHVsaW5nCiYjNDM7ICogcmVxdWlyZW1lbnQgZm9yIGEgYmFyZSBub2ZhdWx0IHJlZ2lvbi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpCV9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKQomIzQzOyNkZWZpbmUgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpCV9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fYXJjaF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbikJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKaW5kZXggZWRkYmJiNjVjY2M0Zi4uYjI1ZTc3OGRkYzM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKQEAgLTYzNyw2ICYjNDM7NjM3LDI2IEBAIGRvIHsJCQkJCQkJXAogCiAjZW5kaWYgIC8qICFfX2dldF9rZXJuZWxfbm9mYXVsdCAqLwogCiYjNDM7LyoKJiM0MzsgKiBBcmNoaXRlY3R1cmVzIG1heSB1c2UgdGhlIGJlZ2luL2VuZCBob29rcyB0byBlc3RhYmxpc2ggc3RhdGUgc2hhcmVkIGJ5IGEKJiM0MzsgKiBzZXF1ZW5jZSBvZiBiYXJlIG5vZmF1bHQgYWNjZXNzZXMuIEV2ZXJ5IHBhdGggb3V0IG9mIHRoZSByZWdpb24gbXVzdCBjYWxsCiYjNDM7ICogdGhlIGVuZCBob29rLiBUaGUgcmVnaW9uLCBpbmNsdWRpbmcgZXhwcmVzc2lvbnMgcGFzc2VkIHRvIHRoZSBiYXJlCiYjNDM7ICogYWNjZXNzb3JzLCBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlci4KJiM0MzsgKi8KJiM0MzsjaWZuZGVmIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUKJiM0MzsjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUJX19nZXRfa2VybmVsX25vZmF1bHQKJiM0MzsjZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUJX19wdXRfa2VybmVsX25vZmF1bHQKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZQomIzQzOyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJZG8ge30gd2hpbGUgKDApCiYjNDM7I2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkJZG8ge30gd2hpbGUgKDApCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7REVGSU5FX0xPQ0tfR1VBUkRfMChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUsCiYjNDM7CQkgICAgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCksCiYjNDM7CQkgICAgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpKQomIzQzOwogLyoqCiAgKiBnZXRfa2VybmVsX25vZmF1bHQoKTogc2FmZWx5IGF0dGVtcHQgdG8gcmVhZCBmcm9tIGEgbG9jYXRpb24KICAqIEB2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGIzY2M1YzhmYzg3NTYuLmY4YzU1NzE2MTU4NGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jCkBAIC0zNzI2LDcgJiM0MzszNzI2LDggQEAgX19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpCiAgKgogICogU2luY2Ugc3RyaW5ncyBhcmUgbm90IG5lY2Vzc2FyaWx5ICVOVUwtdGVybWluYXRlZCwgd2UgY2Fubm90IGRpcmVjdGx5IGNhbGwKICAqIGluLWtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsIHdlIG9wZW4tY29kZSB0aGUgaW1wbGVtZW50YXRpb25zIHVzaW5nCi0gKiBfX2dldF9rZXJuZWxfbm9mYXVsdCBpbnN0ZWFkIG9mIHBsYWluIGRlcmVmZXJlbmNlIHRvIG1ha2UgdGhlbSBzYWZlLgomIzQzOyAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUgdW5kZXIgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpIHRvIG1ha2UgdGhlbQomIzQzOyAqIHNhZmUuCiAgKi8KIAogc3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pCkBAIC0zNzM4LDExICYjNDM7MzczOSwxNCBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgcwogCSAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoczIsIDEpKSB7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm4gMDsKIAogCWd1YXJkKHBhZ2VmYXVsdCkoKTsKJiM0MzsJZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBsZW4gJmFtcDsmYW1wOyBpICZsdDsgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7Ci0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMiwgczIsIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2MxLCBzMSwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKGlnbm9yZV9jYXNlKSB7CiAJCQljMSA9IHRvbG93ZXIoYzEpOwogCQkJYzIgPSB0b2xvd2VyKGMyKTsKQEAgLTM4MzcsMTAgJiM0MzszODQxLDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RybmNocihjb25zdCBjaGFyICpzX19pZ24sIHNpemVfdCBjb3VudCwgY2hhciBjKQogCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKQogCQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJaWYgKCFjb3VudCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50ICZhbXA7JmFtcDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoc2MgPT0gYykKIAkJCXJldHVybiBpOwogCQlpZiAoc2MgPT0gJiMzOTtcMCYjMzk7KQpAQCAtMzg5Myw4ICYjNDM7MzkwMCw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY2hybnVsKGNvbnN0IGNoYXIgKnNfX2lnbiwgY2hhciBjKQogCQlyZXR1cm4gLUVSQU5HRTsKIAogCWd1YXJkKHBhZ2VmYXVsdCkoKTsKJiM0MzsJZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKHNjID09ICYjMzk7XDAmIzM5OyB8fCBzYyA9PSBjKQogCQkJcmV0dXJuIGk7CiAJCXNfX2lnbiYjNDM7JiM0Mzs7CkBAIC0zOTI1LDggJiM0MzszOTMzLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJyY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgaW50IGMpCiAJCXJldHVybiAtRVJBTkdFOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO3NjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoc2MgPT0gYykKIAkJCWxhc3QgPSBpOwogCQlpZiAoc2MgPT0gJiMzOTtcMCYjMzk7KQpAQCAtMzk1NiwxMCAmIzQzOzM5NjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJubGVuKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50KQogCiAJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKQogCQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJaWYgKCFjb3VudCkKJiM0MzsJCXJldHVybiAwOwogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50ICZhbXA7JmFtcDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKGMgPT0gJiMzOTtcMCYjMzk7KQogCQkJcmV0dXJuIGk7CiAJCXNfX2lnbiYjNDM7JiM0Mzs7CkBAIC00MDA4LDEyICYjNDM7NDAyMCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnNwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKQogCX0KIAogCWd1YXJkKHBhZ2VmYXVsdCkoKTsKJiM0MzsJZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTsKIAkJaWYgKGNzID09ICYjMzk7XDAmIzM5OykKIAkJCXJldHVybiBpOwogCQlmb3IgKGogPSAwOyBqICZsdDsgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7Ci0JCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2NhLCBhY2NlcHRfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwogCQkJaWYgKGNzID09IGNhIHx8IGNhID09ICYjMzk7XDAmIzM5OykKIAkJCQlicmVhazsKIAkJfQpAQCAtNDA1MiwxMiAmIzQzOzQwNjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pCiAJfQogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewotCQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2NzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpOwogCQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQogCQkJcmV0dXJuIGk7CiAJCWZvciAoaiA9IDA7IGogJmx0OyBYQVRUUl9TSVpFX01BWDsgaiYjNDM7JiM0MzspIHsKLQkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3IsIHJlamVjdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoJmFtcDtjciwgcmVqZWN0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiAJCQlpZiAoY3MgPT0gY3IgfHwgY3IgPT0gJiMzOTtcMCYjMzk7KQogCQkJCWJyZWFrOwogCQl9CkBAIC00MDg0LDkgJiM0Mzs0MDk4LDEwIEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sCiAJfQogCiAJZ3VhcmQocGFnZWZhdWx0KSgpOwomIzQzOwlndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBpJiM0MzsmIzQzOykgewogCQlmb3IgKGogPSAwOyBpICYjNDM7IGogJmx0Oz0gbGVuICZhbXA7JmFtcDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewotCQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMiwgczIgJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2MyLCBzMiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKIAkJCWlmIChjMiA9PSAmIzM5O1wwJiMzOTspCiAJCQkJcmV0dXJuIGk7CiAJCQkvKgpAQCAtNDA5Niw3ICYjNDM7NDExMSw3IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sCiAJCQkgKi8KIAkJCWlmIChpICYjNDM7IGogPT0gbGVuKQogCQkJCWJyZWFrOwotCQkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgczEgJiM0MzsgaiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQkJX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSgmYW1wO2MxLCBzMSAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTsKIAogCQkJaWYgKGlnbm9yZV9jYXNlKSB7CiAJCQkJYzEgPSB0b2xvd2VyKGMxKTsKZGlmZiAtLWdpdCBhL21tL21hY2Nlc3MuYyBiL21tL21hY2Nlc3MuYwppbmRleCA0ODY1NTlkNjg4NTgzLi44NzQ4NmJmOThkMTVhIDEwMDY0NAotLS0gYS9tbS9tYWNjZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFjY2Vzcy5jCkBAIC0xOSw3ICYjNDM7MTksNyBAQCBib29sIF9fd2VhayBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChjb25zdCB2b2lkICp1bnNhZmVfc3JjLAogICovCiAjZGVmaW5lIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbCkJXAogCXdoaWxlIChsZW4gJmd0Oz0gc2l6ZW9mKHR5cGUpKSB7CQkJCQlcCi0JCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpOwlcCiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpOwlcCiAJCWttc2FuX2NoZWNrX21lbW9yeShzcmMsIHNpemVvZih0eXBlKSk7CQkJXAogCQlkc3QgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKIAkJc3JjICYjNDM7PSBzaXplb2YodHlwZSk7CQkJCQlcCkBAIC0zNSwyNiAmIzQzOzM1LDI5IEBAIGxvbmcgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKIAogCWlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc3JjLCBzaXplKSkKIAkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CWlmICghc2l6ZSkKJiM0MzsJCXJldHVybiAwOwogCi0JcGFnZWZhdWx0X2Rpc2FibGUoKTsKLQlpZiAoIShhbGlnbiAmYW1wOyA3KSkKLQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAzKSkKLQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKLQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTsKLQljb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwomIzQzOwlzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7CiYjNDM7CQlzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgNykpCiYjNDM7CQkJCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgMykpCiYjNDM7CQkJCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgMSkpCiYjNDM7CQkJCWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7CiYjNDM7CQkJY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpOwomIzQzOwkJfQomIzQzOwl9CiAJcmV0dXJuIDA7CiBFZmF1bHQ6Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwogCXJldHVybiAtRUZBVUxUOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0KTsKIAogI2RlZmluZSBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKQlcCiAJd2hpbGUgKGxlbiAmZ3Q7PSBzaXplb2YodHlwZSkpIHsJCQkJCVwKLQkJX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKJiM0MzsJCV9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7CVwKIAkJaW5zdHJ1bWVudF93cml0ZShkc3QsIHNpemVvZih0eXBlKSk7CQkJXAogCQlkc3QgJiM0Mzs9IHNpemVvZih0eXBlKTsJCQkJCVwKIAkJc3JjICYjNDM7PSBzaXplb2YodHlwZSk7CQkJCQlcCkBAIC02NSwyMSAmIzQzOzY4LDI1IEBAIGxvbmcgY29weV90b19rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDA7CiAKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSkKIAkJYWxpZ24gPSAodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylzcmM7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWlmICghKGFsaWduICZhbXA7IDcpKQotCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTsKLQlpZiAoIShhbGlnbiAmYW1wOyAzKSkKLQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7Ci0JaWYgKCEoYWxpZ24gJmFtcDsgMSkpCi0JCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpOwotCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwomIzQzOwlzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7CiYjNDM7CQlzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7CiYjNDM7CQkJaWYgKCEoYWxpZ24gJmFtcDsgNykpCiYjNDM7CQkJCWNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpOwomIzQzOwkJCWlmICghKGFsaWduICZhbXA7IDMpKQomIzQzOwkJCQljb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTsKJiM0MzsJCQlpZiAoIShhbGlnbiAmYW1wOyAxKSkKJiM0MzsJCQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7CiYjNDM7CQkJY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTsKJiM0MzsJCX0KJiM0MzsJfQogCXJldHVybiAwOwogRWZhdWx0OgotCXBhZ2VmYXVsdF9lbmFibGUoKTsKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIApAQCAtOTIsMTggJiM0Mzs5OSwxOSBAQCBsb25nIHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChjaGFyICpkc3QsIGNvbnN0IHZvaWQgKnVuc2FmZV9hZGRyLCBsb25nIGNvdW50KQogCWlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQodW5zYWZlX2FkZHIsIGNvdW50KSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCWRvIHsKLQkJX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHU4LCBFZmF1bHQpOwotCQlkc3QmIzQzOyYjNDM7OwotCQlzcmMmIzQzOyYjNDM7OwotCX0gd2hpbGUgKGRzdFstMV0gJmFtcDsmYW1wOyBzcmMgLSB1bnNhZmVfYWRkciAmbHQ7IGNvdW50KTsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiYjNDM7CXNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHsKJiM0MzsJCQlkbyB7CiYjNDM7CQkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHU4LCBFZmF1bHQpOwomIzQzOwkJCQlkc3QmIzQzOyYjNDM7OwomIzQzOwkJCQlzcmMmIzQzOyYjNDM7OwomIzQzOwkJCX0gd2hpbGUgKGRzdFstMV0gJmFtcDsmYW1wOyBzcmMgLSB1bnNhZmVfYWRkciAmbHQ7IGNvdW50KTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJZHN0Wy0xXSA9ICYjMzk7XDAmIzM5OzsKIAlyZXR1cm4gc3JjIC0gdW5zYWZlX2FkZHI7CiBFZmF1bHQ6Ci0JcGFnZWZhdWx0X2VuYWJsZSgpOwogCWRzdFswXSA9ICYjMzk7XDAmIzM5OzsKIAlyZXR1cm4gLUVGQVVMVDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDMKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFwcGxpY2FiaWxpdHkgQW5hbHlzaXMgZm9yIEtlcm5lbCBNZW1vcnkgQWNjZXNzIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXRzIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaXRzIGltcGFjdCBvbiBLTVNBTi4gVGhpcyBwYXRjaCB0b3VjaGVzIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAsIGBpbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaGAsIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AsIGFuZCBgbW0vbWFjY2Vzcy5jYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXJzLiBUaGUgZ29hbCBpcyB0byBvcHRpbWl6ZSB0aGUgTWVtb3J5IFRhZ2dpbmcgRXh0ZW5zaW9uIChNVEUpIG9uIEFSTTY0LCBuYW1lbHkgdGhlIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50LiBJdCBhY2hpZXZlcyB0aGlzIGJ5IGludHJvZHVjaW5nIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gZGVmaW5lZCBieSBgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClgIC8gYF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKWAuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciBLTVNBTiB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCBkb2VzbiYjMzk7dC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCYjMzk7cyBhIGNoZWNrLiBJdCBkb2VzbiYjMzk7dCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdG8gY29udHJvbCBwcm9ncmFtIGZsb3cuIEl0IGFsc28gZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgc2lnbmlmaWNhbnQgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gb3B0aW1pemluZyBob3cgZXhpc3RpbmcgbWVtb3J5IHJlZ2lvbnMgYXJlIGFjY2Vzc2VkIHNhZmVseS4gSXQmIzM5O3MgcmVhbGx5IGFib3V0IG1pbmltaXppbmcgb3ZlcmhlYWQsIHNwZWNpZmljYWxseSB0aGUgVENPIHRvZ2dsZSwgd2hpY2ggd291bGQgaGF2ZSBiZWVuIGV4cGVuc2l2ZSBpbiB0aGUgbG9vcC4KCkkgc2VlIHRoYXQgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wYCBhbHJlYWR5IGNhbGxzIGBrbXNhbl9jaGVja19tZW1vcnkoc3JjLCBzaXplb2YodHlwZSkpO2AuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCByZW1vdmUgdGhpcy4gSXQganVzdCBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBoZWxwZXIgY2FsbHMgd2l0aGluIHRoZSBsb29wIGZyb20gYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0YCB0byBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAsIGFuZCB3cmFwcyB0aGUgd2hvbGUgbG9vcCBpbiB0aGUgZ3VhcmRlZCByZWdpb24uIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLCBiZWNhdXNlIHRoZSBLTVNBTiBjaGVja3MgYWxyZWFkeSBleGlzdC4KCk15IGNvbmNsdXNpb24/IFRoaXMgcGF0Y2ggaXMgYSByZWZhY3RvcmluZy9vcHRpbWl6YXRpb24uIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGludHJvZHVjZSBuZXcgS01TQU4tc3BlY2lmaWMgcmlza3MuIElmIHRoZXJlIHdlcmUgYnVncyBpbnRyb2R1Y2VkIGhlcmUsIHRoZXkmIzM5O2QgbGlrZWx5IG1hbmlmZXN0IGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBsb2dpY2FsIGVycm9ycy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0cyB3b3VsZCwgaW4gbXkgZXhwZXJpZW5jZSwgY2F0Y2ggdGhvc2UuIFRoZXJlZm9yZSwgS01TQU4gZG9lc24mIzM5O3QgbmVlZCB0byBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQgd2l0aCBhZGRpdGlvbmFsIGZ1enppbmcgc2Vzc2lvbnMgZm9yIHRoaXMgY2hhbmdlLiBUaGUgZXhpc3RpbmcgbWVtb3J5IHNhZmV0eSBpbmZyYXN0cnVjdHVyZSBzaG91bGQgY292ZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBhbmQgc2V2ZXJhbCBCUEYgc3RyaW5nIGhlbHBlciBmdW5jdGlvbnMgdG8gb3B0aW1pemUgVGFnIENoZWNrIE92ZXJyaWRlIChUQ08pIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl0IGludHJvZHVjZXMgYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCBgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZWAgdG8gYmUgdXNlZCB3aXRoaW4gYSBndWFyZGVkIHJlZ2lvbiAoYGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSlgKSwgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHRvZ2dsaW5nIFRDTyBvbiBldmVyeSBtZW1vcnkgYWNjZXNzIGluc2lkZSBsb29wcy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBUYWcgQ2hlY2sgT3ZlcnJpZGUgKFRDTykgbWFuYWdlbWVudCBvbiBBUk02NC4gSXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBiZSB1c2VkIHdpdGhpbiBhIGd1YXJkZWQgcmVnaW9uIChgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKWApLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdG9nZ2xpbmcgVENPIG9uIGV2ZXJ5IG1lbW9yeSBhY2Nlc3MgaW5zaWRlIGxvb3BzLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZXhpc3RpbmcgYGttc2FuX2NoZWNrX21lbW9yeWAgY2FsbHMgYXJlIHByZXNlcnZlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyAoc3VjaCBhcyBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nLCBtaXNzaW5nIGVhcmx5IHJldHVybnMsIG9yIGltcHJvcGVyIHBhZ2UgZmF1bHQgaGFuZGxpbmcpIHdvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBpbnZhbGlkIG1lbW9yeSBkZXJlZmVyZW5jZXMsIG9yIGNyYXNoZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBhY2Nlc3MgdmlvbGF0aW9ucyBhcmUgYWxyZWFkeSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjI3LjYyOTY0ODA3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Mjk2NDcyMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0XCIsXG4gICAgXCJjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0XCIsXG4gICAgXCJzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRcIixcbiAgICBcImJwZl9zdHJjbXBcIixcbiAgICBcImJwZl9zdHJjYXNlY21wXCIsXG4gICAgXCJicGZfc3RybmNhc2VjbXBcIixcbiAgICBcImJwZl9zdHJzdHJcIixcbiAgICBcImJwZl9zdHJjYXNlc3RyXCIsXG4gICAgXCJicGZfc3RybnN0clwiLFxuICAgIFwiYnBmX3N0cm5jYXNlc3RyXCIsXG4gICAgXCJicGZfc3RybmNoclwiLFxuICAgIFwiYnBmX3N0cmNocm51bFwiLFxuICAgIFwiYnBmX3N0cnJjaHJcIixcbiAgICBcImJwZl9zdHJubGVuXCIsXG4gICAgXCJicGZfc3Ryc3BuXCIsXG4gICAgXCJicGZfc3RyY3NwblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBUYWcgQ2hlY2sgT3ZlcnJpZGUgKFRDTykgbWFuYWdlbWVudCBvbiBBUk02NC4gSXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBiZSB1c2VkIHdpdGhpbiBhIGd1YXJkZWQgcmVnaW9uIChgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKWApLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdG9nZ2xpbmcgVENPIG9uIGV2ZXJ5IG1lbW9yeSBhY2Nlc3MgaW5zaWRlIGxvb3BzLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBleGlzdGluZyBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxscyBhcmUgcHJlc2VydmVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIChzdWNoIGFzIGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcsIG1pc3NpbmcgZWFybHkgcmV0dXJucywgb3IgaW1wcm9wZXIgcGFnZSBmYXVsdCBoYW5kbGluZykgd291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGludmFsaWQgbWVtb3J5IGRlcmVmZXJlbmNlcywgb3IgY3Jhc2hlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGFjY2VzcyB2aW9sYXRpb25zIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo0OToyNy42Mjk2NTQyMThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU1NzUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNTE2MDM0YmJkYWNhYjhiMmI2NjQ0ZDliOGE0MGFiNjNkYTIyZWUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE5OjQ5OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG5pbmRleCA5ZjViZDljNjljMjQ5Li4xYTE0ZWIyYTUxZGNlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG5AQCAtMjcwLDI4ICsyNzAsNDMgQEAgZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gI2RlZmluZSBnZXRfdXNlclxcdF9fZ2V0X3VzZXJcXG4gXFxuIC8qXFxuLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcXG4tICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXFxuKyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGFcXG4rICogX19iZWdpbi9fX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkgcmVnaW9uLlxcbiAgKi9cXG4tI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVxcdFxcdFxcdFxcXFxcXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXFx0XFx0XFxcXFxcbiBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX3R5cGVvZl9fKGRzdCkgX19na25fZHN0ID0gKGRzdCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX3R5cGVvZl9fKHNyYykgX19na25fc3JjID0gKHNyYyk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRkbyB7IFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0X19sYWJlbF9fIF9fZ2tuX2xhYmVsO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRfX3Jhd19nZXRfbWVtKFxcXCJsZHJcXFwiLCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLFxcdFxcdFxcXFxcXG4gXFx0XFx0ICAgICAgKF9fZm9yY2UgdHlwZSAqKShfX2drbl9zcmMpLCBfX2drbl9sYWJlbCwgSyk7XFx0XFxcXFxcbi1cXHRcXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX2drbl9sYWJlbDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRnb3RvIGVycl9sYWJlbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdH0gd2hpbGUgKDApO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSB3aGlsZSAoMClcXG4gXFxuKy8qXFxuKyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxcbisgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsXFxuKyAqIGV2YWx1YXRlIHRoZW0gYmVmb3JlIG92ZXJyaWRpbmcgVENPLlxcbisgKi9cXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVxcdFxcdFxcdFxcXFxcXG4rZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19sYWJlbF9fIF9fZ2tuX3Rjb19lcnI7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3R5cGVvZl9fKGRzdCkgX19na25fdGNvX2RzdCA9IChkc3QpO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X190eXBlb2ZfXyhzcmMpIF9fZ2tuX3Rjb19zcmMgPSAoc3JjKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoX19na25fdGNvX2RzdCwgX19na25fdGNvX3NyYywgdHlwZSxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgX19na25fdGNvX2Vycik7XFx0XFx0XFx0XFxcXFxcbitcXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitfX2drbl90Y29fZXJyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGdvdG8gZXJyX2xhYmVsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSB3aGlsZSAoMClcXG4rXFxuICNkZWZpbmUgX19wdXRfbWVtX2FzbShzdG9yZSwgcmVnLCB4LCBhZGRyLCBsYWJlbCwgdHlwZSlcXHRcXHRcXHRcXFxcXFxuIFxcdGFzbSBnb3RvKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFxcIjE6XFx0XFxcIiBzdG9yZSBcXFwiXFx0XFxcIiByZWcgXFxcIjAsIFslMV1cXFxcblxcXCJcXHRcXHRcXHRcXFxcXFxuQEAgLTM2NiwyOCArMzgxLDQ4IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcbiAjZGVmaW5lIHB1dF91c2VyXFx0X19wdXRfdXNlclxcbiBcXG4tLypcXG4tICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXFxuLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cXG4tICovXFxuLSNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcXHRcXHRcXHRcXFxcXFxuKy8qIE5vZmF1bHQgc3RvcmUgd2l0aG91dCBUQ08gbWFuYWdlbWVudDsgc2VlIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUuICovXFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVxcdFxcdFxcXFxcXG4gZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X190eXBlb2ZfXyhkc3QpIF9fcGtuX2RzdCA9IChkc3QpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3NyYyA9IChzcmMpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRfX2xhYmVsX18gX19wa25fZXJyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0X19yYXdfcHV0X21lbShcXFwic3RyXFxcIiwgKigodHlwZSAqKShfX3Brbl9zcmMpKSxcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdCAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19wa25fZHN0KSwgX19wa25fZXJyLCBLKTtcXHRcXFxcXFxuLVxcdFxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRicmVhaztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fcGtuX2VycjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRnb3RvIGVycl9sYWJlbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdH0gd2hpbGUgKDApO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tfSB3aGlsZSgwKVxcbit9IHdoaWxlICgwKVxcbitcXG4rLypcXG4rICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXFxuKyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xcbisgKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cXG4rICovXFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcXHRcXHRcXHRcXFxcXFxuK2RvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fbGFiZWxfXyBfX3Brbl90Y29fZXJyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X190eXBlb2ZfXyhkc3QpIF9fcGtuX3Rjb19kc3QgPSAoZHN0KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fdHlwZW9mX18oc3JjKSBfX3Brbl90Y29fc3JjID0gKHNyYyk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fcGtuX3Rjb19kc3QsIF9fcGtuX3Rjb19zcmMsIHR5cGUsXFx0XFxcXFxcbitcXHRcXHRcXHRcXHQgICAgIF9fcGtuX3Rjb19lcnIpO1xcdFxcdFxcdFxcXFxcXG4rXFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rX19wa25fdGNvX2VycjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRnb3RvIGVycl9sYWJlbDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbisvKlxcbisgKiBBIGNvbnRleHQgc3dpdGNoIHJlLWVuYWJsZXMgdGFnIGNoZWNraW5nLCBoZW5jZSB0aGUgbm8tc2NoZWR1bGluZ1xcbisgKiByZXF1aXJlbWVudCBmb3IgYSBiYXJlIG5vZmF1bHQgcmVnaW9uLlxcbisgKi9cXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKVxcbisjZGVmaW5lIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKClcXG4gXFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2FyY2hfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pO1xcbiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcXG5pbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcXG5AQCAtNjM3LDYgKzYzNywyNiBAQCBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXG4gI2VuZGlmICAvKiAhX19nZXRfa2VybmVsX25vZmF1bHQgKi9cXG4gXFxuKy8qXFxuKyAqIEFyY2hpdGVjdHVyZXMgbWF5IHVzZSB0aGUgYmVnaW4vZW5kIGhvb2tzIHRvIGVzdGFibGlzaCBzdGF0ZSBzaGFyZWQgYnkgYVxcbisgKiBzZXF1ZW5jZSBvZiBiYXJlIG5vZmF1bHQgYWNjZXNzZXMuIEV2ZXJ5IHBhdGggb3V0IG9mIHRoZSByZWdpb24gbXVzdCBjYWxsXFxuKyAqIHRoZSBlbmQgaG9vay4gVGhlIHJlZ2lvbiwgaW5jbHVkaW5nIGV4cHJlc3Npb25zIHBhc3NlZCB0byB0aGUgYmFyZVxcbisgKiBhY2Nlc3NvcnMsIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyLlxcbisgKi9cXG4rI2lmbmRlZiBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlXFxuKyNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZVxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0XFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZVxcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0XFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmVcXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdGRvIHt9IHdoaWxlICgwKVxcbisjZGVmaW5lIF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVxcdGRvIHt9IHdoaWxlICgwKVxcbisjZW5kaWZcXG4rXFxuK0RFRklORV9MT0NLX0dVQVJEXzAoX19rZXJuZWxfbm9mYXVsdF9iYXJlLFxcbitcXHRcXHQgICAgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCksXFxuK1xcdFxcdCAgICBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkpXFxuK1xcbiAvKipcXG4gICogZ2V0X2tlcm5lbF9ub2ZhdWx0KCk6IHNhZmVseSBhdHRlbXB0IHRvIHJlYWQgZnJvbSBhIGxvY2F0aW9uXFxuICAqIEB2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5mOGM1NTcxNjE1ODRlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtMzcyNiw3ICszNzI2LDggQEAgX19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXFxuICAqXFxuICAqIFNpbmNlIHN0cmluZ3MgYXJlIG5vdCBuZWNlc3NhcmlseSAlTlVMLXRlcm1pbmF0ZWQsIHdlIGNhbm5vdCBkaXJlY3RseSBjYWxsXFxuICAqIGluLWtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsIHdlIG9wZW4tY29kZSB0aGUgaW1wbGVtZW50YXRpb25zIHVzaW5nXFxuLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuXFxuKyAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUgdW5kZXIgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpIHRvIG1ha2UgdGhlbVxcbisgKiBzYWZlLlxcbiAgKi9cXG4gXFxuIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxcbkBAIC0zNzM4LDExICszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzXFxuIFxcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoczIsIDEpKSB7XFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjMSwgczEsIGNoYXIsIGVycl9vdXQpO1xcbi1cXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFx0XFx0aWYgKGlnbm9yZV9jYXNlKSB7XFxuIFxcdFxcdFxcdGMxID0gdG9sb3dlcihjMSk7XFxuIFxcdFxcdFxcdGMyID0gdG9sb3dlcihjMik7XFxuQEAgLTM4MzcsMTAgKzM4NDEsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJuY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50LCBjaGFyIGMpXFxuIFxcbiBcXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXHRpZiAoIWNvdW50KVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcXG4tXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFx0XFx0aWYgKHNjID09IGMpXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHRpZiAoc2MgPT0gJ1xcXFwwJylcXG5AQCAtMzg5Myw4ICszOTAwLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjaHJudWwoY29uc3QgY2hhciAqc19faWduLCBjaGFyIGMpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdGlmIChzYyA9PSAnXFxcXDAnIHx8IHNjID09IGMpXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHRzX19pZ24rKztcXG5AQCAtMzkyNSw4ICszOTMzLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJyY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgaW50IGMpXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdGlmIChzYyA9PSBjKVxcbiBcXHRcXHRcXHRsYXN0ID0gaTtcXG4gXFx0XFx0aWYgKHNjID09ICdcXFxcMCcpXFxuQEAgLTM5NTYsMTAgKzM5NjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJubGVuKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50KVxcbiBcXG4gXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0aWYgKCFjb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRndWFyZChwYWdlZmF1bHQpKCk7XFxuK1xcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50IFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbiBcXHRcXHRpZiAoYyA9PSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRyZXR1cm4gaTtcXG4gXFx0XFx0c19faWduKys7XFxuQEAgLTQwMDgsMTIgKzQwMjAsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcXG4gXFx0fVxcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuLVxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdGlmIChjcyA9PSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRyZXR1cm4gaTtcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqKyspIHtcXG4tXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZjYSwgYWNjZXB0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFx0XFx0XFx0aWYgKGNzID09IGNhIHx8IGNhID09ICdcXFxcMCcpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTQwNTIsMTIgKzQwNjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXFxuIFxcdH1cXG4gXFxuIFxcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xcbi1cXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbiBcXHRcXHRpZiAoY3MgPT0gJ1xcXFwwJylcXG4gXFx0XFx0XFx0cmV0dXJuIGk7XFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XFxuLVxcdFxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjciwgcmVqZWN0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcXHUwMDI2Y3IsIHJlamVjdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XFxuIFxcdFxcdFxcdGlmIChjcyA9PSBjciB8fCBjciA9PSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC00MDg0LDkgKzQwOTgsMTAgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcXG4gXFx0fVxcbiBcXG4gXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XFxuIFxcdFxcdGZvciAoaiA9IDA7IGkgKyBqIFxcdTAwM2M9IGxlbiBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xcbi1cXHRcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2YzIsIHMyICsgaiwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXFx1MDAyNmMyLCBzMiArIGosIGNoYXIsIGVycl9vdXQpO1xcbiBcXHRcXHRcXHRpZiAoYzIgPT0gJ1xcXFwwJylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTQwOTYsNyArNDExMSw3IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoaSArIGogPT0gbGVuKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmMxLCBzMSArIGosIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFxcdTAwMjZjMSwgczEgKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4gXFxuIFxcdFxcdFxcdGlmIChpZ25vcmVfY2FzZSkge1xcbiBcXHRcXHRcXHRcXHRjMSA9IHRvbG93ZXIoYzEpO1xcbmRpZmYgLS1naXQgYS9tbS9tYWNjZXNzLmMgYi9tbS9tYWNjZXNzLmNcXG5pbmRleCA0ODY1NTlkNjg4NTgzLi44NzQ4NmJmOThkMTVhIDEwMDY0NFxcbi0tLSBhL21tL21hY2Nlc3MuY1xcbisrKyBiL21tL21hY2Nlc3MuY1xcbkBAIC0xOSw3ICsxOSw3IEBAIGJvb2wgX193ZWFrIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGNvbnN0IHZvaWQgKnVuc2FmZV9zcmMsXFxuICAqL1xcbiAjZGVmaW5lIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbClcXHRcXFxcXFxuIFxcdHdoaWxlIChsZW4gXFx1MDAzZT0gc2l6ZW9mKHR5cGUpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcXHRcXFxcXFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XFx0XFxcXFxcbiBcXHRcXHRrbXNhbl9jaGVja19tZW1vcnkoc3JjLCBzaXplb2YodHlwZSkpO1xcdFxcdFxcdFxcXFxcXG4gXFx0XFx0ZHN0ICs9IHNpemVvZih0eXBlKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdHNyYyArPSBzaXplb2YodHlwZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0zNSwyNiArMzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxcbiBcXG4gXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0aWYgKCFzaXplKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgNykpXFxuLVxcdFxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgMykpXFxuLVxcdFxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgMSkpXFxuLVxcdFxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XFxuLVxcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTtcXG4tXFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbitcXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiA3KSlcXG4rXFx0XFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAzKSlcXG4rXFx0XFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAxKSlcXG4rXFx0XFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIEVmYXVsdDpcXG4tXFx0cGFnZWZhdWx0X2VuYWJsZSgpO1xcbiBcXHRyZXR1cm4gLUVGQVVMVDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpO1xcbiBcXG4gI2RlZmluZSBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVxcdFxcXFxcXG4gXFx0d2hpbGUgKGxlbiBcXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1xcdFxcXFxcXG4rXFx0XFx0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcXHRcXFxcXFxuIFxcdFxcdGluc3RydW1lbnRfd3JpdGUoZHN0LCBzaXplb2YodHlwZSkpO1xcdFxcdFxcdFxcXFxcXG4gXFx0XFx0ZHN0ICs9IHNpemVvZih0eXBlKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdHNyYyArPSBzaXplb2YodHlwZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC02NSwyMSArNjgsMjUgQEAgbG9uZyBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFsaWduID0gMDtcXG4gXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpKVxcbiBcXHRcXHRhbGlnbiA9ICh1bnNpZ25lZCBsb25nKWRzdCB8ICh1bnNpZ25lZCBsb25nKXNyYztcXG4gXFxuLVxcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuLVxcdGlmICghKGFsaWduIFxcdTAwMjYgNykpXFxuLVxcdFxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xcbi1cXHRpZiAoIShhbGlnbiBcXHUwMDI2IDMpKVxcbi1cXHRcXHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcXG4tXFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAxKSlcXG4tXFx0XFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XFxuLVxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XFxuLVxcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4rXFx0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xcbitcXHRcXHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XFxuK1xcdFxcdFxcdGlmICghKGFsaWduIFxcdTAwMjYgNykpXFxuK1xcdFxcdFxcdFxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xcbitcXHRcXHRcXHRpZiAoIShhbGlnbiBcXHUwMDI2IDMpKVxcbitcXHRcXHRcXHRcXHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcXG4rXFx0XFx0XFx0aWYgKCEoYWxpZ24gXFx1MDAyNiAxKSlcXG4rXFx0XFx0XFx0XFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XFxuK1xcdFxcdFxcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gRWZhdWx0Olxcbi1cXHRwYWdlZmF1bHRfZW5hYmxlKCk7XFxuIFxcdHJldHVybiAtRUZBVUxUO1xcbiB9XFxuIFxcbkBAIC05MiwxOCArOTksMTkgQEAgbG9uZyBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoY2hhciAqZHN0LCBjb25zdCB2b2lkICp1bnNhZmVfYWRkciwgbG9uZyBjb3VudClcXG4gXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZCh1bnNhZmVfYWRkciwgY291bnQpKVxcbiBcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFxuLVxcdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XFxuLVxcdGRvIHtcXG4tXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHU4LCBFZmF1bHQpO1xcbi1cXHRcXHRkc3QrKztcXG4tXFx0XFx0c3JjKys7XFxuLVxcdH0gd2hpbGUgKGRzdFstMV0gXFx1MDAyNlxcdTAwMjYgc3JjIC0gdW5zYWZlX2FkZHIgXFx1MDAzYyBjb3VudCk7XFxuLVxcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4rXFx0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xcbitcXHRcXHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XFxuK1xcdFxcdFxcdGRvIHtcXG4rXFx0XFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdTgsIEVmYXVsdCk7XFxuK1xcdFxcdFxcdFxcdGRzdCsrO1xcbitcXHRcXHRcXHRcXHRzcmMrKztcXG4rXFx0XFx0XFx0fSB3aGlsZSAoZHN0Wy0xXSBcXHUwMDI2XFx1MDAyNiBzcmMgLSB1bnNhZmVfYWRkciBcXHUwMDNjIGNvdW50KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRkc3RbLTFdID0gJ1xcXFwwJztcXG4gXFx0cmV0dXJuIHNyYyAtIHVuc2FmZV9hZGRyO1xcbiBFZmF1bHQ6XFxuLVxcdHBhZ2VmYXVsdF9lbmFibGUoKTtcXG4gXFx0ZHN0WzBdID0gJ1xcXFwwJztcXG4gXFx0cmV0dXJuIC1FRkFVTFQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6MjkuMjU2MjA5MTExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDAxNTkxMzI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRcIixcbiAgICBcImNvcHlfdG9fa2VybmVsX25vZmF1bHRcIixcbiAgICBcInN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwiYnBmX3N0cmNtcFwiLFxuICAgIFwiYnBmX3N0cmNhc2VjbXBcIixcbiAgICBcImJwZl9zdHJuY2FzZWNtcFwiLFxuICAgIFwiYnBmX3N0cnN0clwiLFxuICAgIFwiYnBmX3N0cmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuc3RyXCIsXG4gICAgXCJicGZfc3RybmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuY2hyXCIsXG4gICAgXCJicGZfc3RyY2hybnVsXCIsXG4gICAgXCJicGZfc3RycmNoclwiLFxuICAgIFwiYnBmX3N0cm5sZW5cIixcbiAgICBcImJwZl9zdHJzcG5cIixcbiAgICBcImJwZl9zdHJjc3BuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBvcHRpbWl6ZSBUQ08gKFRhZyBDaGVjayBPdmVycmlkZSkgbWFuYWdlbWVudCBvbiBBUk02NCwgYW5kIHVwZGF0ZXMgYG1hY2Nlc3MuY2AgYW5kIEJQRiBzdHJpbmcgaGVscGVycyB0byB1c2UgdGhlbSB1bmRlciBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IGFjY2VzcyByb3V0aW5lcyBhbmQgQlBGIGhlbHBlcnMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGlmIHRoZSBub2ZhdWx0IHJlZ2lvbnMgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDUxNjAzNGJiZGFjYWI4YjJiNjY0NGQ5YjhhNDBhYjYzZGEyMmVlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE5OjQ5OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuaW5kZXggOWY1YmQ5YzY5YzI0OS4uMWExNGViMmE1MWRjZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuQEAgLTI3MCwyOCArMjcwLDQzIEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICNkZWZpbmUgZ2V0X3VzZXJcdF9fZ2V0X3VzZXJcbiBcbiAvKlxuLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuKyAqIE5vZmF1bHQgbG9hZCB3aXRob3V0IFRDTyBtYW5hZ2VtZW50IGZvciB1c2UgaW5zaWRlIGFcbisgKiBfX2JlZ2luL19fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSByZWdpb24uXG4gICovXG4tI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKGRzdCkgX19na25fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhzcmMpIF9fZ2tuX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiBcdGRvIHsgXHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdF9fbGFiZWxfXyBfX2drbl9sYWJlbDtcdFx0XHRcdFx0XFxcbi1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRfX3Jhd19nZXRfbWVtKFwibGRyXCIsICooKHR5cGUgKikoX19na25fZHN0KSksXHRcdFxcXG4gXHRcdCAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19na25fc3JjKSwgX19na25fbGFiZWwsIEspO1x0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XFxcbiBcdF9fZ2tuX2xhYmVsOlx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFxcXG4gXHR9IHdoaWxlICgwKTtcdFx0XHRcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbisvKlxuKyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuKyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGRzdCBhbmQgc3JjIG1heSBjb250YWluIGJsb2NraW5nIGZ1bmN0aW9ucyxcbisgKiBldmFsdWF0ZSB0aGVtIGJlZm9yZSBvdmVycmlkaW5nIFRDTy5cbisgKi9cbisjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFx0XFxcbitkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fbGFiZWxfXyBfX2drbl90Y29fZXJyO1x0XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhkc3QpIF9fZ2tuX3Rjb19kc3QgPSAoZHN0KTtcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKHNyYykgX19na25fdGNvX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbitcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoX19na25fdGNvX2RzdCwgX19na25fdGNvX3NyYywgdHlwZSxcdFxcXG4rXHRcdFx0XHQgICAgIF9fZ2tuX3Rjb19lcnIpO1x0XHRcdFxcXG4rXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4rX19na25fdGNvX2VycjpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcdFxcXG4rfSB3aGlsZSAoMClcbitcbiAjZGVmaW5lIF9fcHV0X21lbV9hc20oc3RvcmUsIHJlZywgeCwgYWRkciwgbGFiZWwsIHR5cGUpXHRcdFx0XFxcbiBcdGFzbSBnb3RvKFx0XHRcdFx0XHRcdFx0XFxcbiBcdFwiMTpcdFwiIHN0b3JlIFwiXHRcIiByZWcgXCIwLCBbJTFdXFxuXCJcdFx0XHRcXFxuQEAgLTM2NiwyOCArMzgxLDQ4IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFxuICNkZWZpbmUgcHV0X3VzZXJcdF9fcHV0X3VzZXJcbiBcbi0vKlxuLSAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuLSAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuLSAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuLSAqL1xuLSNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuKy8qIE5vZmF1bHQgc3RvcmUgd2l0aG91dCBUQ08gbWFuYWdlbWVudDsgc2VlIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUuICovXG4rI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKGRzdCkgX19wa25fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3NyYyA9IChzcmMpO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRfX2xhYmVsX18gX19wa25fZXJyO1x0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRfX3Jhd19wdXRfbWVtKFwic3RyXCIsICooKHR5cGUgKikoX19wa25fc3JjKSksXHRcdFxcXG4gXHRcdFx0ICAgICAgKF9fZm9yY2UgdHlwZSAqKShfX3Brbl9kc3QpLCBfX3Brbl9lcnIsIEspO1x0XFxcbi1cdFx0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFxcXG4gXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XFxcbiBcdF9fcGtuX2VycjpcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMCk7XHRcdFx0XHRcdFx0XHRcXFxuLX0gd2hpbGUoMClcbit9IHdoaWxlICgwKVxuK1xuKy8qXG4rICogV2UgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgYmV0d2VlbiBfX210ZV9lbmFibGVfdGNvX2FzeW5jKCkgYW5kXG4rICogX19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKS4gQXMgYGRzdGAgYW5kIGBzcmNgIG1heSBjb250YWluIGJsb2NraW5nXG4rICogZnVuY3Rpb25zLCB3ZSBtdXN0IGV2YWx1YXRlIHRoZXNlIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG4rICovXG4rI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4rZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX2xhYmVsX18gX19wa25fdGNvX2VycjtcdFx0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oZHN0KSBfX3Brbl90Y29fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhzcmMpIF9fcGtuX3Rjb19zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4rXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fcGtuX3Rjb19kc3QsIF9fcGtuX3Rjb19zcmMsIHR5cGUsXHRcXFxuK1x0XHRcdFx0ICAgICBfX3Brbl90Y29fZXJyKTtcdFx0XHRcXFxuK1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuK19fcGtuX3Rjb19lcnI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4rLypcbisgKiBBIGNvbnRleHQgc3dpdGNoIHJlLWVuYWJsZXMgdGFnIGNoZWNraW5nLCBoZW5jZSB0aGUgbm8tc2NoZWR1bGluZ1xuKyAqIHJlcXVpcmVtZW50IGZvciBhIGJhcmUgbm9mYXVsdCByZWdpb24uXG4rICovXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpXG4rI2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKClcbiBcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTtcbiAjZGVmaW5lIHJhd19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbilcdFx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5pbmRleCBlZGRiYmI2NWNjYzRmLi5iMjVlNzc4ZGRjMzhhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5AQCAtNjM3LDYgKzYzNywyNiBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcXFxuIFxuICNlbmRpZiAgLyogIV9fZ2V0X2tlcm5lbF9ub2ZhdWx0ICovXG4gXG4rLypcbisgKiBBcmNoaXRlY3R1cmVzIG1heSB1c2UgdGhlIGJlZ2luL2VuZCBob29rcyB0byBlc3RhYmxpc2ggc3RhdGUgc2hhcmVkIGJ5IGFcbisgKiBzZXF1ZW5jZSBvZiBiYXJlIG5vZmF1bHQgYWNjZXNzZXMuIEV2ZXJ5IHBhdGggb3V0IG9mIHRoZSByZWdpb24gbXVzdCBjYWxsXG4rICogdGhlIGVuZCBob29rLiBUaGUgcmVnaW9uLCBpbmNsdWRpbmcgZXhwcmVzc2lvbnMgcGFzc2VkIHRvIHRoZSBiYXJlXG4rICogYWNjZXNzb3JzLCBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlci5cbisgKi9cbisjaWZuZGVmIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVcbisjZGVmaW5lIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmVcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0XG4rI2RlZmluZSBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlXHRfX3B1dF9rZXJuZWxfbm9mYXVsdFxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlXG4rI2RlZmluZSBfX2JlZ2luX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKVx0ZG8ge30gd2hpbGUgKDApXG4rI2RlZmluZSBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdGRvIHt9IHdoaWxlICgwKVxuKyNlbmRpZlxuK1xuK0RFRklORV9MT0NLX0dVQVJEXzAoX19rZXJuZWxfbm9mYXVsdF9iYXJlLFxuK1x0XHQgICAgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKCksXG4rXHRcdCAgICBfX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkpXG4rXG4gLyoqXG4gICogZ2V0X2tlcm5lbF9ub2ZhdWx0KCk6IHNhZmVseSBhdHRlbXB0IHRvIHJlYWQgZnJvbSBhIGxvY2F0aW9uXG4gICogQHZhbDogcmVhZCBpbnRvIHRoaXMgdmFyaWFibGVcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5mOGM1NTcxNjE1ODRlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzcyNiw3ICszNzI2LDggQEAgX19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXG4gICpcbiAgKiBTaW5jZSBzdHJpbmdzIGFyZSBub3QgbmVjZXNzYXJpbHkgJU5VTC10ZXJtaW5hdGVkLCB3ZSBjYW5ub3QgZGlyZWN0bHkgY2FsbFxuICAqIGluLWtlcm5lbCBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsIHdlIG9wZW4tY29kZSB0aGUgaW1wbGVtZW50YXRpb25zIHVzaW5nXG4tICogX19nZXRfa2VybmVsX25vZmF1bHQgaW5zdGVhZCBvZiBwbGFpbiBkZXJlZmVyZW5jZSB0byBtYWtlIHRoZW0gc2FmZS5cbisgKiBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlIHVuZGVyIGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKSB0byBtYWtlIHRoZW1cbisgKiBzYWZlLlxuICAqL1xuIFxuIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxuQEAgLTM3MzgsMTEgKzM3MzksMTQgQEAgc3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNcbiBcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoczIsIDEpKSB7XG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFx0fVxuK1x0aWYgKCFsZW4pXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzEsIHMxLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjMiwgczIsIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoaWdub3JlX2Nhc2UpIHtcbiBcdFx0XHRjMSA9IHRvbG93ZXIoYzEpO1xuIFx0XHRcdGMyID0gdG9sb3dlcihjMik7XG5AQCAtMzgzNywxMCArMzg0MSwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jaHIoY29uc3QgY2hhciAqc19faWduLCBzaXplX3QgY291bnQsIGNoYXIgYylcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHRpZiAoIWNvdW50KVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gYylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0aWYgKHNjID09ICdcXDAnKVxuQEAgLTM4OTMsOCArMzkwMCw5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY2hybnVsKGNvbnN0IGNoYXIgKnNfX2lnbiwgY2hhciBjKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2c2MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChzYyA9PSAnXFwwJyB8fCBzYyA9PSBjKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRzX19pZ24rKztcbkBAIC0zOTI1LDggKzM5MzMsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnJjaHIoY29uc3QgY2hhciAqc19faWduLCBpbnQgYylcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gYylcbiBcdFx0XHRsYXN0ID0gaTtcbiBcdFx0aWYgKHNjID09ICdcXDAnKVxuQEAgLTM5NTYsMTAgKzM5NjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJubGVuKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50KVxuIFxuIFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbitcdGlmICghY291bnQpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoYyA9PSAnXFwwJylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0c19faWduKys7XG5AQCAtNDAwOCwxMiArNDAyMCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnNwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGNzID09ICdcXDAnKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y2EsIGFjY2VwdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XG4rXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjYSwgYWNjZXB0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoY3MgPT0gY2EgfHwgY2EgPT0gJ1xcMCcpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQwNTIsMTIgKzQwNjUsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXG4gXHR9XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoY3MgPT0gJ1xcMCcpXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqKyspIHtcbi1cdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjciwgcmVqZWN0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmNyLCByZWplY3RfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRcdGlmIChjcyA9PSBjciB8fCBjciA9PSAnXFwwJylcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDA4NCw5ICs0MDk4LDEwIEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXG4gXHR9XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4gXHRcdGZvciAoaiA9IDA7IGkgKyBqIFx1MDAzYz0gbGVuIFx1MDAyNlx1MDAyNiBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzIsIHMyICsgaiwgY2hhciwgZXJyX291dCk7XG4rXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjMiwgczIgKyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoYzIgPT0gJ1xcMCcpXG4gXHRcdFx0XHRyZXR1cm4gaTtcbiBcdFx0XHQvKlxuQEAgLTQwOTYsNyArNDExMSw3IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgKyBqID09IGxlbilcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBzMSArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzEsIHMxICsgaiwgY2hhciwgZXJyX291dCk7XG4gXG4gXHRcdFx0aWYgKGlnbm9yZV9jYXNlKSB7XG4gXHRcdFx0XHRjMSA9IHRvbG93ZXIoYzEpO1xuZGlmZiAtLWdpdCBhL21tL21hY2Nlc3MuYyBiL21tL21hY2Nlc3MuY1xuaW5kZXggNDg2NTU5ZDY4ODU4My4uODc0ODZiZjk4ZDE1YSAxMDA2NDRcbi0tLSBhL21tL21hY2Nlc3MuY1xuKysrIGIvbW0vbWFjY2Vzcy5jXG5AQCAtMTksNyArMTksNyBAQCBib29sIF9fd2VhayBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChjb25zdCB2b2lkICp1bnNhZmVfc3JjLFxuICAqL1xuICNkZWZpbmUgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIGxlbiwgdHlwZSwgZXJyX2xhYmVsKVx0XFxcbiBcdHdoaWxlIChsZW4gXHUwMDNlPSBzaXplb2YodHlwZSkpIHtcdFx0XHRcdFx0XFxcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1x0XFxcbiBcdFx0a21zYW5fY2hlY2tfbWVtb3J5KHNyYywgc2l6ZW9mKHR5cGUpKTtcdFx0XHRcXFxuIFx0XHRkc3QgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuIFx0XHRzcmMgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuQEAgLTM1LDI2ICszNSwyOSBAQCBsb25nIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG4gXG4gXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNyYywgc2l6ZSkpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdHBhZ2VmYXVsdF9kaXNhYmxlKCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4tXHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4rXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4rXHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4rXHRcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbitcdFx0XHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4rXHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDEpKVxuK1x0XHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcbitcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4rXHRcdH1cbitcdH1cbiBcdHJldHVybiAwO1xuIEVmYXVsdDpcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQpO1xuIFxuICNkZWZpbmUgY29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbClcdFxcXG4gXHR3aGlsZSAobGVuIFx1MDAzZT0gc2l6ZW9mKHR5cGUpKSB7XHRcdFx0XHRcdFxcXG4tXHRcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1x0XFxcbitcdFx0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGluc3RydW1lbnRfd3JpdGUoZHN0LCBzaXplb2YodHlwZSkpO1x0XHRcdFxcXG4gXHRcdGRzdCArPSBzaXplb2YodHlwZSk7XHRcdFx0XHRcdFxcXG4gXHRcdHNyYyArPSBzaXplb2YodHlwZSk7XHRcdFx0XHRcdFxcXG5AQCAtNjUsMjEgKzY4LDI1IEBAIGxvbmcgY29weV90b19rZXJuZWxfbm9mYXVsdCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDA7XG4gXG4rXHRpZiAoIXNpemUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSlcbiBcdFx0YWxpZ24gPSAodW5zaWduZWQgbG9uZylkc3QgfCAodW5zaWduZWQgbG9uZylzcmM7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuLVx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbi1cdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbi1cdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MzIsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4tXHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuLVx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1OCwgRWZhdWx0KTtcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbitcdHNjb3BlZF9ndWFyZChwYWdlZmF1bHQpIHtcbitcdFx0c2NvcGVkX2d1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkge1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiA3KSlcbitcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAzKSlcbitcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAxKSlcbitcdFx0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuK1x0XHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4rXHRcdH1cbitcdH1cbiBcdHJldHVybiAwO1xuIEVmYXVsdDpcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbkBAIC05MiwxOCArOTksMTkgQEAgbG9uZyBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoY2hhciAqZHN0LCBjb25zdCB2b2lkICp1bnNhZmVfYWRkciwgbG9uZyBjb3VudClcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQodW5zYWZlX2FkZHIsIGNvdW50KSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0ZG8ge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdTgsIEVmYXVsdCk7XG4tXHRcdGRzdCsrO1xuLVx0XHRzcmMrKztcbi1cdH0gd2hpbGUgKGRzdFstMV0gXHUwMDI2XHUwMDI2IHNyYyAtIHVuc2FmZV9hZGRyIFx1MDAzYyBjb3VudCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4rXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4rXHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbitcdFx0XHRkbyB7XG4rXHRcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKGRzdCwgc3JjLCB1OCwgRWZhdWx0KTtcbitcdFx0XHRcdGRzdCsrO1xuK1x0XHRcdFx0c3JjKys7XG4rXHRcdFx0fSB3aGlsZSAoZHN0Wy0xXSBcdTAwMjZcdTAwMjYgc3JjIC0gdW5zYWZlX2FkZHIgXHUwMDNjIGNvdW50KTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0ZHN0Wy0xXSA9ICdcXDAnO1xuIFx0cmV0dXJuIHNyYyAtIHVuc2FmZV9hZGRyO1xuIEVmYXVsdDpcbi1cdHBhZ2VmYXVsdF9lbmFibGUoKTtcbiBcdGRzdFswXSA9ICdcXDAnO1xuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6MjkuMjU2MjEwOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg1MTQwMDgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgTmV3IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIGFuZCB1c2VzIHRoZW0gd2l0aGluIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKSlgIGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgYW5kIGBtbS9tYWNjZXNzLmNgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgYWx0ZXJzIGhvdyBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXJzIGFyZSBpbXBsZW1lbnRlZC4gSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBiZW5lZml0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIFRDTyBtYW5hZ2VtZW50IG9uIEFSTTY0IGJ5IHJlZHVjaW5nIG92ZXJoZWFkLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHdvcnRoIGZ1enppbmc/XCIgWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IEJQRiBoZWxwZXJzIGFuZCBtZW1vcnkgYWNjZXNzIG1lY2hhbmlzbXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQncyBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQgbWUgbGlzdCB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkOlxuKiAgIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgXG4qICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgXG4qICAgYHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGBcbiogICBgX19icGZfc3RybmNhc2VjbXBgXG4qICAgYGJwZl9zdHJuY2hyYFxuKiAgIGBicGZfc3RyY2hybnVsYFxuKiAgIGBicGZfc3RycmNocmBcbiogICBgYnBmX3N0cm5sZW5gXG4qICAgYGJwZl9zdHJzcG5gXG4qICAgYGJwZl9zdHJjc3BuYFxuKiAgIGBfX2JwZl9zdHJuc3RyYFxuXG5UaGVzZSBhcmUgYWxsIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSSBjYW4gc2VlIGNsZWFyIHBhdGhzIHRvIGZ1enppbmcgdGhlc2UgdG8gZXhwb3NlIGFueSBuZXcgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBUQ08gbWFuYWdlbWVudCBvcHRpbWl6YXRpb24uXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGUgRm9jdXNTeW1ib2xzIGZvciB0aGUgZnV6emVyLiBJIG5lZWQgdG8gbGlzdCB0aGVtIGFsbDpcblxuKiAgIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgXG4qICAgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgXG4qICAgYHN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGBcbiogICBgYnBmX3N0cm5jaHJgXG4qICAgYGJwZl9zdHJjaHJudWxgXG4qICAgYGJwZl9zdHJyY2hyYFxuKiAgIGBicGZfc3RybmxlbmBcbiogICBgYnBmX3N0cnNwbmBcbiogICBgYnBmX3N0cmNzcG5gXG5cbkhtbSwgYF9fYnBmX3N0cm5jYXNlY21wYCBhbmQgYF9fYnBmX3N0cm5zdHJgIGFyZSBzdGF0aWMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGV5J3JlIGlubGluZWQgb3IgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgY2FsbCBgX19icGZfc3RybmNhc2VjbXBgIGFuZCBgX19icGZfc3RybnN0cmAuIFRoYXQgd2lsbCBtYWtlIHN1cmUgSSdtIGNhcHR1cmluZyBhbGwgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo0OTozOC4xMDc2MTQ1MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzI1MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX3N0cm5jYXNlY21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTM3MjA9X19icGZfa2Z1bmMgdm9pZCBfX2JwZl90cmFwKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzMyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3MzM6c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzczNC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzc5PV9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc4MC17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc4MTpcXHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgZmFsc2UsIFhBVFRSX1NJWkVfTUFYKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzgyLX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTM3OTc9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc5OC17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc5OTpcXHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgWEFUVFJfU0laRV9NQVgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTM4MDAtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzgxNj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sIHNpemVfdCBsZW4pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzgxNy17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzgxODpcXHRyZXR1cm4gX19icGZfc3RybmNhc2VjbXAoczFfX2lnbiwgczJfX2lnbiwgdHJ1ZSwgbGVuKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zODE5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6MzguMjE0MzQzNjg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NDE3MzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyBTdHJpbmcgQ29tcGFyaXNvbnMgaW4gQlBGKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHN0cmluZyBjb21wYXJpc29ucyBhcmUgaGFuZGxlZCBpbiBCUEYuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgYnBmX3N0cmNtcGAsIGBicGZfc3RyY2FzZWNtcGAsIGFuZCBgYnBmX3N0cm5jYXNlY21wYCBhbGwgc2VlbSB0byBmdW5uZWwgZG93biB0byBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbjogYF9fYnBmX3N0cm5jYXNlY21wYC4gVGhpcyBzdWdnZXN0cyBhIGxheWVyIG9mIGFic3RyYWN0aW9uLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgYW5kIG1ha2VzIHNlbnNlIGZvciBjb2RlIHJldXNlIGFuZCBwb3RlbnRpYWxseSBmb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBUaGUgY29yZSBzdHJpbmcgY29tcGFyaXNvbiwgZXNwZWNpYWxseSBjYXNlLWluc2Vuc2l0aXZlIHZlcnNpb25zLCBpcyBjbGVhcmx5IGNlbnRyYWxpemVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXItbGV2ZWwgY29tcGFyaXNvbiBpcyB3b3JraW5nLiBMZXQncyBtb3ZlIG9uIGFuZCBleGFtaW5lIGBfX2JwZl9zdHJuc3RyYCBuZXh0LiBJdCBzZWVtcyBsaWtlbHkgdGhhdCB0aGUgYF9fYnBmX3N0cm5jYXNlY21wYCB3b3VsZCBsaWtlbHkgdXRpbGl6ZSBzb21ldGhpbmcgbGlrZSB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6NDIuMDc4NTIwODIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTA3Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX3N0cm5zdHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9NDA1Nz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQwODgtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDA4OTpzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQwOTAtXFx0XFx0XFx0IGJvb2wgaWdub3JlX2Nhc2UpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MTUwPV9fYnBmX2tmdW5jIGludCBicGZfc3Ryc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDE1MS17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDE1MjpcXHRyZXR1cm4gX19icGZfc3RybnN0cihzMV9faWduLCBzMl9faWduLCBYQVRUUl9TSVpFX01BWCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxNTMtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE2OT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbilcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTcwLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MTcxOlxcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIFhBVFRSX1NJWkVfTUFYLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTcyLX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQxODg9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MTkwLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MTkxOlxcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIGxlbiwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQxOTItfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDIwOT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjExLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MjEyOlxcdHJldHVybiBfX2JwZl9zdHJuc3RyKHMxX19pZ24sIHMyX19pZ24sIGxlbiwgdHJ1ZSk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIxMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjQyLjE2NTYzMzk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1ODY3MTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgU3RyaW5nIEhlbHBlciBhbmQgYG1hY2Nlc3NgIEZ1bmN0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIEJQRiBzdHJpbmcgZnVuY3Rpb25zLiBSaWdodCwgdGhvc2UgaGVscGVycyBhcmU6IGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYGJwZl9zdHJuY2FzZWNtcGAsIGBicGZfc3Ryc3RyYCwgYGJwZl9zdHJjYXNlc3RyYCwgYGJwZl9zdHJuc3RyYCwgYGJwZl9zdHJuY2FzZXN0cmAsIGBicGZfc3RybmNocmAsIGBicGZfc3RyY2hybnVsYCwgYGJwZl9zdHJyY2hyYCwgYGJwZl9zdHJubGVuYCwgYGJwZl9zdHJzcG5gLCBhbmQgYGJwZl9zdHJjc3BuYC4gQW5kIHRoZW4sIG9uIHRoZSBtZW1vcnkgYWNjZXNzIHNpZGUsIHdlIGhhdmUgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLlxuXG5Ob3csIGJlZm9yZSBJIHN0YXJ0IHdyaXRpbmcgYW55dGhpbmcgdXNpbmcgdGhlc2UsIEkgbmVlZCB0byB0aGluayBhYm91dCBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZS4gSSBrbm93IEJQRiBoZWxwZXJzIGdlbmVyYWxseSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCB0aGVzZSBkYXlzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEkgdGhpbmsgdGhlIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgYnV0IEknbGwgbmVlZCB0byB3YXRjaCBmb3IgdGhvc2Ugd2hlbiB0cmFjaW5nIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGJlaGF2aW5nIGNvcnJlY3RseS5cblxuQWxyaWdodCwgdGhlIG1vc3QgcmVsaWFibGUgdGhpbmcgdG8gZG8gaXMgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJvdW5kIHRob3NlIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zLiBCZXR0ZXIgdG8gYmUgc3VyZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6NDguMjI0MzA3OTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjI1MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJjbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MzczMz1zdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjYtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc2NzogKiBicGZfc3RyY21wIC0gQ29tcGFyZSB0d28gc3RyaW5nc1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjgtICogQHMxX19pZ246IE9uZSBzdHJpbmdcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NzgtICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc3OTpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM3ODAte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2ND1CVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTY1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY21wKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTY2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZWNtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjQ4LjMwOTUzNjQ5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3OTAyMTUyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyBCUEYgSGVscGVyIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCBkb24ndCBzZWVtIHRvIGJlIGd1YXJkZWQgYnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYC4gVGhhdCdzIGEgYml0IHVudXN1YWwsIG5vcm1hbGx5IEknZCBleHBlY3QgdG8gc2VlIHNvbWUga2luZCBvZiBjaGVjayBhcm91bmQgdGhpcywgYnV0IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIFRoZSBmYWN0IHRoYXQgdGhlIGVudGlyZSBmaWxlIGV4aXN0cyB3aXRoaW4gYSBCUEYgY29udGV4dCBtYWtlcyBtZSBhc3N1bWUgaXQncyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LCBJIHNob3VsZCB2ZXJpZnksIGJ1dCBJJ20gdGhpbmtpbmcgSSdsbCBxdWlja2x5IHNlZSB0aGF0IHRoZSBNYWtlZmlsZSBkaWN0YXRlcyB0aGlzIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZWlyIGluY2x1c2lvbiBiYXNlZCBvbiB0aGF0IGNvbmZpZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NDk6NTQuMDk5NzU0NTI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDMxOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzI6XFx0ZW5kaWZcXG4gIDMzOlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzNTpcXHRlbmRpZlxcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICAzNzpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgMzk6XFx0ZW5kaWZcXG4gIDQwOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ1OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0NjpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDQ3OlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuICA0ODpcXHQjIGJ0Zl9lbmNvZGVyX19hZGRfc2F2ZWRfZnVuYygpIGJ5IGtlZXBpbmcgdGhlIGZpcnN0IGluc3RhbmNlIHNlZW4uIFdlXFxuICA0OTpcXHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXFxuICA1MDpcXHQjIG92ZXIgdGhvc2Ugd2l0aGluIGJwZl9sc20uby4gSGF2aW5nIGJwZl9sc21fcHJvdG8ubyBwcmVjZWRlXFxuICA1MTpcXHQjIGJwZl9sc20ubyBlbnN1cmVzIGl0cyBEV0FSRiBDVSBpcyBwcm9jZXNzZWQgZWFybHksIGZvcmNpbmcgdGhlXFxuICA1MjpcXHQjIGdlbmVyYXRlZCBCVEYgdG8gY29udGFpbiB0aGUgb3ZlcnJpZGVzLlxcbiAgNTM6XFx0I1xcbiAgNTQ6XFx0IyBOb3RhYmx5LCB0aGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpbHN0IHRoZSBkZWR1cGxpY2F0aW9uXFxuICA1NTpcXHQjIHNlbWFudGljcyB3aXRoaW4gcGFob2xlIGFyZSByZXZpc2l0ZWQgYWNjb3JkaW5nbHkuXFxuICA1NjpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX0gKz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ub1xcbiAgNTc6XFx0ZW5kaWZcXG4gIDU4OlxcdGlmbmVxICgkKENPTkZJR19DUllQVE8pLClcXG4gIDU5OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cXG4gIDYwOlxcdGVuZGlmXFxuICA2MTpcXHRvYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxuICA2MjpcXHRcXG4gIDYzOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG4gIDY0OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcbiAgNjU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfcmVsb2NhdGUub1xcbiAgNjY6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrbWVtX2NhY2hlX2l0ZXIub1xcbiAgNjc6XFx0aWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXFxuICA2ODpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRtYWJ1Zl9pdGVyLm9cXG4gIDY5OlxcdGVuZGlmXFxuICA3MDpcXHRcXG4gIDcxOlxcdENGTEFHU19SRU1PVkVfcGVyY3B1X2ZyZWVsaXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDcyOlxcdENGTEFHU19SRU1PVkVfYnBmX2xydV9saXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDczOlxcdENGTEFHU19SRU1PVkVfcXVldWVfc3RhY2tfbWFwcy5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3NDpcXHRDRkxBR1NfUkVNT1ZFX2xwbV90cmllLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4gIDc1OlxcdENGTEFHU19SRU1PVkVfcmluZ2J1Zi5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3NjpcXHRDRkxBR1NfUkVNT1ZFX3Jxc3BpbmxvY2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo0OTo1NC4wOTk4NjgwNTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMzQyMDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqSW52ZXN0aWdhdGluZyBlQlBGIEhlbHBlciBBdmFpbGFiaWxpdHkgYW5kIE1lbW9yeSBBY2Nlc3MgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgaGVscGVycy5vYCBpcyBpbmRlZWQgY29uZGl0aW9uYWwgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuIEdvb2QsIHRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24gcmVnYXJkaW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhvc2UgZUJQRiBoZWxwZXIgZnVuY3Rpb25zLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB0cmFjayBkb3duIHRoaXMgaXNzdWUgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUga2VybmVsIGRlZmluZXMgYG1hY2Nlc3Mub2AuIE15IGd1dCB0ZWxscyBtZSBpdCB3aWxsIGJlIGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHR5cGljYWxseSByZXNpZGVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gYW5kIGdldCB0aGUgcmVsZXZhbnQgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjU3LjgwMzI5MDg3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG1lbW9yeSBtYW5hZ2VyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRLQVNBTl9TQU5JVElaRV9zbGFiX2NvbW1vbi5vIDo9IG5cXG4gICA3OlxcdEtBU0FOX1NBTklUSVpFX3NsdWIubyA6PSBuXFxuICAgODpcXHRLQVNBTl9TQU5JVElaRV9rbWVtbGVhay5vIDo9IG5cXG4gICA5OlxcdEtDU0FOX1NBTklUSVpFX2ttZW1sZWFrLm8gOj0gblxcbiAgMTA6XFx0XFxuICAxMTpcXHQjIFRoZXNlIHByb2R1Y2UgZnJlcXVlbnQgZGF0YSByYWNlIHJlcG9ydHM6IG1vc3Qgb2YgdGhlbSBhcmUgZHVlIHRvIHJhY2VzIG9uXFxuICAxMjpcXHQjIHRoZSBzYW1lIHdvcmQgYnV0IGFjY2Vzc2VzIHRvIGRpZmZlcmVudCBiaXRzIG9mIHRoYXQgd29yZC4gUmUtZW5hYmxlIEtDU0FOXFxuICAxMzpcXHQjIGZvciB0aGVzZSB3aGVuIHdlIGhhdmUgbW9yZSBjb25zZW5zdXMgb24gd2hhdCB0byBkbyBhYm91dCB0aGVtLlxcbiAgMTQ6XFx0S0NTQU5fU0FOSVRJWkVfc2xhYl9jb21tb24ubyA6PSBuXFxuICAxNTpcXHRLQ1NBTl9TQU5JVElaRV9zbHViLm8gOj0gblxcbiAgMTY6XFx0S0NTQU5fU0FOSVRJWkVfcGFnZV9hbGxvYy5vIDo9IG5cXG4gIDE3OlxcdCMgQnV0IGVuYWJsZSBleHBsaWNpdCBpbnN0cnVtZW50YXRpb24gZm9yIG1lbW9yeSBiYXJyaWVycy5cXG4gIDE4OlxcdEtDU0FOX0lOU1RSVU1FTlRfQkFSUklFUlMgOj0geVxcbiAgMTk6XFx0XFxuICAyMDpcXHQjIFRoZXNlIGZpbGVzIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHRoZXkgcHJvZHVjZSBub24taW50ZXJlc3RpbmcgYW5kL29yXFxuICAyMTpcXHQjIGZsYWt5IGNvdmVyYWdlIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb2Ygc3lzY2FsbCBpbnB1dHMuIEUuZy4gc2xhYiBpcyBvdXQgb2ZcXG4gIDIyOlxcdCMgZnJlZSBwYWdlcywgb3IgYSB0YXNrIGlzIG1pZ3JhdGVkIGJldHdlZW4gbm9kZXMuXFxuICAyMzpcXHRLQ09WX0lOU1RSVU1FTlRfc2xhYl9jb21tb24ubyA6PSBuXFxuICAyNDpcXHRLQ09WX0lOU1RSVU1FTlRfc2x1Yi5vIDo9IG5cXG4gIDI1OlxcdEtDT1ZfSU5TVFJVTUVOVF9wYWdlX2FsbG9jLm8gOj0gblxcbiAgMjY6XFx0S0NPVl9JTlNUUlVNRU5UX2RlYnVnLXBhZ2VhbGxvYy5vIDo9IG5cXG4gIDI3OlxcdEtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG4gIDI4OlxcdEtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbiAgMjk6XFx0S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuICAzMDpcXHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbiAgMzE6XFx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cXG4gIDMyOlxcdEtDT1ZfSU5TVFJVTUVOVF9mYWlsc2xhYi5vIDo9IG5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Q0ZMQUdTX2luaXQtbW0ubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDM1OlxcdFxcbiAgMzY6XFx0bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxuICAzNzpcXHRtbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG4gIDQwOlxcdFxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXG4gIDQzOlxcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXFxuICA0NDpcXHRtbXUtJChDT05GSUdfTU1VKVxcdCs9IHByb2Nlc3Nfdm1fYWNjZXNzLm9cXG4gIDQ1OlxcdGVuZGlmXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGlmZGVmIENPTkZJR182NEJJVFxcbiAgNDg6XFx0bW11LSQoQ09ORklHX01NVSlcXHQrPSBtc2VhbC5vXFxuICA0OTpcXHRlbmRpZlxcbiAgNTA6XFx0XFxuICA1MTpcXHRvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbiAgNTI6XFx0XFx0XFx0XFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcXFxcbiAgNTM6XFx0XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxcXFxuICA1NDpcXHRcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4gIDU1OlxcdFxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxuICA1ODpcXHRcXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcXG4gIDU5OlxcdFxcbiAgNjA6XFx0IyBHaXZlICdwYWdlX2FsbG9jJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2MTpcXHRwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXFxuICA2MjpcXHRwYWdlLWFsbG9jLSQoQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IpICs9IHNodWZmbGUub1xcbiAgNjM6XFx0XFxuICA2NDpcXHQjIEdpdmUgJ21lbW9yeV9ob3RwbHVnJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2NTpcXHRtZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcub1xcbiAgNjY6XFx0XFxuICA2NzpcXHRvYmoteSArPSBwYWdlLWFsbG9jLm9cXG4gIDY4OlxcdG9iai15ICs9IHBhZ2VfZnJhZ19jYWNoZS5vXFxuICA2OTpcXHRvYmoteSArPSBpbml0LW1tLm9cXG4gIDcwOlxcdG9iai15ICs9IG1lbWJsb2NrLm9cXG4gIDcxOlxcdG9iai15ICs9ICQobWVtb3J5LWhvdHBsdWcteSlcXG4gIDcyOlxcdG9iai15ICs9IHNsdWIub1xcbiAgNzM6XFx0XFxuICA3NDpcXHRpZmRlZiBDT05GSUdfTU1VXFxuICA3NTpcXHRcXHRvYmotJChDT05GSUdfQURWSVNFX1NZU0NBTExTKVxcdCs9IG1hZHZpc2Uub1xcbiAgNzY6XFx0ZW5kaWZcXG4gIDc3OlxcdFxcbiAgNzg6XFx0b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxuICA3OTpcXHRvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbiAgODA6XFx0b2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuICA4MTpcXHRvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbiAgODI6XFx0aWZkZWYgQ09ORklHX0NNQVxcbiAgODM6XFx0b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHQrPSBodWdldGxiX2NtYS5vXFxuICA4NDpcXHRlbmRpZlxcbiAgODU6XFx0b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxuICA4NjpcXHRvYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG4gIDg3OlxcdG9iai0kKENPTkZJR19TUEFSU0VNRU0pXFx0Kz0gc3BhcnNlLm9cXG4gIDg4OlxcdG9iai0kKENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCkgKz0gc3BhcnNlLXZtZW1tYXAub1xcbiAgODk6XFx0b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm9cXG4gIDkwOlxcdG9iai0kKENPTkZJR19LU00pICs9IGtzbS5vXFxuICA5MTpcXHRvYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IHBhZ2VfcG9pc29uLm9cXG4gIDkyOlxcdG9iai0kKENPTkZJR19LQVNBTilcXHQrPSBrYXNhbi9cXG4gIDkzOlxcdG9iai0kKENPTkZJR19LRkVOQ0UpICs9IGtmZW5jZS9cXG4gIDk0OlxcdG9iai0kKENPTkZJR19LTVNBTilcXHQrPSBrbXNhbi9cXG4gIDk1OlxcdG9iai0kKENPTkZJR19GQUlMU0xBQikgKz0gZmFpbHNsYWIub1xcbiAgOTY6XFx0b2JqLSQoQ09ORklHX0ZBSUxfUEFHRV9BTExPQykgKz0gZmFpbF9wYWdlX2FsbG9jLm9cXG4gIDk3OlxcdG9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbiAgOTg6XFx0b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxuICA5OTpcXHRvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG4gMTAwOlxcdG9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjQ5OjU3LjgwMzQxNzQ5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ2NTIzMzI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYG1hY2Nlc3Mub2AgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGBtYWNjZXNzLm9gIGlzIGRlZmluaXRlbHkgcGFydCBvZiBgb2JqLXlgLCBtZWFuaW5nIGl0J3MgYWx3YXlzIGluY2x1ZGVkLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBpdCwgcGFydGljdWxhcmx5IHRoZXNlIHN0cmluZyBmdW5jdGlvbnM6IGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBhbmQgYWxsIHRob3NlIGBicGZfYCBzdHJpbmcgY29tcGFyaXNvbiBhbmQgc2VhcmNoIGZ1bmN0aW9ucyBsaWtlIGBicGZfc3RyY21wYCwgYGJwZl9zdHJzdHJgLCBhbmQgdGhlaXIgdmFyaWF0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSB0aGF0IGBicGZfc3RyY21wYCwgYGJwZl9zdHJjYXNlY21wYCwgYGJwZl9zdHJuY2FzZWNtcGAgYXJlIGFjdHVhbGx5IGp1c3Qgd3JhcHBlcnMgYXJvdW5kIGBfX2JwZl9zdHJuY2FzZWNtcGAuIEFuZCB0aGUgc2FtZSBpcyB0cnVlIGZvciBgYnBmX3N0cnN0cmAgYW5kIGZyaWVuZHMsIHdoaWNoIHdyYXAgYF9fYnBmX3N0cm5zdHJgLiBTaW5jZSB0aGUgcmVhbCBsb2dpYyBsaXZlcyBpbiB0aG9zZSBgX19icGZfYCBmdW5jdGlvbnMgYW5kIHRoZXkgYXJlIHN0YXRpYywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXkgYXJlIGlubGluZWQuIEl0J3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhpcy5cblxuQnV0IGxldCBtZSBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBBcmUgdGhvc2UgYGJwZl9gIGZ1bmN0aW9ucyBhY3R1YWxseSBleHBvcnRlZCwgb3IgYXJlIHRoZXkganVzdCBCUEYga2Z1bmNzPyBZZXMsIHRoZXkncmUgYF9fYnBmX2tmdW5jYC4gU28sIHRoZXkncmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSBCUEYgcHJvZ3JhbXMuXG5cblRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFuIG9wdGltaXphdGlvbiBhcm91bmQgVENPIG1hbmFnZW1lbnQgb24gQVJNNjQuIEl04oCZcyBzdXBwb3NlZCB0byBwZXJmb3JtIHRoZSBUQ08gY2hlY2sgb25jZSBwZXIgbG9vcCwgaW5zdGVhZCBvZiBvbiBldmVyeSBieXRlL3dvcmQgYWNjZXNzLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRob3NlIGFsd2F5cyBtYWtlIG1lIGEgbGl0dGxlIG5lcnZvdXMuIFRoZXJlIGNvdWxkIGJlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbG9vcCBnZXRzIGJsb2NrZWQvc2NoZWR1bGVkICh3aGljaCBzaG91bGRuJ3QgaGFwcGVuLCBidXQgeW91IG5ldmVyIGtub3cpLCBvciBpZiB0aGUgZ3VhcmQgaXNuJ3QgcHJvcGVybHkgcGxhY2VkLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc2FmZS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbi4gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IG9uZSwgc28gSSB3aWxsIGNoZWNrLiBgbWFjY2Vzcy5jYCBpcyBhbHdheXMgY29tcGlsZWQuIGBoZWxwZXJzLmNgIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAuXG5cbkFoLCBoZXJlIHdlIGdvLi4uIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYC4gT2theSwgc28gdGhpcyBpcyBBUk02NC1zcGVjaWZpYywgYnV0IHRoZXJlIGFyZSBmYWxsYmFja3MgaW4gdGhlIGdlbmVyaWMgYGluY2x1ZGUvbGludXgvdWFjY2Vzcy5oYC4gV2hpY2ggbWVhbnMgdGhpcyBzaG91bGQgYmUgdGVzdGFibGUgb24gYW55IGFyY2hpdGVjdHVyZSwgYWx0aG91Z2ggdGhlIHNwZWNpZmljIEFSTTY0IG9wdGltaXphdGlvbiB3aWxsIG9ubHkgYmUgZGlyZWN0bHkgdGVzdGVkIG9uIEFSTTY0LiBTeXprYWxsZXIgc2hvdWxkIHBpY2sgdGhpcyB1cCBvbiBBUk02NCBpbnN0YW5jZXMsIHNvIHRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHByZXBhcmUgdGhlIHNldC1yZXN1bHRzIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTc0LCJPdXRwdXRUb2tlbnMiOjI4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjUwOjA5LjI2ODY1MzY3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjY4NDgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRcIixcbiAgICBcImNvcHlfdG9fa2VybmVsX25vZmF1bHRcIixcbiAgICBcInN0cm5jcHlfZnJvbV9rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwiYnBmX3N0cmNtcFwiLFxuICAgIFwiYnBmX3N0cmNhc2VjbXBcIixcbiAgICBcImJwZl9zdHJuY2FzZWNtcFwiLFxuICAgIFwiYnBmX3N0cnN0clwiLFxuICAgIFwiYnBmX3N0cmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuc3RyXCIsXG4gICAgXCJicGZfc3RybmNhc2VzdHJcIixcbiAgICBcImJwZl9zdHJuY2hyXCIsXG4gICAgXCJicGZfc3RyY2hybnVsXCIsXG4gICAgXCJicGZfc3RycmNoclwiLFxuICAgIFwiYnBmX3N0cm5sZW5cIixcbiAgICBcImJwZl9zdHJzcG5cIixcbiAgICBcImJwZl9zdHJjc3BuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBvcHRpbWl6ZSBUQ08gKFRhZyBDaGVjayBPdmVycmlkZSkgbWFuYWdlbWVudCBvbiBBUk02NCwgYW5kIHVwZGF0ZXMgYG1hY2Nlc3MuY2AgYW5kIEJQRiBzdHJpbmcgaGVscGVycyB0byB1c2UgdGhlbSB1bmRlciBgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IGFjY2VzcyByb3V0aW5lcyBhbmQgQlBGIGhlbHBlcnMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBidWdzIGlmIHRoZSBub2ZhdWx0IHJlZ2lvbnMgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwiY29weV90b19rZXJuZWxfbm9mYXVsdFwiLFxuICAgIFwic3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0XCIsXG4gICAgXCJicGZfc3RyY21wXCIsXG4gICAgXCJicGZfc3RyY2FzZWNtcFwiLFxuICAgIFwiYnBmX3N0cm5jYXNlY21wXCIsXG4gICAgXCJicGZfc3Ryc3RyXCIsXG4gICAgXCJicGZfc3RyY2FzZXN0clwiLFxuICAgIFwiYnBmX3N0cm5zdHJcIixcbiAgICBcImJwZl9zdHJuY2FzZXN0clwiLFxuICAgIFwiYnBmX3N0cm5jaHJcIixcbiAgICBcImJwZl9zdHJjaHJudWxcIixcbiAgICBcImJwZl9zdHJyY2hyXCIsXG4gICAgXCJicGZfc3RybmxlblwiLFxuICAgIFwiYnBmX3N0cnNwblwiLFxuICAgIFwiYnBmX3N0cmNzcG5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIG9wdGltaXplIFRDTyAoVGFnIENoZWNrIE92ZXJyaWRlKSBtYW5hZ2VtZW50IG9uIEFSTTY0LCBhbmQgdXBkYXRlcyBgbWFjY2Vzcy5jYCBhbmQgQlBGIHN0cmluZyBoZWxwZXJzIHRvIHVzZSB0aGVtIHVuZGVyIGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzIGFuZCBCUEYgaGVscGVycywgd2hpY2ggY291bGQgaW50cm9kdWNlIGJ1Z3MgaWYgdGhlIG5vZmF1bHQgcmVnaW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTo1MDowOS40MTUzNDUzMjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTEwNzY1Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6NTA6MDkuNDE1ODAzMDM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNTEwMzA0NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zIHRvIG9wdGltaXplIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50IG9uIEFSTTY0LiBJdCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gKGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpYCksIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiB0b2dnbGluZyBUQ08gb24gZXZlcnkgbWVtb3J5IGFjY2VzcyBpbnNpZGUgbG9vcHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA1MTYwMzRiYmRhY2FiOGIyYjY2NDRkOWI4YTQwYWI2M2RhMjJlZTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxOTo0OToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDlmNWJkOWM2OWMyNDkuLjFhMTRlYjJhNTFkY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbkBAIC0yNzAsMjggKzI3MCw0MyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAjZGVmaW5lIGdldF91c2VyXHRfX2dldF91c2VyXG4gXG4gLypcbi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbisgKiBOb2ZhdWx0IGxvYWQgd2l0aG91dCBUQ08gbWFuYWdlbWVudCBmb3IgdXNlIGluc2lkZSBhXG4rICogX19iZWdpbi9fX2VuZF9rZXJuZWxfbm9mYXVsdF9iYXJlKCkgcmVnaW9uLlxuICAqL1xuLSNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuKyNkZWZpbmUgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhkc3QpIF9fZ2tuX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oc3JjKSBfX2drbl9zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4gXHRkbyB7IFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRfX2xhYmVsX18gX19na25fbGFiZWw7XHRcdFx0XHRcdFxcXG4tXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0X19yYXdfZ2V0X21lbShcImxkclwiLCAqKCh0eXBlICopKF9fZ2tuX2RzdCkpLFx0XHRcXFxuIFx0XHQgICAgICAoX19mb3JjZSB0eXBlICopKF9fZ2tuX3NyYyksIF9fZ2tuX2xhYmVsLCBLKTtcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX2drbl9sYWJlbDpcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRnb3RvIGVycl9sYWJlbDtcdFx0XHRcdFx0XHRcXFxuIFx0fSB3aGlsZSAoMCk7XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4rLypcbisgKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbisgKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBkc3QgYW5kIHNyYyBtYXkgY29udGFpbiBibG9ja2luZyBmdW5jdGlvbnMsXG4rICogZXZhbHVhdGUgdGhlbSBiZWZvcmUgb3ZlcnJpZGluZyBUQ08uXG4rICovXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcdFxcXG4rZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX2xhYmVsX18gX19na25fdGNvX2VycjtcdFx0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oZHN0KSBfX2drbl90Y29fZHN0ID0gKGRzdCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhzcmMpIF9fZ2tuX3Rjb19zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4rXHRfX210ZV9lbmFibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKF9fZ2tuX3Rjb19kc3QsIF9fZ2tuX3Rjb19zcmMsIHR5cGUsXHRcXFxuK1x0XHRcdFx0ICAgICBfX2drbl90Y29fZXJyKTtcdFx0XHRcXFxuK1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuK19fZ2tuX3Rjb19lcnI6XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4gI2RlZmluZSBfX3B1dF9tZW1fYXNtKHN0b3JlLCByZWcsIHgsIGFkZHIsIGxhYmVsLCB0eXBlKVx0XHRcdFxcXG4gXHRhc20gZ290byhcdFx0XHRcdFx0XHRcdFxcXG4gXHRcIjE6XHRcIiBzdG9yZSBcIlx0XCIgcmVnIFwiMCwgWyUxXVxcblwiXHRcdFx0XFxcbkBAIC0zNjYsMjggKzM4MSw0OCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZGVmaW5lIHB1dF91c2VyXHRfX3B1dF91c2VyXG4gXG4tLypcbi0gKiBXZSBtdXN0IG5vdCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciBiZXR3ZWVuIF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKSBhbmRcbi0gKiBfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpLiBBcyBgZHN0YCBhbmQgYHNyY2AgbWF5IGNvbnRhaW4gYmxvY2tpbmdcbi0gKiBmdW5jdGlvbnMsIHdlIG11c3QgZXZhbHVhdGUgdGhlc2Ugb3V0c2lkZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi5cbi0gKi9cbi0jZGVmaW5lIF9fcHV0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpXHRcdFx0XFxcbisvKiBOb2ZhdWx0IHN0b3JlIHdpdGhvdXQgVENPIG1hbmFnZW1lbnQ7IHNlZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlLiAqL1xuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXyhkc3QpIF9fcGtuX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oc3JjKSBfX3Brbl9zcmMgPSAoc3JjKTtcdFx0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0X19sYWJlbF9fIF9fcGtuX2VycjtcdFx0XHRcdFx0XFxcbi1cdFx0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0X19yYXdfcHV0X21lbShcInN0clwiLCAqKCh0eXBlICopKF9fcGtuX3NyYykpLFx0XHRcXFxuIFx0XHRcdCAgICAgIChfX2ZvcmNlIHR5cGUgKikoX19wa25fZHN0KSwgX19wa25fZXJyLCBLKTtcdFxcXG4tXHRcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcXFxuIFx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3Brbl9lcnI6XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XFxcbiBcdFx0Z290byBlcnJfbGFiZWw7XHRcdFx0XHRcdFx0XFxcbiBcdH0gd2hpbGUgKDApO1x0XHRcdFx0XHRcdFx0XFxcbi19IHdoaWxlKDApXG4rfSB3aGlsZSAoMClcbitcbisvKlxuKyAqIFdlIG11c3Qgbm90IGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIGJldHdlZW4gX19tdGVfZW5hYmxlX3Rjb19hc3luYygpIGFuZFxuKyAqIF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCkuIEFzIGBkc3RgIGFuZCBgc3JjYCBtYXkgY29udGFpbiBibG9ja2luZ1xuKyAqIGZ1bmN0aW9ucywgd2UgbXVzdCBldmFsdWF0ZSB0aGVzZSBvdXRzaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuKyAqL1xuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbClcdFx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0X19sYWJlbF9fIF9fcGtuX3Rjb19lcnI7XHRcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKGRzdCkgX19wa25fdGNvX2RzdCA9IChkc3QpO1x0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oc3JjKSBfX3Brbl90Y29fc3JjID0gKHNyYyk7XHRcdFx0XHRcXFxuK1x0X19tdGVfZW5hYmxlX3Rjb19hc3luYygpO1x0XHRcdFx0XHRcXFxuK1x0X19wdXRfa2VybmVsX25vZmF1bHRfYmFyZShfX3Brbl90Y29fZHN0LCBfX3Brbl90Y29fc3JjLCB0eXBlLFx0XFxcbitcdFx0XHRcdCAgICAgX19wa25fdGNvX2Vycik7XHRcdFx0XFxcbitcdF9fbXRlX2Rpc2FibGVfdGNvX2FzeW5jKCk7XHRcdFx0XHRcdFxcXG4rXHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbitfX3Brbl90Y29fZXJyOlx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0X19tdGVfZGlzYWJsZV90Y29fYXN5bmMoKTtcdFx0XHRcdFx0XFxcbitcdGdvdG8gZXJyX2xhYmVsO1x0XHRcdFx0XHRcdFx0XFxcbit9IHdoaWxlICgwKVxuK1xuKy8qXG4rICogQSBjb250ZXh0IHN3aXRjaCByZS1lbmFibGVzIHRhZyBjaGVja2luZywgaGVuY2UgdGhlIG5vLXNjaGVkdWxpbmdcbisgKiByZXF1aXJlbWVudCBmb3IgYSBiYXJlIG5vZmF1bHQgcmVnaW9uLlxuKyAqL1xuKyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdF9fbXRlX2VuYWJsZV90Y29fYXN5bmMoKVxuKyNkZWZpbmUgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpXHRfX210ZV9kaXNhYmxlX3Rjb19hc3luYygpXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fYXJjaF9jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7XG4gI2RlZmluZSByYXdfY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pXHRcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmggYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuaW5kZXggZWRkYmJiNjVjY2M0Zi4uYjI1ZTc3OGRkYzM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuQEAgLTYzNyw2ICs2MzcsMjYgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XFxcbiBcbiAjZW5kaWYgIC8qICFfX2dldF9rZXJuZWxfbm9mYXVsdCAqL1xuIFxuKy8qXG4rICogQXJjaGl0ZWN0dXJlcyBtYXkgdXNlIHRoZSBiZWdpbi9lbmQgaG9va3MgdG8gZXN0YWJsaXNoIHN0YXRlIHNoYXJlZCBieSBhXG4rICogc2VxdWVuY2Ugb2YgYmFyZSBub2ZhdWx0IGFjY2Vzc2VzLiBFdmVyeSBwYXRoIG91dCBvZiB0aGUgcmVnaW9uIG11c3QgY2FsbFxuKyAqIHRoZSBlbmQgaG9vay4gVGhlIHJlZ2lvbiwgaW5jbHVkaW5nIGV4cHJlc3Npb25zIHBhc3NlZCB0byB0aGUgYmFyZVxuKyAqIGFjY2Vzc29ycywgbXVzdCBub3QgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIuXG4rICovXG4rI2lmbmRlZiBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlXG4rI2RlZmluZSBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlXHRfX2dldF9rZXJuZWxfbm9mYXVsdFxuKyNkZWZpbmUgX19wdXRfa2VybmVsX25vZmF1bHRfYmFyZVx0X19wdXRfa2VybmVsX25vZmF1bHRcbisjZW5kaWZcbitcbisjaWZuZGVmIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZVxuKyNkZWZpbmUgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClcdGRvIHt9IHdoaWxlICgwKVxuKyNkZWZpbmUgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpXHRkbyB7fSB3aGlsZSAoMClcbisjZW5kaWZcbitcbitERUZJTkVfTE9DS19HVUFSRF8wKF9fa2VybmVsX25vZmF1bHRfYmFyZSxcbitcdFx0ICAgIF9fYmVnaW5fa2VybmVsX25vZmF1bHRfYmFyZSgpLFxuK1x0XHQgICAgX19lbmRfa2VybmVsX25vZmF1bHRfYmFyZSgpKVxuK1xuIC8qKlxuICAqIGdldF9rZXJuZWxfbm9mYXVsdCgpOiBzYWZlbHkgYXR0ZW1wdCB0byByZWFkIGZyb20gYSBsb2NhdGlvblxuICAqIEB2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjNjYzVjOGZjODc1Ni4uZjhjNTU3MTYxNTg0ZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTM3MjYsNyArMzcyNiw4IEBAIF9fYnBmX2tmdW5jIHZvaWQgX19icGZfdHJhcCh2b2lkKVxuICAqXG4gICogU2luY2Ugc3RyaW5ncyBhcmUgbm90IG5lY2Vzc2FyaWx5ICVOVUwtdGVybWluYXRlZCwgd2UgY2Fubm90IGRpcmVjdGx5IGNhbGxcbiAgKiBpbi1rZXJuZWwgaW1wbGVtZW50YXRpb25zLiBJbnN0ZWFkLCB3ZSBvcGVuLWNvZGUgdGhlIGltcGxlbWVudGF0aW9ucyB1c2luZ1xuLSAqIF9fZ2V0X2tlcm5lbF9ub2ZhdWx0IGluc3RlYWQgb2YgcGxhaW4gZGVyZWZlcmVuY2UgdG8gbWFrZSB0aGVtIHNhZmUuXG4rICogX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZSB1bmRlciBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCkgdG8gbWFrZSB0aGVtXG4rICogc2FmZS5cbiAgKi9cbiBcbiBzdGF0aWMgaW50IF9fYnBmX3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgYm9vbCBpZ25vcmVfY2FzZSwgc2l6ZV90IGxlbilcbkBAIC0zNzM4LDExICszNzM5LDE0IEBAIHN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzXG4gXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHMyLCAxKSkge1xuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbiBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjMSwgczEsIGNoYXIsIGVycl9vdXQpO1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjMiwgczIsIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzIsIHMyLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGlnbm9yZV9jYXNlKSB7XG4gXHRcdFx0YzEgPSB0b2xvd2VyKGMxKTtcbiBcdFx0XHRjMiA9IHRvbG93ZXIoYzIpO1xuQEAgLTM4MzcsMTAgKzM4NDEsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJuY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgc2l6ZV90IGNvdW50LCBjaGFyIGMpXG4gXG4gXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0aWYgKCFjb3VudClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudCBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKHNjID09IGMpXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdGlmIChzYyA9PSAnXFwwJylcbkBAIC0zODkzLDggKzM5MDAsOSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNocm51bChjb25zdCBjaGFyICpzX19pZ24sIGNoYXIgYylcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNnNjLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuIFx0XHRpZiAoc2MgPT0gJ1xcMCcgfHwgc2MgPT0gYylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0c19faWduKys7XG5AQCAtMzkyNSw4ICszOTMzLDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJyY2hyKGNvbnN0IGNoYXIgKnNfX2lnbiwgaW50IGMpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZzYywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKHNjID09IGMpXG4gXHRcdFx0bGFzdCA9IGk7XG4gXHRcdGlmIChzYyA9PSAnXFwwJylcbkBAIC0zOTU2LDEwICszOTY1LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3Rybmxlbihjb25zdCBjaGFyICpzX19pZ24sIHNpemVfdCBjb3VudClcbiBcbiBcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHRpZiAoIWNvdW50KVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50IFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSsrKSB7XG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Yywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGMgPT0gJ1xcMCcpXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdHNfX2lnbisrO1xuQEAgLTQwMDgsMTIgKzQwMjAsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbiBcdH1cbiBcbiBcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGd1YXJkKF9fa2VybmVsX25vZmF1bHRfYmFyZSkoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4gXHRcdGlmIChjcyA9PSAnXFwwJylcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2Y2EsIGFjY2VwdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XG4gXHRcdFx0aWYgKGNzID09IGNhIHx8IGNhID09ICdcXDAnKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC00MDUyLDEyICs0MDY1LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuLVx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0aWYgKGNzID09ICdcXDAnKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XG4tXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3IsIHJlamVjdF9faWduICsgaiwgY2hhciwgZXJyX291dCk7XG4rXHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShcdTAwMjZjciwgcmVqZWN0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcbiBcdFx0XHRpZiAoY3MgPT0gY3IgfHwgY3IgPT0gJ1xcMCcpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQwODQsOSArNDA5OCwxMCBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0fVxuIFxuIFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xuK1x0Z3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xuIFx0XHRmb3IgKGogPSAwOyBpICsgaiBcdTAwM2M9IGxlbiBcdTAwMjZcdTAwMjYgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuLVx0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBzMiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoXHUwMDI2YzIsIHMyICsgaiwgY2hhciwgZXJyX291dCk7XG4gXHRcdFx0aWYgKGMyID09ICdcXDAnKVxuIFx0XHRcdFx0cmV0dXJuIGk7XG4gXHRcdFx0LypcbkBAIC00MDk2LDcgKzQxMTEsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICsgaiA9PSBsZW4pXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjMSwgczEgKyBqLCBjaGFyLCBlcnJfb3V0KTtcbitcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlKFx1MDAyNmMxLCBzMSArIGosIGNoYXIsIGVycl9vdXQpO1xuIFxuIFx0XHRcdGlmIChpZ25vcmVfY2FzZSkge1xuIFx0XHRcdFx0YzEgPSB0b2xvd2VyKGMxKTtcbmRpZmYgLS1naXQgYS9tbS9tYWNjZXNzLmMgYi9tbS9tYWNjZXNzLmNcbmluZGV4IDQ4NjU1OWQ2ODg1ODMuLjg3NDg2YmY5OGQxNWEgMTAwNjQ0XG4tLS0gYS9tbS9tYWNjZXNzLmNcbisrKyBiL21tL21hY2Nlc3MuY1xuQEAgLTE5LDcgKzE5LDcgQEAgYm9vbCBfX3dlYWsgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoY29uc3Qgdm9pZCAqdW5zYWZlX3NyYyxcbiAgKi9cbiAjZGVmaW5lIGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBsZW4sIHR5cGUsIGVycl9sYWJlbClcdFxcXG4gXHR3aGlsZSAobGVuIFx1MDAzZT0gc2l6ZW9mKHR5cGUpKSB7XHRcdFx0XHRcdFxcXG4tXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KGRzdCwgc3JjLCB0eXBlLCBlcnJfbGFiZWwpO1x0XFxcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4gXHRcdGttc2FuX2NoZWNrX21lbW9yeShzcmMsIHNpemVvZih0eXBlKSk7XHRcdFx0XFxcbiBcdFx0ZHN0ICs9IHNpemVvZih0eXBlKTtcdFx0XHRcdFx0XFxcbiBcdFx0c3JjICs9IHNpemVvZih0eXBlKTtcdFx0XHRcdFx0XFxcbkBAIC0zNSwyNiArMzUsMjkgQEAgbG9uZyBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuIFxuIFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzcmMsIHNpemUpKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRwYWdlZmF1bHRfZGlzYWJsZSgpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuLVx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTY0LCBFZmF1bHQpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDMpKVxuLVx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDEpKVxuLVx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTE2LCBFZmF1bHQpO1xuLVx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuK1x0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xuK1x0XHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XG4rXHRcdFx0aWYgKCEoYWxpZ24gXHUwMDI2IDcpKVxuK1x0XHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4rXHRcdFx0XHRjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuK1x0XHRcdGlmICghKGFsaWduIFx1MDAyNiAxKSlcbitcdFx0XHRcdGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1MTYsIEVmYXVsdCk7XG4rXHRcdFx0Y29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xuK1x0XHR9XG4rXHR9XG4gXHRyZXR1cm4gMDtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0KTtcbiBcbiAjZGVmaW5lIGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgbGVuLCB0eXBlLCBlcnJfbGFiZWwpXHRcXFxuIFx0d2hpbGUgKGxlbiBcdTAwM2U9IHNpemVvZih0eXBlKSkge1x0XHRcdFx0XHRcXFxuLVx0XHRfX3B1dF9rZXJuZWxfbm9mYXVsdChkc3QsIHNyYywgdHlwZSwgZXJyX2xhYmVsKTtcdFxcXG4rXHRcdF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmUoZHN0LCBzcmMsIHR5cGUsIGVycl9sYWJlbCk7XHRcXFxuIFx0XHRpbnN0cnVtZW50X3dyaXRlKGRzdCwgc2l6ZW9mKHR5cGUpKTtcdFx0XHRcXFxuIFx0XHRkc3QgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuIFx0XHRzcmMgKz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcXFxuQEAgLTY1LDIxICs2OCwyNSBAQCBsb25nIGNvcHlfdG9fa2VybmVsX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSAwO1xuIFxuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykpXG4gXHRcdGFsaWduID0gKHVuc2lnbmVkIGxvbmcpZHN0IHwgKHVuc2lnbmVkIGxvbmcpc3JjO1xuIFxuLVx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbi1cdGlmICghKGFsaWduIFx1MDAyNiA3KSlcbi1cdFx0Y29weV90b19rZXJuZWxfbm9mYXVsdF9sb29wKGRzdCwgc3JjLCBzaXplLCB1NjQsIEVmYXVsdCk7XG4tXHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4tXHRcdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTMyLCBFZmF1bHQpO1xuLVx0aWYgKCEoYWxpZ24gXHUwMDI2IDEpKVxuLVx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcbi1cdGNvcHlfdG9fa2VybmVsX25vZmF1bHRfbG9vcChkc3QsIHNyYywgc2l6ZSwgdTgsIEVmYXVsdCk7XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4rXHRzY29wZWRfZ3VhcmQocGFnZWZhdWx0KSB7XG4rXHRcdHNjb3BlZF9ndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpIHtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgNykpXG4rXHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU2NCwgRWZhdWx0KTtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMykpXG4rXHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUzMiwgRWZhdWx0KTtcbitcdFx0XHRpZiAoIShhbGlnbiBcdTAwMjYgMSkpXG4rXHRcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHUxNiwgRWZhdWx0KTtcbitcdFx0XHRjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0X2xvb3AoZHN0LCBzcmMsIHNpemUsIHU4LCBFZmF1bHQpO1xuK1x0XHR9XG4rXHR9XG4gXHRyZXR1cm4gMDtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gXG5AQCAtOTIsMTggKzk5LDE5IEBAIGxvbmcgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0KGNoYXIgKmRzdCwgY29uc3Qgdm9pZCAqdW5zYWZlX2FkZHIsIGxvbmcgY291bnQpXG4gXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHVuc2FmZV9hZGRyLCBjb3VudCkpXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFxuLVx0cGFnZWZhdWx0X2Rpc2FibGUoKTtcbi1cdGRvIHtcbi1cdFx0X19nZXRfa2VybmVsX25vZmF1bHQoZHN0LCBzcmMsIHU4LCBFZmF1bHQpO1xuLVx0XHRkc3QrKztcbi1cdFx0c3JjKys7XG4tXHR9IHdoaWxlIChkc3RbLTFdIFx1MDAyNlx1MDAyNiBzcmMgLSB1bnNhZmVfYWRkciBcdTAwM2MgY291bnQpO1xuLVx0cGFnZWZhdWx0X2VuYWJsZSgpO1xuK1x0c2NvcGVkX2d1YXJkKHBhZ2VmYXVsdCkge1xuK1x0XHRzY29wZWRfZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKSB7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0X19nZXRfa2VybmVsX25vZmF1bHRfYmFyZShkc3QsIHNyYywgdTgsIEVmYXVsdCk7XG4rXHRcdFx0XHRkc3QrKztcbitcdFx0XHRcdHNyYysrO1xuK1x0XHRcdH0gd2hpbGUgKGRzdFstMV0gXHUwMDI2XHUwMDI2IHNyYyAtIHVuc2FmZV9hZGRyIFx1MDAzYyBjb3VudCk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGRzdFstMV0gPSAnXFwwJztcbiBcdHJldHVybiBzcmMgLSB1bnNhZmVfYWRkcjtcbiBFZmF1bHQ6XG4tXHRwYWdlZmF1bHRfZW5hYmxlKCk7XG4gXHRkc3RbMF0gPSAnXFwwJztcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjUwOjA5LjQxNTgwNDA0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjUxMDI3Mzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBcHBsaWNhYmlsaXR5IEFuYWx5c2lzIGZvciBLZXJuZWwgTWVtb3J5IEFjY2VzcyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdHMgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IGFjY2VzcyByb3V0aW5lcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGl0cyBpbXBhY3Qgb24gS01TQU4uIFRoaXMgcGF0Y2ggdG91Y2hlcyBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLCBgaW5jbHVkZS9saW51eC91YWNjZXNzLmhgLCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBhbmQgYG1tL21hY2Nlc3MuY2AuIEVzc2VudGlhbGx5LCBpdCdzIHJlZmFjdG9yaW5nIHRoZSBgY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYGNvcHlfdG9fa2VybmVsX25vZmF1bHRgLCBgc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXJzLiBUaGUgZ29hbCBpcyB0byBvcHRpbWl6ZSB0aGUgTWVtb3J5IFRhZ2dpbmcgRXh0ZW5zaW9uIChNVEUpIG9uIEFSTTY0LCBuYW1lbHkgdGhlIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50LiBJdCBhY2hpZXZlcyB0aGlzIGJ5IGludHJvZHVjaW5nIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gZGVmaW5lZCBieSBgX19iZWdpbl9rZXJuZWxfbm9mYXVsdF9iYXJlKClgIC8gYF9fZW5kX2tlcm5lbF9ub2ZhdWx0X2JhcmUoKWAuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIEtNU0FOIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IGZyb20gd2hhdCBJIGNhbiBzZWUsIGl0IGRvZXNuJ3QuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGEgY2hlY2suIEl0IGRvZXNuJ3QgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRvIGNvbnRyb2wgcHJvZ3JhbSBmbG93LiBJdCBhbHNvIGRvZXNuJ3QgaW52b2x2ZSBhbnkgc2lnbmlmaWNhbnQgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gb3B0aW1pemluZyBob3cgZXhpc3RpbmcgbWVtb3J5IHJlZ2lvbnMgYXJlIGFjY2Vzc2VkIHNhZmVseS4gSXQncyByZWFsbHkgYWJvdXQgbWluaW1pemluZyBvdmVyaGVhZCwgc3BlY2lmaWNhbGx5IHRoZSBUQ08gdG9nZ2xlLCB3aGljaCB3b3VsZCBoYXZlIGJlZW4gZXhwZW5zaXZlIGluIHRoZSBsb29wLlxuXG5JIHNlZSB0aGF0IGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfbG9vcGAgYWxyZWFkeSBjYWxscyBga21zYW5fY2hlY2tfbWVtb3J5KHNyYywgc2l6ZW9mKHR5cGUpKTtgLiBUaGUgcGF0Y2ggZG9lc24ndCByZW1vdmUgdGhpcy4gSXQganVzdCBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBoZWxwZXIgY2FsbHMgd2l0aGluIHRoZSBsb29wIGZyb20gYF9fZ2V0X2tlcm5lbF9ub2ZhdWx0YCB0byBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAsIGFuZCB3cmFwcyB0aGUgd2hvbGUgbG9vcCBpbiB0aGUgZ3VhcmRlZCByZWdpb24uIFRoYXQncyBhIGdvb2QgdGhpbmcsIGJlY2F1c2UgdGhlIEtNU0FOIGNoZWNrcyBhbHJlYWR5IGV4aXN0LlxuXG5NeSBjb25jbHVzaW9uPyBUaGlzIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcvb3B0aW1pemF0aW9uLiBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGludHJvZHVjZSBuZXcgS01TQU4tc3BlY2lmaWMgcmlza3MuIElmIHRoZXJlIHdlcmUgYnVncyBpbnRyb2R1Y2VkIGhlcmUsIHRoZXknZCBsaWtlbHkgbWFuaWZlc3QgYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgcGFnZSBmYXVsdHMsIG9yIGxvZ2ljYWwgZXJyb3JzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RzIHdvdWxkLCBpbiBteSBleHBlcmllbmNlLCBjYXRjaCB0aG9zZS4gVGhlcmVmb3JlLCBLTVNBTiBkb2Vzbid0IG5lZWQgdG8gYmUgc3BlY2lmaWNhbGx5IHRhcmdldGVkIHdpdGggYWRkaXRpb25hbCBmdXp6aW5nIHNlc3Npb25zIGZvciB0aGlzIGNoYW5nZS4gVGhlIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGNvdmVyIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQzLCJPdXRwdXRUb2tlbnMiOjI1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjUwOjIxLjkyNjA3OTgzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGBjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRgLCBgY29weV90b19rZXJuZWxfbm9mYXVsdGAsIGFuZCBzZXZlcmFsIEJQRiBzdHJpbmcgaGVscGVyIGZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBUYWcgQ2hlY2sgT3ZlcnJpZGUgKFRDTykgbWFuYWdlbWVudCBvbiBBUk02NC4gSXQgaW50cm9kdWNlcyBgX19nZXRfa2VybmVsX25vZmF1bHRfYmFyZWAgYW5kIGBfX3B1dF9rZXJuZWxfbm9mYXVsdF9iYXJlYCB0byBiZSB1c2VkIHdpdGhpbiBhIGd1YXJkZWQgcmVnaW9uIChgZ3VhcmQoX19rZXJuZWxfbm9mYXVsdF9iYXJlKWApLCBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdG9nZ2xpbmcgVENPIG9uIGV2ZXJ5IG1lbW9yeSBhY2Nlc3MgaW5zaWRlIGxvb3BzLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBleGlzdGluZyBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxscyBhcmUgcHJlc2VydmVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIChzdWNoIGFzIGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcsIG1pc3NpbmcgZWFybHkgcmV0dXJucywgb3IgaW1wcm9wZXIgcGFnZSBmYXVsdCBoYW5kbGluZykgd291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGludmFsaWQgbWVtb3J5IGRlcmVmZXJlbmNlcywgb3IgY3Jhc2hlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGFjY2VzcyB2aW9sYXRpb25zIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdGAsIGBjb3B5X3RvX2tlcm5lbF9ub2ZhdWx0YCwgYW5kIHNldmVyYWwgQlBGIHN0cmluZyBoZWxwZXIgZnVuY3Rpb25zIHRvIG9wdGltaXplIFRhZyBDaGVjayBPdmVycmlkZSAoVENPKSBtYW5hZ2VtZW50IG9uIEFSTTY0LiBJdCBpbnRyb2R1Y2VzIGBfX2dldF9rZXJuZWxfbm9mYXVsdF9iYXJlYCBhbmQgYF9fcHV0X2tlcm5lbF9ub2ZhdWx0X2JhcmVgIHRvIGJlIHVzZWQgd2l0aGluIGEgZ3VhcmRlZCByZWdpb24gKGBndWFyZChfX2tlcm5lbF9ub2ZhdWx0X2JhcmUpYCksIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiB0b2dnbGluZyBUQ08gb24gZXZlcnkgbWVtb3J5IGFjY2VzcyBpbnNpZGUgbG9vcHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGV4aXN0aW5nIGBrbXNhbl9jaGVja19tZW1vcnlgIGNhbGxzIGFyZSBwcmVzZXJ2ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcgKHN1Y2ggYXMgaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZywgbWlzc2luZyBlYXJseSByZXR1cm5zLCBvciBpbXByb3BlciBwYWdlIGZhdWx0IGhhbmRsaW5nKSB3b3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgaW52YWxpZCBtZW1vcnkgZGVyZWZlcmVuY2VzLCBvciBjcmFzaGVzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[1] Phase: Succeeded StartedAt: 2026-08-24 19:50:48 +0000 UTC FinishedAt: 2026-08-24 19:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 19:50:48 +0000 UTC FinishedAt: 2026-08-24 19:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2] Phase: Succeeded StartedAt: 2026-08-24 19:50:48 +0000 UTC FinishedAt: 2026-08-24 23:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 19:50:48 +0000 UTC FinishedAt: 2026-08-24 23:43:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 19:50:48 +0000 UTC FinishedAt: 2026-08-24 19:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 19:50:48 +0000 UTC FinishedAt: 2026-08-24 19:50:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflows2cn9/series-workflows2cn9-convert-artifact-2309513577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 19:50:58 +0000 UTC FinishedAt: 2026-08-24 20:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 19:50:58 +0000 UTC FinishedAt: 2026-08-24 20:11:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d38556a3-787a-43e3-ae32-e5ce355c4bf7,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-workflows2cn9/series-workflows2cn9-convert-artifact-2309513577/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": "070565d2-f178-4c65-89a0-592f0c33a439", "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-workflows2cn9/series-workflows2cn9-build-action-713831623/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 19:50:58 +0000 UTC FinishedAt: 2026-08-24 20:11:16 +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:*d38556a3-787a-43e3-ae32-e5ce355c4bf7,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-workflows2cn9/series-workflows2cn9-convert-artifact-2309513577/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": "070565d2-f178-4c65-89a0-592f0c33a439", "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-workflows2cn9/series-workflows2cn9-build-action-713831623/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:11:26 +0000 UTC FinishedAt: 2026-08-24 20:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:11:26 +0000 UTC FinishedAt: 2026-08-24 20:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:11:26 +0000 UTC FinishedAt: 2026-08-24 20:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:11:26 +0000 UTC FinishedAt: 2026-08-24 20:11:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-workflows2cn9/series-workflows2cn9-convert-artifact-2149331196/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:11:36 +0000 UTC FinishedAt: 2026-08-24 20:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:11:36 +0000 UTC FinishedAt: 2026-08-24 20:13:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*070565d2-f178-4c65-89a0-592f0c33a439,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-workflows2cn9/series-workflows2cn9-build-action-713831623/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-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:13:40 +0000 UTC FinishedAt: 2026-08-24 20:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:13:40 +0000 UTC FinishedAt: 2026-08-24 20:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:13:40 +0000 UTC FinishedAt: 2026-08-24 20:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:13:40 +0000 UTC FinishedAt: 2026-08-24 20:34:07 +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:*d38556a3-787a-43e3-ae32-e5ce355c4bf7,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-workflows2cn9/series-workflows2cn9-convert-artifact-2149331196/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": "2b2412f1-071f-4c6a-8822-d1a81bb5d162", "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-workflows2cn9/series-workflows2cn9-build-action-3458379096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:13:40 +0000 UTC FinishedAt: 2026-08-24 20:33:57 +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:*d38556a3-787a-43e3-ae32-e5ce355c4bf7,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-workflows2cn9/series-workflows2cn9-convert-artifact-2149331196/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": "2b2412f1-071f-4c6a-8822-d1a81bb5d162", "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-workflows2cn9/series-workflows2cn9-build-action-3458379096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:34:07 +0000 UTC FinishedAt: 2026-08-24 20:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:34:07 +0000 UTC FinishedAt: 2026-08-24 20:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:34:07 +0000 UTC FinishedAt: 2026-08-24 20:36:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:34:07 +0000 UTC FinishedAt: 2026-08-24 20:36:11 +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:*2b2412f1-071f-4c6a-8822-d1a81bb5d162,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-workflows2cn9/series-workflows2cn9-build-action-3458379096/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-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 23:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 23:43:24 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},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:*070565d2-f178-4c65-89a0-592f0c33a439,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2b2412f1-071f-4c6a-8822-d1a81bb5d162,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-workflows2cn9/series-workflows2cn9-build-action-713831623/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-workflows2cn9/series-workflows2cn9-build-action-3458379096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 20:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 20:36:25 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},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-workflows2cn9/series-workflows2cn9-convert-artifact-4112707013/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 20:36:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 20:36:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:21 +0000 UTC FinishedAt: 2026-08-24 20:36:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:31 +0000 UTC FinishedAt: 2026-08-24 23:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2cn9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["copy_from_kernel_nofault","copy_to_kernel_nofault","strncpy_from_kernel_nofault","bpf_strcmp","bpf_strcasecmp","bpf_strncasecmp","bpf_strstr","bpf_strcasestr","bpf_strnstr","bpf_strncasestr","bpf_strnchr","bpf_strchrnul","bpf_strrchr","bpf_strnlen","bpf_strspn","bpf_strcspn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4336b6a4-5d65-4dcb-bf6d-a946e14a8870","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-24 20:36:31 +0000 UTC FinishedAt: 2026-08-24 23:43:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*070565d2-f178-4c65-89a0-592f0c33a439,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2b2412f1-071f-4c6a-8822-d1a81bb5d162,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-workflows2cn9/series-workflows2cn9-build-action-713831623/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-workflows2cn9/series-workflows2cn9-build-action-3458379096/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-workflows2cn9/series-workflows2cn9-convert-artifact-4112707013/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,}