Name: series-workflowxmhdz Phase: Succeeded StartedAt: 2026-09-03 00:20:25 +0000 UTC FinishedAt: 2026-09-03 04:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[0] Phase: Succeeded StartedAt: 2026-09-03 00:20:25 +0000 UTC FinishedAt: 2026-09-03 00:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 00:20:25 +0000 UTC FinishedAt: 2026-09-03 00:24:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "49695114-ad88-4bba-a720-63bce4bfa3ff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_alloc_folio", "alloc_hugetlb_folio" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKSBmYWlscyBpbiBodWdldGxiX2FsbG9jX2ZvbGlvKCkuIEl0IHJlcGxhY2VzIGRpcmVjdCBmcmVlX2h1Z2VfZm9saW8oKSB3aXRoIGZvbGlvX3B1dCgpIGFuZCByZXR1cm5zIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmcm9tIGxvb3BpbmcgaW5maW5pdGVseSByZXRyeWluZyBvbiBWTV9GQVVMVF9PT00uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgcGFnZSBmYXVsdHMgdW5kZXIgbWVtb3J5IGNncm91cCBsaW1pdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZjQ4OWZlZGYwYmJhYmEwOTg4MGViZjU4NWYxNDY0Yjk1MGQ4MDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjk3YzA2ZjIyN2VmOGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjMsNyAmIzQzOzI4MjMsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4gICpcbiAgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZvbGlvLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuXG4gICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuXG4tICogICAgICAgICAtRU5PTUVNIGlmIG1lbSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMuXG4gICovXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcbkBAIC0yODkwLDEzICYjNDM7Mjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuIFxuIFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4tXHRcdGZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZVxuJiM0MztcdFx0ICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpXG4mIzQzO1x0XHQgKiBwYWdlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGFcbiYjNDM7XHRcdCAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uXG4mIzQzO1x0XHQgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT01cbiYjNDM7XHRcdCAqIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLiAgUmV0dXJuaW5nIC1FTk9NRU0gKG9yXG4mIzQzO1x0XHQgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvXG4mIzQzO1x0XHQgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHlcbiYjNDM7XHRcdCAqIHJldHJ5aW5nIHRoZSBmYXVsdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZm9saW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9IVUdFVExCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRmNDg5ZmVkZjBiYmFiYTA5ODgwZWJmNTg1ZjE0NjRiOTUwZDgwMDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAwOjIyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDc4NTc3Mjg0NTc5NTIuLjk3YzA2ZjIyN2VmOGEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTI4MjMsNyAmIzQzOzI4MjMsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpCiAgKgogICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLgogICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuCi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy4KICAqLwogc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncykKQEAgLTI4OTAsMTMgJiM0MzsyODg5LDI0IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpOwogCiAJaWYgKHJldCA9PSAtRU5PTUVNKSB7Ci0JCWZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogCQkvKgogCQkgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXMKIAkJICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpbwogCQkgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuCiAJCSAqLwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZQomIzQzOwkJICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpCiYjNDM7CQkgKiBwYWdlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGEKJiM0MzsJCSAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uCiYjNDM7CQkgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT00KJiM0MzsJCSAqIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLiAgUmV0dXJuaW5nIC1FTk9NRU0gKG9yCiYjNDM7CQkgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvCiYjNDM7CQkgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHkKJiM0MzsJCSAqIHJldHJ5aW5nIHRoZSBmYXVsdC4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJfQogCiAJcmV0dXJuIGZvbGlvOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kIHdoZXJlIGl0JiMzOTtzIHNpdHVhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIGtlcm5lbC4gVGhlIHRhcmdldCBpcyBgbW0vaHVnZXRsYi5jYCDigJMgdGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiB3b3JrbG9hZHMgdGhhdCBkZW1hbmQgbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgZGlmZiBtZXRpY3Vsb3VzbHksIGJ1dCBJIHdvbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGxpbmUgY2hhbmdlcyBpbiBpc29sYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgbG9naWMgZmxvdyAqYXJvdW5kKiB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIGhvdyB0aGlzIHBhdGNoIHBvdGVudGlhbGx5IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzIHdpdGhpbiB0aGUgYGh1Z2V0bGJgIHN1YnN5c3RlbS4gT25seSB0aGVuIGNhbiBJIGZvcm0gYSBjb21wcmVoZW5zaXZlIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzA6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbjI4NzE6XHRcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbjI4NzI6XHRcdH1cbjI4NzM6XHRcbjI4NzQ6XHRcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2UoaWR4LCBucl9wYWdlcywgaF9jZywgZm9saW8pO1xuMjg3NTpcdFxuMjg3NjpcdFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XG4yODc3Olx0XHRcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2VfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQsXG4yODc4Olx0XHRcdFx0XHRcdFx0ICBmb2xpbyk7XG4yODc5Olx0XHR9XG4yODgwOlx0XG4yODgxOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI4ODI6XHRcbjI4ODM6XHRcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuMjg4NDpcdFx0LypcbjI4ODU6XHRcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbjI4ODY6XHRcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbjI4ODc6XHRcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuMjg4ODpcdFx0ICovXG4yODg5Olx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbjI4OTA6XHRcbjI4OTE6XHRcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuMjg5MjpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjg5MzpcdFx0XHQvKlxuMjg5NDpcdFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbjI4OTU6XHRcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuMjg5NjpcdFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4yODk3Olx0XHRcdCAqL1xuMjg5ODpcdFx0XHQvKlxuMjg5OTpcdFx0XHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcbjI5MDA6XHRcdFx0ICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpXG4yOTAxOlx0XHRcdCAqIHBhZ2UgYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYVxuMjkwMjpcdFx0XHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxuMjkwMzpcdFx0XHQgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT01cbjI5MDQ6XHRcdFx0ICoga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQuICBSZXR1cm5pbmcgLUVOT01FTSAob3JcbjI5MDU6XHRcdFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xuMjkwNjpcdFx0XHQgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHlcbjI5MDc6XHRcdFx0ICogcmV0cnlpbmcgdGhlIGZhdWx0LlxuMjkwODpcdFx0XHQgKi9cbjI5MDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4yOTEwOlx0XHR9XG4yOTExOlx0XG4yOTEyOlx0XHRyZXR1cm4gZm9saW87XG4yOTEzOlx0XG4yOTE0Olx0IGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDpcbjI5MTU6XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBoX2NnKTtcbjI5MTY6XHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6XG4yOTE3Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpXG4yOTE4Olx0XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCk7XG4yOTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGh1Z2V0bGIgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgd2UgaGFuZGxlIG91dC1vZi1tZW1vcnkgc2NlbmFyaW9zIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIGNvbnRleHQuCgpQcmV2aW91c2x5LCBpZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgcmV0dXJuZWQgYC1FTk9NRU1gLCBpbmRpY2F0aW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhdCB0aGUgbWVtY2cgbGV2ZWwsIHRoZSBmdW5jdGlvbiB3b3VsZCBpbW1lZGlhdGVseSBmcmVlIHRoZSBmb2xpbyB1c2luZyBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAgYW5kIHJldHVybiBhbiBlcnJvciBwb2ludGVyIHJlcHJlc2VudGluZyB0aGUgYC1FTk9NRU1gIGVycm9yIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2suIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGEgZmFpbGVkIGFsbG9jIHdvdWxkIGJlIGRpcmVjdGx5IGZyZWVkIHRvIGF2b2lkIGxlYWtzLgoKTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3IgdG8gaW5zdGVhZCBjYWxsIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuIFRoaXMgc2lnbmFscyBhICYjMzQ7Tm8gU3BhY2UmIzM0OyBlcnJvciBpbnN0ZWFkLiBIbW0sIHNvIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGZyZWVpbmcgdGhlIGZvbGlvLCB0aGlzIGlzIGEgY2hhbmdlIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIHRoYXQmIzM5O3MgbW9yZSBpbmRpY2F0aXZlIG9mIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gLS0gc3BhY2UgaXNuJiMzOTt0IGF2YWlsYWJsZSwgYnV0IG5vdCBuZWNlc3NhcmlseSB0aGF0IHRoZXJlJiMzOTtzIHNpbXBseSBubyBtb3JlIG1lbW9yeS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSByZWxhdGVzIHRvIGhvdyBtZW1jZ3MgdHJhY2sgcmVzb3VyY2VzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGRlZmluaXRpb24gYW5kIGNhbGwgc2l0ZXMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgb3IgZXhwb3J0ZWQsIGFuZCBhbHNvIGNvbmZpcm0gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIGh1Z2V0bGIgYW5kIGh1Z2V0bGJfY2dyb3VwL21lbWNnIHN1cHBvcnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGVyZSBlbHNlIHRoZSBjb2RlIGlzIGNhbGxlZCwgYW5kIHdobyByZWxpZXMgb24gaXRzIHJldHVybiB2YWx1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgyOC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAzMi1cbm1tL2h1Z2V0bGIuYzozMDMzOlx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjkzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgaHVnZSBwYWdlcy4gVGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIG5hdHVyYWxseSwgaXMgdGhlIGNvcmUgaGVhZGVyIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24sIG9yIGF0IGxlYXN0IHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucywgcmVsYXRlZCB0byBodWdlIHBhZ2UgYWxsb2NhdGlvbiByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyB0byBwaW4gZG93biB3aGVyZSB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBnbyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDAtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEdpYW50IEZvb3RzdGVwcyBvZiBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgaHVnZSBwYWdlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGludGVyYWN0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSDigJMgdGhlIGNhbGxlcnMgb2YgKmJvdGgqIGZ1bmN0aW9ucywgYW5kIGNydWNpYWxseSwgaG93IHBhZ2UgZmF1bHRzIGFuZCBtZW1jZyBjaGFyZ2luZyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIG9yY2hlc3RyYXRlZC4KClRpbWUgdG8gZGl2ZSBpbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjb21wcmVoZW5zaXZlIHNlYXJjaCBmb3IgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB3aWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuIEZyb20gdGhlcmUgSSBjYW4gZXhwbG9yZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2Ugcm91dGluZXMgYW5kIHRoZSBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1lbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAxOnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgyOC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAzMi1cbm1tL2h1Z2V0bGIuYzozMDMzOlx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBhbGxvY19odWdldGxiX2ZvbGlvYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gV2hhdCYjMzk7cyBkcml2aW5nIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgcGF0aHMsIHRoZSBhcmVhcyBvZiB0aGUga2VybmVsIHRoYXQgYXJlICpyZWx5aW5nKiBvbiBodWdlIHBhZ2VzLCBhbmQgcGFydGljdWxhcmx5IHRoZSBhbGxvY2F0aW9uIHNpZGUuIEkgd2FudCB0byBzZWUgd2hpY2ggc3Vic3lzdGVtcyBhcmUgcHV0dGluZyB0aGUgcHJlc3N1cmUgb24gdGhlIGh1Z2UgcGFnZSBhbGxvY2F0b3IuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGRpZmZlcmVudCB1c2UgY2FzZXMuIAoKSSYjMzk7bSB0aGlua2luZzogaXMgdGhpcyBwcmltYXJpbHkgbWVtb3J5LW1hcHBlZCBmaWxlIHVzYWdlPyBOVU1BIHBvbGljaWVzPyBTcGVjaWZpYyBkZXZpY2UgZHJpdmVycz8gT3IgbWF5YmUgbW9yZSBnZW5lcmFsIGtlcm5lbCBhbGxvY2F0aW9ucyB0aGF0IGxldmVyYWdlIGh1Z2UgcGFnZXMgZm9yIHBlcmZvcm1hbmNlPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBzZXF1ZW5jZXM/IElzIGl0IGFsbCBkaXJlY3QgY2FsbHMsIG9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggbGF5ZXJzIG9mIGFic3RyYWN0aW9uIHRoYXQgbmVlZCB0byBiZSBmb2xsb3dlZD8gVWx0aW1hdGVseSBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIE1heWJlIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIHRoZSBhbGxvY2F0aW9uIHBhdGhzIG9yIHVuZGVyc3RhbmQgdGhlIGZyYWdtZW50YXRpb24gaXNzdWVzLiBTbywgc3RlcCBvbmUsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYW5kIGFuYWx5emUgdGhlIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xODE9YXJlIGFsbG9jYXRlZCBhbmQgaW5zdGFudGlhdGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIG1hcHBpbmcuICBUaGUgYWxsb2NhdGlvblxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODI6aXMgcGVyZm9ybWVkIHdpdGhpbiB0aGUgcm91dGluZSBhbGxvY19odWdldGxiX2ZvbGlvKCk6OlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODMtXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NDpcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg1LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBhdm9pZF9yZXNlcnZlKVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODYtXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NzphbGxvY19odWdldGxiX2ZvbGlvIGlzIHBhc3NlZCBhIFZNQSBwb2ludGVyIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgc28gaXQgY2FuXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4OC1jb25zdWx0IHRoZSByZXNlcnZhdGlvbiBtYXAgdG8gZGV0ZXJtaW5lIGlmIGEgcmVzZXJ2YXRpb24gZXhpc3RzLiAgSW4gYWRkaXRpb24sXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4OTphbGxvY19odWdldGxiX2ZvbGlvIHRha2VzIHRoZSBhcmd1bWVudCBhdm9pZF9yZXNlcnZlIHdoaWNoIGluZGljYXRlcyByZXNlcnZlc1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xOTAtc2hvdWxkIG5vdCBiZSB1c2VkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGV5IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIHRoZVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjA3PWlzIGNhbGxlZC4gIFRoaXMgcm91dGluZSB0YWtlcyB0d28gYXJndW1lbnRzIHJlbGF0ZWQgdG8gcmVzZXJ2YXRpb25zOlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA5LS0gYXZvaWRfcmVzZXJ2ZSwgdGhpcyBpcyB0aGUgc2FtZSB2YWx1ZS9hcmd1bWVudCBwYXNzZWQgdG9cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjEwOiAgYWxsb2NfaHVnZXRsYl9mb2xpbygpLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMTEtLSBjaGcsIGV2ZW4gdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgb2YgdHlwZSBsb25nIG9ubHkgdGhlIHZhbHVlcyAwIG9yIDEgYXJlXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yNDc9SXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcmVzZXJ2ZSBtYXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aGUgY2FsbFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDg6dG8gdm1hX25lZWRzX3Jlc2VydmF0aW9uKCkgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGxvY19odWdldGxiX2ZvbGlvKCkgYW5kIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNDktY2FsbCB0byB2bWFfY29tbWl0X3Jlc2VydmF0aW9uKCkgYWZ0ZXIgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQuICBUaGlzIHdvdWxkXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDY65b2T5LiO6aKE55WZ55u45YWz55qE5beo6aG15Zyo55u45bqU55qE5pig5bCE5Lit6KKr5YiG6YWN5ZKM5a6e5L6L5YyW5pe277yM6aKE55WZ5bCx6KKr5raI6ICX5LqG44CC6K+l5YiG6YWN5piv5Zyo5Ye95pWwYWxsb2NfaHVnZXRsYl9mb2xpby4uLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQ3LeS4rei/m+ihjOeahDo6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDgtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDk6XHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTAtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTI6YWxsb2NfaHVnZXRsYl9mb2xpb+iiq+S8oOmAkue7meS4gOS4qlZNQeaMh+mSiOWSjOS4gOS4quiZmuaLn+WcsOWdgO+8jOWboOatpOWug+WPr+S7peafpemYhemihOeVmeaYoOWwhOS7peehruWumuaYr+WQpuWtmOWcqOmihOeVmeOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUzOuatpOWklu+8jGFsbG9jX2h1Z2V0bGJfZm9saW/pnIDopoHkuIDkuKrlj4LmlbBhdm9pZF9yZXNlcnZl77yM6K+l5Y+C5pWw6KGo56S65Y2z5L2/55yL6LW35p2l5bey57uP5Li65oyH5a6a55qE5Zyw5Z2A6aKE55WZ5LqGXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTQt6aKE55WZ77yM5Lmf5LiN5bqU6K+l5L2/55So6aKE55WZ44CCYXZvaWRfcmVzZXJ2ZeWPguaVsOacgOW4uOiiq+eUqOS6juWGmeaXtuaLt+i0neWSjOmhtemdoui/geenu+eahOaDheWGteS4i++8jOWNs+eOsOaciemhtemdoueahOminVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE2MD12bWFfbmVlZHNfcmVzZXJ2YXRpb24oKei/lOWbnueahOWAvOmAmuW4uOS4ujDmiJYx44CC5aaC5p6c6K+l5Zyw5Z2A5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MO+8jOWmguaenOS4jeWtmOWcqOmihOeVme+8jOWImeS4ujHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNjY6LSBhdm9pZF9yZXNlcnZl77yM6L+Z5piv5Lyg6YCS57uZYWxsb2NfaHVnZXRsYl9mb2xpbygp55qE5ZCM5LiA5Liq5YC8L+WPguaVsOOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTY3LS0gY2hn77yM5bC9566h6L+Z5Liq5Y+C5pWw55qE57G75Z6L5pivbG9uZ++8jOS9huWPquaciTDmiJYx55qE5YC86KKr5Lyg6YCS57uZZGVxdWV1ZV9odWdlX3BhZ2Vfdm1h44CC5aaC5p6c6K+l5YC85Li6MO+8jFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE5Mz1TZXRQYWdlUHJpdmF0ZShwYWdlKeWSjHJlc3ZfaHVnZV9wYWdlcy3jgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDM65ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwNC12bWFfY29tbWl0X3Jlc2VydmF0aW9uKCnkuYvpl7TvvIzpooTnlZnmmKDlsITmnInlj6/og73ooqvmlLnlj5jjgILlpoLmnpxodWdldGxiX3Jlc2VydmVfcGFnZXPlnKjlhbFcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzkyLVx0XHQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5MzpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5NC1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MTMtXHRcdCAqIGZvbGlvX3VubG9jayBiZWNhdXNlIGxvY2tlZCBieSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgxNDpcdFx0ICogZm9saW9fcHV0KCkgZHVlIHRvIHJlZmVyZW5jZSBmcm9tIGFsbG9jX2h1Z2V0bGJfZm9saW8oKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODE1LVx0XHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDE9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDM6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA0LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwNTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDYtXHRcdFx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDctXHRcdFx0XHRib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOS1cdFx0XHRcdFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMjI9c3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEyNS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMjY6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI3LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTM0OmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXHRcdFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTQwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExNDE6YWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExNDItXHRcdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYz0yMTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTY1LVxubW0vaHVnZXRsYi5jOjIxNjY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE2Ny1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMTg2LS8qIGZvbGlvIG1pZ3JhdGlvbiBjYWxsYmFjayBmdW5jdGlvbiAqL1xubW0vaHVnZXRsYi5jOjIxODc6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxODgtXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcbi0tXG5tbS9odWdldGxiLmM9MjUyMD1zdGF0aWMgbG9uZyB2bWFfZGVsX3Jlc2VydmF0aW9uKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTI1MjctICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byByZXN0b3JlIHJlc2VydmF0aW9uIGluZm9ybWF0aW9uIG9uIGVycm9yIHBhdGhzLlxubW0vaHVnZXRsYi5jOjI1Mjg6ICogSXQgc2hvdWxkIE9OTFkgYmUgY2FsbGVkIGZvciBmb2xpb3MgYWxsb2NhdGVkIHZpYSBhbGxvY19odWdldGxiX2ZvbGlvKCksXG5tbS9odWdldGxiLmMtMjUyOS0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXG4tLVxubW0vaHVnZXRsYi5jLTI1MzQtICogMikgTm8gcmVzZXJ2YXRpb24gd2FzIGluIHBsYWNlIGZvciB0aGUgcGFnZSwgc28gaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgaXNcbm1tL2h1Z2V0bGIuYzoyNTM1OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cbm1tL2h1Z2V0bGIuYy0yNTM2LSAqXG4tLVxubW0vaHVnZXRsYi5jLTI1NDMtICpcbm1tL2h1Z2V0bGIuYzoyNTQ0OiAqIEluIGNhc2UgMiwgc2ltcGx5IHVuZG8gcmVzZXJ2ZSBtYXAgbW9kaWZpY2F0aW9ucyBkb25lIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uXG5tbS9odWdldGxiLmMtMjU0NS0gKi9cbm1tL2h1Z2V0bGIuYz0yNTQ2PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTcyLVx0XHRcdCAqIFRoaXMgaW5kaWNhdGVzIHRoZXJlIGlzIGFuIGVudHJ5IGluIHRoZSByZXNlcnZlIG1hcFxubW0vaHVnZXRsYi5jOjI1NzM6XHRcdFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxubW0vaHVnZXRsYi5jOjI1NzQ6XHRcdFx0ICogYmVmb3JlIHRoZSBhbGxvY19odWdldGxiX2ZvbGlvIGNhbGwsIG90aGVyd2lzZVxubW0vaHVnZXRsYi5jLTI1NzUtXHRcdFx0ICogaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgd291bGQgYmUgc2V0IG9uIHRoZSBmb2xpby5cbi0tXG5tbS9odWdldGxiLmM9MjkyMz10eXBlZGVmIGVudW0ge1xuLS1cbm1tL2h1Z2V0bGIuYy0yOTQ4LSAqL1xubW0vaHVnZXRsYi5jOjI5NDk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTI5NTAtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxuLS1cbm1tL2h1Z2V0bGIuYz00ODk0PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNTAxNS1cdFx0XHRcdC8qIERvIG5vdCB1c2UgcmVzZXJ2ZSBhcyBpdCYjMzk7cyBwcml2YXRlIG93bmVkICovXG5tbS9odWdldGxiLmM6NTAxNjpcdFx0XHRcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTUwMTctXHRcdFx0XHRpZiAoSVNfRVJSKG5ld19mb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NTQ4Nz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2V0bGIuYy01NTY4LVx0c3Bpbl91bmxvY2sodm1mLVx1MDAzZXB0bCk7XG5tbS9odWdldGxiLmM6NTU2OTpcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgY293X2Zyb21fb3duZXIpO1xubW0vaHVnZXRsYi5jLTU1NzAtXG4tLVxubW0vaHVnZXRsYi5jPTU3NTk9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01ODI4LVxubW0vaHVnZXRsYi5jOjU4Mjk6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNTgzMC1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NjAwOT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02MjQ0LSAqL1xubW0vaHVnZXRsYi5jOjYyNDU6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy02MjQ2LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL2h1Z2V0bGIuYy02MjYxLVx0ICovXG5tbS9odWdldGxiLmM6NjI2MjpcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02MjYzLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbi0tXG5tbS9odWdldGxiLmM9NjI3Mj1pbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuLS1cbm1tL2h1Z2V0bGIuYy02MzI4LVxubW0vaHVnZXRsYi5jOjYzMjk6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTYzMzAtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jLTYzNTQtXHRcdFx0ICovXG5tbS9odWdldGxiLmM6NjM1NTpcdFx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcbm1tL2h1Z2V0bGIuYy02MzU2LVx0XHRcdGlmICghZm9saW8pIHtcbi0tXG5tbS9odWdldGxiLmMtNjM3NS1cbm1tL2h1Z2V0bGIuYzo2Mzc2Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02Mzc3LVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYz02NjY5PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY3ODktXHRcdFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcbm1tL2h1Z2V0bGIuYzo2NzkwOlx0XHRcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XG5tbS9odWdldGxiLmMtNjc5MS1cdFx0XHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcbi0tXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbi0tXG5tbS9tZW1mZC5jLTkzLVxubW0vbWVtZmQuYzo5NDpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbm1tL21lbWZkLmMtOTUtXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuLS1cbm1tL21lbXBvbGljeS5jPTE0Mzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sKHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbm1tL21lbXBvbGljeS5jLTE0NTYtXHRcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBpbHgsIFx1MDAyNm5pZCk7XG5tbS9tZW1wb2xpY3kuYzoxNDU3Olx0XHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0xNDU4LVx0XHRcdFx0aHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhNUl9NRU1QT0xJQ1lfTUJJTkQpKTtcbi0tXG5tbS9taWdyYXRlLmM9MjE5Nz1zdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbi0tXG5tbS9taWdyYXRlLmMtMjIxNC1cdFx0Z2ZwX21hc2sgPSBodGxiX21vZGlmeV9hbGxvY19tYXNrKGgsIGdmcF9tYXNrKTtcbm1tL21pZ3JhdGUuYzoyMjE1Olx0XHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsXG5tbS9taWdyYXRlLmMtMjIxNi1cdFx0XHRcdFx0XHRtdGMtXHUwMDNlbm1hc2ssIGdmcF9tYXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIEFsbG9jYXRpb24gRmFpbHVyZSBTY2VuYXJpb3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBIdWdlVExCIHN5c3RlbSBoYW5kbGVzIGFsbG9jYXRpb24gZmFpbHVyZXMsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGlmZmVyZW50IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBhbGxvY19odWdldGxiX2ZvbGlvYCwgbmFtZWx5IGAtRU5PU1BDYCBhbmQgYC1FTk9NRU1gLCBpbiB2YXJpb3VzIGNvbnRleHRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIGhvdyB0aGVzZSBlcnJvciBjb2RlcyBhcmUgaGFuZGxlZCBieSBvdGhlciBmdW5jdGlvbnMuCgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBgLUVOT1NQQ2AgdmVyc3VzIGAtRU5PTUVNYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgLCBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAsIGFuZCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRpZmZlcmVudCBlcnJvciBjb2RlcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBpbiB0aGVzZSByb3V0aW5lcywgYW5kIGlmIHNvLCBob3cuCgpUbyBjbGFyaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEkgc2hvdWxkIGNvbnN1bHQgYG1tL2h1Z2V0bGIuY2AuIExldCYjMzk7cyBmb2N1cyBvbiBsaW5lcyA1ODIwLTU4NTAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1ODIwOlx0XHRcdFx0XHRcdFx0XHRWTV9VRkZEX01JU1NJTkcpO1xuNTgyMTpcdFx0XHR9XG41ODIyOlx0XG41ODIzOlx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpKSB7XG41ODI0Olx0XHRcdFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XG41ODI1Olx0XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG41ODI2Olx0XHRcdFx0XHRnb3RvIG91dDtcbjU4Mjc6XHRcdFx0fVxuNTgyODpcdFxuNTgyOTpcdFx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xuNTgzMDpcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuNTgzMTpcdFx0XHRcdC8qXG41ODMyOlx0XHRcdFx0ICogUmV0dXJuaW5nIGVycm9yIHdpbGwgcmVzdWx0IGluIGZhdWx0aW5nIHRhc2sgYmVpbmdcbjU4MzM6XHRcdFx0XHQgKiBzZW50IFNJR0JVUy4gIFRoZSBodWdldGxiIGZhdWx0IG11dGV4IHByZXZlbnRzIHR3b1xuNTgzNDpcdFx0XHRcdCAqIHRhc2tzIGZyb20gcmFjaW5nIHRvIGZhdWx0IGluIHRoZSBzYW1lIHBhZ2Ugd2hpY2hcbjU4MzU6XHRcdFx0XHQgKiBjb3VsZCByZXN1bHQgaW4gZmFsc2UgdW5hYmxlIHRvIGFsbG9jYXRlIGVycm9ycy5cbjU4MzY6XHRcdFx0XHQgKiBQYWdlIG1pZ3JhdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBmYXVsdCBtdXRleCwgYnV0XG41ODM3Olx0XHRcdFx0ICogZG9lcyBhIGNsZWFyIHRoZW4gd3JpdGUgb2YgcHRlJiMzOTtzIHVuZGVyIHBhZ2UgdGFibGVcbjU4Mzg6XHRcdFx0XHQgKiBsb2NrLiAgUGFnZSBmYXVsdCBjb2RlIGNvdWxkIHJhY2Ugd2l0aCBtaWdyYXRpb24sXG41ODM5Olx0XHRcdFx0ICogbm90aWNlIHRoZSBjbGVhciBwdGUgYW5kIHRyeSB0byBhbGxvY2F0ZSBhIHBhZ2VcbjU4NDA6XHRcdFx0XHQgKiBoZXJlLiAgQmVmb3JlIHJldHVybmluZyBlcnJvciwgZ2V0IHB0bCBhbmQgbWFrZVxuNTg0MTpcdFx0XHRcdCAqIHN1cmUgdGhlcmUgcmVhbGx5IGlzIG5vIHB0ZSBlbnRyeS5cbjU4NDI6XHRcdFx0XHQgKi9cbjU4NDM6XHRcdFx0XHRpZiAoaHVnZXRsYl9wdGVfc3RhYmxlKGgsIG1tLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1mLVx1MDAzZXB0ZSwgdm1mLVx1MDAzZW9yaWdfcHRlKSlcbjU4NDQ6XHRcdFx0XHRcdHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7XG41ODQ1Olx0XHRcdFx0ZWxzZVxuNTg0NjpcdFx0XHRcdFx0cmV0ID0gMDtcbjU4NDc6XHRcdFx0XHRnb3RvIG91dDtcbjU4NDg6XHRcdFx0fVxuNTg0OTpcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIHZtZi1cdTAwM2VyZWFsX2FkZHJlc3MpO1xuNTg1MDpcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuNTg1MTpcdFx0XHRuZXdfZm9saW8gPSB0cnVlO1xuNTg1MjpcdFxuNTg1MzpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkge1xuNTg1NDpcdFx0XHRcdGludCBlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLCBtYXBwaW5nLFxuNTg1NTpcdFx0XHRcdFx0XHRcdFx0dm1mLVx1MDAzZXBnb2ZmKTtcbjU4NTY6XHRcdFx0XHRpZiAoZXJyKSB7XG41ODU3Olx0XHRcdFx0XHQvKlxuNTg1ODpcdFx0XHRcdFx0ICogZXJyIGNhbiYjMzk7dCBiZSAtRUVYSVNUIHdoaWNoIGltcGxpZXMgc29tZW9uZVxuNTg1OTpcdFx0XHRcdFx0ICogZWxzZSBjb25zdW1lZCB0aGUgcmVzZXJ2YXRpb24gc2luY2UgaHVnZXRsYlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXJyb3IgTWFwcGluZyBpbiB0aGUgVmlydHVhbCBNZW1vcnkgTWFuYWdlbWVudCBGcmFtZXdvcmsqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSB2aXJ0dWFsIG1lbW9yeSBmcmFtZXdvcmsgaGFuZGxlcyBlcnJvcnMsIHNwZWNpZmljYWxseSB0aGUgbWFwcGluZyBvZiBrZXJuZWwgZXJyb3JzIHRvIFZNIGZhdWx0cy4gSXQgc2VlbXMgbGlrZSB0aGUgZnVuY3Rpb24gYHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSlgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHRyYW5zbGF0aW9uLiBJbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgLUVOT01FTWAsIHRoZSBzdGFuZGFyZCAmIzM0O291dCBvZiBtZW1vcnkmIzM0OyBlcnJvciwgZ2V0cyBtYXBwZWQgdG8gYFZNX0ZBVUxUX09PTWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IG5vdyBJIHNlZSB0aGF0IGAtRU5PU1BDYCwgdGhlICYjMzQ7bm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UmIzM0OyBlcnJvciwgaXMgYmVpbmcgbWFwcGVkIHRvIGVpdGhlciBgVk1fRkFVTFRfU0lHQlVTYCBvciBwb3NzaWJseSBgVk1fRkFVTFRfRVJST1JgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGxlc3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSYjMzk7ZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBtYXBwaW5nIGlzIGhhcHBlbmluZyB0byBiZSBzdXJlIHdoYXQgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1mX2Vycm9yYCB3b3JrcyBpbnRlcm5hbGx5LiBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBgdm1mX2Vycm9yYCB0byBzZWUgaG93IGl0IG1ha2VzIHRoaXMgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1mX2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD00ODE1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgyNC1cbmluY2x1ZGUvbGludXgvbW0uaDo0ODI1OnN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfZXJyb3IoaW50IGVycilcbmluY2x1ZGUvbGludXgvbW0uaC00ODI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgzNi0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjQ4Mzc6ICogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBtZXJnZWQgd2l0aCB2bWZfZXJyb3IoKSBhYm92ZSwgYnV0IHdpbGwgbmVlZCBhXG5pbmNsdWRlL2xpbnV4L21tLmg6NDgzODogKiBjYXJlZnVsIGF1ZGl0IG9mIGFsbCB2bWZfZXJyb3IoKSBjYWxsZXJzLlxuaW5jbHVkZS9saW51eC9tbS5oLTQ4MzktICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzUyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGB2bWZfZXJyb3JgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiBgdm1mX2Vycm9yYC4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBrZXkgcm9sZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIHZpcnR1YWwgbWVtb3J5IGZhdWx0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIGRldGFpbCB0by4uLiB3ZWxsLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHBvdGVudGlhbGx5IGRlYnVnIGEgcGFnZSBmYXVsdCwgZGlhZ25vc2UgYSBtZW1vcnkgbGVhaywgb3IgY29udHJpYnV0ZSB0byBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gS25vd2luZyBgdm1mX2Vycm9yYCYjMzk7cyBzaWduYXR1cmUsIHJldHVybiB2YWx1ZXMsIGFuZCB3aGF0IGl0IGxvZ3Mgd2lsbCBzZXQgdGhlIHN0YWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDgyMDpcdFx0Y29uc3QgcGdwcm90X3QgcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQob3JpZ19wcm90KTtcbjQ4MjE6XHRcbjQ4MjI6XHRcdHJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCBhZGRyLCBwZm4sIHNpemUsIHByb3QpO1xuNDgyMzpcdH1cbjQ4MjQ6XHRcbjQ4MjU6XHRzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Vycm9yKGludCBlcnIpXG40ODI2Olx0e1xuNDgyNzpcdFx0aWYgKGVyciA9PSAtRU5PTUVNKVxuNDgyODpcdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuNDgyOTpcdFx0ZWxzZSBpZiAoZXJyID09IC1FSFdQT0lTT04pXG40ODMwOlx0XHRcdHJldHVybiBWTV9GQVVMVF9IV1BPSVNPTjtcbjQ4MzE6XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG40ODMyOlx0fVxuNDgzMzpcdFxuNDgzNDpcdC8qXG40ODM1Olx0ICogQ29udmVydCBlcnJubyB0byByZXR1cm4gdmFsdWUgZm9yIC1cdTAwM2VwYWdlX21rd3JpdGUoKSBjYWxscy5cbjQ4MzY6XHQgKlxuNDgzNzpcdCAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbWVyZ2VkIHdpdGggdm1mX2Vycm9yKCkgYWJvdmUsIGJ1dCB3aWxsIG5lZWQgYVxuNDgzODpcdCAqIGNhcmVmdWwgYXVkaXQgb2YgYWxsIHZtZl9lcnJvcigpIGNhbGxlcnMuXG40ODM5Olx0ICovXG40ODQwOlx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9mc19lcnJvcihpbnQgZXJyKVxuNDg0MTpcdHtcbjQ4NDI6XHRcdGlmIChlcnIgPT0gMClcbjQ4NDM6XHRcdFx0cmV0dXJuIFZNX0ZBVUxUX0xPQ0tFRDtcbjQ4NDQ6XHRcdGlmIChlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVBR0FJTilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIExpbnV4IEtlcm5lbCBCdWdmaXgqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiBJbnRlcmVzdGluZyBmaXguIFNlZW1zIGxpa2UgYSBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgSHVnZVRMQiwgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIG5vdGljZSB0aGF0IHdoZW4gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBoYXBwZW5zIHdpdGhpbiB0aGUgYHZtZl9lcnJvcigpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gYGVycmAgaXMgYC1FTk9NRU1gLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgVk1fRkFVTFRfT09NYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBiZWhhdmlvci4gQnV0LCBhbmQgdGhpcyBpcyB0aGUga2lja2VyLCB3aGVuIGRlYWxpbmcgd2l0aCBIdWdlVExCIGFuZCB0aGlzIGBWTV9GQVVMVF9PT01gIGlzIHJldHVybmVkIGZyb20gYSBwYWdlIGZhdWx0IGhhbmRsZXIsIGl0IHRyaWdnZXJzIGEgcmV0cnksIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCBiZWhhdmlvciB3aXRoIGh1Z2UgcGFnZXMsIGxpa2UgZ2V0dGluZyBzdHVjayBpbiBhIGxvb3AgYmVjYXVzZSB0aGUgc3RhbmRhcmQgT09NIGtpbGxlciByZXRyeSBsb2dpYyBpc24mIzM5O3QgdHJpZ2dlcmVkLgoKQW5kIHRoZXJlJiMzOTtzIG1vcmUuIFByZXZpb3VzbHksIGlmIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5lZCBgLUVOT01FTWAsIGBodWdldGxiX2FsbG9jX2ZvbGlvYCB3YXMgaW5jb3JyZWN0bHkgY2FsbGluZyBgZnJlZV9odWdlX2ZvbGlvYCBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJdCBza2lwcyBgZm9saW9fcHV0YCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYW4gaW5hcHByb3ByaWF0ZSByZWxlYXNlIHBhdGguIE5vdywgdGhlIGZpeCAqY29ycmVjdGx5KiBjYWxscyBgZm9saW9fcHV0YCwgYW5kIHJldHVybnMgYC1FTk9TUENgIGluc3RlYWQuIFRoaXMgaXMgYmV0dGVyLCByaWdodD8gSXQgYXZvaWRzIHRoZSBsb29waW5nIHBhZ2UgZmF1bHQgYW5kIGluc3RlYWQgdHJpZ2dlcnMgYSBTSUdCVVMsIHdoaWNoIGlzIGRlZmluaXRlbHkgcHJlZmVyYWJsZSB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wLgoKU28sIHRoaXMgaXMgYSBjb3JlIE1NIC8gSHVnZVRMQiAvIE1lbWNnIGZ1bmN0aW9uYWwgYnVnZml4LiBNYWtlcyBtZSB3b25kZXIgaWYgdGhpcyBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuIEh1Z2VUTEIgaXMgZGVmaW5pdGVseSBhIHN0YW5kYXJkIGZlYXR1cmUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSAodGhyb3VnaCBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgaHVnZXRsYmZzYCwgZXRjLikuIEl0JiMzOTtzIGVzcGVjaWFsbHkgbGlrZWx5IHRvIHRyaWdnZXIgdW5kZXIgbWVtb3J5IHByZXNzdXJlIG9yIHdoZW4gbWVtb3J5IGNncm91cCBsaW1pdHMgYXJlIGluIHBsYWNlIChgQ09ORklHX0hVR0VUTEJGU2AsIGBDT05GSUdfQ0dST1VQU2AsIGBDT05GSUdfTUVNQ0dgKS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgcmVxdWlyZW1lbnRzIGZvciBIdWdlVExCIGFuZCB0aGUgbWVtb3J5IGNncm91cCBodWdldGxiIGNoYXJnaW5nIHRvIHNlZSB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19IVUdFVExCRlNgIGFuZCBvdGhlciByZWxhdGVkIGNvbmZpZ3MgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGluIHRoZSByZWxldmFudCBgbW0vS2NvbmZpZ2AgZmlsZS4gTmVlZCB0byBuYWlsIGRvd24gdGhlIHN1cmZhY2UgYXJlYSBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpb3xtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgyOC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYy0yODgyLVxubW0vaHVnZXRsYi5jOjI4ODM6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0yODg0LVx0Lypcbm1tL2h1Z2V0bGIuYy0yODg1LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4ODY6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg4Ny1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAzMi1cbm1tL2h1Z2V0bGIuYzozMDMzOlx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAzNC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUyMzUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNDQtICovXG5tbS9tZW1jb250cm9sLmM6NTI0NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTI0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtbS9odWdldGxiLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwb2ludCBmb3IgYnVpbGQgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgcmlnaHQ/IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhhdCBgTWFrZWZpbGVgIGFuZCBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBgaHVnZXRsYi5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgb2JqZWN0IGZpbGUgZ2VuZXJhdGlvbiBydWxlcywgYW5kIGhvdyBpdCYjMzk7cyBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBgbW1gIG1vZHVsZSwgYW5kIHByb2JhYmx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxubW0vTWFrZWZpbGU6ODM6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiX2NtYS5vXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxubW0vTWFrZWZpbGU6ODU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZS04Ni1vYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbi0tXG5tbS9NYWtlZmlsZT0xMDg9ZW5kaWZcbm1tL01ha2VmaWxlOjEwOTpvYmotJChDT05GSUdfQ0dST1VQX0hVR0VUTEIpICYjNDM7PSBodWdldGxiX2Nncm91cC5vXG5tbS9NYWtlZmlsZS0xMTAtb2JqLSQoQ09ORklHX0dVUF9URVNUKSAmIzQzOz0gZ3VwX3Rlc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFF1ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBgSFVHRVRMQkZTYCBjb25maWcgb3B0aW9uLiBXaGVyZSYjMzk7cyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGFuZCBkb2N1bWVudGF0aW9uPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL0tjb25maWdgIGJlY2F1c2UgdGhlIGZpbGUgc3lzdGVtIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gaXQuIElmIGl0IGlzbiYjMzk7dCB0aGVyZSwgdGhlbiBgbW0vS2NvbmZpZ2AgaXMgYSB2ZXJ5IGxpa2VseSBzZWNvbmRhcnkgbG9jYXRpb24sIGdpdmVuIHRoZSBuYXR1cmUgb2YgSHVnZVRMQiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgc28gaXQmIzM5O3MgcHJvYmFibHkgcHJldHR5IGhpZ2ggdXAgaW4gdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlZmF1bHRzLCBkZXBlbmRlbmNpZXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbnMgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRvIGNvcnJlY3RseSBzZXQgaXQgZm9yIHRoaXMga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYGZzL0tjb25maWdgLiBJIGtub3cgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIG1vc3QgZmlsZXN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gTGV0JiMzOTtzIHNlZS4uLiBhcm91bmQgbGluZSAyNTAsIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbW9yZSBnZW5lcmFsIGZpbGVzeXN0ZW0gb3B0aW9ucyBiZWdpbiwgb3IgcGVyaGFwcyB3aGVyZSBhIHNwZWNpZmljIHJlbGV2YW50IHNlY3Rpb24gYmVnaW5zLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWxldmFudCBzZWN0aW9uIHRvIHBheSBhdHRlbnRpb24gdG8uIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgZ2l2ZXMgbWUgd2hhdCBJIG5lZWQuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSB0dWNrZWQgYXdheSBhcm91bmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjQ4Olx0XHRkZWZfYm9vbCBuXG4gMjQ5Olx0XG4gMjUwOlx0bWVudWNvbmZpZyBIVUdFVExCRlNcbiAyNTE6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMjUyOlx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjUzOlx0XHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4gMjU0Olx0XHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxuIDI1NTpcdFx0aGVscFxuIDI1NjpcdFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG4gMjU3Olx0XHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcbiAyNTg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAyNTk6XHRcbiAyNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjE6XHRcbiAyNjI6XHRpZiBIVUdFVExCRlNcbiAyNjM6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuIDI2NDpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4gMjY1Olx0XHRkZWZhdWx0IG5cbiAyNjY6XHRcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNjc6XHRcdGhlbHBcbiAyNjg6XHRcdCAgVGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb2ZmLiBTYXkgWSBoZXJlIHRvXG4gMjY5Olx0XHQgIGVuYWJsZSBIVk8gYnkgZGVmYXVsdC4gSXQgY2FuIGJlIGRpc2FibGVkIHZpYSBodWdldGxiX2ZyZWVfdm1lbW1hcD1vZmZcbiAyNzA6XHRcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG4gMjcxOlx0ZW5kaWYgIyBIVUdFVExCRlNcbiAyNzI6XHRcbiAyNzM6XHRjb25maWcgSFVHRVRMQl9QQUdFXG4gMjc0Olx0XHRkZWZfYm9vbCBIVUdFVExCRlNcbiAyNzU6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiAyNzY6XHRcbiAyNzc6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNzg6XHRcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuIDI3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDA1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgS2NvbmZpZyBvcHRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGVuYWJsZSBpdCBpZiB0aGUgdW5kZXJseWluZyBzdXBwb3J0IGlzbiYjMzk7dCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMg4oCTIGFyZSB0aGVyZSBhbnkgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoYXQgbXVzdCBiZSBzZXQgZmlyc3Q/IFdoYXQmIzM5O3MgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gdHJlZSB0aGF0IGVuYWJsZXMgaXQ/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBkaXJlY3QgaW5zcGVjdGlvbiBvZiB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLgoKTmV4dCwgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgZ3VhcmRlZCBpbiB0aGUgY29kZSwgd2hhdCBjb25kaXRpb25zIGFjdHVhbGx5IG1ha2UgaXQgcGFydCBvZiB0aGUgY29tcGlsZWQgY29kZSwgZm9yIGV4YW1wbGUgSSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQgaXMgZGVjbGFyZWQvZ3VhcmRlZCBieSBgI2lmZGVmYC4gS25vd2luZyBpdHMgZ3VhcmRpbmcgY29uZGl0aW9ucyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCB3aGVuIHRoZSBjb2RlIHBhdGggYXNzb2NpYXRlZCB3aXRoIGl0IGlzIGFjdHVhbGx5IGFjdGl2ZS4gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBgI2lmZGVmYHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIHZlcnNpb25zIHdoZXJlIGl0cyBiZWhhdmlvciBtaWdodCBkaWZmZXI/IEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcywgdGhlIGd1YXJkIGFuZCB0aGUgcmVzdWx0aW5nIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucyBoZWxwcyB0byBhc3Nlc3MgYW5kIGVuc3VyZSB0aGF0IHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJsZSBvciBjb25maWd1cmVkIGFzIG5lZWRlZCBmb3IgbXkgc3BlY2lmaWMgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjU3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTM9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAte1xuLS1cbm1tL2h1Z2V0bGIuYz0yODI3PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODgyLVxubW0vaHVnZXRsYi5jOjI4ODM6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0yODg0LVx0Lypcbm1tL2h1Z2V0bGIuYy0yODg1LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4ODY6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg4Ny1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0NC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjQ1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MjQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbWVtY29udHJvbC5oYCBmb3IgTWVtY2cgRGV0YWlscyoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMgKGBtZW1jZ2ApLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBoZWFkZXIgZmlsZS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBjb25maWd1cmVkLCBlbmFibGVkLCBvciBvdGhlcndpc2UgaGFuZGxlZCB3aXRoaW4gdGhpcyBoZWFkZXIgZmlsZS4gTXkgaW5zdGluY3Qgc2F5cyB0aGF0IGxpbmVzIDY2NSBhbmQgMTE1OSBhcmUga2V5LiBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gKGAjaWZkZWYgQ09ORklHX01FTUNHYCkgYXJvdW5kIHRob3NlIGxpbmUgbnVtYmVycy4gVGhpcyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIG1lbWNnLXNwZWNpZmljIGNvZGUgaXMgYWN0aXZlIGJhc2VkIG9uIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGFyZWFzIHRvIHNlZSBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZmVhdHVyZXMgYXJlIGV4cG9zZWQgb3IgaGlkZGVuIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCDigJMgZmluZCB0aGUgcmVsZXZhbnQgc291cmNlLCBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLCBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY1MDpcdCAqIHBhZ2VzIGFjY29yZGluZyB0byBAZ2ZwIGlmIG5lY2Vzc2FyeS4gIElmIEBtbSBpcyBOVUxMLCB0cnkgdG9cbiA2NTE6XHQgKiBjaGFyZ2UgdG8gdGhlIGFjdGl2ZSBtZW1jZy5cbiA2NTI6XHQgKlxuIDY1MzpcdCAqIERvIG5vdCB1c2UgdGhpcyBmb3IgZm9saW9zIGFsbG9jYXRlZCBmb3Igc3dhcGluLlxuIDY1NDpcdCAqXG4gNjU1Olx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cbiA2NTY6XHQgKi9cbiA2NTc6XHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiA2NTg6XHRcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4gNjU5Olx0e1xuIDY2MDpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA2NjE6XHRcdFx0cmV0dXJuIDA7XG4gNjYyOlx0XHRyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7XG4gNjYzOlx0fVxuIDY2NDpcdFxuIDY2NTpcdGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG4gNjY2Olx0XG4gNjY3Olx0aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiA2Njg6XHRcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuIDY2OTpcdFxuIDY3MDpcdHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDY3MTpcdFxuIDY3MjpcdC8qKlxuIDY3MzpcdCAqIG1lbV9jZ3JvdXBfdW5jaGFyZ2UgLSBVbmNoYXJnZSBhIGZvbGlvLlxuIDY3NDpcdCAqIEBmb2xpbzogRm9saW8gdG8gdW5jaGFyZ2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTWVtY29udHJvbC5oKioKCkFscmlnaHQsIHNvIHdlIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHBvaW50IGhlcmUsIGFuZCB0aGF0IG1lYW5zIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBvdmVyIHRvIGxpbmUgMTE1MCBvZiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGtleSBhc3BlY3Qgb2YgaG93IG1lbW9yeSBjb250cm9sIGlzIG1hbmFnZWQgaXMgZGVmaW5lZCB0aGVyZSwgYW5kIGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2suIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uLCBwZXJoYXBzIGEgZnVuY3Rpb24gY2FsbCByZWxhdGVkIHRvIG1lbW9yeSBsaW1pdHMsIG9yIG1heWJlIGV2ZW4gYSBzdWJ0bGUgZGV0YWlsIGFib3V0IGhvdyBhY2NvdW50aW5nIGlzIGhhbmRsZWQgZm9yIHRoYXQgc3Vic3lzdGVtLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSBzYW1lIHBhZ2Ugd2l0aCB0aGUgY29yZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0NTpcdH1cbjExNDY6XHRcbjExNDc6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbjExNDg6XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuMTE0OTpcdHtcbjExNTA6XHRcdHJldHVybiBmYWxzZTtcbjExNTE6XHR9XG4xMTUyOlx0XG4xMTUzOlx0c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbjExNTQ6XHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbjExNTU6XHR7XG4xMTU2Olx0XHRyZXR1cm4gMDtcbjExNTc6XHR9XG4xMTU4Olx0XG4xMTU5Olx0c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG4xMTYwOlx0e1xuMTE2MTpcdCAgICAgICAgcmV0dXJuIDA7XG4xMTYyOlx0fVxuMTE2MzpcdFxuMTE2NDpcdHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMTE2NTpcdFx0XHQgdW5zaWduZWQgc2hvcnQgaWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4xMTY2Olx0e1xuMTE2NzpcdFx0cmV0dXJuIDA7XG4xMTY4Olx0fVxuMTE2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE5NwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBJdCBzZWVtcyBsaWtlIGl0cyBiZWhhdmlvciBpcyBkcmFzdGljYWxseSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCBvciBub3QuIElmIE1FTUNHIGlzICpvZmYqLCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5zIDAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEhvd2V2ZXIsIHdoZW4gTUVNQ0cgKmlzKiBlbmFibGVkLCBzdWRkZW5seSBpdCBjYW4gcmV0dXJuIGAtRU5PTUVNYCwgc2lnbmFsaW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IHRvIG5vdGUuIFRoaXMgY2hhbmdlcyB0aGUgZW50aXJlIGZsb3cuCgpBbmQsIGFzIGEgc2lkZSB0aG91Z2h0LCBJIHNlZSB0aGF0IHdoZW4gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIGluY2x1ZGVzIGEgY2FsbCB0byBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIEkmIzM5O2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhpcyB3aGVuIGRpdmluZyBkZWVwIGludG8gdGhlIGNvZGUuCgpHaXZlbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlczogYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciB2YWx1ZXMuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiBNRU1DRyBlbmFibGVtZW50IG9uIEh1Z2VUTEIgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gdGhpbmtpbmcgYWJvdXQgaG93IGRpZmZlcmVudCBtZW1vcnkgcG9saWNpZXMgaW50ZXJhY3QgYW5kIGhvdyBlcnJvcnMgcHJvcGFnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0IGxlYWRzIG1lIHRvIGNvbnNpZGVyIGFsbCByZWxldmFudCBmYWN0b3JzLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBiZSB0aG9yb3VnaCBhbmQgbm90IG1pc3MgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IGBDR1JPVVBfSFVHRVRMQmAgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIGF0IGhhbmQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGludGVncmF0ZSB0aGlzIGNvbnNpZGVyYXRpb24gaW50byB0aGUgb3ZlcmFsbCBhbmFseXNpcyBhbmQgZW5zdXJlIHRoYXQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGFsc28gYXNzZXNzZWQgYWxvbmdzaWRlIHRoZSBvdGhlciBjb25zaWRlcmF0aW9ucyB0byBwcm92aWRlIHRoZSBtb3N0IGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBldmFsdWF0aW9uLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfSFVHRVRMQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTI4Mj1jb25maWcgQ0dST1VQX0ZSRUVaRVJcbi0tXG5pbml0L0tjb25maWctMTI5Mi1cbmluaXQvS2NvbmZpZzoxMjkzOmNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuaW5pdC9LY29uZmlnLTEyOTQtXHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGFyZWEuIEJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIEkgdGhpbmsgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBsaWtlbHkgYXJvdW5kIGxpbmVzIDEwODUgYW5kIDEyOTMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhvc2UgbGluZXMgcHJvYmFibHkgY29udGFpbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHRoZWlyIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBsaW5lcyBwcm92aWRlIGFueSBjcml0aWNhbCBoaW50cyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgSSYjMzk7bSB0cnlpbmcgdG8gdW50YW5nbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA4MTpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MjpcdFxuMTA4MzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHXG4xMDg2Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg3Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg4Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA5MDpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkxOlx0XHRoZWxwXG4xMDkyOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gS2VybmVsIENvbmZpZ3VyYXRpb246IEEgU3BlY2lmaWMgRm9jdXMqKgoKT2theSwgc28gd2UgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCBsaW5lcyAxMjkwLTEzMDUgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0byBvdXIgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGx1cmtpbmcgd2l0aGluIHRoYXQgYmxvY2suIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGhvcGVmdWxseSwgdGhpcyB3aWxsIHlpZWxkIHRoZSBzcGVjaWZpYyBkZXRhaWwgd2UgbmVlZCwgcmF0aGVyIHRoYW4gYSBicm9hZCBzd2VlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XG4xMjkxOlx0XHQgIElmIHlvdSYjMzk7cmUgdXNpbmcgY2dyb3VwMiwgc2F5IE4uXG4xMjkyOlx0XG4xMjkzOlx0Y29uZmlnIENHUk9VUF9IVUdFVExCXG4xMjk0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuMTI5NTpcdFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VcbjEyOTY6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEyOTc6XHRcdGRlZmF1bHQgblxuMTI5ODpcdFx0aGVscFxuMTI5OTpcdFx0ICBQcm92aWRlcyBhIGNncm91cCBjb250cm9sbGVyIGZvciBIdWdlVExCIHBhZ2VzLlxuMTMwMDpcdFx0ICBXaGVuIHlvdSBlbmFibGUgdGhpcywgeW91IGNhbiBwdXQgYSBwZXIgY2dyb3VwIGxpbWl0IG9uIEh1Z2VUTEIgdXNhZ2UuXG4xMzAxOlx0XHQgIFRoZSBsaW1pdCBpcyBlbmZvcmNlZCBkdXJpbmcgcGFnZSBmYXVsdC4gU2luY2UgSHVnZVRMQiBkb2VzbiYjMzk7dFxuMTMwMjpcdFx0ICBzdXBwb3J0IHBhZ2UgcmVjbGFpbSwgZW5mb3JjaW5nIHRoZSBsaW1pdCBhdCBwYWdlIGZhdWx0IHRpbWUgaW1wbGllc1xuMTMwMzpcdFx0ICB0aGF0LCB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgU0lHQlVTIHNpZ25hbCBpZiBpdCB0cmllcyB0byBhY2Nlc3NcbjEzMDQ6XHRcdCAgSHVnZVRMQiBwYWdlcyBiZXlvbmQgaXRzIGxpbWl0LiBUaGlzIHJlcXVpcmVzIHRoZSBhcHBsaWNhdGlvbiB0byBrbm93XG4xMzA1Olx0XHQgIGJlZm9yZWhhbmQgaG93IG11Y2ggSHVnZVRMQiBwYWdlcyBpdCB3b3VsZCByZXF1aXJlIGZvciBpdHMgdXNlLiBUaGVcbjEzMDY6XHRcdCAgY29udHJvbCBncm91cCBpcyB0cmFja2VkIGluIHRoZSB0aGlyZCBwYWdlIGxydSBwb2ludGVyLiBUaGlzIG1lYW5zXG4xMzA3Olx0XHQgIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgY29udHJvbGxlciB3aXRoIGh1Z2UgcGFnZSBsZXNzIHRoYW4gMyBwYWdlcy5cbjEzMDg6XHRcbjEzMDk6XHRjb25maWcgQ1BVU0VUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1OQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2VUTEIgQWxsb2NhdGlvbiBhbmQgRmF1bHQgSGFuZGxpbmcgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIG9uIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20ga2V5aW5nIGluIG9uIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhcyB0aGV5IGFwcGVhciB0byBiZSB0aGUgY29yZSBhbGxvY2F0b3JzLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gU2FtZSBnb2VzIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYWNjZXNzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZ1enppbmcgY292ZXJhZ2UuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgSFVHRVRMQkZTYCAoSHVnZVRMQiBmaWxlc3lzdGVtIHN1cHBvcnQpLCBgTUVNQ0dgIChNZW1vcnkgQ29udHJvbGxlciwgZXNzZW50aWFsIGZvciBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmApLCBhbmQgYENHUk9VUF9IVUdFVExCYCAoSHVnZVRMQiBjb250cm9sbGVyKSBhcmUgYWxsIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2Nrcy4KClRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB3aGV0aGVyIHRoaXMgYXJlYSBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHNlcmlvdXMgYnVnIHdoZXJlIG1lbSBjZ3JvdXAgaHVnZXRsYiBjaGFyZ2luZyBmYWlsdXJlcyBjYW4gbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIsIHRyaWdnZXJlZCBieSAtRU5PTUVNIGFuZCByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NLCBhbG9uZyB3aXRoIGluY29ycmVjdCBmb2xpbyByZWxlYXNlcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNyaXRpY2FsIGZsYXcgZnV6emluZyBpcyBkZXNpZ25lZCB0byB1bmNvdmVyLiBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBlc3BlY2lhbGx5IHdoZW4gbWVtb3J5IGNncm91cCBsaW1pdHMgYW5kIGh1Z2V0bGJmcy9NQVBfSFVHRVRMQiBwYWdlIGZhdWx0cyBhcmUgaW52b2x2ZWQuCgpTbywgdG8gc3VtbWFyaXplOgoKMS4gICoqRm9jdXNTeW1ib2xzKio6IGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLgoyLiAgKipFbmFibGVDb25maWdzKio6IGBIVUdFVExCRlNgLCBgTUVNQ0dgLCBgQ0dST1VQX0hVR0VUTEJgLgozLiAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgCjQuICAqKlJlYXNvbmluZyoqOiBTb2xpZCBleHBsYW5hdGlvbiBmb3IgdnVsbmVyYWJpbGl0eS4KCk5vdyBJIG5lZWQgdG8gZW5zdXJlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgaXMgdXNlZCB3aXRoIGFsbCByZXF1aXJlZCBhbmQgdmFsaWQgYXJndW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9IVUdFVExCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9IVUdFVExCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZjQ4OWZlZGYwYmJhYmEwOTg4MGViZjU4NWYxNDY0Yjk1MGQ4MDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi45N2MwNmYyMjdlZjhhIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0yODIzLDcgJiM0MzsyODIzLDYgQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKQogICoKICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS4KICAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLgotICogICAgICAgICAtRU5PTUVNIGlmIG1lbSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMuCiAgKi8KIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCQlzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpCkBAIC0yODkwLDEzICYjNDM7Mjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTsKIAogCWlmIChyZXQgPT0gLUVOT01FTSkgewotCQlmcmVlX2h1Z2VfZm9saW8oZm9saW8pOwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKIAkJLyoKIAkJICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzCiAJCSAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW8KIAkJICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLgogCQkgKi8KLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGUKJiM0MzsJCSAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKQomIzQzOwkJICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhCiYjNDM7CQkgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvbgomIzQzOwkJICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NCiYjNDM7CQkgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvcgomIzQzOwkJICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0bwomIzQzOwkJICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5CiYjNDM7CQkgKiByZXRyeWluZyB0aGUgZmF1bHQuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwogCX0KIAogCXJldHVybiBmb2xpbzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggRXZhbHVhdGlvbiBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGtlcm5lbCBwYXRjaCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIGRpc3NlY3QgdGhlIGNvZGUuIFRoaXMgbWVhbnMgZ2V0dGluZyBteSBoYW5kcyBkaXJ0eSBhbmQgdGFraW5nIGEgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbS9odWdldGxiLmNgIHdpdGhpbiB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgZnVuY3Rpb24uIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xraXQgZm9yIHRoaXM6IGEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlc3Npb24gdG8gcHVsbCB0aGUgZmlsZSBhbmQgc3Vycm91bmRpbmcgY29kZSBzbyBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgaW4gY29udGV4dC4gVGhpcyB3aWxsIGxldCBtZSBhc3Nlc3MgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODc1Olx0XG4yODc2Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpIHtcbjI4Nzc6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfY29tbWl0X2NoYXJnZV9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCxcbjI4Nzg6XHRcdFx0XHRcdFx0XHQgIGZvbGlvKTtcbjI4Nzk6XHRcdH1cbjI4ODA6XHRcbjI4ODE6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg4MjpcdFxuMjg4MzpcdFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG4yODg0Olx0XHQvKlxuMjg4NTpcdFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxuMjg4NjpcdFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxuMjg4NzpcdFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXG4yODg4Olx0XHQgKi9cbjI4ODk6XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuMjg5MDpcdFxuMjg5MTpcdFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4yODkyOlx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yODkzOlx0XHRcdC8qXG4yODk0Olx0XHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuMjg5NTpcdFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4yODk2Olx0XHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbjI4OTc6XHRcdFx0ICovXG4yODk4Olx0XHRcdC8qXG4yODk5Olx0XHRcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZVxuMjkwMDpcdFx0XHQgKiBvciBjaGFyZ2UgYSBodWdlIHBhZ2UuIElmIGEgc3RhbmRhcmQgKFBBR0VfU0laRSlcbjI5MDE6XHRcdFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXG4yOTAyOlx0XHRcdCAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uXG4yOTAzOlx0XHRcdCAqIHJldHJ5LiBIb3dldmVyLCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9ucywgdGhlIE9PTVxuMjkwNDpcdFx0XHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxuMjkwNTpcdFx0XHQgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvXG4yOTA2Olx0XHRcdCAqIHRoZSAjUEYgaGFuZGxlciwgY2F1c2luZyBpdCB0byBsb29wIGluZGVmaW5pdGVseVxuMjkwNzpcdFx0XHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXG4yOTA4Olx0XHRcdCAqL1xuMjkwOTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbjI5MTA6XHRcdH1cbjI5MTE6XHRcbjI5MTI6XHRcdHJldHVybiBmb2xpbztcbjI5MTM6XHRcbjI5MTQ6XHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwOlxuMjkxNTpcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwKGlkeCwgbnJfcGFnZXMsIGhfY2cpO1xuMjkxNjpcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDpcbjI5MTc6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZClcbjI5MTg6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkKTtcbjI5MTk6XHRcbjI5MjA6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4yOTIxOlx0fVxuMjkyMjpcdFxuMjkyMzpcdHR5cGVkZWYgZW51bSB7XG4yOTI0Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgdHdvIGNoYW5nZXMgaW4gdGhlIGRpZmYuIFRoZSBmaXJzdCBpcyBhIHJlcGxhY2VtZW50OiBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtgIGlzIG5vdyBgZm9saW9fcHV0KGZvbGlvKTtgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgc2hpZnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzIOKAkyBwZXJoYXBzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZT8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gYGZvbGlvX3B1dGAgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuIFNlY29uZCwgdGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGZhaWxzIHdpdGggYC1FTk9NRU1gLiBQcmV2aW91c2x5LCBpdCByZXR1cm5lZCBgRVJSX1BUUigtRU5PTUVNKWAsIGJ1dCBub3cgaXQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuIFRoaXMgc2lnbmFscyBhIHBvdGVudGlhbCBkaXN0aW5jdGlvbiBpbiB0aGUgbmF0dXJlIG9mIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUuIGAtRU5PTUVNYCB1c3VhbGx5IGluZGljYXRlcyBhIG1vcmUgZ2VuZXJhbCBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpbGUgYC1FTk9TUENgIG1vcmUgc3BlY2lmaWNhbGx5IHBvaW50cyB0byBhIGxhY2sgb2Ygc3BhY2Ugd2l0aGluIGEgc3BlY2lmaWMgcmVzb3VyY2UsIGxpa2UgdGhlIG1lbW9yeSBjZ3JvdXAuIEdpdmVuIHRoZSBuYXR1cmUgb2YgaHVnZXRsYiwgdGhlIGNoYW5nZSB0byBgLUVOT1NQQ2AgbWlnaHQgYmUgYSBiZXR0ZXIgZml0LCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgd2lkZXIgc3lzdGVtIGJlaGF2aW9yIHRvIGJlIGNlcnRhaW4uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBTZWVpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNsdWVzIGFib3V0IHRoZSBpbXBhY3Qgb2YgdGhlc2UgdHdvIGNoYW5nZXMgYW5kIGlmIHRoZXkgbWFrZSBzZW5zZSB0b2dldGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgZm9saW9fcHV0YCB2ZXJzdXMgYGZyZWVfaHVnZV9mb2xpb2AgaW4gdGhlIGNvbnRleHQgb2YgKnRob3NlKiBzcGVjaWZpYyBjYWxsaW5nIGxvY2F0aW9ucywgYW5kIGNvbmZpcm0gdGhlIGNoYW5nZSB0byBgLUVOT1NQQ2AgaXMgYXBwcm9wcmlhdGUuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXG4tLVxubW0vaHVnZXRsYi5jLTI4MjYtICovXG5tbS9odWdldGxiLmM6MjgyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0yODI4LVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4tLVxubW0vaHVnZXRsYi5jPTI5NDk9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMDMyLVxubW0vaHVnZXRsYi5jOjMwMzM6XHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0zMDM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBIdWdlIFBhZ2VzKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2VzLiBUaGUgaW1tZWRpYXRlIHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGUgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGZ1bmN0aW9uLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBpdCwgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBpdC4gSXQmIzM5O3MgY3J1Y2lhbCwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBBbmQgb2YgY291cnNlLCBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBpbiBpc29sYXRpb24uIEkgKmhhdmUqIHRvIGZvbGxvdyBpdHMgY2FsbHMuIFdoZXJlIGlzIHRoaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxsZXJzIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGZvciBnZXR0aW5nIHRoZSBmdWxsIHBpY3R1cmUuIFRoYXQmIzM5O3MgbXkgbmV4dCBzdGVwLCB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDMwOlx0XHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuMzAzMTpcdFx0fTtcbjMwMzI6XHRcbjMwMzM6XHRcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuMzAzNDpcdFxuMzAzNTpcdFx0bXBvbF9jb25kX3B1dChtcG9sKTtcbjMwMzY6XHRcbjMwMzc6XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4zMDM4Olx0XHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuMzAzOTpcdFx0XHRnb3RvIG91dF9zdWJwb29sX3B1dDtcbjMwNDA6XHRcdH1cbjMwNDE6XHRcbjMwNDI6XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHNwb29sKTtcbjMwNDM6XHRcbjMwNDQ6XHRcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHtcbjMwNDU6XHRcdFx0LyogY29tbWl0KCkgaXMgb25seSBuZWVkZWQgaWYgdGhlIG1hcF9jaGcgaXMgbm90IGVuZm9yY2VkICovXG4zMDQ2Olx0XHRcdHJldHZhbCA9IHZtYV9jb21taXRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcbjMwNDc6XHRcdFx0LypcbjMwNDg6XHRcdFx0ICogQ2hlY2sgZm9yIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gV2hlbiBpdCBoYXBwZW5zLi5cbjMwNDk6XHRcdFx0ICogVGhlIHBhZ2Ugd2FzIGFkZGVkIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgYmV0d2VlblxuMzA1MDpcdFx0XHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXG4zMDUxOlx0XHRcdCAqIFRoaXMgaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcy5cbjMwNTI6XHRcdFx0ICogQWRqdXN0IGZvciB0aGUgc3VicG9vbCBjb3VudCBpbmNyZW1lbnRlZCBhYm92ZSBBTkRcbjMwNTM6XHRcdFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlx0QWxzbyxcbjMwNTQ6XHRcdFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xuMzA1NTpcdFx0XHQgKiBubyBsb25nZXIgYXBwbGllcy5cbjMwNTY6XHRcdFx0ICovXG4zMDU3Olx0XHRcdGlmICh1bmxpa2VseShtYXBfY2hnID09IE1BUF9DSEdfTkVFREVEIFx1MDAyNlx1MDAyNiByZXR2YWwgPT0gMCkpIHtcbjMwNTg6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG4zMDU5Olx0XG4zMDYwOlx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbjMwNjE6XHRcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbjMwNjI6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDYzOlx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9fcnN2ZChcbjMwNjQ6XHRcdFx0XHQgICAgaHN0YXRlX2luZGV4KGgpLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBmb2xpbyk7XG4zMDY1Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDY2Olx0XHRcdH1cbjMwNjc6XHRcdH1cbjMwNjg6XHRcbjMwNjk6XHRcdHJldHVybiBmb2xpbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA1MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgSHVnZXRsYiBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5zIGAtRU5PTUVNYCwgc2lnbmFsaW5nIGFuIG91dC1vZi1tZW1vcnkgY29uZGl0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGZvbGxvd2VkIGJ5IHJldHVybmluZyBgLUVOT01FTWAuIE5vdywgaXQmIzM5O3MgY2hhbmdlZCB0byBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybmluZyBgLUVOT1NQQ2AuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBjaGFuZ2UgZnJvbSBkaXJlY3QgZnJlZWluZyB0byBgZm9saW9fcHV0YC4gQWgsIHJpZ2h0LCBodWdldGxiIGZvbGlvcyBhcmUgcmVmZXJlbmNlIGNvdW50ZWQuIERpcmVjdCBmcmVlaW5nLCBgZnJlZV9odWdlX2ZvbGlvYCwgY291bGQgYnlwYXNzIGVzc2VudGlhbCBkZXN0cnVjdG9yIGxvZ2ljIG9yIHRoZSBpbnRlbmRlZCByZWZjb3VudCBiZWhhdmlvciDigJMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBwcm9ibGVtcyBpZiB0aGUgcmVmY291bnQgd2FzIGFscmVhZHkgYXQgb25lLiBUaGUgcmVhc29uIGZvciBgLUVOT1NQQ2AgaW5zdGVhZCBvZiBgLUVOT01FTWAgaXMgaW50ZXJlc3RpbmcuIFRoZSBodWdldGxiIHBhZ2UgZmF1bHQgaGFuZGxpbmcgaW50ZXJwcmV0cyB0aGUgb2xkIGAtRU5PTUVNYCBhcyBhIFZNX0ZBVUxUX09PTSwgd2hpY2ggdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wIHNpbmNlIHRoZSBPT00ga2lsbGVyIGlzbiYjMzk7dCBpbnZva2VkIGZvciBodWdldGxiIHBhZ2VzLiBSZXR1cm5pbmcgYC1FTk9TUENgLCB3aGljaCBtYXBzIHRvIFZNX0ZBVUxUX1NJR0JVUywgc2VuZHMgYSBTSUdCVVMgdG8gdXNlcnNwYWNlLCBwcmV2ZW50aW5nIHRoZSBpbmZpbml0ZSBsb29wLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgdG8gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCjEuICBBcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2U/IE5vLCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZSBoZXJlLgoKMi4gIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIG5vdCBpbiB0aGlzIGNoYW5nZS4KCjMuICBJcyB0aGVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vLCB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4gZWl0aGVyLgoKNC4gIEFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBub3RoaW5nIHJlbGV2YW50IHRvIG91ciBhbmFseXNpcy4KCjUuICBEb2VzIHRoaXMgY2hhbmdlIGhhdmUgYW4gaW1wYWN0IG9uIEtNU0FOIHZzLiBLQVNBTj8gSXQmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gY2dyb3VwIGVycm9yIGhhbmRsaW5nIGZvciBodWdldGxiLiBUaGUgY2hhbmdlIHJlc29sdmVzIGEgcmV0dXJuIGNvZGUgaXNzdWUgKC1FTk9NRU0gdG8gLUVOT1NQQykgYW5kIHVzZXMgYGZvbGlvX3B1dGAgZm9yIGNsZWFudXAuIEFueSBwcm9ibGVtcyBoZXJlIHdvdWxkIHN0ZW0gZnJvbSBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50aW5nLCBwYWdlIGZyZWVpbmcsIG9yIGVycm9yIGNvZGUgbG9naWMgYnVncy4gVGhvc2UgdHlwZXMgb2YgaXNzdWVzIGZhbGwgdW5kZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRlY2huaXF1ZXM6IEtBU0FOLCBgcmVmY291bnRfdGAsIGBsb2NrZGVwYCBldGMuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFraW5nLiBObywgdGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZSBhdCBhbGwuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgZmFsc2UgaGVyZS4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCB0aGUgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBgaHVnZXRsYl9hbGxvY19mb2xpbygpYCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFNwZWNpZmljYWxseSwgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgY2FsbCB0byBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAgd2l0aCBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBmcm9tIGAtRU5PTUVNYCB0byBgLUVOT1NQQ2AgKHByZXZlbnRpbmcgaW5maW5pdGUgcGFnZS1mYXVsdCByZXRyaWVzIG9uIGh1Z2V0bGIgYWxsb2NhdGlvbnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyByZWZlcmVuY2UgY291bnRpbmcgLyBmb2xpbyBmcmVlaW5nIG1lY2hhbmljcyBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2svaGVhcCBidWZmZXJzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByZWZjb3VudCBpbWJhbGFuY2VzIG9yIHJlc291cmNlIGxlYWtzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIHJlZmVyZW5jZSBjb3VudGluZyAvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTiwgbm90IEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjozOS4yODc5MDUwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzgwOTAxMDI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBfSFVHRVRMQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcmVmZXJlbmNlIGNvdW50aW5nIC8gZm9saW8gZnJlZWluZyBtZWNoYW5pY3MgYW5kIGVycm9yIGNvZGUgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmVmY291bnQgaW1iYWxhbmNlcyBvciByZXNvdXJjZSBsZWFrcykgZmFsbCB1bmRlciBzdGFuZGFyZCByZWZlcmVuY2UgY291bnRpbmcgLyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS0FTQU4sIG5vdCBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKCkgZmFpbHMgaW4gaHVnZXRsYl9hbGxvY19mb2xpbygpLiBJdCByZXBsYWNlcyBkaXJlY3QgZnJlZV9odWdlX2ZvbGlvKCkgd2l0aCBmb2xpb19wdXQoKSBhbmQgcmV0dXJucyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZnJvbSBsb29waW5nIGluZmluaXRlbHkgcmV0cnlpbmcgb24gVk1fRkFVTFRfT09NLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIHBhZ2UgZmF1bHRzIHVuZGVyIG1lbW9yeSBjZ3JvdXAgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjozOS4yODc5MTA1MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTA3NTEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRmNDg5ZmVkZjBiYmFiYTA5ODgwZWJmNTg1ZjE0NjRiOTUwZDgwMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi45N2MwNmYyMjdlZjhhIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yODIzLDcgKzI4MjMsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuICAqXFxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cXG4gICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuXFxuLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxcbiAgKi9cXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG5AQCAtMjg5MCwxMyArMjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XFxuIFxcbiBcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4tXFx0XFx0ZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuIFxcdFxcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cXG4gXFx0XFx0ICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlXFxuK1xcdFxcdCAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKVxcbitcXHRcXHQgKiBwYWdlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGFcXG4rXFx0XFx0ICogY2hhbmNlIHRvIHJ1biwgd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb25cXG4rXFx0XFx0ICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NXFxuK1xcdFxcdCAqIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLiAgUmV0dXJuaW5nIC1FTk9NRU0gKG9yXFxuK1xcdFxcdCAqIGFueXRoaW5nIHJlc3VsdGluZyBpbiBWTV9GQVVMVF9PT00pIHdvdWxkIGxlYWsgdG9cXG4rXFx0XFx0ICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5XFxuK1xcdFxcdCAqIHJldHJ5aW5nIHRoZSBmYXVsdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZm9saW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjM5Ljc3MzcxMjA2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjU4ODM4Mjc3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQX0hVR0VUTEJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKCkgZmFpbHMgaW4gaHVnZXRsYl9hbGxvY19mb2xpbygpLiBJdCByZXBsYWNlcyBkaXJlY3QgZnJlZV9odWdlX2ZvbGlvKCkgd2l0aCBmb2xpb19wdXQoKSBhbmQgcmV0dXJucyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZnJvbSBsb29waW5nIGluZmluaXRlbHkgcmV0cnlpbmcgb24gVk1fRkFVTFRfT09NLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIHBhZ2UgZmF1bHRzIHVuZGVyIG1lbW9yeSBjZ3JvdXAgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZjQ4OWZlZGYwYmJhYmEwOTg4MGViZjU4NWYxNDY0Yjk1MGQ4MDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uOTdjMDZmMjI3ZWY4YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMjgyMyw3ICsyODIzLDYgQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuICAqXG4gICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuICAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLlxuLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxuICAqL1xuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG5AQCAtMjg5MCwxMyArMjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuIFxuIFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4tXHRcdGZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdC8qXG4gXHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuIFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4gXHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHRcdC8qXG4rXHRcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZVxuK1x0XHQgKiBvciBjaGFyZ2UgYSBodWdlIHBhZ2UuIElmIGEgc3RhbmRhcmQgKFBBR0VfU0laRSlcbitcdFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXG4rXHRcdCAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uXG4rXHRcdCAqIHJldHJ5LiBIb3dldmVyLCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9ucywgdGhlIE9PTVxuK1x0XHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxuK1x0XHQgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvXG4rXHRcdCAqIHRoZSAjUEYgaGFuZGxlciwgY2F1c2luZyBpdCB0byBsb29wIGluZGVmaW5pdGVseVxuK1x0XHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiBcdH1cbiBcbiBcdHJldHVybiBmb2xpbztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjM5Ljc3MzcxMzQ2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2OTQzNzQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCB3aGVyZSBpdCdzIHNpdHVhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIGtlcm5lbC4gVGhlIHRhcmdldCBpcyBgbW0vaHVnZXRsYi5jYCDigJMgdGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiB3b3JrbG9hZHMgdGhhdCBkZW1hbmQgbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIEknbGwgbmVlZCB0byByZWFkIHRoZSBkaWZmIG1ldGljdWxvdXNseSwgYnV0IEkgd29uJ3QganVzdCBsb29rIGF0IHRoZSBsaW5lIGNoYW5nZXMgaW4gaXNvbGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGxvZ2ljIGZsb3cgKmFyb3VuZCogdGhlIG1vZGlmaWNhdGlvbnMsIGFuZCBob3cgdGhpcyBwYXRjaCBwb3RlbnRpYWxseSBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcyB3aXRoaW4gdGhlIGBodWdldGxiYCBzdWJzeXN0ZW0uIE9ubHkgdGhlbiBjYW4gSSBmb3JtIGEgY29tcHJlaGVuc2l2ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjo0NC40NjgwOTE2MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4NzA6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4yODcxOlxcdFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbjI4NzI6XFx0XFx0fVxcbjI4NzM6XFx0XFxuMjg3NDpcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlKGlkeCwgbnJfcGFnZXMsIGhfY2csIGZvbGlvKTtcXG4yODc1OlxcdFxcbjI4NzY6XFx0XFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XFxuMjg3NzpcXHRcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxcbjI4Nzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuMjg3OTpcXHRcXHR9XFxuMjg4MDpcXHRcXG4yODgxOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuMjg4NDpcXHRcXHQvKlxcbjI4ODU6XFx0XFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbjI4ODY6XFx0XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbjI4ODc6XFx0XFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuMjg4ODpcXHRcXHQgKi9cXG4yODg5OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xcbjI4OTA6XFx0XFxuMjg5MTpcXHRcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4yODkyOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjg5MzpcXHRcXHRcXHQvKlxcbjI4OTQ6XFx0XFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuMjg5NTpcXHRcXHRcXHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXFxuMjg5NjpcXHRcXHRcXHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXFxuMjg5NzpcXHRcXHRcXHQgKi9cXG4yODk4OlxcdFxcdFxcdC8qXFxuMjg5OTpcXHRcXHRcXHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcXG4yOTAwOlxcdFxcdFxcdCAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKVxcbjI5MDE6XFx0XFx0XFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXFxuMjkwMjpcXHRcXHRcXHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxcbjI5MDM6XFx0XFx0XFx0ICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NXFxuMjkwNDpcXHRcXHRcXHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxcbjI5MDU6XFx0XFx0XFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xcbjI5MDY6XFx0XFx0XFx0ICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5XFxuMjkwNzpcXHRcXHRcXHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXFxuMjkwODpcXHRcXHRcXHQgKi9cXG4yOTA5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI5MTA6XFx0XFx0fVxcbjI5MTE6XFx0XFxuMjkxMjpcXHRcXHRyZXR1cm4gZm9saW87XFxuMjkxMzpcXHRcXG4yOTE0OlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA6XFxuMjkxNTpcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgaF9jZyk7XFxuMjkxNjpcXHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6XFxuMjkxNzpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpXFxuMjkxODpcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQpO1xcbjI5MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjQ0LjQ2ODM1ODc0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDI4OTQ0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBodWdldGxiIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgd2UgaGFuZGxlIG91dC1vZi1tZW1vcnkgc2NlbmFyaW9zIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIGNvbnRleHQuXG5cblByZXZpb3VzbHksIGlmIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5lZCBgLUVOT01FTWAsIGluZGljYXRpbmcgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGF0IHRoZSBtZW1jZyBsZXZlbCwgdGhlIGZ1bmN0aW9uIHdvdWxkIGltbWVkaWF0ZWx5IGZyZWUgdGhlIGZvbGlvIHVzaW5nIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCBhbmQgcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIgcmVwcmVzZW50aW5nIHRoZSBgLUVOT01FTWAgZXJyb3IgYmFjayB1cCB0aGUgY2FsbCBzdGFjay4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgYSBmYWlsZWQgYWxsb2Mgd291bGQgYmUgZGlyZWN0bHkgZnJlZWQgdG8gYXZvaWQgbGVha3MuXG5cbk5vdywgdGhpbmdzIGFyZSBkaWZmZXJlbnQuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGJlaGF2aW9yIHRvIGluc3RlYWQgY2FsbCBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybnMgYEVSUl9QVFIoLUVOT1NQQylgLiBUaGlzIHNpZ25hbHMgYSBcIk5vIFNwYWNlXCIgZXJyb3IgaW5zdGVhZC4gSG1tLCBzbyByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBmcmVlaW5nIHRoZSBmb2xpbywgdGhpcyBpcyBhIGNoYW5nZSB0byByZXR1cm4gYW4gZXJyb3IgY29kZSB0aGF0J3MgbW9yZSBpbmRpY2F0aXZlIG9mIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gLS0gc3BhY2UgaXNuJ3QgYXZhaWxhYmxlLCBidXQgbm90IG5lY2Vzc2FyaWx5IHRoYXQgdGhlcmUncyBzaW1wbHkgbm8gbW9yZSBtZW1vcnkuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgcmVsYXRlcyB0byBob3cgbWVtY2dzIHRyYWNrIHJlc291cmNlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGRlZmluaXRpb24gYW5kIGNhbGwgc2l0ZXMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCdzIHN0YXRpYyBvciBleHBvcnRlZCwgYW5kIGFsc28gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gaHVnZXRsYiBhbmQgaHVnZXRsYl9jZ3JvdXAvbWVtY2cgc3VwcG9ydCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXJlIGVsc2UgdGhlIGNvZGUgaXMgY2FsbGVkLCBhbmQgd2hvIHJlbGllcyBvbiBpdHMgcmV0dXJuIHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjI6NDguMTExMjU1MDgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODQ5MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXFxubW0vaHVnZXRsYi5jLTI4MTctICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xcbm1tL2h1Z2V0bGIuYzoyODI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0yODI4LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDMyLVxcbm1tL2h1Z2V0bGIuYzozMDMzOlxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtMzAzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjI6NDguMTY2MTEwMDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxNDUyMTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGZvciBodWdlIHBhZ2VzLiBUaGUgYmVzdCBzdGFydGluZyBwb2ludCwgbmF0dXJhbGx5LCBpcyB0aGUgY29yZSBoZWFkZXIgZmlsZS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbiwgb3IgYXQgbGVhc3Qgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zLCByZWxhdGVkIHRvIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgdG8gcGluIGRvd24gd2hlcmUgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbiBpcyBkZWNsYXJlZC4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gZ28gb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjo0OS44ODA2MzM5OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDEwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjUwLjAzMjA1MDA3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODU3NDY3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgR2lhbnQgRm9vdHN0ZXBzIG9mIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIGh1Z2UgcGFnZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpbnRlcmFjdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUg4oCTIHRoZSBjYWxsZXJzIG9mICpib3RoKiBmdW5jdGlvbnMsIGFuZCBjcnVjaWFsbHksIGhvdyBwYWdlIGZhdWx0cyBhbmQgbWVtY2cgY2hhcmdpbmcgYXJlIGhhbmRsZWQgd2l0aGluIHRoaXMgY29udGV4dC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHRocmVhZCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgb3JjaGVzdHJhdGVkLlxuXG5UaW1lIHRvIGRpdmUgaW4uIExldCdzIHN0YXJ0IHdpdGggYSBjb21wcmVoZW5zaXZlIHNlYXJjaCBmb3IgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB3aWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuIEZyb20gdGhlcmUgSSBjYW4gZXhwbG9yZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2Ugcm91dGluZXMgYW5kIHRoZSBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjI6NTIuMzE3ODAwMzMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4NzU1OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMjgxNS0vKipcXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXFxuLS1cXG5tbS9odWdldGxiLmMtMjgyNi0gKi9cXG5tbS9odWdldGxiLmM6MjgyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMjgyOC1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9odWdldGxiLmM9Mjk0OT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAzMi1cXG5tbS9odWdldGxiLmM6MzAzMzpcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XFxubW0vaHVnZXRsYi5jLTMwMzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjU0LjA2NjU2NzY5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE3NDE2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgb2YgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBXaGF0J3MgZHJpdmluZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbj8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIHBhdGhzLCB0aGUgYXJlYXMgb2YgdGhlIGtlcm5lbCB0aGF0IGFyZSAqcmVseWluZyogb24gaHVnZSBwYWdlcywgYW5kIHBhcnRpY3VsYXJseSB0aGUgYWxsb2NhdGlvbiBzaWRlLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHN1YnN5c3RlbXMgYXJlIHB1dHRpbmcgdGhlIHByZXNzdXJlIG9uIHRoZSBodWdlIHBhZ2UgYWxsb2NhdG9yLiBJJ20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGRpZmZlcmVudCB1c2UgY2FzZXMuIFxuXG5JJ20gdGhpbmtpbmc6IGlzIHRoaXMgcHJpbWFyaWx5IG1lbW9yeS1tYXBwZWQgZmlsZSB1c2FnZT8gTlVNQSBwb2xpY2llcz8gU3BlY2lmaWMgZGV2aWNlIGRyaXZlcnM/IE9yIG1heWJlIG1vcmUgZ2VuZXJhbCBrZXJuZWwgYWxsb2NhdGlvbnMgdGhhdCBsZXZlcmFnZSBodWdlIHBhZ2VzIGZvciBwZXJmb3JtYW5jZT8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgc2VxdWVuY2VzPyBJcyBpdCBhbGwgZGlyZWN0IGNhbGxzLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGxheWVycyBvZiBhYnN0cmFjdGlvbiB0aGF0IG5lZWQgdG8gYmUgZm9sbG93ZWQ/IFVsdGltYXRlbHkgSSdtIHRyeWluZyB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIE1heWJlIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIHRoZSBhbGxvY2F0aW9uIHBhdGhzIG9yIHVuZGVyc3RhbmQgdGhlIGZyYWdtZW50YXRpb24gaXNzdWVzLiBTbywgc3RlcCBvbmUsIEknbGwgbmVlZCB0byB0cmFjZSBhbmQgYW5hbHl6ZSB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjU2LjY4Mzk4Nzc0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMzI0Mzg3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTgxPWFyZSBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXBwaW5nLiAgVGhlIGFsbG9jYXRpb25cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4MjppcyBwZXJmb3JtZWQgd2l0aGluIHRoZSByb3V0aW5lIGFsbG9jX2h1Z2V0bGJfZm9saW8oKTo6XFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODMtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODQ6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg1LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4Ni1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NzphbGxvY19odWdldGxiX2ZvbGlvIGlzIHBhc3NlZCBhIFZNQSBwb2ludGVyIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgc28gaXQgY2FuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODgtY29uc3VsdCB0aGUgcmVzZXJ2YXRpb24gbWFwIHRvIGRldGVybWluZSBpZiBhIHJlc2VydmF0aW9uIGV4aXN0cy4gIEluIGFkZGl0aW9uLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg5OmFsbG9jX2h1Z2V0bGJfZm9saW8gdGFrZXMgdGhlIGFyZ3VtZW50IGF2b2lkX3Jlc2VydmUgd2hpY2ggaW5kaWNhdGVzIHJlc2VydmVzXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xOTAtc2hvdWxkIG5vdCBiZSB1c2VkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGV5IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yMDc9aXMgY2FsbGVkLiAgVGhpcyByb3V0aW5lIHRha2VzIHR3byBhcmd1bWVudHMgcmVsYXRlZCB0byByZXNlcnZhdGlvbnM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwOS0tIGF2b2lkX3Jlc2VydmUsIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUvYXJndW1lbnQgcGFzc2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMTA6ICBhbGxvY19odWdldGxiX2ZvbGlvKCkuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMTEtLSBjaGcsIGV2ZW4gdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgb2YgdHlwZSBsb25nIG9ubHkgdGhlIHZhbHVlcyAwIG9yIDEgYXJlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTI0Nz1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXNlcnZlIG1hcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRoZSBjYWxsXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDg6dG8gdm1hX25lZWRzX3Jlc2VydmF0aW9uKCkgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGxvY19odWdldGxiX2ZvbGlvKCkgYW5kIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ5LWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDY65b2T5LiO6aKE55WZ55u45YWz55qE5beo6aG15Zyo55u45bqU55qE5pig5bCE5Lit6KKr5YiG6YWN5ZKM5a6e5L6L5YyW5pe277yM6aKE55WZ5bCx6KKr5raI6ICX5LqG44CC6K+l5YiG6YWN5piv5Zyo5Ye95pWwYWxsb2NfaHVnZXRsYl9mb2xpby4uLlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0Ny3kuK3ov5vooYznmoQ6OlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0OC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDk6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MjphbGxvY19odWdldGxiX2ZvbGlv6KKr5Lyg6YCS57uZ5LiA5LiqVk1B5oyH6ZKI5ZKM5LiA5Liq6Jma5ouf5Zyw5Z2A77yM5Zug5q2k5a6D5Y+v5Lul5p+l6ZiF6aKE55WZ5pig5bCE5Lul56Gu5a6a5piv5ZCm5a2Y5Zyo6aKE55WZ44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUzOuatpOWklu+8jGFsbG9jX2h1Z2V0bGJfZm9saW/pnIDopoHkuIDkuKrlj4LmlbBhdm9pZF9yZXNlcnZl77yM6K+l5Y+C5pWw6KGo56S65Y2z5L2/55yL6LW35p2l5bey57uP5Li65oyH5a6a55qE5Zyw5Z2A6aKE55WZ5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTU0LemihOeVme+8jOS5n+S4jeW6lOivpeS9v+eUqOmihOeVmeOAgmF2b2lkX3Jlc2VydmXlj4LmlbDmnIDluLjooqvnlKjkuo7lhpnml7bmi7fotJ3lkozpobXpnaLov4Hnp7vnmoTmg4XlhrXkuIvvvIzljbPnjrDmnInpobXpnaLnmoTpop1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE2MD12bWFfbmVlZHNfcmVzZXJ2YXRpb24oKei/lOWbnueahOWAvOmAmuW4uOS4ujDmiJYx44CC5aaC5p6c6K+l5Zyw5Z2A5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MO+8jOWmguaenOS4jeWtmOWcqOmihOeVme+8jOWImeS4ujHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNjY6LSBhdm9pZF9yZXNlcnZl77yM6L+Z5piv5Lyg6YCS57uZYWxsb2NfaHVnZXRsYl9mb2xpbygp55qE5ZCM5LiA5Liq5YC8L+WPguaVsOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2Ny0tIGNoZ++8jOWwveeuoei/meS4quWPguaVsOeahOexu+Wei+aYr2xvbmfvvIzkvYblj6rmnIkw5oiWMeeahOWAvOiiq+S8oOmAkue7mWRlcXVldWVfaHVnZV9wYWdlX3ZtYeOAguWmguaenOivpeWAvOS4ujDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE5Mz1TZXRQYWdlUHJpdmF0ZShwYWdlKeWSjHJlc3ZfaHVnZV9wYWdlcy3jgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwMi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDM65ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDQtdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTItXFx0XFx0ICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzkzOlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZmFsc2UpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5NC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODEzLVxcdFxcdCAqIGZvbGlvX3VubG9jayBiZWNhdXNlIGxvY2tlZCBieSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MTQ6XFx0XFx0ICogZm9saW9fcHV0KCkgZHVlIHRvIHJlZmVyZW5jZSBmcm9tIGFsbG9jX2h1Z2V0bGJfZm9saW8oKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxNS1cXHRcXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwMT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDM6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwNTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA2LVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDctXFx0XFx0XFx0XFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOS1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTIyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEyNS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjctXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEzNDphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cXHRcXHRcXHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTE0MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTE0MTphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExNDItXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jPTIxNDI9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjE2NS1cXG5tbS9odWdldGxiLmM6MjE2NjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9odWdldGxiLmMtMjE2Ny1cXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMjE4Ni0vKiBmb2xpbyBtaWdyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gKi9cXG5tbS9odWdldGxiLmM6MjE4NzpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxODgtXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLCBib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI1MjA9c3RhdGljIGxvbmcgdm1hX2RlbF9yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1MjctICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byByZXN0b3JlIHJlc2VydmF0aW9uIGluZm9ybWF0aW9uIG9uIGVycm9yIHBhdGhzLlxcbm1tL2h1Z2V0bGIuYzoyNTI4OiAqIEl0IHNob3VsZCBPTkxZIGJlIGNhbGxlZCBmb3IgZm9saW9zIGFsbG9jYXRlZCB2aWEgYWxsb2NfaHVnZXRsYl9mb2xpbygpLFxcbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIGFuZCB0aGUgaHVnZXRsYiBtdXRleCBzaG91bGQgcmVtYWluIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgcm91dGluZS5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTM0LSAqIDIpIE5vIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBmb3IgdGhlIHBhZ2UsIHNvIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzXFxubW0vaHVnZXRsYi5jOjI1MzU6ICogICAgbm90IHNldC4gIEhvd2V2ZXIsIGFsbG9jX2h1Z2V0bGJfZm9saW8gYWx3YXlzIHVwZGF0ZXMgdGhlIHJlc2VydmUgbWFwLlxcbm1tL2h1Z2V0bGIuYy0yNTM2LSAqXFxuLS1cXG5tbS9odWdldGxiLmMtMjU0My0gKlxcbm1tL2h1Z2V0bGIuYzoyNTQ0OiAqIEluIGNhc2UgMiwgc2ltcGx5IHVuZG8gcmVzZXJ2ZSBtYXAgbW9kaWZpY2F0aW9ucyBkb25lIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uXFxubW0vaHVnZXRsYi5jLTI1NDUtICovXFxubW0vaHVnZXRsYi5jPTI1NDY9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjU3Mi1cXHRcXHRcXHQgKiBUaGlzIGluZGljYXRlcyB0aGVyZSBpcyBhbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZSBtYXBcXG5tbS9odWdldGxiLmM6MjU3MzpcXHRcXHRcXHQgKiBub3QgYWRkZWQgYnkgYWxsb2NfaHVnZXRsYl9mb2xpby4gIFdlIGtub3cgaXQgd2FzIGFkZGVkXFxubW0vaHVnZXRsYi5jOjI1NzQ6XFx0XFx0XFx0ICogYmVmb3JlIHRoZSBhbGxvY19odWdldGxiX2ZvbGlvIGNhbGwsIG90aGVyd2lzZVxcbm1tL2h1Z2V0bGIuYy0yNTc1LVxcdFxcdFxcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHdvdWxkIGJlIHNldCBvbiB0aGUgZm9saW8uXFxuLS1cXG5tbS9odWdldGxiLmM9MjkyMz10eXBlZGVmIGVudW0ge1xcbi0tXFxubW0vaHVnZXRsYi5jLTI5NDgtICovXFxubW0vaHVnZXRsYi5jOjI5NDk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy0yOTUwLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpXFxuLS1cXG5tbS9odWdldGxiLmM9NDg5ND1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9odWdldGxiLmMtNTAxNS1cXHRcXHRcXHRcXHQvKiBEbyBub3QgdXNlIHJlc2VydmUgYXMgaXQncyBwcml2YXRlIG93bmVkICovXFxubW0vaHVnZXRsYi5jOjUwMTY6XFx0XFx0XFx0XFx0bmV3X2ZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBhZGRyLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKElTX0VSUihuZXdfZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NTQ4Nz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZXRsYi5jLTU1NjgtXFx0c3Bpbl91bmxvY2sodm1mLVxcdTAwM2VwdGwpO1xcbm1tL2h1Z2V0bGIuYzo1NTY5OlxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGNvd19mcm9tX293bmVyKTtcXG5tbS9odWdldGxiLmMtNTU3MC1cXG4tLVxcbm1tL2h1Z2V0bGIuYz01NzU5PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01ODI4LVxcbm1tL2h1Z2V0bGIuYzo1ODI5OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01ODMwLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NjAwOT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTYyNDQtICovXFxubW0vaHVnZXRsYi5jOjYyNDU6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtNjI0Ni1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubW0vaHVnZXRsYi5jLTYyNjEtXFx0ICovXFxubW0vaHVnZXRsYi5jOjYyNjI6XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5vZGUsIG5vZGVtYXNrLCBnZnBfbWFzaywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MjYzLVxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuLS1cXG5tbS9odWdldGxiLmM9NjI3Mj1pbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTYzMjgtXFxubW0vaHVnZXRsYi5jOjYzMjk6XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTYzMzAtXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzU0LVxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MzU1OlxcdFxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoaCwgZHN0X3ZtYSwgZHN0X2FkZHIpO1xcbm1tL2h1Z2V0bGIuYy02MzU2LVxcdFxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02Mzc1LVxcbm1tL2h1Z2V0bGIuYzo2Mzc2OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02Mzc3LVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NjY2OT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3ODktXFx0XFx0XFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcXG5tbS9odWdldGxiLmM6Njc5MDpcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbm1tL2h1Z2V0bGIuYy02NzkxLVxcdFxcdFxcdCAqIHRoZSBzdWJwb29sIGFuZCByZXNlcnZlIGNvdW50cyBtb2RpZmllZCBhYm92ZVxcbi0tXFxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuLS1cXG5tbS9tZW1mZC5jLTkzLVxcbm1tL21lbWZkLmM6OTQ6XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG5tbS9tZW1mZC5jLTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0Mzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ1Ni1cXHRcXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgaWx4LCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoxNDU3OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCwgbm9kZW1hc2ssIGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0xNDU4LVxcdFxcdFxcdFxcdGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soTVJfTUVNUE9MSUNZX01CSU5EKSk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MjE5Nz1zdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMjE0LVxcdFxcdGdmcF9tYXNrID0gaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhoLCBnZnBfbWFzayk7XFxubW0vbWlncmF0ZS5jOjIyMTU6XFx0XFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLFxcbm1tL21pZ3JhdGUuYy0yMjE2LVxcdFxcdFxcdFxcdFxcdFxcdG10Yy1cXHUwMDNlbm1hc2ssIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjo1OC41MDcyMzc4MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NTkxMTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZVRMQiBBbGxvY2F0aW9uIEZhaWx1cmUgU2NlbmFyaW9zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIEh1Z2VUTEIgc3lzdGVtIGhhbmRsZXMgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkaWZmZXJlbnQgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBuYW1lbHkgYC1FTk9TUENgIGFuZCBgLUVOT01FTWAsIGluIHZhcmlvdXMgY29udGV4dHMuIFRoZSBjcnVjaWFsIHBhcnQgaXMgaG93IHRoZXNlIGVycm9yIGNvZGVzIGFyZSBoYW5kbGVkIGJ5IG90aGVyIGZ1bmN0aW9ucy5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBgLUVOT1NQQ2AgdmVyc3VzIGAtRU5PTUVNYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgLCBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAsIGFuZCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRpZmZlcmVudCBlcnJvciBjb2RlcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBpbiB0aGVzZSByb3V0aW5lcywgYW5kIGlmIHNvLCBob3cuXG5cblRvIGNsYXJpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBzaG91bGQgY29uc3VsdCBgbW0vaHVnZXRsYi5jYC4gTGV0J3MgZm9jdXMgb24gbGluZXMgNTgyMC01ODUwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjAwLjY5MzE1MzA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4MjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Vk1fVUZGRF9NSVNTSU5HKTtcXG41ODIxOlxcdFxcdFxcdH1cXG41ODIyOlxcdFxcbjU4MjM6XFx0XFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSkge1xcbjU4MjQ6XFx0XFx0XFx0XFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxuNTgyNTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG41ODI2OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjU4Mjc6XFx0XFx0XFx0fVxcbjU4Mjg6XFx0XFxuNTgyOTpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG41ODMwOlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuNTgzMTpcXHRcXHRcXHRcXHQvKlxcbjU4MzI6XFx0XFx0XFx0XFx0ICogUmV0dXJuaW5nIGVycm9yIHdpbGwgcmVzdWx0IGluIGZhdWx0aW5nIHRhc2sgYmVpbmdcXG41ODMzOlxcdFxcdFxcdFxcdCAqIHNlbnQgU0lHQlVTLiAgVGhlIGh1Z2V0bGIgZmF1bHQgbXV0ZXggcHJldmVudHMgdHdvXFxuNTgzNDpcXHRcXHRcXHRcXHQgKiB0YXNrcyBmcm9tIHJhY2luZyB0byBmYXVsdCBpbiB0aGUgc2FtZSBwYWdlIHdoaWNoXFxuNTgzNTpcXHRcXHRcXHRcXHQgKiBjb3VsZCByZXN1bHQgaW4gZmFsc2UgdW5hYmxlIHRvIGFsbG9jYXRlIGVycm9ycy5cXG41ODM2OlxcdFxcdFxcdFxcdCAqIFBhZ2UgbWlncmF0aW9uIGRvZXMgbm90IHRha2UgdGhlIGZhdWx0IG11dGV4LCBidXRcXG41ODM3OlxcdFxcdFxcdFxcdCAqIGRvZXMgYSBjbGVhciB0aGVuIHdyaXRlIG9mIHB0ZSdzIHVuZGVyIHBhZ2UgdGFibGVcXG41ODM4OlxcdFxcdFxcdFxcdCAqIGxvY2suICBQYWdlIGZhdWx0IGNvZGUgY291bGQgcmFjZSB3aXRoIG1pZ3JhdGlvbixcXG41ODM5OlxcdFxcdFxcdFxcdCAqIG5vdGljZSB0aGUgY2xlYXIgcHRlIGFuZCB0cnkgdG8gYWxsb2NhdGUgYSBwYWdlXFxuNTg0MDpcXHRcXHRcXHRcXHQgKiBoZXJlLiAgQmVmb3JlIHJldHVybmluZyBlcnJvciwgZ2V0IHB0bCBhbmQgbWFrZVxcbjU4NDE6XFx0XFx0XFx0XFx0ICogc3VyZSB0aGVyZSByZWFsbHkgaXMgbm8gcHRlIGVudHJ5LlxcbjU4NDI6XFx0XFx0XFx0XFx0ICovXFxuNTg0MzpcXHRcXHRcXHRcXHRpZiAoaHVnZXRsYl9wdGVfc3RhYmxlKGgsIG1tLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG41ODQ0OlxcdFxcdFxcdFxcdFxcdHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7XFxuNTg0NTpcXHRcXHRcXHRcXHRlbHNlXFxuNTg0NjpcXHRcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbjU4NDc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNTg0ODpcXHRcXHRcXHR9XFxuNTg0OTpcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIHZtZi1cXHUwMDNlcmVhbF9hZGRyZXNzKTtcXG41ODUwOlxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuNTg1MTpcXHRcXHRcXHRuZXdfZm9saW8gPSB0cnVlO1xcbjU4NTI6XFx0XFxuNTg1MzpcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB7XFxuNTg1NDpcXHRcXHRcXHRcXHRpbnQgZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywgbWFwcGluZyxcXG41ODU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGdvZmYpO1xcbjU4NTY6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjU4NTc6XFx0XFx0XFx0XFx0XFx0LypcXG41ODU4OlxcdFxcdFxcdFxcdFxcdCAqIGVyciBjYW4ndCBiZSAtRUVYSVNUIHdoaWNoIGltcGxpZXMgc29tZW9uZVxcbjU4NTk6XFx0XFx0XFx0XFx0XFx0ICogZWxzZSBjb25zdW1lZCB0aGUgcmVzZXJ2YXRpb24gc2luY2UgaHVnZXRsYlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzowMC42OTM0MjM1MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4MjI2NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVycm9yIE1hcHBpbmcgaW4gdGhlIFZpcnR1YWwgTWVtb3J5IE1hbmFnZW1lbnQgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHZpcnR1YWwgbWVtb3J5IGZyYW1ld29yayBoYW5kbGVzIGVycm9ycywgc3BlY2lmaWNhbGx5IHRoZSBtYXBwaW5nIG9mIGtlcm5lbCBlcnJvcnMgdG8gVk0gZmF1bHRzLiBJdCBzZWVtcyBsaWtlIHRoZSBmdW5jdGlvbiBgdm1mX2Vycm9yKFBUUl9FUlIoZm9saW8pKWAgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgdHJhbnNsYXRpb24uIEludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGAtRU5PTUVNYCwgdGhlIHN0YW5kYXJkIFwib3V0IG9mIG1lbW9yeVwiIGVycm9yLCBnZXRzIG1hcHBlZCB0byBgVk1fRkFVTFRfT09NYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgbm93IEkgc2VlIHRoYXQgYC1FTk9TUENgLCB0aGUgXCJubyBzcGFjZSBsZWZ0IG9uIGRldmljZVwiIGVycm9yLCBpcyBiZWluZyBtYXBwZWQgdG8gZWl0aGVyIGBWTV9GQVVMVF9TSUdCVVNgIG9yIHBvc3NpYmx5IGBWTV9GQVVMVF9FUlJPUmAuIFRoYXQncyBhIGxpdHRsZSBsZXNzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEknZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBtYXBwaW5nIGlzIGhhcHBlbmluZyB0byBiZSBzdXJlIHdoYXQgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1mX2Vycm9yYCB3b3JrcyBpbnRlcm5hbGx5LiBMZXQncyBnbyBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGB2bWZfZXJyb3JgIHRvIHNlZSBob3cgaXQgbWFrZXMgdGhpcyBkZXRlcm1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MDIuNzc1Njk0MTkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk1ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWZfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00ODE1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC00ODI0LVxcbmluY2x1ZGUvbGludXgvbW0uaDo0ODI1OnN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfZXJyb3IoaW50IGVycilcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgyNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgzNi0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDo0ODM3OiAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbWVyZ2VkIHdpdGggdm1mX2Vycm9yKCkgYWJvdmUsIGJ1dCB3aWxsIG5lZWQgYVxcbmluY2x1ZGUvbGludXgvbW0uaDo0ODM4OiAqIGNhcmVmdWwgYXVkaXQgb2YgYWxsIHZtZl9lcnJvcigpIGNhbGxlcnMuXFxuaW5jbHVkZS9saW51eC9tbS5oLTQ4MzktICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjAyLjg2ODY1ODQ1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4NTc4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYHZtZl9lcnJvcmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBkZWZpbml0aW9uIG9mIGB2bWZfZXJyb3JgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIGtleSByb2xlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHByb2JhYmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgdmlydHVhbCBtZW1vcnkgZmF1bHRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gZGV0YWlsIHRvLi4uIHdlbGwsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgcG90ZW50aWFsbHkgZGVidWcgYSBwYWdlIGZhdWx0LCBkaWFnbm9zZSBhIG1lbW9yeSBsZWFrLCBvciBjb250cmlidXRlIHRvIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgcmV2ZWFscy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gS25vd2luZyBgdm1mX2Vycm9yYCdzIHNpZ25hdHVyZSwgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgaXQgbG9ncyB3aWxsIHNldCB0aGUgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MDQuNzk3MjM5MjM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDgyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDgyMDpcXHRcXHRjb25zdCBwZ3Byb3RfdCBwcm90ID0gcGdwcm90X2RlY3J5cHRlZChvcmlnX3Byb3QpO1xcbjQ4MjE6XFx0XFxuNDgyMjpcXHRcXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgYWRkciwgcGZuLCBzaXplLCBwcm90KTtcXG40ODIzOlxcdH1cXG40ODI0OlxcdFxcbjQ4MjU6XFx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9lcnJvcihpbnQgZXJyKVxcbjQ4MjY6XFx0e1xcbjQ4Mjc6XFx0XFx0aWYgKGVyciA9PSAtRU5PTUVNKVxcbjQ4Mjg6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG40ODI5OlxcdFxcdGVsc2UgaWYgKGVyciA9PSAtRUhXUE9JU09OKVxcbjQ4MzA6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OO1xcbjQ4MzE6XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG40ODMyOlxcdH1cXG40ODMzOlxcdFxcbjQ4MzQ6XFx0LypcXG40ODM1OlxcdCAqIENvbnZlcnQgZXJybm8gdG8gcmV0dXJuIHZhbHVlIGZvciAtXFx1MDAzZXBhZ2VfbWt3cml0ZSgpIGNhbGxzLlxcbjQ4MzY6XFx0ICpcXG40ODM3OlxcdCAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbWVyZ2VkIHdpdGggdm1mX2Vycm9yKCkgYWJvdmUsIGJ1dCB3aWxsIG5lZWQgYVxcbjQ4Mzg6XFx0ICogY2FyZWZ1bCBhdWRpdCBvZiBhbGwgdm1mX2Vycm9yKCkgY2FsbGVycy5cXG40ODM5OlxcdCAqL1xcbjQ4NDA6XFx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9mc19lcnJvcihpbnQgZXJyKVxcbjQ4NDE6XFx0e1xcbjQ4NDI6XFx0XFx0aWYgKGVyciA9PSAwKVxcbjQ4NDM6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0xPQ0tFRDtcXG40ODQ0OlxcdFxcdGlmIChlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MDQuNzk3NTY4OTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Nzc5OTU2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIExpbnV4IEtlcm5lbCBCdWdmaXgqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBJbnRlcmVzdGluZyBmaXguIFNlZW1zIGxpa2UgYSBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgSHVnZVRMQiwgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIG5vdGljZSB0aGF0IHdoZW4gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBoYXBwZW5zIHdpdGhpbiB0aGUgYHZtZl9lcnJvcigpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gYGVycmAgaXMgYC1FTk9NRU1gLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgVk1fRkFVTFRfT09NYC4gVGhhdCdzIHN0YW5kYXJkIGJlaGF2aW9yLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBraWNrZXIsIHdoZW4gZGVhbGluZyB3aXRoIEh1Z2VUTEIgYW5kIHRoaXMgYFZNX0ZBVUxUX09PTWAgaXMgcmV0dXJuZWQgZnJvbSBhIHBhZ2UgZmF1bHQgaGFuZGxlciwgaXQgdHJpZ2dlcnMgYSByZXRyeSwgd2hpY2ggY2FuIGxlYWQgdG8gYmFkIGJlaGF2aW9yIHdpdGggaHVnZSBwYWdlcywgbGlrZSBnZXR0aW5nIHN0dWNrIGluIGEgbG9vcCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBPT00ga2lsbGVyIHJldHJ5IGxvZ2ljIGlzbid0IHRyaWdnZXJlZC5cblxuQW5kIHRoZXJlJ3MgbW9yZS4gUHJldmlvdXNseSwgaWYgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHJldHVybmVkIGAtRU5PTUVNYCwgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIHdhcyBpbmNvcnJlY3RseSBjYWxsaW5nIGBmcmVlX2h1Z2VfZm9saW9gIGRpcmVjdGx5LiBUaGF0J3MgYSByZWQgZmxhZy4gSXQgc2tpcHMgYGZvbGlvX3B1dGAsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYW4gaW5hcHByb3ByaWF0ZSByZWxlYXNlIHBhdGguIE5vdywgdGhlIGZpeCAqY29ycmVjdGx5KiBjYWxscyBgZm9saW9fcHV0YCwgYW5kIHJldHVybnMgYC1FTk9TUENgIGluc3RlYWQuIFRoaXMgaXMgYmV0dGVyLCByaWdodD8gSXQgYXZvaWRzIHRoZSBsb29waW5nIHBhZ2UgZmF1bHQgYW5kIGluc3RlYWQgdHJpZ2dlcnMgYSBTSUdCVVMsIHdoaWNoIGlzIGRlZmluaXRlbHkgcHJlZmVyYWJsZSB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wLlxuXG5TbywgdGhpcyBpcyBhIGNvcmUgTU0gLyBIdWdlVExCIC8gTWVtY2cgZnVuY3Rpb25hbCBidWdmaXguIE1ha2VzIG1lIHdvbmRlciBpZiB0aGlzIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4gSHVnZVRMQiBpcyBkZWZpbml0ZWx5IGEgc3RhbmRhcmQgZmVhdHVyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlICh0aHJvdWdoIGBtbWFwYCB3aXRoIGBNQVBfSFVHRVRMQmAsIGBodWdldGxiZnNgLCBldGMuKS4gSXQncyBlc3BlY2lhbGx5IGxpa2VseSB0byB0cmlnZ2VyIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciB3aGVuIG1lbW9yeSBjZ3JvdXAgbGltaXRzIGFyZSBpbiBwbGFjZSAoYENPTkZJR19IVUdFVExCRlNgLCBgQ09ORklHX0NHUk9VUFNgLCBgQ09ORklHX01FTUNHYCkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgYEtjb25maWdgIHJlcXVpcmVtZW50cyBmb3IgSHVnZVRMQiBhbmQgdGhlIG1lbW9yeSBjZ3JvdXAgaHVnZXRsYiBjaGFyZ2luZyB0byBzZWUgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkLiBJJ2xsIHNlYXJjaCBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19IVUdFVExCRlNgIGFuZCBvdGhlciByZWxhdGVkIGNvbmZpZ3MgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGluIHRoZSByZWxldmFudCBgbW0vS2NvbmZpZ2AgZmlsZS4gTmVlZCB0byBuYWlsIGRvd24gdGhlIHN1cmZhY2UgYXJlYSBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoxMC4yNzU1NjgzMzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTI2NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW98bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MTUtLyoqXFxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MjYtICovXFxubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTI4MjgtXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI4ODItXFxubW0vaHVnZXRsYi5jOjI4ODM6XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxubW0vaHVnZXRsYi5jLTI4ODQtXFx0LypcXG5tbS9odWdldGxiLmMtMjg4NS1cXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxubW0vaHVnZXRsYi5jOjI4ODY6XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbm1tL2h1Z2V0bGIuYy0yODg3LVxcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5NDk9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMwMzItXFxubW0vaHVnZXRsYi5jOjMwMzM6XFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFxcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0zMDM0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjE9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1MjM0OiAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQ0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjQ1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTI0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjEwLjMzMTEwNDI3MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc5ODIwNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSHVnZVRMQiBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbW0vaHVnZXRsYi5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBidWlsZCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCByaWdodD8gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoYXQgYE1ha2VmaWxlYCBhbmQgc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgYGh1Z2V0bGIuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgY29tcGlsZXIgZmxhZ3MsIG9iamVjdCBmaWxlIGdlbmVyYXRpb24gcnVsZXMsIGFuZCBob3cgaXQncyBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBgbW1gIG1vZHVsZSwgYW5kIHByb2JhYmx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDU2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTIuMjEwOTI3ODk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA5NzkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxubW0vTWFrZWZpbGU6ODU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGUtODYtb2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDg9ZW5kaWZcXG5tbS9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX0NHUk9VUF9IVUdFVExCKSArPSBodWdldGxiX2Nncm91cC5vXFxubW0vTWFrZWZpbGUtMTEwLW9iai0kKENPTkZJR19HVVBfVEVTVCkgKz0gZ3VwX3Rlc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoxMi4yNTgwMzQxMDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1ODI4ODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIG5haWwgZG93biB0aGlzIGBIVUdFVExCRlNgIGNvbmZpZyBvcHRpb24uIFdoZXJlJ3MgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgZG9jdW1lbnRhdGlvbj8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgc3RhcnQgd2l0aCBgZnMvS2NvbmZpZ2AgYmVjYXVzZSB0aGUgZmlsZSBzeXN0ZW0gaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBpdC4gSWYgaXQgaXNuJ3QgdGhlcmUsIHRoZW4gYG1tL0tjb25maWdgIGlzIGEgdmVyeSBsaWtlbHkgc2Vjb25kYXJ5IGxvY2F0aW9uLCBnaXZlbiB0aGUgbmF0dXJlIG9mIEh1Z2VUTEIgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgc28gaXQncyBwcm9iYWJseSBwcmV0dHkgaGlnaCB1cCBpbiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVmYXVsdHMsIGRlcGVuZGVuY2llcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBob3cgdG8gY29ycmVjdGx5IHNldCBpdCBmb3IgdGhpcyBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTQuMzE2MzI1MTg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMDEzNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTUuOTc2MzQ1NjE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODM5MzU4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgc28gSSdtIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgZnMvS2NvbmZpZ2AuIEkga25vdyB0aGF0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBtb3N0IGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIExldCdzIHNlZS4uLiBhcm91bmQgbGluZSAyNTAsIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtb3JlIGdlbmVyYWwgZmlsZXN5c3RlbSBvcHRpb25zIGJlZ2luLCBvciBwZXJoYXBzIHdoZXJlIGEgc3BlY2lmaWMgcmVsZXZhbnQgc2VjdGlvbiBiZWdpbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVsZXZhbnQgc2VjdGlvbiB0byBwYXkgYXR0ZW50aW9uIHRvLiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGdpdmVzIG1lIHdoYXQgSSBuZWVkLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSB0dWNrZWQgYXdheSBhcm91bmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTguMDYwMjg2MzM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuIDI2NTpcXHRcXHRkZWZhdWx0IG5cXG4gMjY2OlxcdFxcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gMjY3OlxcdFxcdGhlbHBcXG4gMjY4OlxcdFxcdCAgVGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb2ZmLiBTYXkgWSBoZXJlIHRvXFxuIDI2OTpcXHRcXHQgIGVuYWJsZSBIVk8gYnkgZGVmYXVsdC4gSXQgY2FuIGJlIGRpc2FibGVkIHZpYSBodWdldGxiX2ZyZWVfdm1lbW1hcD1vZmZcXG4gMjcwOlxcdFxcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXFxuIDI3MTpcXHRlbmRpZiAjIEhVR0VUTEJGU1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFXFxuIDI3NDpcXHRcXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4gMjc1OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gMjc2OlxcdFxcbiAyNzc6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuIDI3ODpcXHRcXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4gMjc5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoxOC4wNjAzNzM5MjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0NzUzMzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIEtjb25maWcgb3B0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIHRyeWluZyB0byBlbmFibGUgaXQgaWYgdGhlIHVuZGVybHlpbmcgc3VwcG9ydCBpc24ndCB0aGVyZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjb25uZWN0aW9ucyDigJMgYXJlIHRoZXJlIGFueSBvdGhlciBLY29uZmlnIHN5bWJvbHMgdGhhdCBtdXN0IGJlIHNldCBmaXJzdD8gV2hhdCdzIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHRyZWUgdGhhdCBlbmFibGVzIGl0PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBkaXJlY3QgaW5zcGVjdGlvbiBvZiB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLlxuXG5OZXh0LCBJIHdhbnQgdG8gY29uZmlybSBob3cgdGhpcyBpcyBndWFyZGVkIGluIHRoZSBjb2RlLCB3aGF0IGNvbmRpdGlvbnMgYWN0dWFsbHkgbWFrZSBpdCBwYXJ0IG9mIHRoZSBjb21waWxlZCBjb2RlLCBmb3IgZXhhbXBsZSBJIHdpbGwgbmVlZCB0byBjaGVjayB3aGVyZSBpdCBpcyBkZWNsYXJlZC9ndWFyZGVkIGJ5IGAjaWZkZWZgLiBLbm93aW5nIGl0cyBndWFyZGluZyBjb25kaXRpb25zIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoZW4gdGhlIGNvZGUgcGF0aCBhc3NvY2lhdGVkIHdpdGggaXQgaXMgYWN0dWFsbHkgYWN0aXZlLiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGAjaWZkZWZgcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMgd2hlcmUgaXRzIGJlaGF2aW9yIG1pZ2h0IGRpZmZlcj8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZ3VhcmQgYW5kIHRoZSByZXN1bHRpbmcgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25zIGhlbHBzIHRvIGFzc2VzcyBhbmQgZW5zdXJlIHRoYXQgdGhlIGZlYXR1cmUgaXMgYXZhaWxhYmxlIG9yIGNvbmZpZ3VyZWQgYXMgbmVlZGVkIGZvciBteSBzcGVjaWZpYyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjIwLjQwNzkxMTI0OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzOTk1NjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTUzPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MC17XFxuLS1cXG5tbS9odWdldGxiLmM9MjgyNz1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODgyLVxcbm1tL2h1Z2V0bGIuYzoyODgzOlxcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbm1tL2h1Z2V0bGIuYy0yODg0LVxcdC8qXFxubW0vaHVnZXRsYi5jLTI4ODUtXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbm1tL2h1Z2V0bGIuYzoyODg2OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcXG5tbS9odWdldGxiLmMtMjg4Ny1cXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIzMy0vKipcXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUyMzUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI0NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyNDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoyMi4wNDc4NzM3MTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzOTY1Mzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1lbWNvbnRyb2wuaGAgZm9yIE1lbWNnIERldGFpbHMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMgKGBtZW1jZ2ApLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBoZWFkZXIgZmlsZS4gSXQncyBsaWtlbHkgdGhhdCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGNncm91cHMgYXJlIGNvbmZpZ3VyZWQsIGVuYWJsZWQsIG9yIG90aGVyd2lzZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGhlYWRlciBmaWxlLiBNeSBpbnN0aW5jdCBzYXlzIHRoYXQgbGluZXMgNjY1IGFuZCAxMTU5IGFyZSBrZXkuIEknbGwgcHJvYmFibHkgZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIChgI2lmZGVmIENPTkZJR19NRU1DR2ApIGFyb3VuZCB0aG9zZSBsaW5lIG51bWJlcnMuIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBtZW1jZy1zcGVjaWZpYyBjb2RlIGlzIGFjdGl2ZSBiYXNlZCBvbiBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGFyZWFzIHRvIHNlZSBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZmVhdHVyZXMgYXJlIGV4cG9zZWQgb3IgaGlkZGVuIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIOKAkyBmaW5kIHRoZSByZWxldmFudCBzb3VyY2UsIHBpbnBvaW50IHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjI0LjE4NzUzMTk2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdCAqIHBhZ2VzIGFjY29yZGluZyB0byBAZ2ZwIGlmIG5lY2Vzc2FyeS4gIElmIEBtbSBpcyBOVUxMLCB0cnkgdG9cXG4gNjUxOlxcdCAqIGNoYXJnZSB0byB0aGUgYWN0aXZlIG1lbWNnLlxcbiA2NTI6XFx0ICpcXG4gNjUzOlxcdCAqIERvIG5vdCB1c2UgdGhpcyBmb3IgZm9saW9zIGFsbG9jYXRlZCBmb3Igc3dhcGluLlxcbiA2NTQ6XFx0ICpcXG4gNjU1OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLiBPdGhlcndpc2UsIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuXFxuIDY1NjpcXHQgKi9cXG4gNjU3OlxcdHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiA2NTg6XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4gNjU5OlxcdHtcXG4gNjYwOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDY2MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjYyOlxcdFxcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcXG4gNjYzOlxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG4gNjY2OlxcdFxcbiA2Njc6XFx0aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4gNjY4OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xcbiA2Njk6XFx0XFxuIDY3MDpcXHR2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNjcxOlxcdFxcbiA2NzI6XFx0LyoqXFxuIDY3MzpcXHQgKiBtZW1fY2dyb3VwX3VuY2hhcmdlIC0gVW5jaGFyZ2UgYSBmb2xpby5cXG4gNjc0OlxcdCAqIEBmb2xpbzogRm9saW8gdG8gdW5jaGFyZ2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjI0LjE4NzY3MDEyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwMDc5MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNZW1jb250cm9sLmgqKlxuXG5BbHJpZ2h0LCBzbyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwb2ludCBoZXJlLCBhbmQgdGhhdCBtZWFucyBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCwgc28gSSdtIGdvaW5nIHRvIGp1bXAgb3ZlciB0byBsaW5lIDExNTAgb2YgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gSXQncyBsaWtlbHkgdGhhdCBhIGtleSBhc3BlY3Qgb2YgaG93IG1lbW9yeSBjb250cm9sIGlzIG1hbmFnZWQgaXMgZGVmaW5lZCB0aGVyZSwgYW5kIGl0J3MgYWx3YXlzIHNtYXJ0IHRvIGRvdWJsZS1jaGVjay4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgcGVyaGFwcyBhIGZ1bmN0aW9uIGNhbGwgcmVsYXRlZCB0byBtZW1vcnkgbGltaXRzLCBvciBtYXliZSBldmVuIGEgc3VidGxlIGRldGFpbCBhYm91dCBob3cgYWNjb3VudGluZyBpcyBoYW5kbGVkIGZvciB0aGF0IHN1YnN5c3RlbS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2Ugd2l0aCB0aGUgY29yZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjI2LjExNzc1MjYzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0NTpcXHR9XFxuMTE0NjpcXHRcXG4xMTQ3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbjExNDk6XFx0e1xcbjExNTA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjExNTE6XFx0fVxcbjExNTI6XFx0XFxuMTE1MzpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjExNTQ6XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4xMTU1OlxcdHtcXG4xMTU2OlxcdFxcdHJldHVybiAwO1xcbjExNTc6XFx0fVxcbjExNTg6XFx0XFxuMTE1OTpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG4xMTYwOlxcdHtcXG4xMTYxOlxcdCAgICAgICAgcmV0dXJuIDA7XFxuMTE2MjpcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjExNjU6XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IGlkLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbjExNjY6XFx0e1xcbjExNjc6XFx0XFx0cmV0dXJuIDA7XFxuMTE2ODpcXHR9XFxuMTE2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MjYuMTE3ODY4MDQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDU2ODIxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEl0IHNlZW1zIGxpa2UgaXRzIGJlaGF2aW9yIGlzIGRyYXN0aWNhbGx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIG9yIG5vdC4gSWYgTUVNQ0cgaXMgKm9mZiosIHRoZSBmdW5jdGlvbiBqdXN0IHJldHVybnMgMCwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSG93ZXZlciwgd2hlbiBNRU1DRyAqaXMqIGVuYWJsZWQsIHN1ZGRlbmx5IGl0IGNhbiByZXR1cm4gYC1FTk9NRU1gLCBzaWduYWxpbmcgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCB0byBub3RlLiBUaGlzIGNoYW5nZXMgdGhlIGVudGlyZSBmbG93LlxuXG5BbmQsIGFzIGEgc2lkZSB0aG91Z2h0LCBJIHNlZSB0aGF0IHdoZW4gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIGluY2x1ZGVzIGEgY2FsbCB0byBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIEknbGwgd2FudCB0byByZW1lbWJlciB0aGlzIHdoZW4gZGl2aW5nIGRlZXAgaW50byB0aGUgY29kZS5cblxuR2l2ZW4gdGhpcyBjb250ZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldC4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXM6IGBpbml0L0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgdmFsdWVzLiBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgTUVNQ0cgZW5hYmxlbWVudCBvbiBIdWdlVExCIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyBkaWZmZXJlbnQgbWVtb3J5IHBvbGljaWVzIGludGVyYWN0IGFuZCBob3cgZXJyb3JzIHByb3BhZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxOTcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoyOC42NjM1NTI1MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODcxMTE1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjMwLjY1MDY3NDkyNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE0OTAwMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodCBsZWFkcyBtZSB0byBjb25zaWRlciBhbGwgcmVsZXZhbnQgZmFjdG9ycy4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoIGFuZCBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBgQ0dST1VQX0hVR0VUTEJgIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnRlZ3JhdGUgdGhpcyBjb25zaWRlcmF0aW9uIGludG8gdGhlIG92ZXJhbGwgYW5hbHlzaXMgYW5kIGVuc3VyZSB0aGF0IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBhbHNvIGFzc2Vzc2VkIGFsb25nc2lkZSB0aGUgb3RoZXIgY29uc2lkZXJhdGlvbnMgdG8gcHJvdmlkZSB0aGUgbW9zdCBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgZXZhbHVhdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgwNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjMyLjI2NTU3NzE5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mzg5MDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0hVR0VUTEJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyODI9Y29uZmlnIENHUk9VUF9GUkVFWkVSXFxuLS1cXG5pbml0L0tjb25maWctMTI5Mi1cXG5pbml0L0tjb25maWc6MTI5Mzpjb25maWcgQ0dST1VQX0hVR0VUTEJcXG5pbml0L0tjb25maWctMTI5NC1cXHRib29sIFxcXCJIdWdlVExCIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjMzLjk0OTQ3NDY1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk3MDA0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGFyZWEuIEJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIEkgdGhpbmsgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBsaWtlbHkgYXJvdW5kIGxpbmVzIDEwODUgYW5kIDEyOTMuIEknbSBndWVzc2luZyB0aG9zZSBsaW5lcyBwcm9iYWJseSBjb250YWluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgdGhlaXIgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgaWYgdGhvc2UgbGluZXMgcHJvdmlkZSBhbnkgY3JpdGljYWwgaGludHMgYWJvdXQgdGhlIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgSSdtIHRyeWluZyB0byB1bnRhbmdsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzozNS43NDY0ODE5ODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MzUuNzQ2NjA3OTM4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjMxMjI0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBLZXJuZWwgQ29uZmlndXJhdGlvbjogQSBTcGVjaWZpYyBGb2N1cyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gdGhpbmtpbmcgd2Ugc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCBsaW5lcyAxMjkwLTEzMDUgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBzb21ldGhpbmcgcmVsZXZhbnQgdG8gb3VyIGN1cnJlbnQgaW52ZXN0aWdhdGlvbiBsdXJraW5nIHdpdGhpbiB0aGF0IGJsb2NrLiBJdCdzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGhvcGVmdWxseSwgdGhpcyB3aWxsIHlpZWxkIHRoZSBzcGVjaWZpYyBkZXRhaWwgd2UgbmVlZCwgcmF0aGVyIHRoYW4gYSBicm9hZCBzd2VlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjM4LjI2OTczMzEzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFxuMTI5MTpcXHRcXHQgIElmIHlvdSdyZSB1c2luZyBjZ3JvdXAyLCBzYXkgTi5cXG4xMjkyOlxcdFxcbjEyOTM6XFx0Y29uZmlnIENHUk9VUF9IVUdFVExCXFxuMTI5NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIGNvbnRyb2xsZXJcXFwiXFxuMTI5NTpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbjEyOTY6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEyOTc6XFx0XFx0ZGVmYXVsdCBuXFxuMTI5ODpcXHRcXHRoZWxwXFxuMTI5OTpcXHRcXHQgIFByb3ZpZGVzIGEgY2dyb3VwIGNvbnRyb2xsZXIgZm9yIEh1Z2VUTEIgcGFnZXMuXFxuMTMwMDpcXHRcXHQgIFdoZW4geW91IGVuYWJsZSB0aGlzLCB5b3UgY2FuIHB1dCBhIHBlciBjZ3JvdXAgbGltaXQgb24gSHVnZVRMQiB1c2FnZS5cXG4xMzAxOlxcdFxcdCAgVGhlIGxpbWl0IGlzIGVuZm9yY2VkIGR1cmluZyBwYWdlIGZhdWx0LiBTaW5jZSBIdWdlVExCIGRvZXNuJ3RcXG4xMzAyOlxcdFxcdCAgc3VwcG9ydCBwYWdlIHJlY2xhaW0sIGVuZm9yY2luZyB0aGUgbGltaXQgYXQgcGFnZSBmYXVsdCB0aW1lIGltcGxpZXNcXG4xMzAzOlxcdFxcdCAgdGhhdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IFNJR0JVUyBzaWduYWwgaWYgaXQgdHJpZXMgdG8gYWNjZXNzXFxuMTMwNDpcXHRcXHQgIEh1Z2VUTEIgcGFnZXMgYmV5b25kIGl0cyBsaW1pdC4gVGhpcyByZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8ga25vd1xcbjEzMDU6XFx0XFx0ICBiZWZvcmVoYW5kIGhvdyBtdWNoIEh1Z2VUTEIgcGFnZXMgaXQgd291bGQgcmVxdWlyZSBmb3IgaXRzIHVzZS4gVGhlXFxuMTMwNjpcXHRcXHQgIGNvbnRyb2wgZ3JvdXAgaXMgdHJhY2tlZCBpbiB0aGUgdGhpcmQgcGFnZSBscnUgcG9pbnRlci4gVGhpcyBtZWFuc1xcbjEzMDc6XFx0XFx0ICB0aGF0IHdlIGNhbm5vdCB1c2UgdGhlIGNvbnRyb2xsZXIgd2l0aCBodWdlIHBhZ2UgbGVzcyB0aGFuIDMgcGFnZXMuXFxuMTMwODpcXHRcXG4xMzA5OlxcdGNvbmZpZyBDUFVTRVRTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjM4LjI2OTg2NzA4NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzEwOTM3NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlVExCIEFsbG9jYXRpb24gYW5kIEZhdWx0IEhhbmRsaW5nIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgb24gdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbiBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSHVnZVRMQiBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYXMgdGhleSBhcHBlYXIgdG8gYmUgdGhlIGNvcmUgYWxsb2NhdG9ycy4gSSd2ZSB2ZXJpZmllZCB0aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gU2FtZSBnb2VzIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYWNjZXNzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZ1enppbmcgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEhVR0VUTEJGU2AgKEh1Z2VUTEIgZmlsZXN5c3RlbSBzdXBwb3J0KSwgYE1FTUNHYCAoTWVtb3J5IENvbnRyb2xsZXIsIGVzc2VudGlhbCBmb3IgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKSwgYW5kIGBDR1JPVVBfSFVHRVRMQmAgKEh1Z2VUTEIgY29udHJvbGxlcikgYXJlIGFsbCBlbmFibGVkLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9ja3MuXG5cblRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB3aGV0aGVyIHRoaXMgYXJlYSBpcyBcIldvcnRoRnV6emluZ1wiLiBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBXZSdyZSB0YWxraW5nIGFib3V0IGEgc2VyaW91cyBidWcgd2hlcmUgbWVtIGNncm91cCBodWdldGxiIGNoYXJnaW5nIGZhaWx1cmVzIGNhbiBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AgaW4gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciwgdHJpZ2dlcmVkIGJ5IC1FTk9NRU0gYW5kIHJlc3VsdGluZyBpbiBWTV9GQVVMVF9PT00sIGFsb25nIHdpdGggaW5jb3JyZWN0IGZvbGlvIHJlbGVhc2VzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY3JpdGljYWwgZmxhdyBmdXp6aW5nIGlzIGRlc2lnbmVkIHRvIHVuY292ZXIuIEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXQncyByZWFjaGFibGUgaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgZXNwZWNpYWxseSB3aGVuIG1lbW9yeSBjZ3JvdXAgbGltaXRzIGFuZCBodWdldGxiZnMvTUFQX0hVR0VUTEIgcGFnZSBmYXVsdHMgYXJlIGludm9sdmVkLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuXG4xLiAgKipGb2N1c1N5bWJvbHMqKjogYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuXG4yLiAgKipFbmFibGVDb25maWdzKio6IGBIVUdFVExCRlNgLCBgTUVNQ0dgLCBgQ0dST1VQX0hVR0VUTEJgLlxuMy4gICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYFxuNC4gICoqUmVhc29uaW5nKio6IFNvbGlkIGV4cGxhbmF0aW9uIGZvciB2dWxuZXJhYmlsaXR5LlxuXG5Ob3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGlzIHVzZWQgd2l0aCBhbGwgcmVxdWlyZWQgYW5kIHZhbGlkIGFyZ3VtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNTksIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6NDUuNTgwODA5MTc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MjcyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUF9IVUdFVExCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBfSFVHRVRMQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKSBmYWlscyBpbiBodWdldGxiX2FsbG9jX2ZvbGlvKCkuIEl0IHJlcGxhY2VzIGRpcmVjdCBmcmVlX2h1Z2VfZm9saW8oKSB3aXRoIGZvbGlvX3B1dCgpIGFuZCByZXR1cm5zIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmcm9tIGxvb3BpbmcgaW5maW5pdGVseSByZXRyeWluZyBvbiBWTV9GQVVMVF9PT00uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgcGFnZSBmYXVsdHMgdW5kZXIgbWVtb3J5IGNncm91cCBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjQ1LjY1NzU0NDUzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzOTM1OTI3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjQ1LjY1ODA4MTk4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc0Mzg4MTczNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcmVmZXJlbmNlIGNvdW50aW5nIC8gZm9saW8gZnJlZWluZyBtZWNoYW5pY3MgYW5kIGVycm9yIGNvZGUgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmVmY291bnQgaW1iYWxhbmNlcyBvciByZXNvdXJjZSBsZWFrcykgZmFsbCB1bmRlciBzdGFuZGFyZCByZWZlcmVuY2UgY291bnRpbmcgLyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS0FTQU4sIG5vdCBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY0ODlmZWRmMGJiYWJhMDk4ODBlYmY1ODVmMTQ2NGI5NTBkODAwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6MjI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjk3YzA2ZjIyN2VmOGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjMsNyArMjgyMyw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTAsMTMgKzI4ODksMjQgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbiBcbiBcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcbitcdFx0ICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpXG4rXHRcdCAqIHBhZ2UgYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYVxuK1x0XHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxuK1x0XHQgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT01cbitcdFx0ICoga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQuICBSZXR1cm5pbmcgLUVOT01FTSAob3JcbitcdFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xuK1x0XHQgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHlcbitcdFx0ICogcmV0cnlpbmcgdGhlIGZhdWx0LlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZm9saW87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzo0NS42NTgwODI4M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTc5MjgzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIGZvciBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBrZXJuZWwgcGF0Y2ggd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBkaXNzZWN0IHRoZSBjb2RlLiBUaGlzIG1lYW5zIGdldHRpbmcgbXkgaGFuZHMgZGlydHkgYW5kIHRha2luZyBhIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbS9odWdldGxiLmNgIHdpdGhpbiB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgZnVuY3Rpb24uIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29sa2l0IGZvciB0aGlzOiBhIHF1aWNrIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzZXNzaW9uIHRvIHB1bGwgdGhlIGZpbGUgYW5kIHN1cnJvdW5kaW5nIGNvZGUgc28gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIGluIGNvbnRleHQuIFRoaXMgd2lsbCBsZXQgbWUgYXNzZXNzIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzo1MS42MzczNjk2MzdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODc1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODc1OlxcdFxcbjI4NzY6XFx0XFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XFxuMjg3NzpcXHRcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxcbjI4Nzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuMjg3OTpcXHRcXHR9XFxuMjg4MDpcXHRcXG4yODgxOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuMjg4NDpcXHRcXHQvKlxcbjI4ODU6XFx0XFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbjI4ODY6XFx0XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbjI4ODc6XFx0XFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuMjg4ODpcXHRcXHQgKi9cXG4yODg5OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xcbjI4OTA6XFx0XFxuMjg5MTpcXHRcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4yODkyOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjg5MzpcXHRcXHRcXHQvKlxcbjI4OTQ6XFx0XFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuMjg5NTpcXHRcXHRcXHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXFxuMjg5NjpcXHRcXHRcXHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXFxuMjg5NzpcXHRcXHRcXHQgKi9cXG4yODk4OlxcdFxcdFxcdC8qXFxuMjg5OTpcXHRcXHRcXHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcXG4yOTAwOlxcdFxcdFxcdCAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKVxcbjI5MDE6XFx0XFx0XFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXFxuMjkwMjpcXHRcXHRcXHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxcbjI5MDM6XFx0XFx0XFx0ICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NXFxuMjkwNDpcXHRcXHRcXHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxcbjI5MDU6XFx0XFx0XFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xcbjI5MDY6XFx0XFx0XFx0ICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5XFxuMjkwNzpcXHRcXHRcXHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXFxuMjkwODpcXHRcXHRcXHQgKi9cXG4yOTA5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI5MTA6XFx0XFx0fVxcbjI5MTE6XFx0XFxuMjkxMjpcXHRcXHRyZXR1cm4gZm9saW87XFxuMjkxMzpcXHRcXG4yOTE0OlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA6XFxuMjkxNTpcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgaF9jZyk7XFxuMjkxNjpcXHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6XFxuMjkxNzpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpXFxuMjkxODpcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQpO1xcbjI5MTk6XFx0XFxuMjkyMDpcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbjI5MjE6XFx0fVxcbjI5MjI6XFx0XFxuMjkyMzpcXHR0eXBlZGVmIGVudW0ge1xcbjI5MjQ6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6NTEuNjM3ODAwMDU3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjQ4NjgxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0d28gY2hhbmdlcyBpbiB0aGUgZGlmZi4gVGhlIGZpcnN0IGlzIGEgcmVwbGFjZW1lbnQ6IGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pO2AgaXMgbm93IGBmb2xpb19wdXQoZm9saW8pO2AuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIHNoaWZ0IGluIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcyDigJMgcGVyaGFwcyBhIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2U/IEknbGwgbmVlZCB0byBsb29rIGludG8gYGZvbGlvX3B1dGAgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuIFNlY29uZCwgdGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGZhaWxzIHdpdGggYC1FTk9NRU1gLiBQcmV2aW91c2x5LCBpdCByZXR1cm5lZCBgRVJSX1BUUigtRU5PTUVNKWAsIGJ1dCBub3cgaXQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuIFRoaXMgc2lnbmFscyBhIHBvdGVudGlhbCBkaXN0aW5jdGlvbiBpbiB0aGUgbmF0dXJlIG9mIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUuIGAtRU5PTUVNYCB1c3VhbGx5IGluZGljYXRlcyBhIG1vcmUgZ2VuZXJhbCBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpbGUgYC1FTk9TUENgIG1vcmUgc3BlY2lmaWNhbGx5IHBvaW50cyB0byBhIGxhY2sgb2Ygc3BhY2Ugd2l0aGluIGEgc3BlY2lmaWMgcmVzb3VyY2UsIGxpa2UgdGhlIG1lbW9yeSBjZ3JvdXAuIEdpdmVuIHRoZSBuYXR1cmUgb2YgaHVnZXRsYiwgdGhlIGNoYW5nZSB0byBgLUVOT1NQQ2AgbWlnaHQgYmUgYSBiZXR0ZXIgZml0LCBidXQgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBzeXN0ZW0gYmVoYXZpb3IgdG8gYmUgY2VydGFpbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gU2VlaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjbHVlcyBhYm91dCB0aGUgaW1wYWN0IG9mIHRoZXNlIHR3byBjaGFuZ2VzIGFuZCBpZiB0aGV5IG1ha2Ugc2Vuc2UgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYGZvbGlvX3B1dGAgdmVyc3VzIGBmcmVlX2h1Z2VfZm9saW9gIGluIHRoZSBjb250ZXh0IG9mICp0aG9zZSogc3BlY2lmaWMgY2FsbGluZyBsb2NhdGlvbnMsIGFuZCBjb25maXJtIHRoZSBjaGFuZ2UgdG8gYC1FTk9TUENgIGlzIGFwcHJvcHJpYXRlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6NTQuNTAyNjcwNTI3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMjYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MTUtLyoqXFxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MjYtICovXFxubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTI4MjgtXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI5NDk9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMwMzItXFxubW0vaHVnZXRsYi5jOjMwMzM6XFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFxcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0zMDM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzo1NC42MzcwMDIzNTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0MTQ4MzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBIdWdlIFBhZ2VzKipcblxuT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMuIFRoZSBpbW1lZGlhdGUgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnVuY3Rpb24uIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGl0LCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gaXQuIEl0J3MgY3J1Y2lhbCwgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEFuZCBvZiBjb3Vyc2UsIEkgY2FuJ3QganVzdCBsb29rIGF0IHRoYXQgZnVuY3Rpb24gaW4gaXNvbGF0aW9uLiBJICpoYXZlKiB0byBmb2xsb3cgaXRzIGNhbGxzLiBXaGVyZSBpcyB0aGlzIGBhbGxvY19odWdldGxiX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBiZSB2aXRhbCBmb3IgZ2V0dGluZyB0aGUgZnVsbCBwaWN0dXJlLiBUaGF0J3MgbXkgbmV4dCBzdGVwLCB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjU3LjA3ODQ4ODA2N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMzA6XFx0XFx0XFx0Lm5vZGVtYXNrID0gbm9kZW1hc2ssXFxuMzAzMTpcXHRcXHR9O1xcbjMwMzI6XFx0XFxuMzAzMzpcXHRcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XFxuMzAzNDpcXHRcXG4zMDM1OlxcdFxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuMzAzNjpcXHRcXG4zMDM3OlxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuMzAzODpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG4zMDM5OlxcdFxcdFxcdGdvdG8gb3V0X3N1YnBvb2xfcHV0O1xcbjMwNDA6XFx0XFx0fVxcbjMwNDE6XFx0XFxuMzA0MjpcXHRcXHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzcG9vbCk7XFxuMzA0MzpcXHRcXG4zMDQ0OlxcdFxcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHtcXG4zMDQ1OlxcdFxcdFxcdC8qIGNvbW1pdCgpIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBtYXBfY2hnIGlzIG5vdCBlbmZvcmNlZCAqL1xcbjMwNDY6XFx0XFx0XFx0cmV0dmFsID0gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xcbjMwNDc6XFx0XFx0XFx0LypcXG4zMDQ4OlxcdFxcdFxcdCAqIENoZWNrIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFdoZW4gaXQgaGFwcGVucy4uXFxuMzA0OTpcXHRcXHRcXHQgKiBUaGUgcGFnZSB3YXMgYWRkZWQgdG8gdGhlIHJlc2VydmF0aW9uIG1hcCBiZXR3ZWVuXFxuMzA1MDpcXHRcXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxuMzA1MTpcXHRcXHRcXHQgKiBUaGlzIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBodWdldGxiX3Jlc2VydmVfcGFnZXMuXFxuMzA1MjpcXHRcXHRcXHQgKiBBZGp1c3QgZm9yIHRoZSBzdWJwb29sIGNvdW50IGluY3JlbWVudGVkIGFib3ZlIEFORFxcbjMwNTM6XFx0XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxuMzA1NDpcXHRcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gY291bnQgYWRkZWQgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXFxuMzA1NTpcXHRcXHRcXHQgKiBubyBsb25nZXIgYXBwbGllcy5cXG4zMDU2OlxcdFxcdFxcdCAqL1xcbjMwNTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KG1hcF9jaGcgPT0gTUFQX0NIR19ORUVERUQgXFx1MDAyNlxcdTAwMjYgcmV0dmFsID09IDApKSB7XFxuMzA1ODpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuMzA1OTpcXHRcXG4zMDYwOlxcdFxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuMzA2MTpcXHRcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG4zMDYyOlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMzA2MzpcXHRcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9mb2xpb19yc3ZkKFxcbjMwNjQ6XFx0XFx0XFx0XFx0ICAgIGhzdGF0ZV9pbmRleChoKSwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZm9saW8pO1xcbjMwNjU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjMwNjY6XFx0XFx0XFx0fVxcbjMwNjc6XFx0XFx0fVxcbjMwNjg6XFx0XFxuMzA2OTpcXHRcXHRyZXR1cm4gZm9saW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjU3LjA3ODg4MDkzN1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDE3OTk3ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEh1Z2V0bGIgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgcmV0dXJucyBgLUVOT01FTWAsIHNpZ25hbGluZyBhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCBmb2xsb3dlZCBieSByZXR1cm5pbmcgYC1FTk9NRU1gLiBOb3csIGl0J3MgY2hhbmdlZCB0byBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybmluZyBgLUVOT1NQQ2AuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBjaGFuZ2UgZnJvbSBkaXJlY3QgZnJlZWluZyB0byBgZm9saW9fcHV0YC4gQWgsIHJpZ2h0LCBodWdldGxiIGZvbGlvcyBhcmUgcmVmZXJlbmNlIGNvdW50ZWQuIERpcmVjdCBmcmVlaW5nLCBgZnJlZV9odWdlX2ZvbGlvYCwgY291bGQgYnlwYXNzIGVzc2VudGlhbCBkZXN0cnVjdG9yIGxvZ2ljIG9yIHRoZSBpbnRlbmRlZCByZWZjb3VudCBiZWhhdmlvciDigJMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBwcm9ibGVtcyBpZiB0aGUgcmVmY291bnQgd2FzIGFscmVhZHkgYXQgb25lLiBUaGUgcmVhc29uIGZvciBgLUVOT1NQQ2AgaW5zdGVhZCBvZiBgLUVOT01FTWAgaXMgaW50ZXJlc3RpbmcuIFRoZSBodWdldGxiIHBhZ2UgZmF1bHQgaGFuZGxpbmcgaW50ZXJwcmV0cyB0aGUgb2xkIGAtRU5PTUVNYCBhcyBhIFZNX0ZBVUxUX09PTSwgd2hpY2ggdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wIHNpbmNlIHRoZSBPT00ga2lsbGVyIGlzbid0IGludm9rZWQgZm9yIGh1Z2V0bGIgcGFnZXMuIFJldHVybmluZyBgLUVOT1NQQ2AsIHdoaWNoIG1hcHMgdG8gVk1fRkFVTFRfU0lHQlVTLCBzZW5kcyBhIFNJR0JVUyB0byB1c2Vyc3BhY2UsIHByZXZlbnRpbmcgdGhlIGluZmluaXRlIGxvb3AuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgdG8gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuMS4gIEFyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZT8gTm8sIHRoYXQncyBub3QgdGhlIGNhc2UgaGVyZS5cblxuMi4gIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIG5vdCBpbiB0aGlzIGNoYW5nZS5cblxuMy4gIElzIHRoZXJlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8sIHRoYXQncyBub3QgYSBjb25jZXJuIGVpdGhlci5cblxuNC4gIEFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBub3RoaW5nIHJlbGV2YW50IHRvIG91ciBhbmFseXNpcy5cblxuNS4gIERvZXMgdGhpcyBjaGFuZ2UgaGF2ZSBhbiBpbXBhY3Qgb24gS01TQU4gdnMuIEtBU0FOPyBJdCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGNncm91cCBlcnJvciBoYW5kbGluZyBmb3IgaHVnZXRsYi4gVGhlIGNoYW5nZSByZXNvbHZlcyBhIHJldHVybiBjb2RlIGlzc3VlICgtRU5PTUVNIHRvIC1FTk9TUEMpIGFuZCB1c2VzIGBmb2xpb19wdXRgIGZvciBjbGVhbnVwLiBBbnkgcHJvYmxlbXMgaGVyZSB3b3VsZCBzdGVtIGZyb20gcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZywgcGFnZSBmcmVlaW5nLCBvciBlcnJvciBjb2RlIGxvZ2ljIGJ1Z3MuIFRob3NlIHR5cGVzIG9mIGlzc3VlcyBmYWxsIHVuZGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0ZWNobmlxdWVzOiBLQVNBTiwgYHJlZmNvdW50X3RgLCBgbG9ja2RlcGAgZXRjLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFraW5nLiBObywgdGhpcyBpc24ndCBhIEtNU0FOIGlzc3VlIGF0IGFsbC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlIGhlcmUuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc2LCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI0OjAzLjA5Njg4MTA3MloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2l0aGluIGBtbS9odWdldGxiLmNgLiBTcGVjaWZpY2FsbHksIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWAsIGl0IHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgZnJvbSBgLUVOT01FTWAgdG8gYC1FTk9TUENgIChwcmV2ZW50aW5nIGluZmluaXRlIHBhZ2UtZmF1bHQgcmV0cmllcyBvbiBodWdldGxiIGFsbG9jYXRpb25zKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyByZWZlcmVuY2UgY291bnRpbmcgLyBmb2xpbyBmcmVlaW5nIG1lY2hhbmljcyBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2svaGVhcCBidWZmZXJzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByZWZjb3VudCBpbWJhbGFuY2VzIG9yIHJlc291cmNlIGxlYWtzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIHJlZmVyZW5jZSBjb3VudGluZyAvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTiwgbm90IEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBgaHVnZXRsYl9hbGxvY19mb2xpbygpYCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFNwZWNpZmljYWxseSwgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgY2FsbCB0byBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAgd2l0aCBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBmcm9tIGAtRU5PTUVNYCB0byBgLUVOT1NQQ2AgKHByZXZlbnRpbmcgaW5maW5pdGUgcGFnZS1mYXVsdCByZXRyaWVzIG9uIGh1Z2V0bGIgYWxsb2NhdGlvbnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxmhdz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 00:20:25 +0000 UTC FinishedAt: 2026-09-03 00:24:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG", "CGROUP_HUGETLB" ], "series_id": "49695114-ad88-4bba-a720-63bce4bfa3ff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_alloc_folio", "alloc_hugetlb_folio" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfSFVHRVRMQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKSBmYWlscyBpbiBodWdldGxiX2FsbG9jX2ZvbGlvKCkuIEl0IHJlcGxhY2VzIGRpcmVjdCBmcmVlX2h1Z2VfZm9saW8oKSB3aXRoIGZvbGlvX3B1dCgpIGFuZCByZXR1cm5zIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmcm9tIGxvb3BpbmcgaW5maW5pdGVseSByZXRyeWluZyBvbiBWTV9GQVVMVF9PT00uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgcGFnZSBmYXVsdHMgdW5kZXIgbWVtb3J5IGNncm91cCBsaW1pdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZjQ4OWZlZGYwYmJhYmEwOTg4MGViZjU4NWYxNDY0Yjk1MGQ4MDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjk3YzA2ZjIyN2VmOGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjMsNyAmIzQzOzI4MjMsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4gICpcbiAgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZvbGlvLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuXG4gICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuXG4tICogICAgICAgICAtRU5PTUVNIGlmIG1lbSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMuXG4gICovXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcbkBAIC0yODkwLDEzICYjNDM7Mjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuIFxuIFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4tXHRcdGZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZVxuJiM0MztcdFx0ICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpXG4mIzQzO1x0XHQgKiBwYWdlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGFcbiYjNDM7XHRcdCAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uXG4mIzQzO1x0XHQgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT01cbiYjNDM7XHRcdCAqIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLiAgUmV0dXJuaW5nIC1FTk9NRU0gKG9yXG4mIzQzO1x0XHQgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvXG4mIzQzO1x0XHQgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHlcbiYjNDM7XHRcdCAqIHJldHJ5aW5nIHRoZSBmYXVsdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZm9saW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9IVUdFVExCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRmNDg5ZmVkZjBiYmFiYTA5ODgwZWJmNTg1ZjE0NjRiOTUwZDgwMDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDAwOjIyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDc4NTc3Mjg0NTc5NTIuLjk3YzA2ZjIyN2VmOGEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTI4MjMsNyAmIzQzOzI4MjMsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpCiAgKgogICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLgogICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuCi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy4KICAqLwogc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncykKQEAgLTI4OTAsMTMgJiM0MzsyODg5LDI0IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpOwogCiAJaWYgKHJldCA9PSAtRU5PTUVNKSB7Ci0JCWZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogCQkvKgogCQkgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXMKIAkJICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpbwogCQkgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuCiAJCSAqLwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZQomIzQzOwkJICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpCiYjNDM7CQkgKiBwYWdlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGEKJiM0MzsJCSAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uCiYjNDM7CQkgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT00KJiM0MzsJCSAqIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLiAgUmV0dXJuaW5nIC1FTk9NRU0gKG9yCiYjNDM7CQkgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvCiYjNDM7CQkgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHkKJiM0MzsJCSAqIHJldHJ5aW5nIHRoZSBmYXVsdC4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJfQogCiAJcmV0dXJuIGZvbGlvOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kIHdoZXJlIGl0JiMzOTtzIHNpdHVhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIGtlcm5lbC4gVGhlIHRhcmdldCBpcyBgbW0vaHVnZXRsYi5jYCDigJMgdGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiB3b3JrbG9hZHMgdGhhdCBkZW1hbmQgbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgZGlmZiBtZXRpY3Vsb3VzbHksIGJ1dCBJIHdvbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGxpbmUgY2hhbmdlcyBpbiBpc29sYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgbG9naWMgZmxvdyAqYXJvdW5kKiB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIGhvdyB0aGlzIHBhdGNoIHBvdGVudGlhbGx5IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzIHdpdGhpbiB0aGUgYGh1Z2V0bGJgIHN1YnN5c3RlbS4gT25seSB0aGVuIGNhbiBJIGZvcm0gYSBjb21wcmVoZW5zaXZlIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzA6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbjI4NzE6XHRcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMtLTtcbjI4NzI6XHRcdH1cbjI4NzM6XHRcbjI4NzQ6XHRcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2UoaWR4LCBucl9wYWdlcywgaF9jZywgZm9saW8pO1xuMjg3NTpcdFxuMjg3NjpcdFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XG4yODc3Olx0XHRcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2VfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQsXG4yODc4Olx0XHRcdFx0XHRcdFx0ICBmb2xpbyk7XG4yODc5Olx0XHR9XG4yODgwOlx0XG4yODgxOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI4ODI6XHRcbjI4ODM6XHRcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuMjg4NDpcdFx0LypcbjI4ODU6XHRcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbjI4ODY6XHRcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbjI4ODc6XHRcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuMjg4ODpcdFx0ICovXG4yODg5Olx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbjI4OTA6XHRcbjI4OTE6XHRcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuMjg5MjpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMjg5MzpcdFx0XHQvKlxuMjg5NDpcdFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbjI4OTU6XHRcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuMjg5NjpcdFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4yODk3Olx0XHRcdCAqL1xuMjg5ODpcdFx0XHQvKlxuMjg5OTpcdFx0XHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcbjI5MDA6XHRcdFx0ICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpXG4yOTAxOlx0XHRcdCAqIHBhZ2UgYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYVxuMjkwMjpcdFx0XHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxuMjkwMzpcdFx0XHQgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT01cbjI5MDQ6XHRcdFx0ICoga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQuICBSZXR1cm5pbmcgLUVOT01FTSAob3JcbjI5MDU6XHRcdFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xuMjkwNjpcdFx0XHQgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHlcbjI5MDc6XHRcdFx0ICogcmV0cnlpbmcgdGhlIGZhdWx0LlxuMjkwODpcdFx0XHQgKi9cbjI5MDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4yOTEwOlx0XHR9XG4yOTExOlx0XG4yOTEyOlx0XHRyZXR1cm4gZm9saW87XG4yOTEzOlx0XG4yOTE0Olx0IGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDpcbjI5MTU6XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBoX2NnKTtcbjI5MTY6XHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6XG4yOTE3Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpXG4yOTE4Olx0XHRcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCk7XG4yOTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGh1Z2V0bGIgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgd2UgaGFuZGxlIG91dC1vZi1tZW1vcnkgc2NlbmFyaW9zIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIGNvbnRleHQuCgpQcmV2aW91c2x5LCBpZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgcmV0dXJuZWQgYC1FTk9NRU1gLCBpbmRpY2F0aW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhdCB0aGUgbWVtY2cgbGV2ZWwsIHRoZSBmdW5jdGlvbiB3b3VsZCBpbW1lZGlhdGVseSBmcmVlIHRoZSBmb2xpbyB1c2luZyBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAgYW5kIHJldHVybiBhbiBlcnJvciBwb2ludGVyIHJlcHJlc2VudGluZyB0aGUgYC1FTk9NRU1gIGVycm9yIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2suIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGEgZmFpbGVkIGFsbG9jIHdvdWxkIGJlIGRpcmVjdGx5IGZyZWVkIHRvIGF2b2lkIGxlYWtzLgoKTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3IgdG8gaW5zdGVhZCBjYWxsIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuIFRoaXMgc2lnbmFscyBhICYjMzQ7Tm8gU3BhY2UmIzM0OyBlcnJvciBpbnN0ZWFkLiBIbW0sIHNvIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGZyZWVpbmcgdGhlIGZvbGlvLCB0aGlzIGlzIGEgY2hhbmdlIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIHRoYXQmIzM5O3MgbW9yZSBpbmRpY2F0aXZlIG9mIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gLS0gc3BhY2UgaXNuJiMzOTt0IGF2YWlsYWJsZSwgYnV0IG5vdCBuZWNlc3NhcmlseSB0aGF0IHRoZXJlJiMzOTtzIHNpbXBseSBubyBtb3JlIG1lbW9yeS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSByZWxhdGVzIHRvIGhvdyBtZW1jZ3MgdHJhY2sgcmVzb3VyY2VzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGRlZmluaXRpb24gYW5kIGNhbGwgc2l0ZXMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgb3IgZXhwb3J0ZWQsIGFuZCBhbHNvIGNvbmZpcm0gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIGh1Z2V0bGIgYW5kIGh1Z2V0bGJfY2dyb3VwL21lbWNnIHN1cHBvcnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGVyZSBlbHNlIHRoZSBjb2RlIGlzIGNhbGxlZCwgYW5kIHdobyByZWxpZXMgb24gaXRzIHJldHVybiB2YWx1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgyOC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAzMi1cbm1tL2h1Z2V0bGIuYzozMDMzOlx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjkzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgaHVnZSBwYWdlcy4gVGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIG5hdHVyYWxseSwgaXMgdGhlIGNvcmUgaGVhZGVyIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24sIG9yIGF0IGxlYXN0IHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucywgcmVsYXRlZCB0byBodWdlIHBhZ2UgYWxsb2NhdGlvbiByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyB0byBwaW4gZG93biB3aGVyZSB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGZ1bmN0aW9uIGlzIGRlY2xhcmVkLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBnbyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDAtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEdpYW50IEZvb3RzdGVwcyBvZiBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgaHVnZSBwYWdlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGludGVyYWN0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSDigJMgdGhlIGNhbGxlcnMgb2YgKmJvdGgqIGZ1bmN0aW9ucywgYW5kIGNydWNpYWxseSwgaG93IHBhZ2UgZmF1bHRzIGFuZCBtZW1jZyBjaGFyZ2luZyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIG9yY2hlc3RyYXRlZC4KClRpbWUgdG8gZGl2ZSBpbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjb21wcmVoZW5zaXZlIHNlYXJjaCBmb3IgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB3aWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuIEZyb20gdGhlcmUgSSBjYW4gZXhwbG9yZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2Ugcm91dGluZXMgYW5kIHRoZSBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1lbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAxOnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgyOC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAzMi1cbm1tL2h1Z2V0bGIuYzozMDMzOlx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBhbGxvY19odWdldGxiX2ZvbGlvYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gV2hhdCYjMzk7cyBkcml2aW5nIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgcGF0aHMsIHRoZSBhcmVhcyBvZiB0aGUga2VybmVsIHRoYXQgYXJlICpyZWx5aW5nKiBvbiBodWdlIHBhZ2VzLCBhbmQgcGFydGljdWxhcmx5IHRoZSBhbGxvY2F0aW9uIHNpZGUuIEkgd2FudCB0byBzZWUgd2hpY2ggc3Vic3lzdGVtcyBhcmUgcHV0dGluZyB0aGUgcHJlc3N1cmUgb24gdGhlIGh1Z2UgcGFnZSBhbGxvY2F0b3IuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGRpZmZlcmVudCB1c2UgY2FzZXMuIAoKSSYjMzk7bSB0aGlua2luZzogaXMgdGhpcyBwcmltYXJpbHkgbWVtb3J5LW1hcHBlZCBmaWxlIHVzYWdlPyBOVU1BIHBvbGljaWVzPyBTcGVjaWZpYyBkZXZpY2UgZHJpdmVycz8gT3IgbWF5YmUgbW9yZSBnZW5lcmFsIGtlcm5lbCBhbGxvY2F0aW9ucyB0aGF0IGxldmVyYWdlIGh1Z2UgcGFnZXMgZm9yIHBlcmZvcm1hbmNlPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBzZXF1ZW5jZXM/IElzIGl0IGFsbCBkaXJlY3QgY2FsbHMsIG9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggbGF5ZXJzIG9mIGFic3RyYWN0aW9uIHRoYXQgbmVlZCB0byBiZSBmb2xsb3dlZD8gVWx0aW1hdGVseSBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIE1heWJlIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIHRoZSBhbGxvY2F0aW9uIHBhdGhzIG9yIHVuZGVyc3RhbmQgdGhlIGZyYWdtZW50YXRpb24gaXNzdWVzLiBTbywgc3RlcCBvbmUsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYW5kIGFuYWx5emUgdGhlIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xODE9YXJlIGFsbG9jYXRlZCBhbmQgaW5zdGFudGlhdGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIG1hcHBpbmcuICBUaGUgYWxsb2NhdGlvblxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODI6aXMgcGVyZm9ybWVkIHdpdGhpbiB0aGUgcm91dGluZSBhbGxvY19odWdldGxiX2ZvbGlvKCk6OlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODMtXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NDpcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg1LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBhdm9pZF9yZXNlcnZlKVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODYtXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NzphbGxvY19odWdldGxiX2ZvbGlvIGlzIHBhc3NlZCBhIFZNQSBwb2ludGVyIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgc28gaXQgY2FuXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4OC1jb25zdWx0IHRoZSByZXNlcnZhdGlvbiBtYXAgdG8gZGV0ZXJtaW5lIGlmIGEgcmVzZXJ2YXRpb24gZXhpc3RzLiAgSW4gYWRkaXRpb24sXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4OTphbGxvY19odWdldGxiX2ZvbGlvIHRha2VzIHRoZSBhcmd1bWVudCBhdm9pZF9yZXNlcnZlIHdoaWNoIGluZGljYXRlcyByZXNlcnZlc1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xOTAtc2hvdWxkIG5vdCBiZSB1c2VkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGV5IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIHRoZVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjA3PWlzIGNhbGxlZC4gIFRoaXMgcm91dGluZSB0YWtlcyB0d28gYXJndW1lbnRzIHJlbGF0ZWQgdG8gcmVzZXJ2YXRpb25zOlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA5LS0gYXZvaWRfcmVzZXJ2ZSwgdGhpcyBpcyB0aGUgc2FtZSB2YWx1ZS9hcmd1bWVudCBwYXNzZWQgdG9cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjEwOiAgYWxsb2NfaHVnZXRsYl9mb2xpbygpLlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMTEtLSBjaGcsIGV2ZW4gdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgb2YgdHlwZSBsb25nIG9ubHkgdGhlIHZhbHVlcyAwIG9yIDEgYXJlXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yNDc9SXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcmVzZXJ2ZSBtYXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aGUgY2FsbFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDg6dG8gdm1hX25lZWRzX3Jlc2VydmF0aW9uKCkgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGxvY19odWdldGxiX2ZvbGlvKCkgYW5kIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNDktY2FsbCB0byB2bWFfY29tbWl0X3Jlc2VydmF0aW9uKCkgYWZ0ZXIgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQuICBUaGlzIHdvdWxkXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDY65b2T5LiO6aKE55WZ55u45YWz55qE5beo6aG15Zyo55u45bqU55qE5pig5bCE5Lit6KKr5YiG6YWN5ZKM5a6e5L6L5YyW5pe277yM6aKE55WZ5bCx6KKr5raI6ICX5LqG44CC6K+l5YiG6YWN5piv5Zyo5Ye95pWwYWxsb2NfaHVnZXRsYl9mb2xpby4uLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQ3LeS4rei/m+ihjOeahDo6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDgtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDk6XHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTAtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTI6YWxsb2NfaHVnZXRsYl9mb2xpb+iiq+S8oOmAkue7meS4gOS4qlZNQeaMh+mSiOWSjOS4gOS4quiZmuaLn+WcsOWdgO+8jOWboOatpOWug+WPr+S7peafpemYhemihOeVmeaYoOWwhOS7peehruWumuaYr+WQpuWtmOWcqOmihOeVmeOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUzOuatpOWklu+8jGFsbG9jX2h1Z2V0bGJfZm9saW/pnIDopoHkuIDkuKrlj4LmlbBhdm9pZF9yZXNlcnZl77yM6K+l5Y+C5pWw6KGo56S65Y2z5L2/55yL6LW35p2l5bey57uP5Li65oyH5a6a55qE5Zyw5Z2A6aKE55WZ5LqGXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTQt6aKE55WZ77yM5Lmf5LiN5bqU6K+l5L2/55So6aKE55WZ44CCYXZvaWRfcmVzZXJ2ZeWPguaVsOacgOW4uOiiq+eUqOS6juWGmeaXtuaLt+i0neWSjOmhtemdoui/geenu+eahOaDheWGteS4i++8jOWNs+eOsOaciemhtemdoueahOminVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE2MD12bWFfbmVlZHNfcmVzZXJ2YXRpb24oKei/lOWbnueahOWAvOmAmuW4uOS4ujDmiJYx44CC5aaC5p6c6K+l5Zyw5Z2A5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MO+8jOWmguaenOS4jeWtmOWcqOmihOeVme+8jOWImeS4ujHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNjY6LSBhdm9pZF9yZXNlcnZl77yM6L+Z5piv5Lyg6YCS57uZYWxsb2NfaHVnZXRsYl9mb2xpbygp55qE5ZCM5LiA5Liq5YC8L+WPguaVsOOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTY3LS0gY2hn77yM5bC9566h6L+Z5Liq5Y+C5pWw55qE57G75Z6L5pivbG9uZ++8jOS9huWPquaciTDmiJYx55qE5YC86KKr5Lyg6YCS57uZZGVxdWV1ZV9odWdlX3BhZ2Vfdm1h44CC5aaC5p6c6K+l5YC85Li6MO+8jFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE5Mz1TZXRQYWdlUHJpdmF0ZShwYWdlKeWSjHJlc3ZfaHVnZV9wYWdlcy3jgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDM65ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwNC12bWFfY29tbWl0X3Jlc2VydmF0aW9uKCnkuYvpl7TvvIzpooTnlZnmmKDlsITmnInlj6/og73ooqvmlLnlj5jjgILlpoLmnpxodWdldGxiX3Jlc2VydmVfcGFnZXPlnKjlhbFcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzkyLVx0XHQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5MzpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5NC1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MTMtXHRcdCAqIGZvbGlvX3VubG9jayBiZWNhdXNlIGxvY2tlZCBieSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgxNDpcdFx0ICogZm9saW9fcHV0KCkgZHVlIHRvIHJlZmVyZW5jZSBmcm9tIGFsbG9jX2h1Z2V0bGJfZm9saW8oKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODE1LVx0XHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDE9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDM6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA0LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwNTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDYtXHRcdFx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDctXHRcdFx0XHRib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOS1cdFx0XHRcdFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMjI9c3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEyNS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMjY6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI3LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTM0OmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXHRcdFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTQwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExNDE6YWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExNDItXHRcdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYz0yMTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMTY1LVxubW0vaHVnZXRsYi5jOjIxNjY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE2Ny1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMTg2LS8qIGZvbGlvIG1pZ3JhdGlvbiBjYWxsYmFjayBmdW5jdGlvbiAqL1xubW0vaHVnZXRsYi5jOjIxODc6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxODgtXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcbi0tXG5tbS9odWdldGxiLmM9MjUyMD1zdGF0aWMgbG9uZyB2bWFfZGVsX3Jlc2VydmF0aW9uKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTI1MjctICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byByZXN0b3JlIHJlc2VydmF0aW9uIGluZm9ybWF0aW9uIG9uIGVycm9yIHBhdGhzLlxubW0vaHVnZXRsYi5jOjI1Mjg6ICogSXQgc2hvdWxkIE9OTFkgYmUgY2FsbGVkIGZvciBmb2xpb3MgYWxsb2NhdGVkIHZpYSBhbGxvY19odWdldGxiX2ZvbGlvKCksXG5tbS9odWdldGxiLmMtMjUyOS0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXG4tLVxubW0vaHVnZXRsYi5jLTI1MzQtICogMikgTm8gcmVzZXJ2YXRpb24gd2FzIGluIHBsYWNlIGZvciB0aGUgcGFnZSwgc28gaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgaXNcbm1tL2h1Z2V0bGIuYzoyNTM1OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cbm1tL2h1Z2V0bGIuYy0yNTM2LSAqXG4tLVxubW0vaHVnZXRsYi5jLTI1NDMtICpcbm1tL2h1Z2V0bGIuYzoyNTQ0OiAqIEluIGNhc2UgMiwgc2ltcGx5IHVuZG8gcmVzZXJ2ZSBtYXAgbW9kaWZpY2F0aW9ucyBkb25lIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uXG5tbS9odWdldGxiLmMtMjU0NS0gKi9cbm1tL2h1Z2V0bGIuYz0yNTQ2PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTcyLVx0XHRcdCAqIFRoaXMgaW5kaWNhdGVzIHRoZXJlIGlzIGFuIGVudHJ5IGluIHRoZSByZXNlcnZlIG1hcFxubW0vaHVnZXRsYi5jOjI1NzM6XHRcdFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxubW0vaHVnZXRsYi5jOjI1NzQ6XHRcdFx0ICogYmVmb3JlIHRoZSBhbGxvY19odWdldGxiX2ZvbGlvIGNhbGwsIG90aGVyd2lzZVxubW0vaHVnZXRsYi5jLTI1NzUtXHRcdFx0ICogaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUgd291bGQgYmUgc2V0IG9uIHRoZSBmb2xpby5cbi0tXG5tbS9odWdldGxiLmM9MjkyMz10eXBlZGVmIGVudW0ge1xuLS1cbm1tL2h1Z2V0bGIuYy0yOTQ4LSAqL1xubW0vaHVnZXRsYi5jOjI5NDk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTI5NTAtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxuLS1cbm1tL2h1Z2V0bGIuYz00ODk0PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNTAxNS1cdFx0XHRcdC8qIERvIG5vdCB1c2UgcmVzZXJ2ZSBhcyBpdCYjMzk7cyBwcml2YXRlIG93bmVkICovXG5tbS9odWdldGxiLmM6NTAxNjpcdFx0XHRcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTUwMTctXHRcdFx0XHRpZiAoSVNfRVJSKG5ld19mb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NTQ4Nz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2V0bGIuYy01NTY4LVx0c3Bpbl91bmxvY2sodm1mLVx1MDAzZXB0bCk7XG5tbS9odWdldGxiLmM6NTU2OTpcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgY293X2Zyb21fb3duZXIpO1xubW0vaHVnZXRsYi5jLTU1NzAtXG4tLVxubW0vaHVnZXRsYi5jPTU3NTk9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01ODI4LVxubW0vaHVnZXRsYi5jOjU4Mjk6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNTgzMC1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NjAwOT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02MjQ0LSAqL1xubW0vaHVnZXRsYi5jOjYyNDU6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy02MjQ2LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL2h1Z2V0bGIuYy02MjYxLVx0ICovXG5tbS9odWdldGxiLmM6NjI2MjpcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02MjYzLVx0bXBvbF9jb25kX3B1dChtcG9sKTtcbi0tXG5tbS9odWdldGxiLmM9NjI3Mj1pbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuLS1cbm1tL2h1Z2V0bGIuYy02MzI4LVxubW0vaHVnZXRsYi5jOjYzMjk6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTYzMzAtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jLTYzNTQtXHRcdFx0ICovXG5tbS9odWdldGxiLmM6NjM1NTpcdFx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcbm1tL2h1Z2V0bGIuYy02MzU2LVx0XHRcdGlmICghZm9saW8pIHtcbi0tXG5tbS9odWdldGxiLmMtNjM3NS1cbm1tL2h1Z2V0bGIuYzo2Mzc2Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02Mzc3LVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYz02NjY5PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY3ODktXHRcdFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcbm1tL2h1Z2V0bGIuYzo2NzkwOlx0XHRcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XG5tbS9odWdldGxiLmMtNjc5MS1cdFx0XHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcbi0tXG5tbS9tZW1mZC5jPTY4PXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbi0tXG5tbS9tZW1mZC5jLTkzLVxubW0vbWVtZmQuYzo5NDpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbm1tL21lbWZkLmMtOTUtXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuLS1cbm1tL21lbXBvbGljeS5jPTE0Mzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sKHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbm1tL21lbXBvbGljeS5jLTE0NTYtXHRcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBpbHgsIFx1MDAyNm5pZCk7XG5tbS9tZW1wb2xpY3kuYzoxNDU3Olx0XHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0xNDU4LVx0XHRcdFx0aHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhNUl9NRU1QT0xJQ1lfTUJJTkQpKTtcbi0tXG5tbS9taWdyYXRlLmM9MjE5Nz1zdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbi0tXG5tbS9taWdyYXRlLmMtMjIxNC1cdFx0Z2ZwX21hc2sgPSBodGxiX21vZGlmeV9hbGxvY19tYXNrKGgsIGdmcF9tYXNrKTtcbm1tL21pZ3JhdGUuYzoyMjE1Olx0XHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsXG5tbS9taWdyYXRlLmMtMjIxNi1cdFx0XHRcdFx0XHRtdGMtXHUwMDNlbm1hc2ssIGdmcF9tYXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIEFsbG9jYXRpb24gRmFpbHVyZSBTY2VuYXJpb3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBIdWdlVExCIHN5c3RlbSBoYW5kbGVzIGFsbG9jYXRpb24gZmFpbHVyZXMsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGlmZmVyZW50IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBhbGxvY19odWdldGxiX2ZvbGlvYCwgbmFtZWx5IGAtRU5PU1BDYCBhbmQgYC1FTk9NRU1gLCBpbiB2YXJpb3VzIGNvbnRleHRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIGhvdyB0aGVzZSBlcnJvciBjb2RlcyBhcmUgaGFuZGxlZCBieSBvdGhlciBmdW5jdGlvbnMuCgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBgLUVOT1NQQ2AgdmVyc3VzIGAtRU5PTUVNYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgLCBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAsIGFuZCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRpZmZlcmVudCBlcnJvciBjb2RlcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBpbiB0aGVzZSByb3V0aW5lcywgYW5kIGlmIHNvLCBob3cuCgpUbyBjbGFyaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEkgc2hvdWxkIGNvbnN1bHQgYG1tL2h1Z2V0bGIuY2AuIExldCYjMzk7cyBmb2N1cyBvbiBsaW5lcyA1ODIwLTU4NTAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1ODIwOlx0XHRcdFx0XHRcdFx0XHRWTV9VRkZEX01JU1NJTkcpO1xuNTgyMTpcdFx0XHR9XG41ODIyOlx0XG41ODIzOlx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpKSB7XG41ODI0Olx0XHRcdFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XG41ODI1Olx0XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG41ODI2Olx0XHRcdFx0XHRnb3RvIG91dDtcbjU4Mjc6XHRcdFx0fVxuNTgyODpcdFxuNTgyOTpcdFx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xuNTgzMDpcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuNTgzMTpcdFx0XHRcdC8qXG41ODMyOlx0XHRcdFx0ICogUmV0dXJuaW5nIGVycm9yIHdpbGwgcmVzdWx0IGluIGZhdWx0aW5nIHRhc2sgYmVpbmdcbjU4MzM6XHRcdFx0XHQgKiBzZW50IFNJR0JVUy4gIFRoZSBodWdldGxiIGZhdWx0IG11dGV4IHByZXZlbnRzIHR3b1xuNTgzNDpcdFx0XHRcdCAqIHRhc2tzIGZyb20gcmFjaW5nIHRvIGZhdWx0IGluIHRoZSBzYW1lIHBhZ2Ugd2hpY2hcbjU4MzU6XHRcdFx0XHQgKiBjb3VsZCByZXN1bHQgaW4gZmFsc2UgdW5hYmxlIHRvIGFsbG9jYXRlIGVycm9ycy5cbjU4MzY6XHRcdFx0XHQgKiBQYWdlIG1pZ3JhdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBmYXVsdCBtdXRleCwgYnV0XG41ODM3Olx0XHRcdFx0ICogZG9lcyBhIGNsZWFyIHRoZW4gd3JpdGUgb2YgcHRlJiMzOTtzIHVuZGVyIHBhZ2UgdGFibGVcbjU4Mzg6XHRcdFx0XHQgKiBsb2NrLiAgUGFnZSBmYXVsdCBjb2RlIGNvdWxkIHJhY2Ugd2l0aCBtaWdyYXRpb24sXG41ODM5Olx0XHRcdFx0ICogbm90aWNlIHRoZSBjbGVhciBwdGUgYW5kIHRyeSB0byBhbGxvY2F0ZSBhIHBhZ2VcbjU4NDA6XHRcdFx0XHQgKiBoZXJlLiAgQmVmb3JlIHJldHVybmluZyBlcnJvciwgZ2V0IHB0bCBhbmQgbWFrZVxuNTg0MTpcdFx0XHRcdCAqIHN1cmUgdGhlcmUgcmVhbGx5IGlzIG5vIHB0ZSBlbnRyeS5cbjU4NDI6XHRcdFx0XHQgKi9cbjU4NDM6XHRcdFx0XHRpZiAoaHVnZXRsYl9wdGVfc3RhYmxlKGgsIG1tLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1mLVx1MDAzZXB0ZSwgdm1mLVx1MDAzZW9yaWdfcHRlKSlcbjU4NDQ6XHRcdFx0XHRcdHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7XG41ODQ1Olx0XHRcdFx0ZWxzZVxuNTg0NjpcdFx0XHRcdFx0cmV0ID0gMDtcbjU4NDc6XHRcdFx0XHRnb3RvIG91dDtcbjU4NDg6XHRcdFx0fVxuNTg0OTpcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIHZtZi1cdTAwM2VyZWFsX2FkZHJlc3MpO1xuNTg1MDpcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuNTg1MTpcdFx0XHRuZXdfZm9saW8gPSB0cnVlO1xuNTg1MjpcdFxuNTg1MzpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkge1xuNTg1NDpcdFx0XHRcdGludCBlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLCBtYXBwaW5nLFxuNTg1NTpcdFx0XHRcdFx0XHRcdFx0dm1mLVx1MDAzZXBnb2ZmKTtcbjU4NTY6XHRcdFx0XHRpZiAoZXJyKSB7XG41ODU3Olx0XHRcdFx0XHQvKlxuNTg1ODpcdFx0XHRcdFx0ICogZXJyIGNhbiYjMzk7dCBiZSAtRUVYSVNUIHdoaWNoIGltcGxpZXMgc29tZW9uZVxuNTg1OTpcdFx0XHRcdFx0ICogZWxzZSBjb25zdW1lZCB0aGUgcmVzZXJ2YXRpb24gc2luY2UgaHVnZXRsYlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXJyb3IgTWFwcGluZyBpbiB0aGUgVmlydHVhbCBNZW1vcnkgTWFuYWdlbWVudCBGcmFtZXdvcmsqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSB2aXJ0dWFsIG1lbW9yeSBmcmFtZXdvcmsgaGFuZGxlcyBlcnJvcnMsIHNwZWNpZmljYWxseSB0aGUgbWFwcGluZyBvZiBrZXJuZWwgZXJyb3JzIHRvIFZNIGZhdWx0cy4gSXQgc2VlbXMgbGlrZSB0aGUgZnVuY3Rpb24gYHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSlgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHRyYW5zbGF0aW9uLiBJbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgLUVOT01FTWAsIHRoZSBzdGFuZGFyZCAmIzM0O291dCBvZiBtZW1vcnkmIzM0OyBlcnJvciwgZ2V0cyBtYXBwZWQgdG8gYFZNX0ZBVUxUX09PTWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IG5vdyBJIHNlZSB0aGF0IGAtRU5PU1BDYCwgdGhlICYjMzQ7bm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UmIzM0OyBlcnJvciwgaXMgYmVpbmcgbWFwcGVkIHRvIGVpdGhlciBgVk1fRkFVTFRfU0lHQlVTYCBvciBwb3NzaWJseSBgVk1fRkFVTFRfRVJST1JgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGxlc3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSYjMzk7ZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBtYXBwaW5nIGlzIGhhcHBlbmluZyB0byBiZSBzdXJlIHdoYXQgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1mX2Vycm9yYCB3b3JrcyBpbnRlcm5hbGx5LiBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBgdm1mX2Vycm9yYCB0byBzZWUgaG93IGl0IG1ha2VzIHRoaXMgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1mX2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD00ODE1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgyNC1cbmluY2x1ZGUvbGludXgvbW0uaDo0ODI1OnN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfZXJyb3IoaW50IGVycilcbmluY2x1ZGUvbGludXgvbW0uaC00ODI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgzNi0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjQ4Mzc6ICogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBtZXJnZWQgd2l0aCB2bWZfZXJyb3IoKSBhYm92ZSwgYnV0IHdpbGwgbmVlZCBhXG5pbmNsdWRlL2xpbnV4L21tLmg6NDgzODogKiBjYXJlZnVsIGF1ZGl0IG9mIGFsbCB2bWZfZXJyb3IoKSBjYWxsZXJzLlxuaW5jbHVkZS9saW51eC9tbS5oLTQ4MzktICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzUyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGB2bWZfZXJyb3JgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiBgdm1mX2Vycm9yYC4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgcGxheXMgYSBrZXkgcm9sZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIHZpcnR1YWwgbWVtb3J5IGZhdWx0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIGRldGFpbCB0by4uLiB3ZWxsLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHBvdGVudGlhbGx5IGRlYnVnIGEgcGFnZSBmYXVsdCwgZGlhZ25vc2UgYSBtZW1vcnkgbGVhaywgb3IgY29udHJpYnV0ZSB0byBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gS25vd2luZyBgdm1mX2Vycm9yYCYjMzk7cyBzaWduYXR1cmUsIHJldHVybiB2YWx1ZXMsIGFuZCB3aGF0IGl0IGxvZ3Mgd2lsbCBzZXQgdGhlIHN0YWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDgyMDpcdFx0Y29uc3QgcGdwcm90X3QgcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQob3JpZ19wcm90KTtcbjQ4MjE6XHRcbjQ4MjI6XHRcdHJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCBhZGRyLCBwZm4sIHNpemUsIHByb3QpO1xuNDgyMzpcdH1cbjQ4MjQ6XHRcbjQ4MjU6XHRzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Vycm9yKGludCBlcnIpXG40ODI2Olx0e1xuNDgyNzpcdFx0aWYgKGVyciA9PSAtRU5PTUVNKVxuNDgyODpcdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuNDgyOTpcdFx0ZWxzZSBpZiAoZXJyID09IC1FSFdQT0lTT04pXG40ODMwOlx0XHRcdHJldHVybiBWTV9GQVVMVF9IV1BPSVNPTjtcbjQ4MzE6XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG40ODMyOlx0fVxuNDgzMzpcdFxuNDgzNDpcdC8qXG40ODM1Olx0ICogQ29udmVydCBlcnJubyB0byByZXR1cm4gdmFsdWUgZm9yIC1cdTAwM2VwYWdlX21rd3JpdGUoKSBjYWxscy5cbjQ4MzY6XHQgKlxuNDgzNzpcdCAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbWVyZ2VkIHdpdGggdm1mX2Vycm9yKCkgYWJvdmUsIGJ1dCB3aWxsIG5lZWQgYVxuNDgzODpcdCAqIGNhcmVmdWwgYXVkaXQgb2YgYWxsIHZtZl9lcnJvcigpIGNhbGxlcnMuXG40ODM5Olx0ICovXG40ODQwOlx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9mc19lcnJvcihpbnQgZXJyKVxuNDg0MTpcdHtcbjQ4NDI6XHRcdGlmIChlcnIgPT0gMClcbjQ4NDM6XHRcdFx0cmV0dXJuIFZNX0ZBVUxUX0xPQ0tFRDtcbjQ4NDQ6XHRcdGlmIChlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVBR0FJTilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIExpbnV4IEtlcm5lbCBCdWdmaXgqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiBJbnRlcmVzdGluZyBmaXguIFNlZW1zIGxpa2UgYSBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgSHVnZVRMQiwgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIG5vdGljZSB0aGF0IHdoZW4gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBoYXBwZW5zIHdpdGhpbiB0aGUgYHZtZl9lcnJvcigpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gYGVycmAgaXMgYC1FTk9NRU1gLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgVk1fRkFVTFRfT09NYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBiZWhhdmlvci4gQnV0LCBhbmQgdGhpcyBpcyB0aGUga2lja2VyLCB3aGVuIGRlYWxpbmcgd2l0aCBIdWdlVExCIGFuZCB0aGlzIGBWTV9GQVVMVF9PT01gIGlzIHJldHVybmVkIGZyb20gYSBwYWdlIGZhdWx0IGhhbmRsZXIsIGl0IHRyaWdnZXJzIGEgcmV0cnksIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCBiZWhhdmlvciB3aXRoIGh1Z2UgcGFnZXMsIGxpa2UgZ2V0dGluZyBzdHVjayBpbiBhIGxvb3AgYmVjYXVzZSB0aGUgc3RhbmRhcmQgT09NIGtpbGxlciByZXRyeSBsb2dpYyBpc24mIzM5O3QgdHJpZ2dlcmVkLgoKQW5kIHRoZXJlJiMzOTtzIG1vcmUuIFByZXZpb3VzbHksIGlmIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5lZCBgLUVOT01FTWAsIGBodWdldGxiX2FsbG9jX2ZvbGlvYCB3YXMgaW5jb3JyZWN0bHkgY2FsbGluZyBgZnJlZV9odWdlX2ZvbGlvYCBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJdCBza2lwcyBgZm9saW9fcHV0YCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYW4gaW5hcHByb3ByaWF0ZSByZWxlYXNlIHBhdGguIE5vdywgdGhlIGZpeCAqY29ycmVjdGx5KiBjYWxscyBgZm9saW9fcHV0YCwgYW5kIHJldHVybnMgYC1FTk9TUENgIGluc3RlYWQuIFRoaXMgaXMgYmV0dGVyLCByaWdodD8gSXQgYXZvaWRzIHRoZSBsb29waW5nIHBhZ2UgZmF1bHQgYW5kIGluc3RlYWQgdHJpZ2dlcnMgYSBTSUdCVVMsIHdoaWNoIGlzIGRlZmluaXRlbHkgcHJlZmVyYWJsZSB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wLgoKU28sIHRoaXMgaXMgYSBjb3JlIE1NIC8gSHVnZVRMQiAvIE1lbWNnIGZ1bmN0aW9uYWwgYnVnZml4LiBNYWtlcyBtZSB3b25kZXIgaWYgdGhpcyBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuIEh1Z2VUTEIgaXMgZGVmaW5pdGVseSBhIHN0YW5kYXJkIGZlYXR1cmUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSAodGhyb3VnaCBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgaHVnZXRsYmZzYCwgZXRjLikuIEl0JiMzOTtzIGVzcGVjaWFsbHkgbGlrZWx5IHRvIHRyaWdnZXIgdW5kZXIgbWVtb3J5IHByZXNzdXJlIG9yIHdoZW4gbWVtb3J5IGNncm91cCBsaW1pdHMgYXJlIGluIHBsYWNlIChgQ09ORklHX0hVR0VUTEJGU2AsIGBDT05GSUdfQ0dST1VQU2AsIGBDT05GSUdfTUVNQ0dgKS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgcmVxdWlyZW1lbnRzIGZvciBIdWdlVExCIGFuZCB0aGUgbWVtb3J5IGNncm91cCBodWdldGxiIGNoYXJnaW5nIHRvIHNlZSB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19IVUdFVExCRlNgIGFuZCBvdGhlciByZWxhdGVkIGNvbmZpZ3MgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGluIHRoZSByZWxldmFudCBgbW0vS2NvbmZpZ2AgZmlsZS4gTmVlZCB0byBuYWlsIGRvd24gdGhlIHN1cmZhY2UgYXJlYSBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpb3xtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgyOC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYy0yODgyLVxubW0vaHVnZXRsYi5jOjI4ODM6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0yODg0LVx0Lypcbm1tL2h1Z2V0bGIuYy0yODg1LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4ODY6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg4Ny1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAzMi1cbm1tL2h1Z2V0bGIuYzozMDMzOlx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAzNC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUyMzUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNDQtICovXG5tbS9tZW1jb250cm9sLmM6NTI0NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTI0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtbS9odWdldGxiLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwb2ludCBmb3IgYnVpbGQgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgcmlnaHQ/IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhhdCBgTWFrZWZpbGVgIGFuZCBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBgaHVnZXRsYi5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgb2JqZWN0IGZpbGUgZ2VuZXJhdGlvbiBydWxlcywgYW5kIGhvdyBpdCYjMzk7cyBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBgbW1gIG1vZHVsZSwgYW5kIHByb2JhYmx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxubW0vTWFrZWZpbGU6ODM6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiX2NtYS5vXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxubW0vTWFrZWZpbGU6ODU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZS04Ni1vYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbi0tXG5tbS9NYWtlZmlsZT0xMDg9ZW5kaWZcbm1tL01ha2VmaWxlOjEwOTpvYmotJChDT05GSUdfQ0dST1VQX0hVR0VUTEIpICYjNDM7PSBodWdldGxiX2Nncm91cC5vXG5tbS9NYWtlZmlsZS0xMTAtb2JqLSQoQ09ORklHX0dVUF9URVNUKSAmIzQzOz0gZ3VwX3Rlc3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFF1ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBgSFVHRVRMQkZTYCBjb25maWcgb3B0aW9uLiBXaGVyZSYjMzk7cyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGFuZCBkb2N1bWVudGF0aW9uPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL0tjb25maWdgIGJlY2F1c2UgdGhlIGZpbGUgc3lzdGVtIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gaXQuIElmIGl0IGlzbiYjMzk7dCB0aGVyZSwgdGhlbiBgbW0vS2NvbmZpZ2AgaXMgYSB2ZXJ5IGxpa2VseSBzZWNvbmRhcnkgbG9jYXRpb24sIGdpdmVuIHRoZSBuYXR1cmUgb2YgSHVnZVRMQiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgc28gaXQmIzM5O3MgcHJvYmFibHkgcHJldHR5IGhpZ2ggdXAgaW4gdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlZmF1bHRzLCBkZXBlbmRlbmNpZXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbnMgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRvIGNvcnJlY3RseSBzZXQgaXQgZm9yIHRoaXMga2VybmVsIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYGZzL0tjb25maWdgLiBJIGtub3cgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIG1vc3QgZmlsZXN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gTGV0JiMzOTtzIHNlZS4uLiBhcm91bmQgbGluZSAyNTAsIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbW9yZSBnZW5lcmFsIGZpbGVzeXN0ZW0gb3B0aW9ucyBiZWdpbiwgb3IgcGVyaGFwcyB3aGVyZSBhIHNwZWNpZmljIHJlbGV2YW50IHNlY3Rpb24gYmVnaW5zLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWxldmFudCBzZWN0aW9uIHRvIHBheSBhdHRlbnRpb24gdG8uIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgZ2l2ZXMgbWUgd2hhdCBJIG5lZWQuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSB0dWNrZWQgYXdheSBhcm91bmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjQ4Olx0XHRkZWZfYm9vbCBuXG4gMjQ5Olx0XG4gMjUwOlx0bWVudWNvbmZpZyBIVUdFVExCRlNcbiAyNTE6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMjUyOlx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjUzOlx0XHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4gMjU0Olx0XHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxuIDI1NTpcdFx0aGVscFxuIDI1NjpcdFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG4gMjU3Olx0XHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcbiAyNTg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAyNTk6XHRcbiAyNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjE6XHRcbiAyNjI6XHRpZiBIVUdFVExCRlNcbiAyNjM6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuIDI2NDpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4gMjY1Olx0XHRkZWZhdWx0IG5cbiAyNjY6XHRcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNjc6XHRcdGhlbHBcbiAyNjg6XHRcdCAgVGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb2ZmLiBTYXkgWSBoZXJlIHRvXG4gMjY5Olx0XHQgIGVuYWJsZSBIVk8gYnkgZGVmYXVsdC4gSXQgY2FuIGJlIGRpc2FibGVkIHZpYSBodWdldGxiX2ZyZWVfdm1lbW1hcD1vZmZcbiAyNzA6XHRcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG4gMjcxOlx0ZW5kaWYgIyBIVUdFVExCRlNcbiAyNzI6XHRcbiAyNzM6XHRjb25maWcgSFVHRVRMQl9QQUdFXG4gMjc0Olx0XHRkZWZfYm9vbCBIVUdFVExCRlNcbiAyNzU6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiAyNzY6XHRcbiAyNzc6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNzg6XHRcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuIDI3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDA1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgS2NvbmZpZyBvcHRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGVuYWJsZSBpdCBpZiB0aGUgdW5kZXJseWluZyBzdXBwb3J0IGlzbiYjMzk7dCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMg4oCTIGFyZSB0aGVyZSBhbnkgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoYXQgbXVzdCBiZSBzZXQgZmlyc3Q/IFdoYXQmIzM5O3MgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gdHJlZSB0aGF0IGVuYWJsZXMgaXQ/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBkaXJlY3QgaW5zcGVjdGlvbiBvZiB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLgoKTmV4dCwgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgZ3VhcmRlZCBpbiB0aGUgY29kZSwgd2hhdCBjb25kaXRpb25zIGFjdHVhbGx5IG1ha2UgaXQgcGFydCBvZiB0aGUgY29tcGlsZWQgY29kZSwgZm9yIGV4YW1wbGUgSSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQgaXMgZGVjbGFyZWQvZ3VhcmRlZCBieSBgI2lmZGVmYC4gS25vd2luZyBpdHMgZ3VhcmRpbmcgY29uZGl0aW9ucyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCB3aGVuIHRoZSBjb2RlIHBhdGggYXNzb2NpYXRlZCB3aXRoIGl0IGlzIGFjdHVhbGx5IGFjdGl2ZS4gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBgI2lmZGVmYHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIHZlcnNpb25zIHdoZXJlIGl0cyBiZWhhdmlvciBtaWdodCBkaWZmZXI/IEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcywgdGhlIGd1YXJkIGFuZCB0aGUgcmVzdWx0aW5nIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucyBoZWxwcyB0byBhc3Nlc3MgYW5kIGVuc3VyZSB0aGF0IHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJsZSBvciBjb25maWd1cmVkIGFzIG5lZWRlZCBmb3IgbXkgc3BlY2lmaWMgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjU3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTM9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAte1xuLS1cbm1tL2h1Z2V0bGIuYz0yODI3PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yODgyLVxubW0vaHVnZXRsYi5jOjI4ODM6XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbm1tL2h1Z2V0bGIuYy0yODg0LVx0Lypcbm1tL2h1Z2V0bGIuYy0yODg1LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4ODY6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg4Ny1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0NC0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjQ1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MjQ2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbWVtY29udHJvbC5oYCBmb3IgTWVtY2cgRGV0YWlscyoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMgKGBtZW1jZ2ApLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBoZWFkZXIgZmlsZS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBjb25maWd1cmVkLCBlbmFibGVkLCBvciBvdGhlcndpc2UgaGFuZGxlZCB3aXRoaW4gdGhpcyBoZWFkZXIgZmlsZS4gTXkgaW5zdGluY3Qgc2F5cyB0aGF0IGxpbmVzIDY2NSBhbmQgMTE1OSBhcmUga2V5LiBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gKGAjaWZkZWYgQ09ORklHX01FTUNHYCkgYXJvdW5kIHRob3NlIGxpbmUgbnVtYmVycy4gVGhpcyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIG1lbWNnLXNwZWNpZmljIGNvZGUgaXMgYWN0aXZlIGJhc2VkIG9uIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGFyZWFzIHRvIHNlZSBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZmVhdHVyZXMgYXJlIGV4cG9zZWQgb3IgaGlkZGVuIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCDigJMgZmluZCB0aGUgcmVsZXZhbnQgc291cmNlLCBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLCBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY1MDpcdCAqIHBhZ2VzIGFjY29yZGluZyB0byBAZ2ZwIGlmIG5lY2Vzc2FyeS4gIElmIEBtbSBpcyBOVUxMLCB0cnkgdG9cbiA2NTE6XHQgKiBjaGFyZ2UgdG8gdGhlIGFjdGl2ZSBtZW1jZy5cbiA2NTI6XHQgKlxuIDY1MzpcdCAqIERvIG5vdCB1c2UgdGhpcyBmb3IgZm9saW9zIGFsbG9jYXRlZCBmb3Igc3dhcGluLlxuIDY1NDpcdCAqXG4gNjU1Olx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cbiA2NTY6XHQgKi9cbiA2NTc6XHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiA2NTg6XHRcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4gNjU5Olx0e1xuIDY2MDpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA2NjE6XHRcdFx0cmV0dXJuIDA7XG4gNjYyOlx0XHRyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7XG4gNjYzOlx0fVxuIDY2NDpcdFxuIDY2NTpcdGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG4gNjY2Olx0XG4gNjY3Olx0aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiA2Njg6XHRcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuIDY2OTpcdFxuIDY3MDpcdHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDY3MTpcdFxuIDY3MjpcdC8qKlxuIDY3MzpcdCAqIG1lbV9jZ3JvdXBfdW5jaGFyZ2UgLSBVbmNoYXJnZSBhIGZvbGlvLlxuIDY3NDpcdCAqIEBmb2xpbzogRm9saW8gdG8gdW5jaGFyZ2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTWVtY29udHJvbC5oKioKCkFscmlnaHQsIHNvIHdlIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHBvaW50IGhlcmUsIGFuZCB0aGF0IG1lYW5zIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBvdmVyIHRvIGxpbmUgMTE1MCBvZiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGtleSBhc3BlY3Qgb2YgaG93IG1lbW9yeSBjb250cm9sIGlzIG1hbmFnZWQgaXMgZGVmaW5lZCB0aGVyZSwgYW5kIGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBkb3VibGUtY2hlY2suIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uLCBwZXJoYXBzIGEgZnVuY3Rpb24gY2FsbCByZWxhdGVkIHRvIG1lbW9yeSBsaW1pdHMsIG9yIG1heWJlIGV2ZW4gYSBzdWJ0bGUgZGV0YWlsIGFib3V0IGhvdyBhY2NvdW50aW5nIGlzIGhhbmRsZWQgZm9yIHRoYXQgc3Vic3lzdGVtLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSBzYW1lIHBhZ2Ugd2l0aCB0aGUgY29yZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0NTpcdH1cbjExNDY6XHRcbjExNDc6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbjExNDg6XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuMTE0OTpcdHtcbjExNTA6XHRcdHJldHVybiBmYWxzZTtcbjExNTE6XHR9XG4xMTUyOlx0XG4xMTUzOlx0c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbjExNTQ6XHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbjExNTU6XHR7XG4xMTU2Olx0XHRyZXR1cm4gMDtcbjExNTc6XHR9XG4xMTU4Olx0XG4xMTU5Olx0c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG4xMTYwOlx0e1xuMTE2MTpcdCAgICAgICAgcmV0dXJuIDA7XG4xMTYyOlx0fVxuMTE2MzpcdFxuMTE2NDpcdHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMTE2NTpcdFx0XHQgdW5zaWduZWQgc2hvcnQgaWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4xMTY2Olx0e1xuMTE2NzpcdFx0cmV0dXJuIDA7XG4xMTY4Olx0fVxuMTE2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE5NwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBJdCBzZWVtcyBsaWtlIGl0cyBiZWhhdmlvciBpcyBkcmFzdGljYWxseSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCBvciBub3QuIElmIE1FTUNHIGlzICpvZmYqLCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5zIDAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEhvd2V2ZXIsIHdoZW4gTUVNQ0cgKmlzKiBlbmFibGVkLCBzdWRkZW5seSBpdCBjYW4gcmV0dXJuIGAtRU5PTUVNYCwgc2lnbmFsaW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IHRvIG5vdGUuIFRoaXMgY2hhbmdlcyB0aGUgZW50aXJlIGZsb3cuCgpBbmQsIGFzIGEgc2lkZSB0aG91Z2h0LCBJIHNlZSB0aGF0IHdoZW4gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIGluY2x1ZGVzIGEgY2FsbCB0byBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIEkmIzM5O2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhpcyB3aGVuIGRpdmluZyBkZWVwIGludG8gdGhlIGNvZGUuCgpHaXZlbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlczogYGluaXQvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciB2YWx1ZXMuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiBNRU1DRyBlbmFibGVtZW50IG9uIEh1Z2VUTEIgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gdGhpbmtpbmcgYWJvdXQgaG93IGRpZmZlcmVudCBtZW1vcnkgcG9saWNpZXMgaW50ZXJhY3QgYW5kIGhvdyBlcnJvcnMgcHJvcGFnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0IGxlYWRzIG1lIHRvIGNvbnNpZGVyIGFsbCByZWxldmFudCBmYWN0b3JzLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBiZSB0aG9yb3VnaCBhbmQgbm90IG1pc3MgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IGBDR1JPVVBfSFVHRVRMQmAgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIGF0IGhhbmQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGludGVncmF0ZSB0aGlzIGNvbnNpZGVyYXRpb24gaW50byB0aGUgb3ZlcmFsbCBhbmFseXNpcyBhbmQgZW5zdXJlIHRoYXQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGFsc28gYXNzZXNzZWQgYWxvbmdzaWRlIHRoZSBvdGhlciBjb25zaWRlcmF0aW9ucyB0byBwcm92aWRlIHRoZSBtb3N0IGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBldmFsdWF0aW9uLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIG9mIHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfSFVHRVRMQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTI4Mj1jb25maWcgQ0dST1VQX0ZSRUVaRVJcbi0tXG5pbml0L0tjb25maWctMTI5Mi1cbmluaXQvS2NvbmZpZzoxMjkzOmNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuaW5pdC9LY29uZmlnLTEyOTQtXHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGFyZWEuIEJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIEkgdGhpbmsgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBsaWtlbHkgYXJvdW5kIGxpbmVzIDEwODUgYW5kIDEyOTMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhvc2UgbGluZXMgcHJvYmFibHkgY29udGFpbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHRoZWlyIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBsaW5lcyBwcm92aWRlIGFueSBjcml0aWNhbCBoaW50cyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgSSYjMzk7bSB0cnlpbmcgdG8gdW50YW5nbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA4MTpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MjpcdFxuMTA4MzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHXG4xMDg2Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg3Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg4Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA5MDpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkxOlx0XHRoZWxwXG4xMDkyOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gS2VybmVsIENvbmZpZ3VyYXRpb246IEEgU3BlY2lmaWMgRm9jdXMqKgoKT2theSwgc28gd2UgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCBsaW5lcyAxMjkwLTEzMDUgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0byBvdXIgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGx1cmtpbmcgd2l0aGluIHRoYXQgYmxvY2suIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGhvcGVmdWxseSwgdGhpcyB3aWxsIHlpZWxkIHRoZSBzcGVjaWZpYyBkZXRhaWwgd2UgbmVlZCwgcmF0aGVyIHRoYW4gYSBicm9hZCBzd2VlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwOlx0XG4xMjkxOlx0XHQgIElmIHlvdSYjMzk7cmUgdXNpbmcgY2dyb3VwMiwgc2F5IE4uXG4xMjkyOlx0XG4xMjkzOlx0Y29uZmlnIENHUk9VUF9IVUdFVExCXG4xMjk0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuMTI5NTpcdFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VcbjEyOTY6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEyOTc6XHRcdGRlZmF1bHQgblxuMTI5ODpcdFx0aGVscFxuMTI5OTpcdFx0ICBQcm92aWRlcyBhIGNncm91cCBjb250cm9sbGVyIGZvciBIdWdlVExCIHBhZ2VzLlxuMTMwMDpcdFx0ICBXaGVuIHlvdSBlbmFibGUgdGhpcywgeW91IGNhbiBwdXQgYSBwZXIgY2dyb3VwIGxpbWl0IG9uIEh1Z2VUTEIgdXNhZ2UuXG4xMzAxOlx0XHQgIFRoZSBsaW1pdCBpcyBlbmZvcmNlZCBkdXJpbmcgcGFnZSBmYXVsdC4gU2luY2UgSHVnZVRMQiBkb2VzbiYjMzk7dFxuMTMwMjpcdFx0ICBzdXBwb3J0IHBhZ2UgcmVjbGFpbSwgZW5mb3JjaW5nIHRoZSBsaW1pdCBhdCBwYWdlIGZhdWx0IHRpbWUgaW1wbGllc1xuMTMwMzpcdFx0ICB0aGF0LCB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgU0lHQlVTIHNpZ25hbCBpZiBpdCB0cmllcyB0byBhY2Nlc3NcbjEzMDQ6XHRcdCAgSHVnZVRMQiBwYWdlcyBiZXlvbmQgaXRzIGxpbWl0LiBUaGlzIHJlcXVpcmVzIHRoZSBhcHBsaWNhdGlvbiB0byBrbm93XG4xMzA1Olx0XHQgIGJlZm9yZWhhbmQgaG93IG11Y2ggSHVnZVRMQiBwYWdlcyBpdCB3b3VsZCByZXF1aXJlIGZvciBpdHMgdXNlLiBUaGVcbjEzMDY6XHRcdCAgY29udHJvbCBncm91cCBpcyB0cmFja2VkIGluIHRoZSB0aGlyZCBwYWdlIGxydSBwb2ludGVyLiBUaGlzIG1lYW5zXG4xMzA3Olx0XHQgIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgY29udHJvbGxlciB3aXRoIGh1Z2UgcGFnZSBsZXNzIHRoYW4gMyBwYWdlcy5cbjEzMDg6XHRcbjEzMDk6XHRjb25maWcgQ1BVU0VUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1OQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2VUTEIgQWxsb2NhdGlvbiBhbmQgRmF1bHQgSGFuZGxpbmcgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIG9uIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20ga2V5aW5nIGluIG9uIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhcyB0aGV5IGFwcGVhciB0byBiZSB0aGUgY29yZSBhbGxvY2F0b3JzLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gU2FtZSBnb2VzIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYWNjZXNzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZ1enppbmcgY292ZXJhZ2UuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgSFVHRVRMQkZTYCAoSHVnZVRMQiBmaWxlc3lzdGVtIHN1cHBvcnQpLCBgTUVNQ0dgIChNZW1vcnkgQ29udHJvbGxlciwgZXNzZW50aWFsIGZvciBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmApLCBhbmQgYENHUk9VUF9IVUdFVExCYCAoSHVnZVRMQiBjb250cm9sbGVyKSBhcmUgYWxsIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2Nrcy4KClRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB3aGV0aGVyIHRoaXMgYXJlYSBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHNlcmlvdXMgYnVnIHdoZXJlIG1lbSBjZ3JvdXAgaHVnZXRsYiBjaGFyZ2luZyBmYWlsdXJlcyBjYW4gbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIsIHRyaWdnZXJlZCBieSAtRU5PTUVNIGFuZCByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NLCBhbG9uZyB3aXRoIGluY29ycmVjdCBmb2xpbyByZWxlYXNlcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNyaXRpY2FsIGZsYXcgZnV6emluZyBpcyBkZXNpZ25lZCB0byB1bmNvdmVyLiBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBlc3BlY2lhbGx5IHdoZW4gbWVtb3J5IGNncm91cCBsaW1pdHMgYW5kIGh1Z2V0bGJmcy9NQVBfSFVHRVRMQiBwYWdlIGZhdWx0cyBhcmUgaW52b2x2ZWQuCgpTbywgdG8gc3VtbWFyaXplOgoKMS4gICoqRm9jdXNTeW1ib2xzKio6IGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLgoyLiAgKipFbmFibGVDb25maWdzKio6IGBIVUdFVExCRlNgLCBgTUVNQ0dgLCBgQ0dST1VQX0hVR0VUTEJgLgozLiAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgCjQuICAqKlJlYXNvbmluZyoqOiBTb2xpZCBleHBsYW5hdGlvbiBmb3IgdnVsbmVyYWJpbGl0eS4KCk5vdyBJIG5lZWQgdG8gZW5zdXJlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgaXMgdXNlZCB3aXRoIGFsbCByZXF1aXJlZCBhbmQgdmFsaWQgYXJndW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9IVUdFVExCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9IVUdFVExCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZjQ4OWZlZGYwYmJhYmEwOTg4MGViZjU4NWYxNDY0Yjk1MGQ4MDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi45N2MwNmYyMjdlZjhhIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0yODIzLDcgJiM0MzsyODIzLDYgQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKQogICoKICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS4KICAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLgotICogICAgICAgICAtRU5PTUVNIGlmIG1lbSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMuCiAgKi8KIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCQlzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpCkBAIC0yODkwLDEzICYjNDM7Mjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTsKIAogCWlmIChyZXQgPT0gLUVOT01FTSkgewotCQlmcmVlX2h1Z2VfZm9saW8oZm9saW8pOwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKIAkJLyoKIAkJICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzCiAJCSAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW8KIAkJICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLgogCQkgKi8KLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGUKJiM0MzsJCSAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKQomIzQzOwkJICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhCiYjNDM7CQkgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvbgomIzQzOwkJICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NCiYjNDM7CQkgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvcgomIzQzOwkJICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0bwomIzQzOwkJICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5CiYjNDM7CQkgKiByZXRyeWluZyB0aGUgZmF1bHQuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwogCX0KIAogCXJldHVybiBmb2xpbzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggRXZhbHVhdGlvbiBmb3IgS01TQU4gRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGtlcm5lbCBwYXRjaCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIGRpc3NlY3QgdGhlIGNvZGUuIFRoaXMgbWVhbnMgZ2V0dGluZyBteSBoYW5kcyBkaXJ0eSBhbmQgdGFraW5nIGEgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbS9odWdldGxiLmNgIHdpdGhpbiB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgZnVuY3Rpb24uIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xraXQgZm9yIHRoaXM6IGEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlc3Npb24gdG8gcHVsbCB0aGUgZmlsZSBhbmQgc3Vycm91bmRpbmcgY29kZSBzbyBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgaW4gY29udGV4dC4gVGhpcyB3aWxsIGxldCBtZSBhc3Nlc3MgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODc1Olx0XG4yODc2Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpIHtcbjI4Nzc6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfY29tbWl0X2NoYXJnZV9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCxcbjI4Nzg6XHRcdFx0XHRcdFx0XHQgIGZvbGlvKTtcbjI4Nzk6XHRcdH1cbjI4ODA6XHRcbjI4ODE6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg4MjpcdFxuMjg4MzpcdFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG4yODg0Olx0XHQvKlxuMjg4NTpcdFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxuMjg4NjpcdFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxuMjg4NzpcdFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXG4yODg4Olx0XHQgKi9cbjI4ODk6XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuMjg5MDpcdFxuMjg5MTpcdFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4yODkyOlx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yODkzOlx0XHRcdC8qXG4yODk0Olx0XHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuMjg5NTpcdFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4yODk2Olx0XHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbjI4OTc6XHRcdFx0ICovXG4yODk4Olx0XHRcdC8qXG4yODk5Olx0XHRcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZVxuMjkwMDpcdFx0XHQgKiBvciBjaGFyZ2UgYSBodWdlIHBhZ2UuIElmIGEgc3RhbmRhcmQgKFBBR0VfU0laRSlcbjI5MDE6XHRcdFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXG4yOTAyOlx0XHRcdCAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uXG4yOTAzOlx0XHRcdCAqIHJldHJ5LiBIb3dldmVyLCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9ucywgdGhlIE9PTVxuMjkwNDpcdFx0XHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxuMjkwNTpcdFx0XHQgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvXG4yOTA2Olx0XHRcdCAqIHRoZSAjUEYgaGFuZGxlciwgY2F1c2luZyBpdCB0byBsb29wIGluZGVmaW5pdGVseVxuMjkwNzpcdFx0XHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXG4yOTA4Olx0XHRcdCAqL1xuMjkwOTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbjI5MTA6XHRcdH1cbjI5MTE6XHRcbjI5MTI6XHRcdHJldHVybiBmb2xpbztcbjI5MTM6XHRcbjI5MTQ6XHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwOlxuMjkxNTpcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwKGlkeCwgbnJfcGFnZXMsIGhfY2cpO1xuMjkxNjpcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDpcbjI5MTc6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZClcbjI5MTg6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkKTtcbjI5MTk6XHRcbjI5MjA6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4yOTIxOlx0fVxuMjkyMjpcdFxuMjkyMzpcdHR5cGVkZWYgZW51bSB7XG4yOTI0Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgdHdvIGNoYW5nZXMgaW4gdGhlIGRpZmYuIFRoZSBmaXJzdCBpcyBhIHJlcGxhY2VtZW50OiBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtgIGlzIG5vdyBgZm9saW9fcHV0KGZvbGlvKTtgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgc2hpZnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzIOKAkyBwZXJoYXBzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZT8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gYGZvbGlvX3B1dGAgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuIFNlY29uZCwgdGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGZhaWxzIHdpdGggYC1FTk9NRU1gLiBQcmV2aW91c2x5LCBpdCByZXR1cm5lZCBgRVJSX1BUUigtRU5PTUVNKWAsIGJ1dCBub3cgaXQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuIFRoaXMgc2lnbmFscyBhIHBvdGVudGlhbCBkaXN0aW5jdGlvbiBpbiB0aGUgbmF0dXJlIG9mIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUuIGAtRU5PTUVNYCB1c3VhbGx5IGluZGljYXRlcyBhIG1vcmUgZ2VuZXJhbCBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpbGUgYC1FTk9TUENgIG1vcmUgc3BlY2lmaWNhbGx5IHBvaW50cyB0byBhIGxhY2sgb2Ygc3BhY2Ugd2l0aGluIGEgc3BlY2lmaWMgcmVzb3VyY2UsIGxpa2UgdGhlIG1lbW9yeSBjZ3JvdXAuIEdpdmVuIHRoZSBuYXR1cmUgb2YgaHVnZXRsYiwgdGhlIGNoYW5nZSB0byBgLUVOT1NQQ2AgbWlnaHQgYmUgYSBiZXR0ZXIgZml0LCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgd2lkZXIgc3lzdGVtIGJlaGF2aW9yIHRvIGJlIGNlcnRhaW4uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byBzZWUgKmhvdyogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBTZWVpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNsdWVzIGFib3V0IHRoZSBpbXBhY3Qgb2YgdGhlc2UgdHdvIGNoYW5nZXMgYW5kIGlmIHRoZXkgbWFrZSBzZW5zZSB0b2dldGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgZm9saW9fcHV0YCB2ZXJzdXMgYGZyZWVfaHVnZV9mb2xpb2AgaW4gdGhlIGNvbnRleHQgb2YgKnRob3NlKiBzcGVjaWZpYyBjYWxsaW5nIGxvY2F0aW9ucywgYW5kIGNvbmZpcm0gdGhlIGNoYW5nZSB0byBgLUVOT1NQQ2AgaXMgYXBwcm9wcmlhdGUuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXG4tLVxubW0vaHVnZXRsYi5jLTI4MjYtICovXG5tbS9odWdldGxiLmM6MjgyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0yODI4LVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4tLVxubW0vaHVnZXRsYi5jPTI5NDk9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMDMyLVxubW0vaHVnZXRsYi5jOjMwMzM6XHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0zMDM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBIdWdlIFBhZ2VzKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2VzLiBUaGUgaW1tZWRpYXRlIHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGUgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGZ1bmN0aW9uLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBpdCwgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBpdC4gSXQmIzM5O3MgY3J1Y2lhbCwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBBbmQgb2YgY291cnNlLCBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBpbiBpc29sYXRpb24uIEkgKmhhdmUqIHRvIGZvbGxvdyBpdHMgY2FsbHMuIFdoZXJlIGlzIHRoaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxsZXJzIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGZvciBnZXR0aW5nIHRoZSBmdWxsIHBpY3R1cmUuIFRoYXQmIzM5O3MgbXkgbmV4dCBzdGVwLCB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDMwOlx0XHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuMzAzMTpcdFx0fTtcbjMwMzI6XHRcbjMwMzM6XHRcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuMzAzNDpcdFxuMzAzNTpcdFx0bXBvbF9jb25kX3B1dChtcG9sKTtcbjMwMzY6XHRcbjMwMzc6XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4zMDM4Olx0XHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuMzAzOTpcdFx0XHRnb3RvIG91dF9zdWJwb29sX3B1dDtcbjMwNDA6XHRcdH1cbjMwNDE6XHRcbjMwNDI6XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHNwb29sKTtcbjMwNDM6XHRcbjMwNDQ6XHRcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHtcbjMwNDU6XHRcdFx0LyogY29tbWl0KCkgaXMgb25seSBuZWVkZWQgaWYgdGhlIG1hcF9jaGcgaXMgbm90IGVuZm9yY2VkICovXG4zMDQ2Olx0XHRcdHJldHZhbCA9IHZtYV9jb21taXRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcbjMwNDc6XHRcdFx0LypcbjMwNDg6XHRcdFx0ICogQ2hlY2sgZm9yIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gV2hlbiBpdCBoYXBwZW5zLi5cbjMwNDk6XHRcdFx0ICogVGhlIHBhZ2Ugd2FzIGFkZGVkIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgYmV0d2VlblxuMzA1MDpcdFx0XHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXG4zMDUxOlx0XHRcdCAqIFRoaXMgaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcy5cbjMwNTI6XHRcdFx0ICogQWRqdXN0IGZvciB0aGUgc3VicG9vbCBjb3VudCBpbmNyZW1lbnRlZCBhYm92ZSBBTkRcbjMwNTM6XHRcdFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlx0QWxzbyxcbjMwNTQ6XHRcdFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xuMzA1NTpcdFx0XHQgKiBubyBsb25nZXIgYXBwbGllcy5cbjMwNTY6XHRcdFx0ICovXG4zMDU3Olx0XHRcdGlmICh1bmxpa2VseShtYXBfY2hnID09IE1BUF9DSEdfTkVFREVEIFx1MDAyNlx1MDAyNiByZXR2YWwgPT0gMCkpIHtcbjMwNTg6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG4zMDU5Olx0XG4zMDYwOlx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbjMwNjE6XHRcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbjMwNjI6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDYzOlx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9fcnN2ZChcbjMwNjQ6XHRcdFx0XHQgICAgaHN0YXRlX2luZGV4KGgpLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBmb2xpbyk7XG4zMDY1Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDY2Olx0XHRcdH1cbjMwNjc6XHRcdH1cbjMwNjg6XHRcbjMwNjk6XHRcdHJldHVybiBmb2xpbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA1MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgSHVnZXRsYiBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5zIGAtRU5PTUVNYCwgc2lnbmFsaW5nIGFuIG91dC1vZi1tZW1vcnkgY29uZGl0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGZvbGxvd2VkIGJ5IHJldHVybmluZyBgLUVOT01FTWAuIE5vdywgaXQmIzM5O3MgY2hhbmdlZCB0byBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybmluZyBgLUVOT1NQQ2AuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBjaGFuZ2UgZnJvbSBkaXJlY3QgZnJlZWluZyB0byBgZm9saW9fcHV0YC4gQWgsIHJpZ2h0LCBodWdldGxiIGZvbGlvcyBhcmUgcmVmZXJlbmNlIGNvdW50ZWQuIERpcmVjdCBmcmVlaW5nLCBgZnJlZV9odWdlX2ZvbGlvYCwgY291bGQgYnlwYXNzIGVzc2VudGlhbCBkZXN0cnVjdG9yIGxvZ2ljIG9yIHRoZSBpbnRlbmRlZCByZWZjb3VudCBiZWhhdmlvciDigJMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBwcm9ibGVtcyBpZiB0aGUgcmVmY291bnQgd2FzIGFscmVhZHkgYXQgb25lLiBUaGUgcmVhc29uIGZvciBgLUVOT1NQQ2AgaW5zdGVhZCBvZiBgLUVOT01FTWAgaXMgaW50ZXJlc3RpbmcuIFRoZSBodWdldGxiIHBhZ2UgZmF1bHQgaGFuZGxpbmcgaW50ZXJwcmV0cyB0aGUgb2xkIGAtRU5PTUVNYCBhcyBhIFZNX0ZBVUxUX09PTSwgd2hpY2ggdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wIHNpbmNlIHRoZSBPT00ga2lsbGVyIGlzbiYjMzk7dCBpbnZva2VkIGZvciBodWdldGxiIHBhZ2VzLiBSZXR1cm5pbmcgYC1FTk9TUENgLCB3aGljaCBtYXBzIHRvIFZNX0ZBVUxUX1NJR0JVUywgc2VuZHMgYSBTSUdCVVMgdG8gdXNlcnNwYWNlLCBwcmV2ZW50aW5nIHRoZSBpbmZpbml0ZSBsb29wLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgdG8gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCjEuICBBcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2U/IE5vLCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZSBoZXJlLgoKMi4gIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIG5vdCBpbiB0aGlzIGNoYW5nZS4KCjMuICBJcyB0aGVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vLCB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4gZWl0aGVyLgoKNC4gIEFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBub3RoaW5nIHJlbGV2YW50IHRvIG91ciBhbmFseXNpcy4KCjUuICBEb2VzIHRoaXMgY2hhbmdlIGhhdmUgYW4gaW1wYWN0IG9uIEtNU0FOIHZzLiBLQVNBTj8gSXQmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gY2dyb3VwIGVycm9yIGhhbmRsaW5nIGZvciBodWdldGxiLiBUaGUgY2hhbmdlIHJlc29sdmVzIGEgcmV0dXJuIGNvZGUgaXNzdWUgKC1FTk9NRU0gdG8gLUVOT1NQQykgYW5kIHVzZXMgYGZvbGlvX3B1dGAgZm9yIGNsZWFudXAuIEFueSBwcm9ibGVtcyBoZXJlIHdvdWxkIHN0ZW0gZnJvbSBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50aW5nLCBwYWdlIGZyZWVpbmcsIG9yIGVycm9yIGNvZGUgbG9naWMgYnVncy4gVGhvc2UgdHlwZXMgb2YgaXNzdWVzIGZhbGwgdW5kZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRlY2huaXF1ZXM6IEtBU0FOLCBgcmVmY291bnRfdGAsIGBsb2NrZGVwYCBldGMuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFraW5nLiBObywgdGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZSBhdCBhbGwuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgZmFsc2UgaGVyZS4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCB0aGUgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBgaHVnZXRsYl9hbGxvY19mb2xpbygpYCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFNwZWNpZmljYWxseSwgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgY2FsbCB0byBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAgd2l0aCBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBmcm9tIGAtRU5PTUVNYCB0byBgLUVOT1NQQ2AgKHByZXZlbnRpbmcgaW5maW5pdGUgcGFnZS1mYXVsdCByZXRyaWVzIG9uIGh1Z2V0bGIgYWxsb2NhdGlvbnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyByZWZlcmVuY2UgY291bnRpbmcgLyBmb2xpbyBmcmVlaW5nIG1lY2hhbmljcyBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2svaGVhcCBidWZmZXJzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByZWZjb3VudCBpbWJhbGFuY2VzIG9yIHJlc291cmNlIGxlYWtzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIHJlZmVyZW5jZSBjb3VudGluZyAvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTiwgbm90IEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjozOS4yODc5MDUwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzgwOTAxMDI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBfSFVHRVRMQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcmVmZXJlbmNlIGNvdW50aW5nIC8gZm9saW8gZnJlZWluZyBtZWNoYW5pY3MgYW5kIGVycm9yIGNvZGUgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmVmY291bnQgaW1iYWxhbmNlcyBvciByZXNvdXJjZSBsZWFrcykgZmFsbCB1bmRlciBzdGFuZGFyZCByZWZlcmVuY2UgY291bnRpbmcgLyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS0FTQU4sIG5vdCBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKCkgZmFpbHMgaW4gaHVnZXRsYl9hbGxvY19mb2xpbygpLiBJdCByZXBsYWNlcyBkaXJlY3QgZnJlZV9odWdlX2ZvbGlvKCkgd2l0aCBmb2xpb19wdXQoKSBhbmQgcmV0dXJucyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZnJvbSBsb29waW5nIGluZmluaXRlbHkgcmV0cnlpbmcgb24gVk1fRkFVTFRfT09NLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIHBhZ2UgZmF1bHRzIHVuZGVyIG1lbW9yeSBjZ3JvdXAgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjozOS4yODc5MTA1MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTA3NTEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRmNDg5ZmVkZjBiYmFiYTA5ODgwZWJmNTg1ZjE0NjRiOTUwZDgwMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi45N2MwNmYyMjdlZjhhIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yODIzLDcgKzI4MjMsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuICAqXFxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cXG4gICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuXFxuLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxcbiAgKi9cXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG5AQCAtMjg5MCwxMyArMjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XFxuIFxcbiBcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4tXFx0XFx0ZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuIFxcdFxcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cXG4gXFx0XFx0ICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmV0dXJuIC1FTk9TUEMgd2hlbiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGFsbG9jYXRlXFxuK1xcdFxcdCAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKVxcbitcXHRcXHQgKiBwYWdlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBPT00ga2lsbGVyIGlzIGdpdmVuIGFcXG4rXFx0XFx0ICogY2hhbmNlIHRvIHJ1biwgd2hpY2ggbWF5IHJlc29sdmUgdGhlIGZhaWx1cmUgb25cXG4rXFx0XFx0ICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NXFxuK1xcdFxcdCAqIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkLiAgUmV0dXJuaW5nIC1FTk9NRU0gKG9yXFxuK1xcdFxcdCAqIGFueXRoaW5nIHJlc3VsdGluZyBpbiBWTV9GQVVMVF9PT00pIHdvdWxkIGxlYWsgdG9cXG4rXFx0XFx0ICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5XFxuK1xcdFxcdCAqIHJldHJ5aW5nIHRoZSBmYXVsdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZm9saW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjM5Ljc3MzcxMjA2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjU4ODM4Mjc3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQX0hVR0VUTEJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKCkgZmFpbHMgaW4gaHVnZXRsYl9hbGxvY19mb2xpbygpLiBJdCByZXBsYWNlcyBkaXJlY3QgZnJlZV9odWdlX2ZvbGlvKCkgd2l0aCBmb2xpb19wdXQoKSBhbmQgcmV0dXJucyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZnJvbSBsb29waW5nIGluZmluaXRlbHkgcmV0cnlpbmcgb24gVk1fRkFVTFRfT09NLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIHBhZ2UgZmF1bHRzIHVuZGVyIG1lbW9yeSBjZ3JvdXAgbGltaXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZjQ4OWZlZGYwYmJhYmEwOTg4MGViZjU4NWYxNDY0Yjk1MGQ4MDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMDoyMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uOTdjMDZmMjI3ZWY4YSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMjgyMyw3ICsyODIzLDYgQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuICAqXG4gICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuICAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLlxuLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxuICAqL1xuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG5AQCAtMjg5MCwxMyArMjg4OSwyNCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuIFxuIFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4tXHRcdGZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdC8qXG4gXHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuIFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4gXHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHRcdC8qXG4rXHRcdCAqIFJldHVybiAtRU5PU1BDIHdoZW4gdGhpcyBmdW5jdGlvbiBmYWlscyB0byBhbGxvY2F0ZVxuK1x0XHQgKiBvciBjaGFyZ2UgYSBodWdlIHBhZ2UuIElmIGEgc3RhbmRhcmQgKFBBR0VfU0laRSlcbitcdFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXG4rXHRcdCAqIGNoYW5jZSB0byBydW4sIHdoaWNoIG1heSByZXNvbHZlIHRoZSBmYWlsdXJlIG9uXG4rXHRcdCAqIHJldHJ5LiBIb3dldmVyLCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9ucywgdGhlIE9PTVxuK1x0XHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxuK1x0XHQgKiBhbnl0aGluZyByZXN1bHRpbmcgaW4gVk1fRkFVTFRfT09NKSB3b3VsZCBsZWFrIHRvXG4rXHRcdCAqIHRoZSAjUEYgaGFuZGxlciwgY2F1c2luZyBpdCB0byBsb29wIGluZGVmaW5pdGVseVxuK1x0XHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiBcdH1cbiBcbiBcdHJldHVybiBmb2xpbztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjM5Ljc3MzcxMzQ2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2OTQzNzQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCB3aGVyZSBpdCdzIHNpdHVhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIGtlcm5lbC4gVGhlIHRhcmdldCBpcyBgbW0vaHVnZXRsYi5jYCDigJMgdGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiB3b3JrbG9hZHMgdGhhdCBkZW1hbmQgbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIEknbGwgbmVlZCB0byByZWFkIHRoZSBkaWZmIG1ldGljdWxvdXNseSwgYnV0IEkgd29uJ3QganVzdCBsb29rIGF0IHRoZSBsaW5lIGNoYW5nZXMgaW4gaXNvbGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGxvZ2ljIGZsb3cgKmFyb3VuZCogdGhlIG1vZGlmaWNhdGlvbnMsIGFuZCBob3cgdGhpcyBwYXRjaCBwb3RlbnRpYWxseSBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcyB3aXRoaW4gdGhlIGBodWdldGxiYCBzdWJzeXN0ZW0uIE9ubHkgdGhlbiBjYW4gSSBmb3JtIGEgY29tcHJlaGVuc2l2ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjo0NC40NjgwOTE2MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4NzA6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4yODcxOlxcdFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbjI4NzI6XFx0XFx0fVxcbjI4NzM6XFx0XFxuMjg3NDpcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlKGlkeCwgbnJfcGFnZXMsIGhfY2csIGZvbGlvKTtcXG4yODc1OlxcdFxcbjI4NzY6XFx0XFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XFxuMjg3NzpcXHRcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxcbjI4Nzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuMjg3OTpcXHRcXHR9XFxuMjg4MDpcXHRcXG4yODgxOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuMjg4NDpcXHRcXHQvKlxcbjI4ODU6XFx0XFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbjI4ODY6XFx0XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbjI4ODc6XFx0XFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuMjg4ODpcXHRcXHQgKi9cXG4yODg5OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xcbjI4OTA6XFx0XFxuMjg5MTpcXHRcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4yODkyOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjg5MzpcXHRcXHRcXHQvKlxcbjI4OTQ6XFx0XFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuMjg5NTpcXHRcXHRcXHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXFxuMjg5NjpcXHRcXHRcXHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXFxuMjg5NzpcXHRcXHRcXHQgKi9cXG4yODk4OlxcdFxcdFxcdC8qXFxuMjg5OTpcXHRcXHRcXHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcXG4yOTAwOlxcdFxcdFxcdCAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKVxcbjI5MDE6XFx0XFx0XFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXFxuMjkwMjpcXHRcXHRcXHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxcbjI5MDM6XFx0XFx0XFx0ICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NXFxuMjkwNDpcXHRcXHRcXHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxcbjI5MDU6XFx0XFx0XFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xcbjI5MDY6XFx0XFx0XFx0ICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5XFxuMjkwNzpcXHRcXHRcXHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXFxuMjkwODpcXHRcXHRcXHQgKi9cXG4yOTA5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI5MTA6XFx0XFx0fVxcbjI5MTE6XFx0XFxuMjkxMjpcXHRcXHRyZXR1cm4gZm9saW87XFxuMjkxMzpcXHRcXG4yOTE0OlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA6XFxuMjkxNTpcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgaF9jZyk7XFxuMjkxNjpcXHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6XFxuMjkxNzpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpXFxuMjkxODpcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQpO1xcbjI5MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjQ0LjQ2ODM1ODc0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDI4OTQ0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBodWdldGxiIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgd2UgaGFuZGxlIG91dC1vZi1tZW1vcnkgc2NlbmFyaW9zIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIGNvbnRleHQuXG5cblByZXZpb3VzbHksIGlmIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5lZCBgLUVOT01FTWAsIGluZGljYXRpbmcgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGF0IHRoZSBtZW1jZyBsZXZlbCwgdGhlIGZ1bmN0aW9uIHdvdWxkIGltbWVkaWF0ZWx5IGZyZWUgdGhlIGZvbGlvIHVzaW5nIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCBhbmQgcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIgcmVwcmVzZW50aW5nIHRoZSBgLUVOT01FTWAgZXJyb3IgYmFjayB1cCB0aGUgY2FsbCBzdGFjay4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgYSBmYWlsZWQgYWxsb2Mgd291bGQgYmUgZGlyZWN0bHkgZnJlZWQgdG8gYXZvaWQgbGVha3MuXG5cbk5vdywgdGhpbmdzIGFyZSBkaWZmZXJlbnQuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGJlaGF2aW9yIHRvIGluc3RlYWQgY2FsbCBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybnMgYEVSUl9QVFIoLUVOT1NQQylgLiBUaGlzIHNpZ25hbHMgYSBcIk5vIFNwYWNlXCIgZXJyb3IgaW5zdGVhZC4gSG1tLCBzbyByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBmcmVlaW5nIHRoZSBmb2xpbywgdGhpcyBpcyBhIGNoYW5nZSB0byByZXR1cm4gYW4gZXJyb3IgY29kZSB0aGF0J3MgbW9yZSBpbmRpY2F0aXZlIG9mIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gLS0gc3BhY2UgaXNuJ3QgYXZhaWxhYmxlLCBidXQgbm90IG5lY2Vzc2FyaWx5IHRoYXQgdGhlcmUncyBzaW1wbHkgbm8gbW9yZSBtZW1vcnkuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgcmVsYXRlcyB0byBob3cgbWVtY2dzIHRyYWNrIHJlc291cmNlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGRlZmluaXRpb24gYW5kIGNhbGwgc2l0ZXMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCdzIHN0YXRpYyBvciBleHBvcnRlZCwgYW5kIGFsc28gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gaHVnZXRsYiBhbmQgaHVnZXRsYl9jZ3JvdXAvbWVtY2cgc3VwcG9ydCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXJlIGVsc2UgdGhlIGNvZGUgaXMgY2FsbGVkLCBhbmQgd2hvIHJlbGllcyBvbiBpdHMgcmV0dXJuIHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjI6NDguMTExMjU1MDgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODQ5MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXFxubW0vaHVnZXRsYi5jLTI4MTctICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODI2LSAqL1xcbm1tL2h1Z2V0bGIuYzoyODI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0yODI4LVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTQ5PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDMyLVxcbm1tL2h1Z2V0bGIuYzozMDMzOlxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtMzAzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjI6NDguMTY2MTEwMDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxNDUyMTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGZvciBodWdlIHBhZ2VzLiBUaGUgYmVzdCBzdGFydGluZyBwb2ludCwgbmF0dXJhbGx5LCBpcyB0aGUgY29yZSBoZWFkZXIgZmlsZS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbiwgb3IgYXQgbGVhc3Qgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zLCByZWxhdGVkIHRvIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgdG8gcGluIGRvd24gd2hlcmUgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbiBpcyBkZWNsYXJlZC4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gZ28gb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjo0OS44ODA2MzM5OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDEwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjUwLjAzMjA1MDA3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODU3NDY3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgR2lhbnQgRm9vdHN0ZXBzIG9mIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIGh1Z2UgcGFnZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpbnRlcmFjdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUg4oCTIHRoZSBjYWxsZXJzIG9mICpib3RoKiBmdW5jdGlvbnMsIGFuZCBjcnVjaWFsbHksIGhvdyBwYWdlIGZhdWx0cyBhbmQgbWVtY2cgY2hhcmdpbmcgYXJlIGhhbmRsZWQgd2l0aGluIHRoaXMgY29udGV4dC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHRocmVhZCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgb3JjaGVzdHJhdGVkLlxuXG5UaW1lIHRvIGRpdmUgaW4uIExldCdzIHN0YXJ0IHdpdGggYSBjb21wcmVoZW5zaXZlIHNlYXJjaCBmb3IgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB3aWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cuIEZyb20gdGhlcmUgSSBjYW4gZXhwbG9yZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2Ugcm91dGluZXMgYW5kIHRoZSBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjI6NTIuMzE3ODAwMzMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4NzU1OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMjgxNS0vKipcXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXFxuLS1cXG5tbS9odWdldGxiLmMtMjgyNi0gKi9cXG5tbS9odWdldGxiLmM6MjgyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMjgyOC1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9odWdldGxiLmM9Mjk0OT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAzMi1cXG5tbS9odWdldGxiLmM6MzAzMzpcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XFxubW0vaHVnZXRsYi5jLTMwMzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjU0LjA2NjU2NzY5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE3NDE2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgb2YgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBXaGF0J3MgZHJpdmluZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbj8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIHBhdGhzLCB0aGUgYXJlYXMgb2YgdGhlIGtlcm5lbCB0aGF0IGFyZSAqcmVseWluZyogb24gaHVnZSBwYWdlcywgYW5kIHBhcnRpY3VsYXJseSB0aGUgYWxsb2NhdGlvbiBzaWRlLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHN1YnN5c3RlbXMgYXJlIHB1dHRpbmcgdGhlIHByZXNzdXJlIG9uIHRoZSBodWdlIHBhZ2UgYWxsb2NhdG9yLiBJJ20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGRpZmZlcmVudCB1c2UgY2FzZXMuIFxuXG5JJ20gdGhpbmtpbmc6IGlzIHRoaXMgcHJpbWFyaWx5IG1lbW9yeS1tYXBwZWQgZmlsZSB1c2FnZT8gTlVNQSBwb2xpY2llcz8gU3BlY2lmaWMgZGV2aWNlIGRyaXZlcnM/IE9yIG1heWJlIG1vcmUgZ2VuZXJhbCBrZXJuZWwgYWxsb2NhdGlvbnMgdGhhdCBsZXZlcmFnZSBodWdlIHBhZ2VzIGZvciBwZXJmb3JtYW5jZT8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgc2VxdWVuY2VzPyBJcyBpdCBhbGwgZGlyZWN0IGNhbGxzLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGxheWVycyBvZiBhYnN0cmFjdGlvbiB0aGF0IG5lZWQgdG8gYmUgZm9sbG93ZWQ/IFVsdGltYXRlbHkgSSdtIHRyeWluZyB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIE1heWJlIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIHRoZSBhbGxvY2F0aW9uIHBhdGhzIG9yIHVuZGVyc3RhbmQgdGhlIGZyYWdtZW50YXRpb24gaXNzdWVzLiBTbywgc3RlcCBvbmUsIEknbGwgbmVlZCB0byB0cmFjZSBhbmQgYW5hbHl6ZSB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIyOjU2LjY4Mzk4Nzc0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMzI0Mzg3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTgxPWFyZSBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXBwaW5nLiAgVGhlIGFsbG9jYXRpb25cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4MjppcyBwZXJmb3JtZWQgd2l0aGluIHRoZSByb3V0aW5lIGFsbG9jX2h1Z2V0bGJfZm9saW8oKTo6XFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODMtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODQ6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg1LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4Ni1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NzphbGxvY19odWdldGxiX2ZvbGlvIGlzIHBhc3NlZCBhIFZNQSBwb2ludGVyIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgc28gaXQgY2FuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODgtY29uc3VsdCB0aGUgcmVzZXJ2YXRpb24gbWFwIHRvIGRldGVybWluZSBpZiBhIHJlc2VydmF0aW9uIGV4aXN0cy4gIEluIGFkZGl0aW9uLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg5OmFsbG9jX2h1Z2V0bGJfZm9saW8gdGFrZXMgdGhlIGFyZ3VtZW50IGF2b2lkX3Jlc2VydmUgd2hpY2ggaW5kaWNhdGVzIHJlc2VydmVzXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xOTAtc2hvdWxkIG5vdCBiZSB1c2VkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGV5IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yMDc9aXMgY2FsbGVkLiAgVGhpcyByb3V0aW5lIHRha2VzIHR3byBhcmd1bWVudHMgcmVsYXRlZCB0byByZXNlcnZhdGlvbnM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwOS0tIGF2b2lkX3Jlc2VydmUsIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUvYXJndW1lbnQgcGFzc2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMTA6ICBhbGxvY19odWdldGxiX2ZvbGlvKCkuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMTEtLSBjaGcsIGV2ZW4gdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgb2YgdHlwZSBsb25nIG9ubHkgdGhlIHZhbHVlcyAwIG9yIDEgYXJlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTI0Nz1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXNlcnZlIG1hcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRoZSBjYWxsXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDg6dG8gdm1hX25lZWRzX3Jlc2VydmF0aW9uKCkgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGxvY19odWdldGxiX2ZvbGlvKCkgYW5kIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ5LWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDY65b2T5LiO6aKE55WZ55u45YWz55qE5beo6aG15Zyo55u45bqU55qE5pig5bCE5Lit6KKr5YiG6YWN5ZKM5a6e5L6L5YyW5pe277yM6aKE55WZ5bCx6KKr5raI6ICX5LqG44CC6K+l5YiG6YWN5piv5Zyo5Ye95pWwYWxsb2NfaHVnZXRsYl9mb2xpby4uLlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0Ny3kuK3ov5vooYznmoQ6OlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0OC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDk6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MjphbGxvY19odWdldGxiX2ZvbGlv6KKr5Lyg6YCS57uZ5LiA5LiqVk1B5oyH6ZKI5ZKM5LiA5Liq6Jma5ouf5Zyw5Z2A77yM5Zug5q2k5a6D5Y+v5Lul5p+l6ZiF6aKE55WZ5pig5bCE5Lul56Gu5a6a5piv5ZCm5a2Y5Zyo6aKE55WZ44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUzOuatpOWklu+8jGFsbG9jX2h1Z2V0bGJfZm9saW/pnIDopoHkuIDkuKrlj4LmlbBhdm9pZF9yZXNlcnZl77yM6K+l5Y+C5pWw6KGo56S65Y2z5L2/55yL6LW35p2l5bey57uP5Li65oyH5a6a55qE5Zyw5Z2A6aKE55WZ5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTU0LemihOeVme+8jOS5n+S4jeW6lOivpeS9v+eUqOmihOeVmeOAgmF2b2lkX3Jlc2VydmXlj4LmlbDmnIDluLjooqvnlKjkuo7lhpnml7bmi7fotJ3lkozpobXpnaLov4Hnp7vnmoTmg4XlhrXkuIvvvIzljbPnjrDmnInpobXpnaLnmoTpop1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE2MD12bWFfbmVlZHNfcmVzZXJ2YXRpb24oKei/lOWbnueahOWAvOmAmuW4uOS4ujDmiJYx44CC5aaC5p6c6K+l5Zyw5Z2A5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MO+8jOWmguaenOS4jeWtmOWcqOmihOeVme+8jOWImeS4ujHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNjY6LSBhdm9pZF9yZXNlcnZl77yM6L+Z5piv5Lyg6YCS57uZYWxsb2NfaHVnZXRsYl9mb2xpbygp55qE5ZCM5LiA5Liq5YC8L+WPguaVsOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2Ny0tIGNoZ++8jOWwveeuoei/meS4quWPguaVsOeahOexu+Wei+aYr2xvbmfvvIzkvYblj6rmnIkw5oiWMeeahOWAvOiiq+S8oOmAkue7mWRlcXVldWVfaHVnZV9wYWdlX3ZtYeOAguWmguaenOivpeWAvOS4ujDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE5Mz1TZXRQYWdlUHJpdmF0ZShwYWdlKeWSjHJlc3ZfaHVnZV9wYWdlcy3jgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwMi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDM65ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDQtdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTItXFx0XFx0ICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzkzOlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZmFsc2UpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5NC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODEzLVxcdFxcdCAqIGZvbGlvX3VubG9jayBiZWNhdXNlIGxvY2tlZCBieSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MTQ6XFx0XFx0ICogZm9saW9fcHV0KCkgZHVlIHRvIHJlZmVyZW5jZSBmcm9tIGFsbG9jX2h1Z2V0bGJfZm9saW8oKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxNS1cXHRcXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwMT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDM6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwNTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA2LVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDctXFx0XFx0XFx0XFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOS1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTIyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEyNS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjctXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEzNDphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNS1cXHRcXHRcXHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTE0MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTE0MTphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExNDItXFx0XFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jPTIxNDI9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjE2NS1cXG5tbS9odWdldGxiLmM6MjE2NjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9odWdldGxiLmMtMjE2Ny1cXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMjE4Ni0vKiBmb2xpbyBtaWdyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gKi9cXG5tbS9odWdldGxiLmM6MjE4NzpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxODgtXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLCBib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI1MjA9c3RhdGljIGxvbmcgdm1hX2RlbF9yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1MjctICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byByZXN0b3JlIHJlc2VydmF0aW9uIGluZm9ybWF0aW9uIG9uIGVycm9yIHBhdGhzLlxcbm1tL2h1Z2V0bGIuYzoyNTI4OiAqIEl0IHNob3VsZCBPTkxZIGJlIGNhbGxlZCBmb3IgZm9saW9zIGFsbG9jYXRlZCB2aWEgYWxsb2NfaHVnZXRsYl9mb2xpbygpLFxcbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIGFuZCB0aGUgaHVnZXRsYiBtdXRleCBzaG91bGQgcmVtYWluIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgcm91dGluZS5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTM0LSAqIDIpIE5vIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBmb3IgdGhlIHBhZ2UsIHNvIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzXFxubW0vaHVnZXRsYi5jOjI1MzU6ICogICAgbm90IHNldC4gIEhvd2V2ZXIsIGFsbG9jX2h1Z2V0bGJfZm9saW8gYWx3YXlzIHVwZGF0ZXMgdGhlIHJlc2VydmUgbWFwLlxcbm1tL2h1Z2V0bGIuYy0yNTM2LSAqXFxuLS1cXG5tbS9odWdldGxiLmMtMjU0My0gKlxcbm1tL2h1Z2V0bGIuYzoyNTQ0OiAqIEluIGNhc2UgMiwgc2ltcGx5IHVuZG8gcmVzZXJ2ZSBtYXAgbW9kaWZpY2F0aW9ucyBkb25lIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uXFxubW0vaHVnZXRsYi5jLTI1NDUtICovXFxubW0vaHVnZXRsYi5jPTI1NDY9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjU3Mi1cXHRcXHRcXHQgKiBUaGlzIGluZGljYXRlcyB0aGVyZSBpcyBhbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZSBtYXBcXG5tbS9odWdldGxiLmM6MjU3MzpcXHRcXHRcXHQgKiBub3QgYWRkZWQgYnkgYWxsb2NfaHVnZXRsYl9mb2xpby4gIFdlIGtub3cgaXQgd2FzIGFkZGVkXFxubW0vaHVnZXRsYi5jOjI1NzQ6XFx0XFx0XFx0ICogYmVmb3JlIHRoZSBhbGxvY19odWdldGxiX2ZvbGlvIGNhbGwsIG90aGVyd2lzZVxcbm1tL2h1Z2V0bGIuYy0yNTc1LVxcdFxcdFxcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHdvdWxkIGJlIHNldCBvbiB0aGUgZm9saW8uXFxuLS1cXG5tbS9odWdldGxiLmM9MjkyMz10eXBlZGVmIGVudW0ge1xcbi0tXFxubW0vaHVnZXRsYi5jLTI5NDgtICovXFxubW0vaHVnZXRsYi5jOjI5NDk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy0yOTUwLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpXFxuLS1cXG5tbS9odWdldGxiLmM9NDg5ND1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9odWdldGxiLmMtNTAxNS1cXHRcXHRcXHRcXHQvKiBEbyBub3QgdXNlIHJlc2VydmUgYXMgaXQncyBwcml2YXRlIG93bmVkICovXFxubW0vaHVnZXRsYi5jOjUwMTY6XFx0XFx0XFx0XFx0bmV3X2ZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBhZGRyLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKElTX0VSUihuZXdfZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NTQ4Nz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZXRsYi5jLTU1NjgtXFx0c3Bpbl91bmxvY2sodm1mLVxcdTAwM2VwdGwpO1xcbm1tL2h1Z2V0bGIuYzo1NTY5OlxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGNvd19mcm9tX293bmVyKTtcXG5tbS9odWdldGxiLmMtNTU3MC1cXG4tLVxcbm1tL2h1Z2V0bGIuYz01NzU5PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01ODI4LVxcbm1tL2h1Z2V0bGIuYzo1ODI5OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01ODMwLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NjAwOT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTYyNDQtICovXFxubW0vaHVnZXRsYi5jOjYyNDU6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtNjI0Ni1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubW0vaHVnZXRsYi5jLTYyNjEtXFx0ICovXFxubW0vaHVnZXRsYi5jOjYyNjI6XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5vZGUsIG5vZGVtYXNrLCBnZnBfbWFzaywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MjYzLVxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuLS1cXG5tbS9odWdldGxiLmM9NjI3Mj1pbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTYzMjgtXFxubW0vaHVnZXRsYi5jOjYzMjk6XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTYzMzAtXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzU0LVxcdFxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MzU1OlxcdFxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoaCwgZHN0X3ZtYSwgZHN0X2FkZHIpO1xcbm1tL2h1Z2V0bGIuYy02MzU2LVxcdFxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02Mzc1LVxcbm1tL2h1Z2V0bGIuYzo2Mzc2OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02Mzc3LVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NjY2OT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3ODktXFx0XFx0XFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcXG5tbS9odWdldGxiLmM6Njc5MDpcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxcbm1tL2h1Z2V0bGIuYy02NzkxLVxcdFxcdFxcdCAqIHRoZSBzdWJwb29sIGFuZCByZXNlcnZlIGNvdW50cyBtb2RpZmllZCBhYm92ZVxcbi0tXFxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuLS1cXG5tbS9tZW1mZC5jLTkzLVxcbm1tL21lbWZkLmM6OTQ6XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG5tbS9tZW1mZC5jLTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0Mzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ1Ni1cXHRcXHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgaWx4LCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoxNDU3OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCwgbm9kZW1hc2ssIGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0xNDU4LVxcdFxcdFxcdFxcdGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soTVJfTUVNUE9MSUNZX01CSU5EKSk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MjE5Nz1zdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMjE0LVxcdFxcdGdmcF9tYXNrID0gaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhoLCBnZnBfbWFzayk7XFxubW0vbWlncmF0ZS5jOjIyMTU6XFx0XFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLFxcbm1tL21pZ3JhdGUuYy0yMjE2LVxcdFxcdFxcdFxcdFxcdFxcdG10Yy1cXHUwMDNlbm1hc2ssIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMjo1OC41MDcyMzc4MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NTkxMTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZVRMQiBBbGxvY2F0aW9uIEZhaWx1cmUgU2NlbmFyaW9zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIEh1Z2VUTEIgc3lzdGVtIGhhbmRsZXMgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkaWZmZXJlbnQgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBuYW1lbHkgYC1FTk9TUENgIGFuZCBgLUVOT01FTWAsIGluIHZhcmlvdXMgY29udGV4dHMuIFRoZSBjcnVjaWFsIHBhcnQgaXMgaG93IHRoZXNlIGVycm9yIGNvZGVzIGFyZSBoYW5kbGVkIGJ5IG90aGVyIGZ1bmN0aW9ucy5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBgLUVOT1NQQ2AgdmVyc3VzIGAtRU5PTUVNYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgLCBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAsIGFuZCBgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlYC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRpZmZlcmVudCBlcnJvciBjb2RlcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBpbiB0aGVzZSByb3V0aW5lcywgYW5kIGlmIHNvLCBob3cuXG5cblRvIGNsYXJpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBzaG91bGQgY29uc3VsdCBgbW0vaHVnZXRsYi5jYC4gTGV0J3MgZm9jdXMgb24gbGluZXMgNTgyMC01ODUwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjAwLjY5MzE1MzA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU4MjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Vk1fVUZGRF9NSVNTSU5HKTtcXG41ODIxOlxcdFxcdFxcdH1cXG41ODIyOlxcdFxcbjU4MjM6XFx0XFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSkge1xcbjU4MjQ6XFx0XFx0XFx0XFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxuNTgyNTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG41ODI2OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjU4Mjc6XFx0XFx0XFx0fVxcbjU4Mjg6XFx0XFxuNTgyOTpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG41ODMwOlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuNTgzMTpcXHRcXHRcXHRcXHQvKlxcbjU4MzI6XFx0XFx0XFx0XFx0ICogUmV0dXJuaW5nIGVycm9yIHdpbGwgcmVzdWx0IGluIGZhdWx0aW5nIHRhc2sgYmVpbmdcXG41ODMzOlxcdFxcdFxcdFxcdCAqIHNlbnQgU0lHQlVTLiAgVGhlIGh1Z2V0bGIgZmF1bHQgbXV0ZXggcHJldmVudHMgdHdvXFxuNTgzNDpcXHRcXHRcXHRcXHQgKiB0YXNrcyBmcm9tIHJhY2luZyB0byBmYXVsdCBpbiB0aGUgc2FtZSBwYWdlIHdoaWNoXFxuNTgzNTpcXHRcXHRcXHRcXHQgKiBjb3VsZCByZXN1bHQgaW4gZmFsc2UgdW5hYmxlIHRvIGFsbG9jYXRlIGVycm9ycy5cXG41ODM2OlxcdFxcdFxcdFxcdCAqIFBhZ2UgbWlncmF0aW9uIGRvZXMgbm90IHRha2UgdGhlIGZhdWx0IG11dGV4LCBidXRcXG41ODM3OlxcdFxcdFxcdFxcdCAqIGRvZXMgYSBjbGVhciB0aGVuIHdyaXRlIG9mIHB0ZSdzIHVuZGVyIHBhZ2UgdGFibGVcXG41ODM4OlxcdFxcdFxcdFxcdCAqIGxvY2suICBQYWdlIGZhdWx0IGNvZGUgY291bGQgcmFjZSB3aXRoIG1pZ3JhdGlvbixcXG41ODM5OlxcdFxcdFxcdFxcdCAqIG5vdGljZSB0aGUgY2xlYXIgcHRlIGFuZCB0cnkgdG8gYWxsb2NhdGUgYSBwYWdlXFxuNTg0MDpcXHRcXHRcXHRcXHQgKiBoZXJlLiAgQmVmb3JlIHJldHVybmluZyBlcnJvciwgZ2V0IHB0bCBhbmQgbWFrZVxcbjU4NDE6XFx0XFx0XFx0XFx0ICogc3VyZSB0aGVyZSByZWFsbHkgaXMgbm8gcHRlIGVudHJ5LlxcbjU4NDI6XFx0XFx0XFx0XFx0ICovXFxuNTg0MzpcXHRcXHRcXHRcXHRpZiAoaHVnZXRsYl9wdGVfc3RhYmxlKGgsIG1tLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG41ODQ0OlxcdFxcdFxcdFxcdFxcdHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7XFxuNTg0NTpcXHRcXHRcXHRcXHRlbHNlXFxuNTg0NjpcXHRcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbjU4NDc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNTg0ODpcXHRcXHRcXHR9XFxuNTg0OTpcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIHZtZi1cXHUwMDNlcmVhbF9hZGRyZXNzKTtcXG41ODUwOlxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuNTg1MTpcXHRcXHRcXHRuZXdfZm9saW8gPSB0cnVlO1xcbjU4NTI6XFx0XFxuNTg1MzpcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB7XFxuNTg1NDpcXHRcXHRcXHRcXHRpbnQgZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywgbWFwcGluZyxcXG41ODU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGdvZmYpO1xcbjU4NTY6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjU4NTc6XFx0XFx0XFx0XFx0XFx0LypcXG41ODU4OlxcdFxcdFxcdFxcdFxcdCAqIGVyciBjYW4ndCBiZSAtRUVYSVNUIHdoaWNoIGltcGxpZXMgc29tZW9uZVxcbjU4NTk6XFx0XFx0XFx0XFx0XFx0ICogZWxzZSBjb25zdW1lZCB0aGUgcmVzZXJ2YXRpb24gc2luY2UgaHVnZXRsYlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzowMC42OTM0MjM1MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4MjI2NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVycm9yIE1hcHBpbmcgaW4gdGhlIFZpcnR1YWwgTWVtb3J5IE1hbmFnZW1lbnQgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHZpcnR1YWwgbWVtb3J5IGZyYW1ld29yayBoYW5kbGVzIGVycm9ycywgc3BlY2lmaWNhbGx5IHRoZSBtYXBwaW5nIG9mIGtlcm5lbCBlcnJvcnMgdG8gVk0gZmF1bHRzLiBJdCBzZWVtcyBsaWtlIHRoZSBmdW5jdGlvbiBgdm1mX2Vycm9yKFBUUl9FUlIoZm9saW8pKWAgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgdHJhbnNsYXRpb24uIEludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGAtRU5PTUVNYCwgdGhlIHN0YW5kYXJkIFwib3V0IG9mIG1lbW9yeVwiIGVycm9yLCBnZXRzIG1hcHBlZCB0byBgVk1fRkFVTFRfT09NYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgbm93IEkgc2VlIHRoYXQgYC1FTk9TUENgLCB0aGUgXCJubyBzcGFjZSBsZWZ0IG9uIGRldmljZVwiIGVycm9yLCBpcyBiZWluZyBtYXBwZWQgdG8gZWl0aGVyIGBWTV9GQVVMVF9TSUdCVVNgIG9yIHBvc3NpYmx5IGBWTV9GQVVMVF9FUlJPUmAuIFRoYXQncyBhIGxpdHRsZSBsZXNzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEknZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBtYXBwaW5nIGlzIGhhcHBlbmluZyB0byBiZSBzdXJlIHdoYXQgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1mX2Vycm9yYCB3b3JrcyBpbnRlcm5hbGx5LiBMZXQncyBnbyBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGB2bWZfZXJyb3JgIHRvIHNlZSBob3cgaXQgbWFrZXMgdGhpcyBkZXRlcm1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MDIuNzc1Njk0MTkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk1ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWZfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00ODE1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3JlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC00ODI0LVxcbmluY2x1ZGUvbGludXgvbW0uaDo0ODI1OnN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfZXJyb3IoaW50IGVycilcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgyNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNDgzNi0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDo0ODM3OiAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbWVyZ2VkIHdpdGggdm1mX2Vycm9yKCkgYWJvdmUsIGJ1dCB3aWxsIG5lZWQgYVxcbmluY2x1ZGUvbGludXgvbW0uaDo0ODM4OiAqIGNhcmVmdWwgYXVkaXQgb2YgYWxsIHZtZl9lcnJvcigpIGNhbGxlcnMuXFxuaW5jbHVkZS9saW51eC9tbS5oLTQ4MzktICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjAyLjg2ODY1ODQ1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4NTc4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYHZtZl9lcnJvcmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L21tLmhgLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBkZWZpbml0aW9uIG9mIGB2bWZfZXJyb3JgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIGtleSByb2xlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHByb2JhYmx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgdmlydHVhbCBtZW1vcnkgZmF1bHRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gZGV0YWlsIHRvLi4uIHdlbGwsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgcG90ZW50aWFsbHkgZGVidWcgYSBwYWdlIGZhdWx0LCBkaWFnbm9zZSBhIG1lbW9yeSBsZWFrLCBvciBjb250cmlidXRlIHRvIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgcmV2ZWFscy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gS25vd2luZyBgdm1mX2Vycm9yYCdzIHNpZ25hdHVyZSwgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgaXQgbG9ncyB3aWxsIHNldCB0aGUgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MDQuNzk3MjM5MjM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDgyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDgyMDpcXHRcXHRjb25zdCBwZ3Byb3RfdCBwcm90ID0gcGdwcm90X2RlY3J5cHRlZChvcmlnX3Byb3QpO1xcbjQ4MjE6XFx0XFxuNDgyMjpcXHRcXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgYWRkciwgcGZuLCBzaXplLCBwcm90KTtcXG40ODIzOlxcdH1cXG40ODI0OlxcdFxcbjQ4MjU6XFx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9lcnJvcihpbnQgZXJyKVxcbjQ4MjY6XFx0e1xcbjQ4Mjc6XFx0XFx0aWYgKGVyciA9PSAtRU5PTUVNKVxcbjQ4Mjg6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcXG40ODI5OlxcdFxcdGVsc2UgaWYgKGVyciA9PSAtRUhXUE9JU09OKVxcbjQ4MzA6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OO1xcbjQ4MzE6XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG40ODMyOlxcdH1cXG40ODMzOlxcdFxcbjQ4MzQ6XFx0LypcXG40ODM1OlxcdCAqIENvbnZlcnQgZXJybm8gdG8gcmV0dXJuIHZhbHVlIGZvciAtXFx1MDAzZXBhZ2VfbWt3cml0ZSgpIGNhbGxzLlxcbjQ4MzY6XFx0ICpcXG40ODM3OlxcdCAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbWVyZ2VkIHdpdGggdm1mX2Vycm9yKCkgYWJvdmUsIGJ1dCB3aWxsIG5lZWQgYVxcbjQ4Mzg6XFx0ICogY2FyZWZ1bCBhdWRpdCBvZiBhbGwgdm1mX2Vycm9yKCkgY2FsbGVycy5cXG40ODM5OlxcdCAqL1xcbjQ4NDA6XFx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9mc19lcnJvcihpbnQgZXJyKVxcbjQ4NDE6XFx0e1xcbjQ4NDI6XFx0XFx0aWYgKGVyciA9PSAwKVxcbjQ4NDM6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0xPQ0tFRDtcXG40ODQ0OlxcdFxcdGlmIChlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MDQuNzk3NTY4OTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Nzc5OTU2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIExpbnV4IEtlcm5lbCBCdWdmaXgqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBJbnRlcmVzdGluZyBmaXguIFNlZW1zIGxpa2UgYSBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgSHVnZVRMQiwgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIG5vdGljZSB0aGF0IHdoZW4gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBoYXBwZW5zIHdpdGhpbiB0aGUgYHZtZl9lcnJvcigpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gYGVycmAgaXMgYC1FTk9NRU1gLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgVk1fRkFVTFRfT09NYC4gVGhhdCdzIHN0YW5kYXJkIGJlaGF2aW9yLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBraWNrZXIsIHdoZW4gZGVhbGluZyB3aXRoIEh1Z2VUTEIgYW5kIHRoaXMgYFZNX0ZBVUxUX09PTWAgaXMgcmV0dXJuZWQgZnJvbSBhIHBhZ2UgZmF1bHQgaGFuZGxlciwgaXQgdHJpZ2dlcnMgYSByZXRyeSwgd2hpY2ggY2FuIGxlYWQgdG8gYmFkIGJlaGF2aW9yIHdpdGggaHVnZSBwYWdlcywgbGlrZSBnZXR0aW5nIHN0dWNrIGluIGEgbG9vcCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBPT00ga2lsbGVyIHJldHJ5IGxvZ2ljIGlzbid0IHRyaWdnZXJlZC5cblxuQW5kIHRoZXJlJ3MgbW9yZS4gUHJldmlvdXNseSwgaWYgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHJldHVybmVkIGAtRU5PTUVNYCwgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIHdhcyBpbmNvcnJlY3RseSBjYWxsaW5nIGBmcmVlX2h1Z2VfZm9saW9gIGRpcmVjdGx5LiBUaGF0J3MgYSByZWQgZmxhZy4gSXQgc2tpcHMgYGZvbGlvX3B1dGAsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYW4gaW5hcHByb3ByaWF0ZSByZWxlYXNlIHBhdGguIE5vdywgdGhlIGZpeCAqY29ycmVjdGx5KiBjYWxscyBgZm9saW9fcHV0YCwgYW5kIHJldHVybnMgYC1FTk9TUENgIGluc3RlYWQuIFRoaXMgaXMgYmV0dGVyLCByaWdodD8gSXQgYXZvaWRzIHRoZSBsb29waW5nIHBhZ2UgZmF1bHQgYW5kIGluc3RlYWQgdHJpZ2dlcnMgYSBTSUdCVVMsIHdoaWNoIGlzIGRlZmluaXRlbHkgcHJlZmVyYWJsZSB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wLlxuXG5TbywgdGhpcyBpcyBhIGNvcmUgTU0gLyBIdWdlVExCIC8gTWVtY2cgZnVuY3Rpb25hbCBidWdmaXguIE1ha2VzIG1lIHdvbmRlciBpZiB0aGlzIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4gSHVnZVRMQiBpcyBkZWZpbml0ZWx5IGEgc3RhbmRhcmQgZmVhdHVyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlICh0aHJvdWdoIGBtbWFwYCB3aXRoIGBNQVBfSFVHRVRMQmAsIGBodWdldGxiZnNgLCBldGMuKS4gSXQncyBlc3BlY2lhbGx5IGxpa2VseSB0byB0cmlnZ2VyIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciB3aGVuIG1lbW9yeSBjZ3JvdXAgbGltaXRzIGFyZSBpbiBwbGFjZSAoYENPTkZJR19IVUdFVExCRlNgLCBgQ09ORklHX0NHUk9VUFNgLCBgQ09ORklHX01FTUNHYCkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgYEtjb25maWdgIHJlcXVpcmVtZW50cyBmb3IgSHVnZVRMQiBhbmQgdGhlIG1lbW9yeSBjZ3JvdXAgaHVnZXRsYiBjaGFyZ2luZyB0byBzZWUgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkLiBJJ2xsIHNlYXJjaCBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19IVUdFVExCRlNgIGFuZCBvdGhlciByZWxhdGVkIGNvbmZpZ3MgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGluIHRoZSByZWxldmFudCBgbW0vS2NvbmZpZ2AgZmlsZS4gTmVlZCB0byBuYWlsIGRvd24gdGhlIHN1cmZhY2UgYXJlYSBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoxMC4yNzU1NjgzMzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTI2NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW98bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MTUtLyoqXFxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MjYtICovXFxubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTI4MjgtXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI4ODItXFxubW0vaHVnZXRsYi5jOjI4ODM6XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxubW0vaHVnZXRsYi5jLTI4ODQtXFx0LypcXG5tbS9odWdldGxiLmMtMjg4NS1cXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxubW0vaHVnZXRsYi5jOjI4ODY6XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbm1tL2h1Z2V0bGIuYy0yODg3LVxcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5NDk9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMwMzItXFxubW0vaHVnZXRsYi5jOjMwMzM6XFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFxcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0zMDM0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjE9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1MjM0OiAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQ0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjQ1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTI0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjEwLjMzMTEwNDI3MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc5ODIwNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSHVnZVRMQiBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgbW0vaHVnZXRsYi5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBidWlsZCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCByaWdodD8gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoYXQgYE1ha2VmaWxlYCBhbmQgc2VlIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgYGh1Z2V0bGIuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgY29tcGlsZXIgZmxhZ3MsIG9iamVjdCBmaWxlIGdlbmVyYXRpb24gcnVsZXMsIGFuZCBob3cgaXQncyBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBgbW1gIG1vZHVsZSwgYW5kIHByb2JhYmx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDU2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTIuMjEwOTI3ODk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA5NzkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxubW0vTWFrZWZpbGU6ODU6b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxcdCs9IGh1Z2V0bGJfdm1lbW1hcC5vXFxubW0vTWFrZWZpbGUtODYtb2JqLSQoQ09ORklHX05VTUEpIFxcdCs9IG1lbXBvbGljeS5vXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDg9ZW5kaWZcXG5tbS9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX0NHUk9VUF9IVUdFVExCKSArPSBodWdldGxiX2Nncm91cC5vXFxubW0vTWFrZWZpbGUtMTEwLW9iai0kKENPTkZJR19HVVBfVEVTVCkgKz0gZ3VwX3Rlc3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoxMi4yNTgwMzQxMDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1ODI4ODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIG5haWwgZG93biB0aGlzIGBIVUdFVExCRlNgIGNvbmZpZyBvcHRpb24uIFdoZXJlJ3MgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgZG9jdW1lbnRhdGlvbj8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgc3RhcnQgd2l0aCBgZnMvS2NvbmZpZ2AgYmVjYXVzZSB0aGUgZmlsZSBzeXN0ZW0gaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBpdC4gSWYgaXQgaXNuJ3QgdGhlcmUsIHRoZW4gYG1tL0tjb25maWdgIGlzIGEgdmVyeSBsaWtlbHkgc2Vjb25kYXJ5IGxvY2F0aW9uLCBnaXZlbiB0aGUgbmF0dXJlIG9mIEh1Z2VUTEIgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgc28gaXQncyBwcm9iYWJseSBwcmV0dHkgaGlnaCB1cCBpbiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVmYXVsdHMsIGRlcGVuZGVuY2llcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBob3cgdG8gY29ycmVjdGx5IHNldCBpdCBmb3IgdGhpcyBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTQuMzE2MzI1MTg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwMDEzNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTUuOTc2MzQ1NjE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODM5MzU4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgc28gSSdtIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgZnMvS2NvbmZpZ2AuIEkga25vdyB0aGF0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBtb3N0IGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIExldCdzIHNlZS4uLiBhcm91bmQgbGluZSAyNTAsIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtb3JlIGdlbmVyYWwgZmlsZXN5c3RlbSBvcHRpb25zIGJlZ2luLCBvciBwZXJoYXBzIHdoZXJlIGEgc3BlY2lmaWMgcmVsZXZhbnQgc2VjdGlvbiBiZWdpbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVsZXZhbnQgc2VjdGlvbiB0byBwYXkgYXR0ZW50aW9uIHRvLiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGdpdmVzIG1lIHdoYXQgSSBuZWVkLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSB0dWNrZWQgYXdheSBhcm91bmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MTguMDYwMjg2MzM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuIDI2NTpcXHRcXHRkZWZhdWx0IG5cXG4gMjY2OlxcdFxcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gMjY3OlxcdFxcdGhlbHBcXG4gMjY4OlxcdFxcdCAgVGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb2ZmLiBTYXkgWSBoZXJlIHRvXFxuIDI2OTpcXHRcXHQgIGVuYWJsZSBIVk8gYnkgZGVmYXVsdC4gSXQgY2FuIGJlIGRpc2FibGVkIHZpYSBodWdldGxiX2ZyZWVfdm1lbW1hcD1vZmZcXG4gMjcwOlxcdFxcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXFxuIDI3MTpcXHRlbmRpZiAjIEhVR0VUTEJGU1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFXFxuIDI3NDpcXHRcXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4gMjc1OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gMjc2OlxcdFxcbiAyNzc6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuIDI3ODpcXHRcXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4gMjc5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoxOC4wNjAzNzM5MjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0NzUzMzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIEtjb25maWcgb3B0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIHRyeWluZyB0byBlbmFibGUgaXQgaWYgdGhlIHVuZGVybHlpbmcgc3VwcG9ydCBpc24ndCB0aGVyZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjb25uZWN0aW9ucyDigJMgYXJlIHRoZXJlIGFueSBvdGhlciBLY29uZmlnIHN5bWJvbHMgdGhhdCBtdXN0IGJlIHNldCBmaXJzdD8gV2hhdCdzIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHRyZWUgdGhhdCBlbmFibGVzIGl0PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBkaXJlY3QgaW5zcGVjdGlvbiBvZiB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLlxuXG5OZXh0LCBJIHdhbnQgdG8gY29uZmlybSBob3cgdGhpcyBpcyBndWFyZGVkIGluIHRoZSBjb2RlLCB3aGF0IGNvbmRpdGlvbnMgYWN0dWFsbHkgbWFrZSBpdCBwYXJ0IG9mIHRoZSBjb21waWxlZCBjb2RlLCBmb3IgZXhhbXBsZSBJIHdpbGwgbmVlZCB0byBjaGVjayB3aGVyZSBpdCBpcyBkZWNsYXJlZC9ndWFyZGVkIGJ5IGAjaWZkZWZgLiBLbm93aW5nIGl0cyBndWFyZGluZyBjb25kaXRpb25zIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoZW4gdGhlIGNvZGUgcGF0aCBhc3NvY2lhdGVkIHdpdGggaXQgaXMgYWN0dWFsbHkgYWN0aXZlLiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGAjaWZkZWZgcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMgd2hlcmUgaXRzIGJlaGF2aW9yIG1pZ2h0IGRpZmZlcj8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZ3VhcmQgYW5kIHRoZSByZXN1bHRpbmcgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25zIGhlbHBzIHRvIGFzc2VzcyBhbmQgZW5zdXJlIHRoYXQgdGhlIGZlYXR1cmUgaXMgYXZhaWxhYmxlIG9yIGNvbmZpZ3VyZWQgYXMgbmVlZGVkIGZvciBteSBzcGVjaWZpYyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjIwLjQwNzkxMTI0OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzOTk1NjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTUzPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MC17XFxuLS1cXG5tbS9odWdldGxiLmM9MjgyNz1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODgyLVxcbm1tL2h1Z2V0bGIuYzoyODgzOlxcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbm1tL2h1Z2V0bGIuYy0yODg0LVxcdC8qXFxubW0vaHVnZXRsYi5jLTI4ODUtXFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbm1tL2h1Z2V0bGIuYzoyODg2OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcXG5tbS9odWdldGxiLmMtMjg4Ny1cXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIzMy0vKipcXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxubW0vbWVtY29udHJvbC5jLTUyMzUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI0NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyNDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoyMi4wNDc4NzM3MTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzOTY1Mzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1lbWNvbnRyb2wuaGAgZm9yIE1lbWNnIERldGFpbHMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMgKGBtZW1jZ2ApLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBoZWFkZXIgZmlsZS4gSXQncyBsaWtlbHkgdGhhdCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGNncm91cHMgYXJlIGNvbmZpZ3VyZWQsIGVuYWJsZWQsIG9yIG90aGVyd2lzZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGhlYWRlciBmaWxlLiBNeSBpbnN0aW5jdCBzYXlzIHRoYXQgbGluZXMgNjY1IGFuZCAxMTU5IGFyZSBrZXkuIEknbGwgcHJvYmFibHkgZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIChgI2lmZGVmIENPTkZJR19NRU1DR2ApIGFyb3VuZCB0aG9zZSBsaW5lIG51bWJlcnMuIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBtZW1jZy1zcGVjaWZpYyBjb2RlIGlzIGFjdGl2ZSBiYXNlZCBvbiBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGFyZWFzIHRvIHNlZSBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZmVhdHVyZXMgYXJlIGV4cG9zZWQgb3IgaGlkZGVuIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkgYXJlIGVuYWJsZWQuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIOKAkyBmaW5kIHRoZSByZWxldmFudCBzb3VyY2UsIHBpbnBvaW50IHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjI0LjE4NzUzMTk2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdCAqIHBhZ2VzIGFjY29yZGluZyB0byBAZ2ZwIGlmIG5lY2Vzc2FyeS4gIElmIEBtbSBpcyBOVUxMLCB0cnkgdG9cXG4gNjUxOlxcdCAqIGNoYXJnZSB0byB0aGUgYWN0aXZlIG1lbWNnLlxcbiA2NTI6XFx0ICpcXG4gNjUzOlxcdCAqIERvIG5vdCB1c2UgdGhpcyBmb3IgZm9saW9zIGFsbG9jYXRlZCBmb3Igc3dhcGluLlxcbiA2NTQ6XFx0ICpcXG4gNjU1OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLiBPdGhlcndpc2UsIGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuXFxuIDY1NjpcXHQgKi9cXG4gNjU3OlxcdHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiA2NTg6XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4gNjU5OlxcdHtcXG4gNjYwOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDY2MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjYyOlxcdFxcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcXG4gNjYzOlxcdH1cXG4gNjY0OlxcdFxcbiA2NjU6XFx0aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG4gNjY2OlxcdFxcbiA2Njc6XFx0aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4gNjY4OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xcbiA2Njk6XFx0XFxuIDY3MDpcXHR2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gNjcxOlxcdFxcbiA2NzI6XFx0LyoqXFxuIDY3MzpcXHQgKiBtZW1fY2dyb3VwX3VuY2hhcmdlIC0gVW5jaGFyZ2UgYSBmb2xpby5cXG4gNjc0OlxcdCAqIEBmb2xpbzogRm9saW8gdG8gdW5jaGFyZ2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjI0LjE4NzY3MDEyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwMDc5MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNZW1jb250cm9sLmgqKlxuXG5BbHJpZ2h0LCBzbyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwb2ludCBoZXJlLCBhbmQgdGhhdCBtZWFucyBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCwgc28gSSdtIGdvaW5nIHRvIGp1bXAgb3ZlciB0byBsaW5lIDExNTAgb2YgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gSXQncyBsaWtlbHkgdGhhdCBhIGtleSBhc3BlY3Qgb2YgaG93IG1lbW9yeSBjb250cm9sIGlzIG1hbmFnZWQgaXMgZGVmaW5lZCB0aGVyZSwgYW5kIGl0J3MgYWx3YXlzIHNtYXJ0IHRvIGRvdWJsZS1jaGVjay4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgcGVyaGFwcyBhIGZ1bmN0aW9uIGNhbGwgcmVsYXRlZCB0byBtZW1vcnkgbGltaXRzLCBvciBtYXliZSBldmVuIGEgc3VidGxlIGRldGFpbCBhYm91dCBob3cgYWNjb3VudGluZyBpcyBoYW5kbGVkIGZvciB0aGF0IHN1YnN5c3RlbS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2Ugd2l0aCB0aGUgY29yZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjI2LjExNzc1MjYzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0NTpcXHR9XFxuMTE0NjpcXHRcXG4xMTQ3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbjExNDk6XFx0e1xcbjExNTA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjExNTE6XFx0fVxcbjExNTI6XFx0XFxuMTE1MzpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjExNTQ6XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4xMTU1OlxcdHtcXG4xMTU2OlxcdFxcdHJldHVybiAwO1xcbjExNTc6XFx0fVxcbjExNTg6XFx0XFxuMTE1OTpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG4xMTYwOlxcdHtcXG4xMTYxOlxcdCAgICAgICAgcmV0dXJuIDA7XFxuMTE2MjpcXHR9XFxuMTE2MzpcXHRcXG4xMTY0OlxcdHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjExNjU6XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IGlkLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbjExNjY6XFx0e1xcbjExNjc6XFx0XFx0cmV0dXJuIDA7XFxuMTE2ODpcXHR9XFxuMTE2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MjYuMTE3ODY4MDQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDU2ODIxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEl0IHNlZW1zIGxpa2UgaXRzIGJlaGF2aW9yIGlzIGRyYXN0aWNhbGx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIG9yIG5vdC4gSWYgTUVNQ0cgaXMgKm9mZiosIHRoZSBmdW5jdGlvbiBqdXN0IHJldHVybnMgMCwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSG93ZXZlciwgd2hlbiBNRU1DRyAqaXMqIGVuYWJsZWQsIHN1ZGRlbmx5IGl0IGNhbiByZXR1cm4gYC1FTk9NRU1gLCBzaWduYWxpbmcgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCB0byBub3RlLiBUaGlzIGNoYW5nZXMgdGhlIGVudGlyZSBmbG93LlxuXG5BbmQsIGFzIGEgc2lkZSB0aG91Z2h0LCBJIHNlZSB0aGF0IHdoZW4gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIGluY2x1ZGVzIGEgY2FsbCB0byBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIEknbGwgd2FudCB0byByZW1lbWJlciB0aGlzIHdoZW4gZGl2aW5nIGRlZXAgaW50byB0aGUgY29kZS5cblxuR2l2ZW4gdGhpcyBjb250ZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHNldC4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXM6IGBpbml0L0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgdmFsdWVzLiBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgTUVNQ0cgZW5hYmxlbWVudCBvbiBIdWdlVExCIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyBkaWZmZXJlbnQgbWVtb3J5IHBvbGljaWVzIGludGVyYWN0IGFuZCBob3cgZXJyb3JzIHByb3BhZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxOTcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzoyOC42NjM1NTI1MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODcxMTE1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjMwLjY1MDY3NDkyNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE0OTAwMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodCBsZWFkcyBtZSB0byBjb25zaWRlciBhbGwgcmVsZXZhbnQgZmFjdG9ycy4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoIGFuZCBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBgQ0dST1VQX0hVR0VUTEJgIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnRlZ3JhdGUgdGhpcyBjb25zaWRlcmF0aW9uIGludG8gdGhlIG92ZXJhbGwgYW5hbHlzaXMgYW5kIGVuc3VyZSB0aGF0IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBhbHNvIGFzc2Vzc2VkIGFsb25nc2lkZSB0aGUgb3RoZXIgY29uc2lkZXJhdGlvbnMgdG8gcHJvdmlkZSB0aGUgbW9zdCBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgZXZhbHVhdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgwNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjMyLjI2NTU3NzE5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mzg5MDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0hVR0VUTEJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyODI9Y29uZmlnIENHUk9VUF9GUkVFWkVSXFxuLS1cXG5pbml0L0tjb25maWctMTI5Mi1cXG5pbml0L0tjb25maWc6MTI5Mzpjb25maWcgQ0dST1VQX0hVR0VUTEJcXG5pbml0L0tjb25maWctMTI5NC1cXHRib29sIFxcXCJIdWdlVExCIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjMzLjk0OTQ3NDY1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk3MDA0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGFyZWEuIEJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIEkgdGhpbmsgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBsaWtlbHkgYXJvdW5kIGxpbmVzIDEwODUgYW5kIDEyOTMuIEknbSBndWVzc2luZyB0aG9zZSBsaW5lcyBwcm9iYWJseSBjb250YWluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgdGhlaXIgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgaWYgdGhvc2UgbGluZXMgcHJvdmlkZSBhbnkgY3JpdGljYWwgaGludHMgYWJvdXQgdGhlIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIG9yIG90aGVyIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgSSdtIHRyeWluZyB0byB1bnRhbmdsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzozNS43NDY0ODE5ODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6MzUuNzQ2NjA3OTM4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjMxMjI0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBLZXJuZWwgQ29uZmlndXJhdGlvbjogQSBTcGVjaWZpYyBGb2N1cyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gdGhpbmtpbmcgd2Ugc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCBsaW5lcyAxMjkwLTEzMDUgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBzb21ldGhpbmcgcmVsZXZhbnQgdG8gb3VyIGN1cnJlbnQgaW52ZXN0aWdhdGlvbiBsdXJraW5nIHdpdGhpbiB0aGF0IGJsb2NrLiBJdCdzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IGhvcGVmdWxseSwgdGhpcyB3aWxsIHlpZWxkIHRoZSBzcGVjaWZpYyBkZXRhaWwgd2UgbmVlZCwgcmF0aGVyIHRoYW4gYSBicm9hZCBzd2VlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjM4LjI2OTczMzEzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFxuMTI5MTpcXHRcXHQgIElmIHlvdSdyZSB1c2luZyBjZ3JvdXAyLCBzYXkgTi5cXG4xMjkyOlxcdFxcbjEyOTM6XFx0Y29uZmlnIENHUk9VUF9IVUdFVExCXFxuMTI5NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIGNvbnRyb2xsZXJcXFwiXFxuMTI5NTpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbjEyOTY6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEyOTc6XFx0XFx0ZGVmYXVsdCBuXFxuMTI5ODpcXHRcXHRoZWxwXFxuMTI5OTpcXHRcXHQgIFByb3ZpZGVzIGEgY2dyb3VwIGNvbnRyb2xsZXIgZm9yIEh1Z2VUTEIgcGFnZXMuXFxuMTMwMDpcXHRcXHQgIFdoZW4geW91IGVuYWJsZSB0aGlzLCB5b3UgY2FuIHB1dCBhIHBlciBjZ3JvdXAgbGltaXQgb24gSHVnZVRMQiB1c2FnZS5cXG4xMzAxOlxcdFxcdCAgVGhlIGxpbWl0IGlzIGVuZm9yY2VkIGR1cmluZyBwYWdlIGZhdWx0LiBTaW5jZSBIdWdlVExCIGRvZXNuJ3RcXG4xMzAyOlxcdFxcdCAgc3VwcG9ydCBwYWdlIHJlY2xhaW0sIGVuZm9yY2luZyB0aGUgbGltaXQgYXQgcGFnZSBmYXVsdCB0aW1lIGltcGxpZXNcXG4xMzAzOlxcdFxcdCAgdGhhdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IFNJR0JVUyBzaWduYWwgaWYgaXQgdHJpZXMgdG8gYWNjZXNzXFxuMTMwNDpcXHRcXHQgIEh1Z2VUTEIgcGFnZXMgYmV5b25kIGl0cyBsaW1pdC4gVGhpcyByZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8ga25vd1xcbjEzMDU6XFx0XFx0ICBiZWZvcmVoYW5kIGhvdyBtdWNoIEh1Z2VUTEIgcGFnZXMgaXQgd291bGQgcmVxdWlyZSBmb3IgaXRzIHVzZS4gVGhlXFxuMTMwNjpcXHRcXHQgIGNvbnRyb2wgZ3JvdXAgaXMgdHJhY2tlZCBpbiB0aGUgdGhpcmQgcGFnZSBscnUgcG9pbnRlci4gVGhpcyBtZWFuc1xcbjEzMDc6XFx0XFx0ICB0aGF0IHdlIGNhbm5vdCB1c2UgdGhlIGNvbnRyb2xsZXIgd2l0aCBodWdlIHBhZ2UgbGVzcyB0aGFuIDMgcGFnZXMuXFxuMTMwODpcXHRcXG4xMzA5OlxcdGNvbmZpZyBDUFVTRVRTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjM4LjI2OTg2NzA4NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzEwOTM3NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlVExCIEFsbG9jYXRpb24gYW5kIEZhdWx0IEhhbmRsaW5nIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgb24gdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbiBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSHVnZVRMQiBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYXMgdGhleSBhcHBlYXIgdG8gYmUgdGhlIGNvcmUgYWxsb2NhdG9ycy4gSSd2ZSB2ZXJpZmllZCB0aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gU2FtZSBnb2VzIGZvciBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYWNjZXNzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZ1enppbmcgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEhVR0VUTEJGU2AgKEh1Z2VUTEIgZmlsZXN5c3RlbSBzdXBwb3J0KSwgYE1FTUNHYCAoTWVtb3J5IENvbnRyb2xsZXIsIGVzc2VudGlhbCBmb3IgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKSwgYW5kIGBDR1JPVVBfSFVHRVRMQmAgKEh1Z2VUTEIgY29udHJvbGxlcikgYXJlIGFsbCBlbmFibGVkLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9ja3MuXG5cblRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyB3aGV0aGVyIHRoaXMgYXJlYSBpcyBcIldvcnRoRnV6emluZ1wiLiBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBXZSdyZSB0YWxraW5nIGFib3V0IGEgc2VyaW91cyBidWcgd2hlcmUgbWVtIGNncm91cCBodWdldGxiIGNoYXJnaW5nIGZhaWx1cmVzIGNhbiBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AgaW4gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciwgdHJpZ2dlcmVkIGJ5IC1FTk9NRU0gYW5kIHJlc3VsdGluZyBpbiBWTV9GQVVMVF9PT00sIGFsb25nIHdpdGggaW5jb3JyZWN0IGZvbGlvIHJlbGVhc2VzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY3JpdGljYWwgZmxhdyBmdXp6aW5nIGlzIGRlc2lnbmVkIHRvIHVuY292ZXIuIEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXQncyByZWFjaGFibGUgaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgZXNwZWNpYWxseSB3aGVuIG1lbW9yeSBjZ3JvdXAgbGltaXRzIGFuZCBodWdldGxiZnMvTUFQX0hVR0VUTEIgcGFnZSBmYXVsdHMgYXJlIGludm9sdmVkLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuXG4xLiAgKipGb2N1c1N5bWJvbHMqKjogYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuXG4yLiAgKipFbmFibGVDb25maWdzKio6IGBIVUdFVExCRlNgLCBgTUVNQ0dgLCBgQ0dST1VQX0hVR0VUTEJgLlxuMy4gICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYFxuNC4gICoqUmVhc29uaW5nKio6IFNvbGlkIGV4cGxhbmF0aW9uIGZvciB2dWxuZXJhYmlsaXR5LlxuXG5Ob3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGlzIHVzZWQgd2l0aCBhbGwgcmVxdWlyZWQgYW5kIHZhbGlkIGFyZ3VtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNTksIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6NDUuNTgwODA5MTc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MjcyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUF9IVUdFVExCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpIGZhaWxzIGluIGh1Z2V0bGJfYWxsb2NfZm9saW8oKS4gSXQgcmVwbGFjZXMgZGlyZWN0IGZyZWVfaHVnZV9mb2xpbygpIHdpdGggZm9saW9fcHV0KCkgYW5kIHJldHVybnMgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZyb20gbG9vcGluZyBpbmZpbml0ZWx5IHJldHJ5aW5nIG9uIFZNX0ZBVUxUX09PTS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBwYWdlIGZhdWx0cyB1bmRlciBtZW1vcnkgY2dyb3VwIGxpbWl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBfSFVHRVRMQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKSBmYWlscyBpbiBodWdldGxiX2FsbG9jX2ZvbGlvKCkuIEl0IHJlcGxhY2VzIGRpcmVjdCBmcmVlX2h1Z2VfZm9saW8oKSB3aXRoIGZvbGlvX3B1dCgpIGFuZCByZXR1cm5zIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmcm9tIGxvb3BpbmcgaW5maW5pdGVseSByZXRyeWluZyBvbiBWTV9GQVVMVF9PT00uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgcGFnZSBmYXVsdHMgdW5kZXIgbWVtb3J5IGNncm91cCBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjQ1LjY1NzU0NDUzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzOTM1OTI3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjQ1LjY1ODA4MTk4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc0Mzg4MTczNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKClgIGZhaWxzIHdpdGggYC1FTk9NRU1gLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBjYWxsIHRvIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYCAocHJldmVudGluZyBpbmZpbml0ZSBwYWdlLWZhdWx0IHJldHJpZXMgb24gaHVnZXRsYiBhbGxvY2F0aW9ucykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcmVmZXJlbmNlIGNvdW50aW5nIC8gZm9saW8gZnJlZWluZyBtZWNoYW5pY3MgYW5kIGVycm9yIGNvZGUgcHJvcGFnYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgdG91Y2gsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgcGFkZGluZywgb3IgdXNlci1zcGFjZSBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmVmY291bnQgaW1iYWxhbmNlcyBvciByZXNvdXJjZSBsZWFrcykgZmFsbCB1bmRlciBzdGFuZGFyZCByZWZlcmVuY2UgY291bnRpbmcgLyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgS0FTQU4sIG5vdCBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY0ODlmZWRmMGJiYWJhMDk4ODBlYmY1ODVmMTQ2NGI5NTBkODAwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6MjI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjk3YzA2ZjIyN2VmOGEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjMsNyArMjgyMyw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTAsMTMgKzI4ODksMjQgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbiBcbiBcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcbitcdFx0ICogb3IgY2hhcmdlIGEgaHVnZSBwYWdlLiBJZiBhIHN0YW5kYXJkIChQQUdFX1NJWkUpXG4rXHRcdCAqIHBhZ2UgYWxsb2NhdGlvbiBmYWlscywgdGhlIE9PTSBraWxsZXIgaXMgZ2l2ZW4gYVxuK1x0XHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxuK1x0XHQgKiByZXRyeS4gSG93ZXZlciwgZm9yIEh1Z2VUTEIgYWxsb2NhdGlvbnMsIHRoZSBPT01cbitcdFx0ICoga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQuICBSZXR1cm5pbmcgLUVOT01FTSAob3JcbitcdFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xuK1x0XHQgKiB0aGUgI1BGIGhhbmRsZXIsIGNhdXNpbmcgaXQgdG8gbG9vcCBpbmRlZmluaXRlbHlcbitcdFx0ICogcmV0cnlpbmcgdGhlIGZhdWx0LlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZm9saW87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzo0NS42NTgwODI4M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTc5MjgzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIGZvciBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBrZXJuZWwgcGF0Y2ggd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBkaXNzZWN0IHRoZSBjb2RlLiBUaGlzIG1lYW5zIGdldHRpbmcgbXkgaGFuZHMgZGlydHkgYW5kIHRha2luZyBhIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbS9odWdldGxiLmNgIHdpdGhpbiB0aGUgYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgZnVuY3Rpb24uIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29sa2l0IGZvciB0aGlzOiBhIHF1aWNrIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzZXNzaW9uIHRvIHB1bGwgdGhlIGZpbGUgYW5kIHN1cnJvdW5kaW5nIGNvZGUgc28gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIGluIGNvbnRleHQuIFRoaXMgd2lsbCBsZXQgbWUgYXNzZXNzIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzo1MS42MzczNjk2MzdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODc1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODc1OlxcdFxcbjI4NzY6XFx0XFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XFxuMjg3NzpcXHRcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxcbjI4Nzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuMjg3OTpcXHRcXHR9XFxuMjg4MDpcXHRcXG4yODgxOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuMjg4NDpcXHRcXHQvKlxcbjI4ODU6XFx0XFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbjI4ODY6XFx0XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbjI4ODc6XFx0XFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuMjg4ODpcXHRcXHQgKi9cXG4yODg5OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xcbjI4OTA6XFx0XFxuMjg5MTpcXHRcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4yODkyOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjg5MzpcXHRcXHRcXHQvKlxcbjI4OTQ6XFx0XFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuMjg5NTpcXHRcXHRcXHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXFxuMjg5NjpcXHRcXHRcXHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXFxuMjg5NzpcXHRcXHRcXHQgKi9cXG4yODk4OlxcdFxcdFxcdC8qXFxuMjg5OTpcXHRcXHRcXHQgKiBSZXR1cm4gLUVOT1NQQyB3aGVuIHRoaXMgZnVuY3Rpb24gZmFpbHMgdG8gYWxsb2NhdGVcXG4yOTAwOlxcdFxcdFxcdCAqIG9yIGNoYXJnZSBhIGh1Z2UgcGFnZS4gSWYgYSBzdGFuZGFyZCAoUEFHRV9TSVpFKVxcbjI5MDE6XFx0XFx0XFx0ICogcGFnZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgT09NIGtpbGxlciBpcyBnaXZlbiBhXFxuMjkwMjpcXHRcXHRcXHQgKiBjaGFuY2UgdG8gcnVuLCB3aGljaCBtYXkgcmVzb2x2ZSB0aGUgZmFpbHVyZSBvblxcbjI5MDM6XFx0XFx0XFx0ICogcmV0cnkuIEhvd2V2ZXIsIGZvciBIdWdlVExCIGFsbG9jYXRpb25zLCB0aGUgT09NXFxuMjkwNDpcXHRcXHRcXHQgKiBraWxsZXIgaXMgbm90IHRyaWdnZXJlZC4gIFJldHVybmluZyAtRU5PTUVNIChvclxcbjI5MDU6XFx0XFx0XFx0ICogYW55dGhpbmcgcmVzdWx0aW5nIGluIFZNX0ZBVUxUX09PTSkgd291bGQgbGVhayB0b1xcbjI5MDY6XFx0XFx0XFx0ICogdGhlICNQRiBoYW5kbGVyLCBjYXVzaW5nIGl0IHRvIGxvb3AgaW5kZWZpbml0ZWx5XFxuMjkwNzpcXHRcXHRcXHQgKiByZXRyeWluZyB0aGUgZmF1bHQuXFxuMjkwODpcXHRcXHRcXHQgKi9cXG4yOTA5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI5MTA6XFx0XFx0fVxcbjI5MTE6XFx0XFxuMjkxMjpcXHRcXHRyZXR1cm4gZm9saW87XFxuMjkxMzpcXHRcXG4yOTE0OlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA6XFxuMjkxNTpcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgaF9jZyk7XFxuMjkxNjpcXHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQ6XFxuMjkxNzpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpXFxuMjkxODpcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQpO1xcbjI5MTk6XFx0XFxuMjkyMDpcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbjI5MjE6XFx0fVxcbjI5MjI6XFx0XFxuMjkyMzpcXHR0eXBlZGVmIGVudW0ge1xcbjI5MjQ6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6NTEuNjM3ODAwMDU3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjQ4NjgxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0d28gY2hhbmdlcyBpbiB0aGUgZGlmZi4gVGhlIGZpcnN0IGlzIGEgcmVwbGFjZW1lbnQ6IGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pO2AgaXMgbm93IGBmb2xpb19wdXQoZm9saW8pO2AuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIHNoaWZ0IGluIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcyDigJMgcGVyaGFwcyBhIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2U/IEknbGwgbmVlZCB0byBsb29rIGludG8gYGZvbGlvX3B1dGAgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuIFNlY29uZCwgdGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGZhaWxzIHdpdGggYC1FTk9NRU1gLiBQcmV2aW91c2x5LCBpdCByZXR1cm5lZCBgRVJSX1BUUigtRU5PTUVNKWAsIGJ1dCBub3cgaXQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuIFRoaXMgc2lnbmFscyBhIHBvdGVudGlhbCBkaXN0aW5jdGlvbiBpbiB0aGUgbmF0dXJlIG9mIHRoZSBhbGxvY2F0aW9uIGZhaWx1cmUuIGAtRU5PTUVNYCB1c3VhbGx5IGluZGljYXRlcyBhIG1vcmUgZ2VuZXJhbCBtZW1vcnkgZXhoYXVzdGlvbiwgd2hpbGUgYC1FTk9TUENgIG1vcmUgc3BlY2lmaWNhbGx5IHBvaW50cyB0byBhIGxhY2sgb2Ygc3BhY2Ugd2l0aGluIGEgc3BlY2lmaWMgcmVzb3VyY2UsIGxpa2UgdGhlIG1lbW9yeSBjZ3JvdXAuIEdpdmVuIHRoZSBuYXR1cmUgb2YgaHVnZXRsYiwgdGhlIGNoYW5nZSB0byBgLUVOT1NQQ2AgbWlnaHQgYmUgYSBiZXR0ZXIgZml0LCBidXQgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBzeXN0ZW0gYmVoYXZpb3IgdG8gYmUgY2VydGFpbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gU2VlaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjbHVlcyBhYm91dCB0aGUgaW1wYWN0IG9mIHRoZXNlIHR3byBjaGFuZ2VzIGFuZCBpZiB0aGV5IG1ha2Ugc2Vuc2UgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYGZvbGlvX3B1dGAgdmVyc3VzIGBmcmVlX2h1Z2VfZm9saW9gIGluIHRoZSBjb250ZXh0IG9mICp0aG9zZSogc3BlY2lmaWMgY2FsbGluZyBsb2NhdGlvbnMsIGFuZCBjb25maXJtIHRoZSBjaGFuZ2UgdG8gYC1FTk9TUENgIGlzIGFwcHJvcHJpYXRlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MjM6NTQuNTAyNjcwNTI3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzMjYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MTUtLyoqXFxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxcbi0tXFxubW0vaHVnZXRsYi5jLTI4MjYtICovXFxubW0vaHVnZXRsYi5jOjI4Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTI4MjgtXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI5NDk9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMwMzItXFxubW0vaHVnZXRsYi5jOjMwMzM6XFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFxcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0zMDM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyMzo1NC42MzcwMDIzNTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0MTQ4MzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBIdWdlIFBhZ2VzKipcblxuT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMuIFRoZSBpbW1lZGlhdGUgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnVuY3Rpb24uIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGl0LCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gaXQuIEl0J3MgY3J1Y2lhbCwgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEFuZCBvZiBjb3Vyc2UsIEkgY2FuJ3QganVzdCBsb29rIGF0IHRoYXQgZnVuY3Rpb24gaW4gaXNvbGF0aW9uLiBJICpoYXZlKiB0byBmb2xsb3cgaXRzIGNhbGxzLiBXaGVyZSBpcyB0aGlzIGBhbGxvY19odWdldGxiX2ZvbGlvYCBiZWluZyBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBiZSB2aXRhbCBmb3IgZ2V0dGluZyB0aGUgZnVsbCBwaWN0dXJlLiBUaGF0J3MgbXkgbmV4dCBzdGVwLCB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjU3LjA3ODQ4ODA2N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMzA6XFx0XFx0XFx0Lm5vZGVtYXNrID0gbm9kZW1hc2ssXFxuMzAzMTpcXHRcXHR9O1xcbjMwMzI6XFx0XFxuMzAzMzpcXHRcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XFxuMzAzNDpcXHRcXG4zMDM1OlxcdFxcdG1wb2xfY29uZF9wdXQobXBvbCk7XFxuMzAzNjpcXHRcXG4zMDM3OlxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuMzAzODpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG4zMDM5OlxcdFxcdFxcdGdvdG8gb3V0X3N1YnBvb2xfcHV0O1xcbjMwNDA6XFx0XFx0fVxcbjMwNDE6XFx0XFxuMzA0MjpcXHRcXHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzcG9vbCk7XFxuMzA0MzpcXHRcXG4zMDQ0OlxcdFxcdGlmIChtYXBfY2hnICE9IE1BUF9DSEdfRU5GT1JDRUQpIHtcXG4zMDQ1OlxcdFxcdFxcdC8qIGNvbW1pdCgpIGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBtYXBfY2hnIGlzIG5vdCBlbmZvcmNlZCAqL1xcbjMwNDY6XFx0XFx0XFx0cmV0dmFsID0gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xcbjMwNDc6XFx0XFx0XFx0LypcXG4zMDQ4OlxcdFxcdFxcdCAqIENoZWNrIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFdoZW4gaXQgaGFwcGVucy4uXFxuMzA0OTpcXHRcXHRcXHQgKiBUaGUgcGFnZSB3YXMgYWRkZWQgdG8gdGhlIHJlc2VydmF0aW9uIG1hcCBiZXR3ZWVuXFxuMzA1MDpcXHRcXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxuMzA1MTpcXHRcXHRcXHQgKiBUaGlzIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBodWdldGxiX3Jlc2VydmVfcGFnZXMuXFxuMzA1MjpcXHRcXHRcXHQgKiBBZGp1c3QgZm9yIHRoZSBzdWJwb29sIGNvdW50IGluY3JlbWVudGVkIGFib3ZlIEFORFxcbjMwNTM6XFx0XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxuMzA1NDpcXHRcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gY291bnQgYWRkZWQgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXFxuMzA1NTpcXHRcXHRcXHQgKiBubyBsb25nZXIgYXBwbGllcy5cXG4zMDU2OlxcdFxcdFxcdCAqL1xcbjMwNTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KG1hcF9jaGcgPT0gTUFQX0NIR19ORUVERUQgXFx1MDAyNlxcdTAwMjYgcmV0dmFsID09IDApKSB7XFxuMzA1ODpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuMzA1OTpcXHRcXG4zMDYwOlxcdFxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuMzA2MTpcXHRcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG4zMDYyOlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMzA2MzpcXHRcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9mb2xpb19yc3ZkKFxcbjMwNjQ6XFx0XFx0XFx0XFx0ICAgIGhzdGF0ZV9pbmRleChoKSwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZm9saW8pO1xcbjMwNjU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjMwNjY6XFx0XFx0XFx0fVxcbjMwNjc6XFx0XFx0fVxcbjMwNjg6XFx0XFxuMzA2OTpcXHRcXHRyZXR1cm4gZm9saW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjIzOjU3LjA3ODg4MDkzN1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDE3OTk3ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEh1Z2V0bGIgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgcmV0dXJucyBgLUVOT01FTWAsIHNpZ25hbGluZyBhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCBmb2xsb3dlZCBieSByZXR1cm5pbmcgYC1FTk9NRU1gLiBOb3csIGl0J3MgY2hhbmdlZCB0byBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybmluZyBgLUVOT1NQQ2AuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBjaGFuZ2UgZnJvbSBkaXJlY3QgZnJlZWluZyB0byBgZm9saW9fcHV0YC4gQWgsIHJpZ2h0LCBodWdldGxiIGZvbGlvcyBhcmUgcmVmZXJlbmNlIGNvdW50ZWQuIERpcmVjdCBmcmVlaW5nLCBgZnJlZV9odWdlX2ZvbGlvYCwgY291bGQgYnlwYXNzIGVzc2VudGlhbCBkZXN0cnVjdG9yIGxvZ2ljIG9yIHRoZSBpbnRlbmRlZCByZWZjb3VudCBiZWhhdmlvciDigJMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBwcm9ibGVtcyBpZiB0aGUgcmVmY291bnQgd2FzIGFscmVhZHkgYXQgb25lLiBUaGUgcmVhc29uIGZvciBgLUVOT1NQQ2AgaW5zdGVhZCBvZiBgLUVOT01FTWAgaXMgaW50ZXJlc3RpbmcuIFRoZSBodWdldGxiIHBhZ2UgZmF1bHQgaGFuZGxpbmcgaW50ZXJwcmV0cyB0aGUgb2xkIGAtRU5PTUVNYCBhcyBhIFZNX0ZBVUxUX09PTSwgd2hpY2ggdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiBpbmZpbml0ZSByZXRyeSBsb29wIHNpbmNlIHRoZSBPT00ga2lsbGVyIGlzbid0IGludm9rZWQgZm9yIGh1Z2V0bGIgcGFnZXMuIFJldHVybmluZyBgLUVOT1NQQ2AsIHdoaWNoIG1hcHMgdG8gVk1fRkFVTFRfU0lHQlVTLCBzZW5kcyBhIFNJR0JVUyB0byB1c2Vyc3BhY2UsIHByZXZlbnRpbmcgdGhlIGluZmluaXRlIGxvb3AuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgdG8gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuMS4gIEFyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZT8gTm8sIHRoYXQncyBub3QgdGhlIGNhc2UgaGVyZS5cblxuMi4gIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIG5vdCBpbiB0aGlzIGNoYW5nZS5cblxuMy4gIElzIHRoZXJlIGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8sIHRoYXQncyBub3QgYSBjb25jZXJuIGVpdGhlci5cblxuNC4gIEFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBub3RoaW5nIHJlbGV2YW50IHRvIG91ciBhbmFseXNpcy5cblxuNS4gIERvZXMgdGhpcyBjaGFuZ2UgaGF2ZSBhbiBpbXBhY3Qgb24gS01TQU4gdnMuIEtBU0FOPyBJdCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGNncm91cCBlcnJvciBoYW5kbGluZyBmb3IgaHVnZXRsYi4gVGhlIGNoYW5nZSByZXNvbHZlcyBhIHJldHVybiBjb2RlIGlzc3VlICgtRU5PTUVNIHRvIC1FTk9TUEMpIGFuZCB1c2VzIGBmb2xpb19wdXRgIGZvciBjbGVhbnVwLiBBbnkgcHJvYmxlbXMgaGVyZSB3b3VsZCBzdGVtIGZyb20gcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZywgcGFnZSBmcmVlaW5nLCBvciBlcnJvciBjb2RlIGxvZ2ljIGJ1Z3MuIFRob3NlIHR5cGVzIG9mIGlzc3VlcyBmYWxsIHVuZGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0ZWNobmlxdWVzOiBLQVNBTiwgYHJlZmNvdW50X3RgLCBgbG9ja2RlcGAgZXRjLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFraW5nLiBObywgdGhpcyBpc24ndCBhIEtNU0FOIGlzc3VlIGF0IGFsbC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlIGhlcmUuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc2LCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI0OjAzLjA5Njg4MTA3MloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2l0aGluIGBtbS9odWdldGxiLmNgLiBTcGVjaWZpY2FsbHksIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWAsIGl0IHJlcGxhY2VzIGEgZGlyZWN0IGNhbGwgdG8gYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgZnJvbSBgLUVOT01FTWAgdG8gYC1FTk9TUENgIChwcmV2ZW50aW5nIGluZmluaXRlIHBhZ2UtZmF1bHQgcmV0cmllcyBvbiBodWdldGxiIGFsbG9jYXRpb25zKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyByZWZlcmVuY2UgY291bnRpbmcgLyBmb2xpbyBmcmVlaW5nIG1lY2hhbmljcyBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2svaGVhcCBidWZmZXJzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByZWZjb3VudCBpbWJhbGFuY2VzIG9yIHJlc291cmNlIGxlYWtzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIHJlZmVyZW5jZSBjb3VudGluZyAvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBLQVNBTiwgbm90IEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBgaHVnZXRsYl9hbGxvY19mb2xpbygpYCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFNwZWNpZmljYWxseSwgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgY2FsbCB0byBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAgd2l0aCBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIGNoYW5nZXMgdGhlIGVycm9yIHJldHVybiB2YWx1ZSBmcm9tIGAtRU5PTUVNYCB0byBgLUVOT1NQQ2AgKHByZXZlbnRpbmcgaW5maW5pdGUgcGFnZS1mYXVsdCByZXRyaWVzIG9uIGh1Z2V0bGIgYWxsb2NhdGlvbnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHJlZmVyZW5jZSBjb3VudGluZyAvIGZvbGlvIGZyZWVpbmcgbWVjaGFuaWNzIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHRvdWNoLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJlZmNvdW50IGltYmFsYW5jZXMgb3IgcmVzb3VyY2UgbGVha3MpIGZhbGwgdW5kZXIgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIC8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIEtBU0FOLCBub3QgS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxmhdz[1] Phase: Succeeded StartedAt: 2026-09-03 00:24:13 +0000 UTC FinishedAt: 2026-09-03 00:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 00:24:13 +0000 UTC FinishedAt: 2026-09-03 00:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2] Phase: Succeeded StartedAt: 2026-09-03 00:24:13 +0000 UTC FinishedAt: 2026-09-03 04:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 00:24:13 +0000 UTC FinishedAt: 2026-09-03 04:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 00:24:13 +0000 UTC FinishedAt: 2026-09-03 00:24:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 00:24:13 +0000 UTC FinishedAt: 2026-09-03 00:24:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxmhdz/series-workflowxmhdz-convert-artifact-2849757878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 00:24:23 +0000 UTC FinishedAt: 2026-09-03 00:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 00:24:23 +0000 UTC FinishedAt: 2026-09-03 00:41:14 +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:*05093e2c-0722-491d-b7d0-35052ca09d5d,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-workflowxmhdz/series-workflowxmhdz-convert-artifact-2849757878/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": "991c2df0-b057-4ea7-a051-09d16ab92f9a", "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-workflowxmhdz/series-workflowxmhdz-build-action-2771190220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 00:24:23 +0000 UTC FinishedAt: 2026-09-03 00:41:04 +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:*05093e2c-0722-491d-b7d0-35052ca09d5d,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-workflowxmhdz/series-workflowxmhdz-convert-artifact-2849757878/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": "991c2df0-b057-4ea7-a051-09d16ab92f9a", "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-workflowxmhdz/series-workflowxmhdz-build-action-2771190220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 00:41:14 +0000 UTC FinishedAt: 2026-09-03 00:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 00:41:14 +0000 UTC FinishedAt: 2026-09-03 00:41:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 00:41:14 +0000 UTC FinishedAt: 2026-09-03 00:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 00:41:14 +0000 UTC FinishedAt: 2026-09-03 00:41:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxmhdz/series-workflowxmhdz-convert-artifact-3312756297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 00:41:24 +0000 UTC FinishedAt: 2026-09-03 00:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 00:41:24 +0000 UTC FinishedAt: 2026-09-03 00:43:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*991c2df0-b057-4ea7-a051-09d16ab92f9a,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-workflowxmhdz/series-workflowxmhdz-build-action-2771190220/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-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 00:43:15 +0000 UTC FinishedAt: 2026-09-03 00:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 00:43:15 +0000 UTC FinishedAt: 2026-09-03 00:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 00:43:15 +0000 UTC FinishedAt: 2026-09-03 01:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 00:43:15 +0000 UTC FinishedAt: 2026-09-03 01:00:04 +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:*05093e2c-0722-491d-b7d0-35052ca09d5d,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-workflowxmhdz/series-workflowxmhdz-convert-artifact-3312756297/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": "8a1dc601-aebb-43dd-bd8d-b19cb47c73eb", "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-workflowxmhdz/series-workflowxmhdz-build-action-930755877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 00:43:15 +0000 UTC FinishedAt: 2026-09-03 00:59:54 +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:*05093e2c-0722-491d-b7d0-35052ca09d5d,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-workflowxmhdz/series-workflowxmhdz-convert-artifact-3312756297/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": "8a1dc601-aebb-43dd-bd8d-b19cb47c73eb", "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-workflowxmhdz/series-workflowxmhdz-build-action-930755877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 01:00:04 +0000 UTC FinishedAt: 2026-09-03 01:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 01:00:04 +0000 UTC FinishedAt: 2026-09-03 01:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 01:00:04 +0000 UTC FinishedAt: 2026-09-03 01:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 01:00:04 +0000 UTC FinishedAt: 2026-09-03 01:01:48 +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:*8a1dc601-aebb-43dd-bd8d-b19cb47c73eb,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-workflowxmhdz/series-workflowxmhdz-build-action-930755877/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-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 01:01:58 +0000 UTC FinishedAt: 2026-09-03 04:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 01:01:58 +0000 UTC FinishedAt: 2026-09-03 04:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"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:*991c2df0-b057-4ea7-a051-09d16ab92f9a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a1dc601-aebb-43dd-bd8d-b19cb47c73eb,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-workflowxmhdz/series-workflowxmhdz-build-action-2771190220/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-workflowxmhdz/series-workflowxmhdz-build-action-930755877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 01:01:58 +0000 UTC FinishedAt: 2026-09-03 01:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 01:01:58 +0000 UTC FinishedAt: 2026-09-03 01:02:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"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-workflowxmhdz/series-workflowxmhdz-convert-artifact-3946205598/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 01:01:58 +0000 UTC FinishedAt: 2026-09-03 01:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:01:58 +0000 UTC FinishedAt: 2026-09-03 01:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 01:01:59 +0000 UTC FinishedAt: 2026-09-03 01:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 01:02:09 +0000 UTC FinishedAt: 2026-09-03 04:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmhdz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG","CGROUP_HUGETLB"],"series_id":"49695114-ad88-4bba-a720-63bce4bfa3ff","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 01:02:09 +0000 UTC FinishedAt: 2026-09-03 04:04:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*991c2df0-b057-4ea7-a051-09d16ab92f9a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a1dc601-aebb-43dd-bd8d-b19cb47c73eb,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-workflowxmhdz/series-workflowxmhdz-build-action-2771190220/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-workflowxmhdz/series-workflowxmhdz-build-action-930755877/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-workflowxmhdz/series-workflowxmhdz-convert-artifact-3946205598/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,}