Name: series-workflowjw7p6 Phase: Succeeded StartedAt: 2026-07-11 15:47:43 +0000 UTC FinishedAt: 2026-07-11 21:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[0] Phase: Succeeded StartedAt: 2026-07-11 15:47:44 +0000 UTC FinishedAt: 2026-07-11 16:17:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 15:47:44 +0000 UTC FinishedAt: 2026-07-11 16:17:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1cd23ca80784223fa2204e16203f754da4e821f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1cd23ca80784223fa2204e16203f754da4e821f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "0f73dc18-9bed-4707-89b1-1ba3ba9ea538" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_setsockopt_hmac_ident", "sctp_auth_ep_set_hmacs", "sctp_association_new", "sctp_make_init", "sctp_make_init_ack", "sctp_auth_asoc_verify_hmac_id" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudCYjMzQ7LAogICAgJiMzNDtzY3RwX2F1dGhfZXBfc2V0X2htYWNzJiMzNDssCiAgICAmIzM0O3NjdHBfYXNzb2NpYXRpb25fbmV3JiMzNDssCiAgICAmIzM0O3NjdHBfbWFrZV9pbml0JiMzNDssCiAgICAmIzM0O3NjdHBfbWFrZV9pbml0X2FjayYjMzQ7LAogICAgJiMzNDtzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZmE0ZmFkMTFhMGFkOGRmNjU2NTQ3ZGEzMzA1OGUzMmNjNjUzN2VkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTY6MTU6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggYWZmZWU0NGJkMzhlMzEuLmNjY2M2NjI1NjFhYWMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5AQCAtMzEyLDcgJiM0MzszMTIsOCBAQCBzdHJ1Y3Qgc2N0cF9jb29raWUge1xuIFxuIFx0X191OCBhdXRoX3JhbmRvbVtzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICYjNDM7XG4gXHRcdFx0IFNDVFBfQVVUSF9SQU5ET01fTEVOR1RIXTtcbi1cdF9fdTggYXV0aF9obWFjc1tTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSAmIzQzOyAyXTtcbiYjNDM7XHRfX3U4IGF1dGhfaG1hY3Nbc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzO1xuJiM0MztcdFx0XHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XG4gXHRfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX01BWF9DSFVOS1NdO1xuIFxuIFx0LyogVGhpcyBpcyBhIHNoaW0gZm9yIG15IHBlZXImIzM5O3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2V0c29ja29wdF9obWFjX2lkZW50JiMzNDssCiAgICAmIzM0O3NjdHBfYXV0aF9lcF9zZXRfaG1hY3MmIzM0OywKICAgICYjMzQ7c2N0cF9hc3NvY2lhdGlvbl9uZXcmIzM0OywKICAgICYjMzQ7c2N0cF9tYWtlX2luaXQmIzM0OywKICAgICYjMzQ7c2N0cF9tYWtlX2luaXRfYWNrJiMzNDssCiAgICAmIzM0O3NjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiBgc3RydWN0IHNjdHBfY29va2llYCBieSBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIGBhdXRoX2htYWNzYCBhcnJheSB0byBwcm9wZXJseSBhY2NvbW1vZGF0ZSBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYCB3aXRoIGBTQ1RQX0FVVEhfTlVNX0hNQUNTYCBlbGVtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZmZlciBvdmVyZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmZhNGZhZDExYTBhZDhkZjY1NjU0N2RhMzMwNThlMzJjYzY1MzdlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDE2OjE1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBhZmZlZTQ0YmQzOGUzMS4uY2NjYzY2MjU2MWFhYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0zMTIsNyAmIzQzOzMxMiw4IEBAIHN0cnVjdCBzY3RwX2Nvb2tpZSB7CiAKIAlfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsKIAkJCSBTQ1RQX0FVVEhfUkFORE9NX0xFTkdUSF07Ci0JX191OCBhdXRoX2htYWNzW1NDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICYjNDM7IDJdOwomIzQzOwlfX3U4IGF1dGhfaG1hY3Nbc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzOwomIzQzOwkJCVNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpXTsKIAlfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX01BWF9DSFVOS1NdOwogCiAJLyogVGhpcyBpcyBhIHNoaW0gZm9yIG15IHBlZXImIzM5O3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNDVFAgQ29va2llIFNpemUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oYC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgc2N0cF9jb29raWVgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXV0aF9obWFjc2AgYXJyYXkgd2l0aGluIGl0LiBJbnRlcmVzdGluZywgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBUaGUgZGlmZiBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYGF1dGhfaG1hY3NgLiBQcmV2aW91c2x5LCBpdCBhcHBlYXJzIHRvIGhhdmUgaW5jbHVkZWQgYW4gZXh0cmEgdHdvIGJ5dGVzLCBidXQgbm93IHRoZXkmIzM5O3JlIGdvbmUuIFRoZSBhcnJheSBzaXplIG5vdyBzZWVtcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgaGVhZGVyIHBsdXMgdGhlIG51bWJlciBvZiBITUFDcywgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBvZiBhIGBfX3UxNmAuIFRoaXMgc3RyaWtlcyBtZSBhcyBhIHJlZmluZW1lbnQsIGFpbWluZyB0byBiZSBtb3JlIHByZWNpc2UgaW4gdGhlIGFsbG9jYXRpb24uCgpUaGlzICpjb3VsZCogYmUgYSBidWcgZml4LCBvciBhbiBvcHRpbWl6YXRpb24uIEl0IGNvdWxkIGFsc28gYmUgYSBzdWJ0bGUgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgY29tcGF0aWJpbGl0eSBvZiBTQ1RQIGNvb2tpZSBleGNoYW5nZS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzZXMgb2YgYGF1dGhfaG1hY3NgIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYnl0ZXMgYXJlIGJlaW5nIGhhbmRsZWQsIHJlYWQsIGFuZCB3cml0dGVuLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGlzIGNoYW5nZSBtaWdodCBpbXBhY3QgZXhpc3RpbmcgY29va2llIHByb2Nlc3NpbmcgbG9naWMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIHVzYWdlIGlzIHZpdGFsIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIG5ldCBwb3NpdGl2ZSBvciBhIHBvdGVudGlhbCByZWdyZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F1dGhfaG1hY3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmM9NTE9c3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX2luaXQoXG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMjYyLVx0LyogU2F2ZSB0aGUgaG1hY3MgYW5kIGNodW5rcyBsaXN0IGludG8gdGhpcyBhc3NvY2lhdGlvbiAqL1xubmV0L3NjdHAvYXNzb2Npb2xhLmM6MjYzOlx0aWYgKGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdClcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI2NDpcdFx0bWVtY3B5KGFzb2MtXHUwMDNlYy5hdXRoX2htYWNzLCBlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QsXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyNjU6XHRcdFx0bnRvaHMoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0LVx1MDAzZXBhcmFtX2hkci5sZW5ndGgpKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI2Ni1cdGlmIChlcC1cdTAwM2VhdXRoX2NodW5rX2xpc3QpXG4tLVxubmV0L3NjdHAvYXV0aC5jPTIyMj1zdGF0aWMgc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqc2N0cF9hdXRoX21ha2VfbG9jYWxfdmVjdG9yKFxuLS1cbm5ldC9zY3RwL2F1dGguYy0yMjgtXHRcdFx0KHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqKWFzb2MtXHUwMDNlYy5hdXRoX2NodW5rcyxcbm5ldC9zY3RwL2F1dGguYzoyMjk6XHRcdFx0KHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqKWFzb2MtXHUwMDNlYy5hdXRoX2htYWNzLCBnZnApO1xubmV0L3NjdHAvYXV0aC5jLTIzMC19XG4tLVxubmV0L3NjdHAvYXV0aC5jPTUwMT1pbnQgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvYXV0aC5jLTUwOS1cbm5ldC9zY3RwL2F1dGguYzo1MTA6XHRobWFjcyA9IChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVx1MDAzZWMuYXV0aF9obWFjcztcbm5ldC9zY3RwL2F1dGguYy01MTEtXHRuX2VsdCA9IChudG9ocyhobWFjcy1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoKSAtXG4tLVxubmV0L3NjdHAvYXV0aC5jPTY4ND1pbnQgc2N0cF9hdXRoX2VwX3NldF9obWFjcyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvYXV0aC5jLTcwNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhtYWNzLVx1MDAzZXNobWFjX251bV9pZGVudHM7IGkmIzQzOyYjNDM7KVxubmV0L3NjdHAvYXV0aC5jOjcwODpcdFx0ZXAtXHUwMDNlYXV0aF9obWFjc19saXN0LVx1MDAzZWhtYWNfaWRzW2ldID1cbm5ldC9zY3RwL2F1dGguYy03MDktXHRcdFx0XHRodG9ucyhobWFjcy1cdTAwM2VzaG1hY19pZGVudHNbaV0pO1xubmV0L3NjdHAvYXV0aC5jOjcxMDpcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoID1cbm5ldC9zY3RwL2F1dGguYy03MTEtXHRcdFx0aHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzO1xuLS1cbm5ldC9zY3RwL2F1dGguYz05MjU9aW50IHNjdHBfYXV0aF9pbml0KHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9zY3RwL2F1dGguYy05MzAtXHQgKi9cbm5ldC9zY3RwL2F1dGguYzo5MzE6XHRpZiAoIWVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCkge1xubmV0L3NjdHAvYXV0aC5jOjkzMjpcdFx0c3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICphdXRoX2htYWNzO1xubmV0L3NjdHAvYXV0aC5jLTkzMy1cbm5ldC9zY3RwL2F1dGguYzo5MzQ6XHRcdGF1dGhfaG1hY3MgPSBremFsbG9jX2ZsZXgoKmF1dGhfaG1hY3MsIGhtYWNfaWRzLFxubmV0L3NjdHAvYXV0aC5jLTkzNS1cdFx0XHRcdFx0ICBTQ1RQX0FVVEhfTlVNX0hNQUNTLCBnZnApO1xubmV0L3NjdHAvYXV0aC5jOjkzNjpcdFx0aWYgKCFhdXRoX2htYWNzKVxubmV0L3NjdHAvYXV0aC5jLTkzNy1cdFx0XHRnb3RvIG5vbWVtO1xuLS1cbm5ldC9zY3RwL2F1dGguYy05NDItXHRcdCAqL1xubmV0L3NjdHAvYXV0aC5jOjk0MzpcdFx0YXV0aF9obWFjcy1cdTAwM2VwYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fSE1BQ19BTEdPO1xubmV0L3NjdHAvYXV0aC5jOjk0NDpcdFx0YXV0aF9obWFjcy1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoID1cbm5ldC9zY3RwL2F1dGguYy05NDUtXHRcdFx0XHRodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICYjNDM7IDIpO1xubmV0L3NjdHAvYXV0aC5jOjk0NjpcdFx0YXV0aF9obWFjcy1cdTAwM2VobWFjX2lkc1swXSA9IGh0b25zKFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpO1xubmV0L3NjdHAvYXV0aC5jOjk0NzpcdFx0ZXAtXHUwMDNlYXV0aF9obWFjc19saXN0ID0gYXV0aF9obWFjcztcbm5ldC9zY3RwL2F1dGguYy05NDgtXHR9XG4tLVxubmV0L3NjdHAvYXV0aC5jLTk2Ny1cdC8qIEZyZWUgYWxsIGFsbG9jYXRpb25zICovXG5uZXQvc2N0cC9hdXRoLmM6OTY4Olx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0KTtcbm5ldC9zY3RwL2F1dGguYy05NjktXHRrZnJlZShlcC1cdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xubmV0L3NjdHAvYXV0aC5jOjk3MDpcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XG5uZXQvc2N0cC9hdXRoLmMtOTcxLVx0ZXAtXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcbi0tXG5uZXQvc2N0cC9hdXRoLmM9OTc1PXZvaWQgc2N0cF9hdXRoX2ZyZWUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwKVxubmV0L3NjdHAvYXV0aC5jLTk3Ni17XG5uZXQvc2N0cC9hdXRoLmM6OTc3Olx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0KTtcbm5ldC9zY3RwL2F1dGguYy05NzgtXHRrZnJlZShlcC1cdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xubmV0L3NjdHAvYXV0aC5jOjk3OTpcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XG5uZXQvc2N0cC9hdXRoLmMtOTgwLVx0ZXAtXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTk4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA0LVx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfY2h1bmtzID0gTlVMTDtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMDU6XHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqYXV0aF9obWFjcyA9IE5VTEw7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA2LVx0c3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJzX3BhcmFtIHNhdDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc3LVx0XHQvKiBBZGQgSE1BQ1MgcGFyYW1ldGVyIGxlbmd0aCBpZiBhbnkgd2VyZSBkZWZpbmVkICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mjc4Olx0XHRhdXRoX2htYWNzID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3M7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mjc5Olx0XHRpZiAoYXV0aF9obWFjcy1cdTAwM2VsZW5ndGgpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjgwOlx0XHRcdGNodW5rc2l6ZSAmIzQzOz0gU0NUUF9QQUQ0KG50b2hzKGF1dGhfaG1hY3MtXHUwMDNlbGVuZ3RoKSk7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjgxLVx0XHRlbHNlXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjgyOlx0XHRcdGF1dGhfaG1hY3MgPSBOVUxMO1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI4My1cbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzU4LVx0XHRcdFx0IGFzb2MtXHUwMDNlYy5hdXRoX3JhbmRvbSk7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MzU5Olx0XHRpZiAoYXV0aF9obWFjcylcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNjA6XHRcdFx0c2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfaG1hY3MtXHUwMDNlbGVuZ3RoKSxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNjE6XHRcdFx0XHRcdGF1dGhfaG1hY3MpO1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTM2Mi1cdFx0aWYgKGF1dGhfY2h1bmtzKVxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0zNzE9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzc4LVx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfcmFuZG9tID0gTlVMTDtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNzk6XHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqYXV0aF9obWFjcyA9IE5VTEw7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzgwLVx0c3RydWN0IHNjdHBfY2h1bmsgKnJldHZhbCA9IE5VTEw7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTQ0My1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDQ6XHRcdGF1dGhfaG1hY3MgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilhc29jLVx1MDAzZWMuYXV0aF9obWFjcztcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDU6XHRcdGlmIChhdXRoX2htYWNzLVx1MDAzZWxlbmd0aClcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDY6XHRcdFx0Y2h1bmtzaXplICYjNDM7PSBTQ1RQX1BBRDQobnRvaHMoYXV0aF9obWFjcy1cdTAwM2VsZW5ndGgpKTtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy00NDctXHRcdGVsc2Vcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDg6XHRcdFx0YXV0aF9obWFjcyA9IE5VTEw7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNDQ5LVxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy01MDYtXHRcdFx0XHQgYXV0aF9yYW5kb20pO1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjUwNzpcdFx0aWYgKGF1dGhfaG1hY3MpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NTA4Olx0XHRcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBudG9ocyhhdXRoX2htYWNzLVx1MDAzZWxlbmd0aCksXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NTA5Olx0XHRcdFx0XHRhdXRoX2htYWNzKTtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy01MTAtXHRcdGlmIChhdXRoX2NodW5rcylcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz02OTYwPXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTY5NzItXG5uZXQvc2N0cC9zb2NrZXQuYzo2OTczOlx0aG1hY3MgPSBlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3Q7XG5uZXQvc2N0cC9zb2NrZXQuYy02OTc0LVx0ZGF0YV9sZW4gPSBudG9ocyhobWFjcy1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoKSAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogU0NUUCBDb29raWUgU2l6ZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBzb21ldGhpbmcgaW4gdGhlIGBzY3RwX2Nvb2tpZWAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIGBhdXRoX2htYWNzYCBhcnJheS4gVGhlIG9yaWdpbmFsIHNpemUgY2FsY3VsYXRpb24gd2FzIGEgYml04oCmIHdlbGwsIGxldCYjMzk7cyBqdXN0IHNheSBpdCBsb29rcyBhIGxpdHRsZSBzdXNwaWNpb3VzLCBhbmQgbm93IHRoZXkmIzM5O3ZlIGNoYW5nZWQgaXQuIEl0IHdhcyBwcmV2aW91c2x5IGNvbXB1dGVkIGFzIGBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSAmIzQzOyAyYC4gTm93IGl04oCZcyBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzOyBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgc2l6ZSBpbmNyZWFzZSDigJMgZWZmZWN0aXZlbHksIGl0JiMzOTtzIGFkZGluZyBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdoaWNoIGlzIDQgYnl0ZXMsIG1pbnVzIHRoZSBvcmlnaW5hbCAyLCBzbyBhIG5ldCBpbmNyZWFzZSBvZiAyIGJ5dGVzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgKndoeSo/JiMzNDsuIFRoaXMgc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIHNvbWUgZm9ybSBvZiBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXR5LCBwb3RlbnRpYWxseSBhIHN1YnRsZSBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUuIEl0JiMzOTtzIGxpa2VseSBmaXhpbmcgc29tZSBzdHJ1Y3QgbGF5b3V0IHByb2JsZW0gaW4gdGhlIGV4aXN0aW5nIGNvZGViYXNlIHRoYXQgaGFzIGJlZW4gZXhwb3NlZCByZWNlbnRseS4KClRoZSBpbmNsdXNpb24gb2YgYHN0cnVjdCBzY3RwX3BhcmFtaGRyYCBpcyB0aGUga2V5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIHdoYXQgdGhhdCBoZWFkZXIgY29udGFpbnMuIFdoYXQgYWJvdXQgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWA/IElzIHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gc3VwcG9ydGluZyBuZXcgSE1BQyBhbGdvcml0aG1zIG9yIHNvbWUga2luZCBvZiBwYXJhbWV0ZXIgaGFuZGxpbmcgZHVyaW5nIGF1dGhlbnRpY2F0aW9uPyBMZXQgbWUgZXhhbWluZSB0aG9zZSB0d28gc3RydWN0dXJlcyBpbiBkZXRhaWwsIGFuZCB0aGVuIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgZml4aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzY3RwX3BhcmFtaGRyIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2N0cC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2N0cC5oPTEyNT1lbnVtIHsgU0NUUF9DSFVOS19GTEFHX1QgPSAweDAxIH07XG4tLVxuaW5jbHVkZS9saW51eC9zY3RwLmgtMTU0LVxuaW5jbHVkZS9saW51eC9zY3RwLmg6MTU1OnN0cnVjdCBzY3RwX3BhcmFtaGRyIHtcbmluY2x1ZGUvbGludXgvc2N0cC5oLTE1Ni1cdF9fYmUxNiB0eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTQ1RQIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGFyb3VuZCBsaW5lIDE1NSBpbiBgaW5jbHVkZS9saW51eC9zY3RwLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sJiMzOTtzIGhlYWRlciBtYWdpYyBzaG91bGQgYmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0cnVjdHVyYWwgYmx1ZXByaW50cyBmb3IgaG93IFNDVFAgbWVzc2FnZXMgYXJlIGZvcm1hdHRlZCwgaG93IGNodW5rIHR5cGVzIGFyZSBkZWZpbmVkLCBhbmQgbWF5YmUgZXZlbiBzb21lIGtleSBmbGFncyBvciBjb250cm9sIGluZm9ybWF0aW9uLiBUaGlzIGhlYWRlciBmaWxlIHdpbGwgbGlrZWx5IGxheSB0aGUgZ3JvdW5kd29yayBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgYXNwZWN0cyBvZiBTQ1RQIGNvbW11bmljYXRpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NjdHAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0LyogUkZDIDI5NjBcbiAxNTI6XHQgKiBTZWN0aW9uIDMuMi4xIE9wdGlvbmFsL1ZhcmlhYmxlLWxlbmd0aCBQYXJtYWV0ZXIgRm9ybWF0LlxuIDE1MzpcdCAqL1xuIDE1NDpcdFxuIDE1NTpcdHN0cnVjdCBzY3RwX3BhcmFtaGRyIHtcbiAxNTY6XHRcdF9fYmUxNiB0eXBlO1xuIDE1NzpcdFx0X19iZTE2IGxlbmd0aDtcbiAxNTg6XHR9O1xuIDE1OTpcdFxuIDE2MDpcdGVudW0gc2N0cF9wYXJhbSB7XG4gMTYxOlx0XG4gMTYyOlx0XHQvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy41ICovXG4gMTYzOlx0XHRTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPXHRcdD0gY3B1X3RvX2JlMTYoMSksXG4gMTY0Olx0XHQvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4yLjEgKi9cbiAxNjU6XHRcdFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTXHRcdFx0PSBjcHVfdG9fYmUxNig1KSxcbiAxNjY6XHRcdFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTXHRcdFx0PSBjcHVfdG9fYmUxNig2KSxcbiAxNjc6XHRcdFNDVFBfUEFSQU1fU1RBVEVfQ09PS0lFXHRcdFx0PSBjcHVfdG9fYmUxNig3KSxcbiAxNjg6XHRcdFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlNcdD0gY3B1X3RvX2JlMTYoOCksXG4gMTY5Olx0XHRTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkVcdFx0PSBjcHVfdG9fYmUxNig5KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlNDVFAgUGFyYW1ldGVyIEhlYWRlciBTaXplKioKClJpZ2h0LCBzbyB0aGUgYHN0cnVjdCBzY3RwX3BhcmFtaGRyYCBpcyBkZWZpbml0aXZlbHkgNCBieXRlcy4gR290IHRoYXQuIE5vdywgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBvbGQgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYGF1dGhfaG1hY3NgLiBJdCB3YXMgYFNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICYjNDM7IDJgLiBPa2F5LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBpc3N1ZSBpcyB0aGF0IEkgbmVlZCB0byBiZSBzdXJlIHdoYXQgYFNDVFBfQVVUSF9OVU1fSE1BQ1NgICppcyouIE15IGh1bmNoIGlzIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIEhNQUNzLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBxdWlja2x5LiBJJiMzOTtsbCBzZWFyY2ggZm9yIGl0cyBkZWZpbml0aW9uIGFuZCB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaD00MTU9ZW51bSB7XG4tLVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjMtI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9NQVhcdF9fU0NUUF9BVVRIX0hNQUNfTUFYIC0gMVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjQ6I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIFx0X19TQ1RQX0FVVEhfSE1BQ19NQVhcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgX19TQ1RQX0FVVEhfSE1BQ19NQVhgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgX19TQ1RQX0FVVEhfSE1BQ19NQVhgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0FoYSwgYXV0aGVudGljYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEhNQUMsIGFuZCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiYjMzQ7IFRoaXMgaXMgY2xlYXJseSBzb21ldGhpbmcgY2VudHJhbCB0byB0aGUgc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSwgbGlrZWx5IGRlZmluaW5nIHRoZSB1cHBlciBib3VuZCBmb3IgdGhlIGtleSBzaXplIG9yIG90aGVyIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBITUFDIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuCgpNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgcHJvYmFibHkgZGVmaW5lcyB0aGUgbG9uZ2VzdCBwZXJtaXR0ZWQgSE1BQyBrZXksIHRoZSBiaWdnZXN0IGRpZ2VzdCBzaXplLCBvciBwZXJoYXBzIGEgY29uc3RhbnQgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBhdXRoZW50aWNhdGlvbiBzZXR1cCB3aXRoaW4gdGhlIFNDVFAgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBtYXhpbXVtIGlzIGNydWNpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgYWxsb3dzIGZvciBidWZmZXIgYWxsb2NhdGlvbiwgaW5wdXQgdmFsaWRhdGlvbiwgYW5kIHNlY3VyZSBoYW5kbGluZyBvZiB0aGUgYXV0aGVudGljYXRpb24gZGF0YSB3aXRoaW4gU0NUUCBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyB2YWx1ZSBjaG9zZW4gZm9yIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgcmVhc29uLCBvciBpcyBpdCBhIHNlY3VyaXR5LWZvY3VzZWQgbGltaXQgdG8gYXZvaWQgY2VydGFpbiBhdHRhY2tzPyBQZXJoYXBzIGl0JiMzOTtzIHRpZWQgdG8gYW4gZXN0YWJsaXNoZWQgc3RhbmRhcmQsIG9yIGEga25vd24gY29uc3RyYWludC4gVW5kZXJzdGFuZGluZyB0aGlzIG1heGltdW0gaXMgY3JpdGljYWwgZm9yIHNlY3VyZSBjb2RpbmcsIHRlc3RpbmcsIGFuZCBkZWJ1Z2dpbmcgYW55IFNDVFAtYmFzZWQgYXBwbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBSRkNzIGFuZCBzdGFuZGFyZCBkZWZpbml0aW9ucyB0byBzZWUgdGhlIHByZWNpc2UgY29udGV4dCBhbmQgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX1NDVFBfQVVUSF9ITUFDX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg9NDE1PWVudW0ge1xuLS1cbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDE5LVx0U0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2LFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjA6XHRfX1NDVFBfQVVUSF9ITUFDX01BWFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjEtfTtcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDIyLVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjM6I2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9NQVhcdF9fU0NUUF9BVVRIX0hNQUNfTUFYIC0gMVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjQ6I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIFx0X19TQ1RQX0FVVEhfSE1BQ19NQVhcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNDVFAgSE1BQyBBbGdvcml0aG0gUGFyYW1ldGVyIFN0cnVjdHVyZSBTaXplKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBTQ1RQLXJlbGF0ZWQgY29uc3RhbnRzIGFuZCBkb2luZyBzb21lIHF1aWNrIGNhbGN1bGF0aW9ucy4gSXQgc2VlbXMgYF9fU0NUUF9BVVRIX0hNQUNfTUFYYCBhbmQgYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGJvdGggY2xvY2sgaW4gYXQgYSB2YWx1ZSBvZiAzLiBJIHJlbWVtYmVyIHRoZSBvbGQgc2l6ZSBmb3Igc29tZXRoaW5nIHdhcyBjYWxjdWxhdGVkIGFzIGAzICogMiAmIzQzOyAyID0gOGAgYnl0ZXMuIE5vdywgdGhlIG5ldyBzaXplIGlzIGA0ICYjNDM7IDMgKiAyID0gMTBgIGJ5dGVzLgoKSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJIHNob3VsZCBub3cgZXhhbWluZSB0aGUgZGV0YWlscyBvZiBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYC4gTmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aHkgd2UgbmVlZCB0aGUgZXh0cmEgYnl0ZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY3RwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY3RwLmg9MzI5PXN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSB7XG4tLVxuaW5jbHVkZS9saW51eC9zY3RwLmgtMzM0LS8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi9cbmluY2x1ZGUvbGludXgvc2N0cC5oOjMzNTpzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0ge1xuaW5jbHVkZS9saW51eC9zY3RwLmgtMzM2LVx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNDVFAgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFNDVFAgc3R1ZmYgYSBiaXQgYmV0dGVyLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gbG9vayBhdCB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NjdHAuaGAuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzMzUuIEkmIzM5O20gaG9waW5nIHRoYXQgYXJlYSB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gW21lbnRpb24gc3BlY2lmaWMgYXJlYSB5b3UgYXJlIGxvb2tpbmcgZm9yLCBlLmcuLCBjaHVuayB0eXBlcywgYXNzb2NpYXRpb24gbWFuYWdlbWVudCwgZXRjLl0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBbbWVudGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVzLCBkZWZpbmVzLCBvciBmdW5jdGlvbnMgeW91IGFudGljaXBhdGVdLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY3RwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xuIDMzMTpcdFx0X191OCBjaHVua3NbXTtcbiAzMzI6XHR9O1xuIDMzMzpcdFxuIDMzNDpcdC8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi9cbiAzMzU6XHRzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0ge1xuIDMzNjpcdFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xuIDMzNzpcdFx0X19iZTE2IGhtYWNfaWRzW107XG4gMzM4Olx0fTtcbiAzMzk6XHRcbiAzNDA6XHQvKiBSRkMgMjk2MC4gIFNlY3Rpb24gMy4zLjMgSW5pdGlhdGlvbiBBY2tub3dsZWRnZW1lbnQgKElOSVQgQUNLKSAoMik6XG4gMzQxOlx0ICogICBUaGUgSU5JVCBBQ0sgY2h1bmsgaXMgdXNlZCB0byBhY2tub3dsZWRnZSB0aGUgaW5pdGlhdGlvbiBvZiBhbiBTQ1RQXG4gMzQyOlx0ICogICBhc3NvY2lhdGlvbi5cbiAzNDM6XHQgKi9cbiAzNDQ6XHRzdHJ1Y3Qgc2N0cF9pbml0YWNrX2NodW5rIHtcbiAzNDU6XHRcdHN0cnVjdCBzY3RwX2NodW5raGRyIGNodW5rX2hkcjtcbiAzNDY6XHRcdHN0cnVjdCBzY3RwX2luaXRoZHIgaW5pdF9oZHI7XG4gMzQ3Olx0fTtcbiAzNDg6XHRcbiAzNDk6XHQvKiBTZWN0aW9uIDMuMy4zLjEgU3RhdGUgQ29va2llICg3KSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTZWN1cml0eSBWdWxuZXJhYmlsaXR5IGluIFNDVFAgSE1BQyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAuIEl0JiMzOTtzIHN0cnVjdHVyZWQgd2l0aCBhIGBwYXJhbV9oZHJgLCB3aGljaCBpcyA0IGJ5dGVzLCBmb2xsb3dlZCBieSBhIGZsZXhpYmxlIGFycmF5IGNhbGxlZCBgaG1hY19pZHNgIHRoYXQgY29udGFpbnMgYF9fYmUxNmAgZWxlbWVudHMuIElmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgLCB3aGljaCBpcyBjdXJyZW50bHkgc2V0IHRvIDMsIHRoZSB0b3RhbCBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBgNCAmIzQzOyAoMyAqIDIpYCBvciAxMCBieXRlcywgZ2l2ZW4gdGhhdCBlYWNoIGBfX2JlMTZgIGlzIDIgYnl0ZXMuIEJ1dCBob2xkIG9uLCB0aGUgKm9sZCogc2l6aW5nIGNhbGN1bGF0aW9uIHdhcyBvbmx5IGBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSAmIzQzOyAyYCwgd2hpY2ggd29ya3Mgb3V0IHRvIGAzICogMiAmIzQzOyAyID0gOGAgYnl0ZXMuCgpXYWl0IGEgc2Vjb25k4oCmIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBUaGF0IG1lYW5zIHRoZSBvbGQgYWxsb2NhdGlvbiB3YXMgKnRvbyBzbWFsbCogdG8gYWNjb21tb2RhdGUgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHdpdGggdGhyZWUgSE1BQ3MuIFRoYXQgOC1ieXRlIGFsbG9jYXRpb24gd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUgd2hlbmV2ZXIgYGF1dGhfaG1hY3NgIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIHdhcyBhY2Nlc3NlZCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIDMgSE1BQ3MhIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzY2VuYXJpby4KCkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgYXV0aF9obWFjc2AgaXMgdXNlZC4gSSYjMzk7bGwgY2hlY2sgYG5ldC9zY3RwL2F1dGguY2AgYW5kIHRyYWNlIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyB1dGlsaXplZC4gVGhpcyBuZWVkcyBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdXRoX2htYWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2F1dGguYz0yMjI9c3RhdGljIHN0cnVjdCBzY3RwX2F1dGhfYnl0ZXMgKnNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3Rvcihcbi0tXG5uZXQvc2N0cC9hdXRoLmMtMjI4LVx0XHRcdChzdHJ1Y3Qgc2N0cF9jaHVua3NfcGFyYW0gKilhc29jLVx1MDAzZWMuYXV0aF9jaHVua3MsXG5uZXQvc2N0cC9hdXRoLmM6MjI5Olx0XHRcdChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVx1MDAzZWMuYXV0aF9obWFjcywgZ2ZwKTtcbm5ldC9zY3RwL2F1dGguYy0yMzAtfVxuLS1cbm5ldC9zY3RwL2F1dGguYz01MDE9aW50IHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2F1dGguYy01MDktXG5uZXQvc2N0cC9hdXRoLmM6NTEwOlx0aG1hY3MgPSAoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3M7XG5uZXQvc2N0cC9hdXRoLmMtNTExLVx0bl9lbHQgPSAobnRvaHMoaG1hY3MtXHUwMDNlcGFyYW1faGRyLmxlbmd0aCkgLVxuLS1cbm5ldC9zY3RwL2F1dGguYz02ODQ9aW50IHNjdHBfYXV0aF9lcF9zZXRfaG1hY3Moc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2F1dGguYy03MDctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBobWFjcy1cdTAwM2VzaG1hY19udW1faWRlbnRzOyBpJiM0MzsmIzQzOylcbm5ldC9zY3RwL2F1dGguYzo3MDg6XHRcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cdTAwM2VobWFjX2lkc1tpXSA9XG5uZXQvc2N0cC9hdXRoLmMtNzA5LVx0XHRcdFx0aHRvbnMoaG1hY3MtXHUwMDNlc2htYWNfaWRlbnRzW2ldKTtcbm5ldC9zY3RwL2F1dGguYzo3MTA6XHRlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QtXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XG5uZXQvc2N0cC9hdXRoLmMtNzExLVx0XHRcdGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0Mztcbi0tXG5uZXQvc2N0cC9hdXRoLmM9OTI1PWludCBzY3RwX2F1dGhfaW5pdChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIGdmcF90IGdmcClcbi0tXG5uZXQvc2N0cC9hdXRoLmMtOTMwLVx0ICovXG5uZXQvc2N0cC9hdXRoLmM6OTMxOlx0aWYgKCFlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QpIHtcbm5ldC9zY3RwL2F1dGguYzo5MzI6XHRcdHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqYXV0aF9obWFjcztcbm5ldC9zY3RwL2F1dGguYy05MzMtXG5uZXQvc2N0cC9hdXRoLmM6OTM0Olx0XHRhdXRoX2htYWNzID0ga3phbGxvY19mbGV4KCphdXRoX2htYWNzLCBobWFjX2lkcyxcbm5ldC9zY3RwL2F1dGguYy05MzUtXHRcdFx0XHRcdCAgU0NUUF9BVVRIX05VTV9ITUFDUywgZ2ZwKTtcbm5ldC9zY3RwL2F1dGguYzo5MzY6XHRcdGlmICghYXV0aF9obWFjcylcbm5ldC9zY3RwL2F1dGguYy05MzctXHRcdFx0Z290byBub21lbTtcbi0tXG5uZXQvc2N0cC9hdXRoLmMtOTQyLVx0XHQgKi9cbm5ldC9zY3RwL2F1dGguYzo5NDM6XHRcdGF1dGhfaG1hY3MtXHUwMDNlcGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0hNQUNfQUxHTztcbm5ldC9zY3RwL2F1dGguYzo5NDQ6XHRcdGF1dGhfaG1hY3MtXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XG5uZXQvc2N0cC9hdXRoLmMtOTQ1LVx0XHRcdFx0aHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzOyAyKTtcbm5ldC9zY3RwL2F1dGguYzo5NDY6XHRcdGF1dGhfaG1hY3MtXHUwMDNlaG1hY19pZHNbMF0gPSBodG9ucyhTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKTtcbm5ldC9zY3RwL2F1dGguYzo5NDc6XHRcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IGF1dGhfaG1hY3M7XG5uZXQvc2N0cC9hdXRoLmMtOTQ4LVx0fVxuLS1cbm5ldC9zY3RwL2F1dGguYy05NjctXHQvKiBGcmVlIGFsbCBhbGxvY2F0aW9ucyAqL1xubmV0L3NjdHAvYXV0aC5jOjk2ODpcdGtmcmVlKGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XG5uZXQvc2N0cC9hdXRoLmMtOTY5LVx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9jaHVua19saXN0KTtcbm5ldC9zY3RwL2F1dGguYzo5NzA6XHRlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xubmV0L3NjdHAvYXV0aC5jLTk3MS1cdGVwLVx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XG4tLVxubmV0L3NjdHAvYXV0aC5jPTk3NT12b2lkIHNjdHBfYXV0aF9mcmVlKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcClcbm5ldC9zY3RwL2F1dGguYy05NzYte1xubmV0L3NjdHAvYXV0aC5jOjk3NzpcdGtmcmVlKGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XG5uZXQvc2N0cC9hdXRoLmMtOTc4LVx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9jaHVua19saXN0KTtcbm5ldC9zY3RwL2F1dGguYzo5Nzk6XHRlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xubmV0L3NjdHAvYXV0aC5jLTk4MC1cdGVwLVx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDM0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNDVFAgSE1BQyBBbGdvcml0aG0gUGFyYW1ldGVyIEJ1ZmZlciBPdmVyZmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBjYWxsIGluIGBuZXQvc2N0cC9hc3NvY2lvbGEuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgZ29lcyB1cC4gV2UmIzM5O3JlIGNvcHlpbmcgZGF0YSBmcm9tIGBlcC0mZ3Q7YXV0aF9obWFjc19saXN0YCwgd2hpY2ggaXMgYSBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICpgLCBpbnRvIGBhc29jLSZndDtjLmF1dGhfaG1hY3NgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGUgc2l6ZXMuIFRoZSBsZW5ndGggb2YgYGVwLSZndDthdXRoX2htYWNzX2xpc3RgIGlzIGRldGVybWluZWQgYnkgYG50b2hzKGVwLSZndDthdXRoX2htYWNzX2xpc3QtJmd0O3BhcmFtX2hkci5sZW5ndGgpYCwgd2hpY2gsIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nLCBjYW4gZ28gdXAgdG8gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNilgLiAgVGhhdCBhZGRzIHVwIHRvIGEgcG90ZW50aWFsIG9mIDEwIGJ5dGVzLgoKSG93ZXZlciwgYGFzb2MtJmd0O2MuYXV0aF9obWFjc2AgaXMgb25seSBhbGxvY2F0ZWQgZm9yIDggYnl0ZXMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzY2VuYXJpbyEgVGhpcyBgbWVtY3B5YCBjb3VsZCBvdmVyd3JpdGUgdHdvIGJ5dGVzIG9mIGRhdGEgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIHF1ZXN0aW9uIEkgbm93IG5lZWQgdG8gYW5zd2VyIGlzOiBXaGF0IGRhdGEgaXMgc3RvcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBgYXV0aF9obWFjc2AgYnVmZmVyIHdpdGhpbiB0aGUgYHN0cnVjdCBzY3RwX2Nvb2tpZWAgc3RydWN0dXJlPyAgVW5kZXJzdGFuZGluZyB0aGUgc3Vic2VxdWVudCBtZW1vcnkgbGF5b3V0IGlzIGNyaXRpY2FsIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG92ZXJmbG93LiBUaGlzIG5lZWRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcbiAzMDE6XHRcdC8qIElHIFNlY3Rpb24gMi4zNS4zIFxuIDMwMjpcdFx0ICogSW5jbHVkZSB0aGUgc291cmNlIHBvcnQgb2YgdGhlIElOSVQtQUNLXG4gMzAzOlx0XHQgKi9cbiAzMDQ6XHRcdF9fdTE2XHRcdG15X3BvcnQ7XG4gMzA1Olx0XG4gMzA2Olx0XHRfX3U4IHByc2N0cF9jYXBhYmxlO1xuIDMwNzpcdFxuIDMwODpcdFx0LyogUGFkZGluZyBmb3IgZnV0dXJlIHVzZSAqL1xuIDMwOTpcdFx0X191OCBwYWRkaW5nOyAgXHRcdFxuIDMxMDpcdFxuIDMxMTpcdFx0X191MzIgYWRhcHRhdGlvbl9pbmQ7XG4gMzEyOlx0XG4gMzEzOlx0XHRfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MztcbiAzMTQ6XHRcdFx0XHQgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdO1xuIDMxNTpcdFx0X191OCBhdXRoX2htYWNzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MztcbiAzMTY6XHRcdFx0XHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XG4gMzE3Olx0XHRfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX01BWF9DSFVOS1NdO1xuIDMxODpcdFxuIDMxOTpcdFx0LyogVGhpcyBpcyBhIHNoaW0gZm9yIG15IHBlZXImIzM5O3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5XG4gMzIwOlx0XHQgKiBhIGNvcHkgb2YgdGhlIHJhdyBhZGRyZXNzIGxpc3Qgb2YgdGhlIGFzc29jaWF0aW9uLlxuIDMyMTpcdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgcmF3IGFkZHJlc3MgbGlzdCBpcyBzYXZlZCBpbiB0aGVcbiAzMjI6XHRcdCAqIHJhd19hZGRyX2xpc3RfbGVuIGZpZWxkLCB3aGljaCB3aWxsIGJlIHVzZWQgYXQgdGhlIHRpbWUgd2hlblxuIDMyMzpcdFx0ICogdGhlIGFzc29jaWF0aW9uIFRDQiBpcyByZS1jb25zdHJ1Y3RlZCBmcm9tIHRoZSBjb29raWUuXG4gMzI0Olx0XHQgKi9cbiAzMjU6XHRcdF9fdTMyIHJhd19hZGRyX2xpc3RfbGVuO1xuIDMyNjpcdFx0Lyogc3RydWN0IHNjdHBfaW5pdF9jaHVuayBwZWVyX2luaXRbXTsgKi9cbiAzMjc6XHR9O1xuIDMyODpcdFxuIDMyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAzNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIHNlY3VyaXR5IGZpeCBoZXJlLCBhIGJ1ZmZlciBvdmVyZmxvdywgc3BlY2lmaWNhbGx5LiBUaGUga2V5IGlzIHRoZSBzaGlmdCBmcm9tIGBhdXRoX2htYWNzYCB0byBgYXV0aF9jaHVua3NgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGEgdHdvLWJ5dGUgb3ZlcmZsb3cgZnJvbSB0aGUgZm9ybWVyIGNvdWxkIHN0b21wIGFsbCBvdmVyIHRoZSBpbml0aWFsIHR3byBieXRlcyBvZiB0aGUgbGF0dGVyLiBBbmQgc2luY2UgYGF1dGhfY2h1bmtzYCBpcyBhbiBhcnJheSBvZiBgX191OGAsIGFuZCB1c2VkIGFzIGEgYHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqYCwgdGhvc2UgZmlyc3QgdHdvIGJ5dGVzIG9mIGBhdXRoX2NodW5rc2AgYXJlIGFjdHVhbGx5IHRoZSBgdHlwZWAgZmllbGQgb2YgYSBgc2N0cF9wYXJhbWhkcmAuIFNvLCBpZiB0aGUgb3ZlcmZsb3cgaGFwcGVucywgdGhlIGB0eXBlYCBmaWVsZCBvZiBgYXV0aF9jaHVua3NgIGdldHMgY29ycnVwdGVkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguIFZlcnkgZ29vZC4gRml4aW5nIGJ1ZmZlciBvdmVyZmxvd3MgaXMgYWx3YXlzIGEgcHJpb3JpdHkuIEl0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gV2UgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBleHBsb2l0YWJsZSBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbiBvdGhlciB3YXlzLgoKTm93LCBob3cgZG8gd2UgdHJpZ2dlciB0aGlzPyBIb3cgZG8gd2UgcmVhY2ggdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBjb2RlPyBBbHJpZ2h0LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhbiBTQ1RQIGFzc29jaWF0aW9uIGFuZCBzZXQgSE1BQ3MuIFRoZSBjb2RlIHBhdGggdGhhdCBzZXRzIHRoZSBITUFDcyBpcyBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2AsIGFuZCB0aGF0IGdldHMgY2FsbGVkIGZyb20gYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YC4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyB0byBidWlsZCBhIGZ1enppbmcgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9hdXRoX2VwX3NldF9obWFjcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hdXRoLmM9NjYyPWludCBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCBfX3U4IGNodW5rX2lkKVxuLS1cbm5ldC9zY3RwL2F1dGguYy02ODMtLyogQWRkIGhtYWMgaWRlbnRpZmlyZXMgdG8gdGhlIGVuZHBvaW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGhtYWMgaWRzICovXG5uZXQvc2N0cC9hdXRoLmM6Njg0OmludCBzY3RwX2F1dGhfZXBfc2V0X2htYWNzKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbm5ldC9zY3RwL2F1dGguYy02ODUtXHRcdFx0ICAgc3RydWN0IHNjdHBfaG1hY2FsZ28gKmhtYWNzKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTM2MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMzYyOC1cbm5ldC9zY3RwL3NvY2tldC5jOjM2Mjk6XHRyZXR1cm4gc2N0cF9hdXRoX2VwX3NldF9obWFjcyhlcCwgaG1hY3MpO1xubmV0L3NjdHAvc29ja2V0LmMtMzYzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODUzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgSE1BQyBJZGVudGlmaWVyIFNvY2tldCBPcHRpb24qKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIGNsZWFyOiBJJiMzOTttIGZvY3VzaW5nIG9uIHNldHRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBITUFDIGlkZW50aWZpZXIgZm9yIFNDVFAgc29ja2V0cy4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGZ1bmN0aW9uLiBUaGF0IG5hbWUgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCBhc3N1bWUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgbWF5YmUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9yIHRoZSBtYW4gcGFnZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aGluZyB3b3JrcyBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2MDA6XHRcdHJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAsIHZhbC1cdTAwM2VzYXV0aF9jaHVuayk7XG4zNjAxOlx0fVxuMzYwMjpcdFxuMzYwMzpcdC8qXG4zNjA0Olx0ICogNy4xLjE5LiAgR2V0IG9yIHNldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVycyAoU0NUUF9ITUFDX0lERU5UKVxuMzYwNTpcdCAqXG4zNjA2Olx0ICogVGhpcyBvcHRpb24gZ2V0cyBvciBzZXRzIHRoZSBsaXN0IG9mIEhNQUMgYWxnb3JpdGhtcyB0aGF0IHRoZSBsb2NhbFxuMzYwNzpcdCAqIGVuZHBvaW50IHJlcXVpcmVzIHRoZSBwZWVyIHRvIHVzZS5cbjM2MDg6XHQgKi9cbjM2MDk6XHRzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50KHN0cnVjdCBzb2NrICpzayxcbjM2MTA6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX2htYWNhbGdvICpobWFjcyxcbjM2MTE6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4zNjEyOlx0e1xuMzYxMzpcdFx0c3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktXHUwMDNlZXA7XG4zNjE0Olx0XHR1MzIgaWRlbnRzO1xuMzYxNTpcdFxuMzYxNjpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbjM2MTc6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4zNjE4Olx0XG4zNjE5Olx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pKVxuMzYyMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM2MjE6XHRcdG9wdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgb3B0bGVuLCBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pICYjNDM7XG4zNjIyOlx0XHRcdFx0XHRcdCAgICAgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZih1MTYpKTtcbjM2MjM6XHRcbjM2MjQ6XHRcdGlkZW50cyA9IGhtYWNzLVx1MDAzZXNobWFjX251bV9pZGVudHM7XG4zNjI1Olx0XHRpZiAoaWRlbnRzID09IDAgfHwgaWRlbnRzIFx1MDAzZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIHx8XG4zNjI2Olx0XHQgICAgKGlkZW50cyAqIHNpemVvZih1MTYpKSBcdTAwM2UgKG9wdGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9obWFjYWxnbykpKVxuMzYyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM2Mjg6XHRcbjM2Mjk6XHRcdHJldHVybiBzY3RwX2F1dGhfZXBfc2V0X2htYWNzKGVwLCBobWFjcyk7XG4zNjMwOlx0fVxuMzYzMTpcdFxuMzYzMjpcdC8qXG4zNjMzOlx0ICogNy4xLjIwLiAgU2V0IGEgc2hhcmVkIGtleSAoU0NUUF9BVVRIX0tFWSlcbjM2MzQ6XHQgKlxuMzYzNTpcdCAqIFRoaXMgb3B0aW9uIHdpbGwgc2V0IGEgc2hhcmVkIHNlY3JldCBrZXkgd2hpY2ggaXMgdXNlZCB0byBidWlsZCBhblxuMzYzNjpcdCAqIGFzc29jaWF0aW9uIHNoYXJlZCBrZXkuXG4zNjM3Olx0ICovXG4zNjM4Olx0c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9rZXkoc3RydWN0IHNvY2sgKnNrLFxuMzYzOTpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzY3RwX2F1dGhrZXkgKmF1dGhrZXksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNDVFAgSE1BQyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEhNQUNzIGFyZSBoYW5kbGVkIGluIFNDVFAsIGFuZCB0aGUgZmxvdyBpcyBwcmV0dHkgY2xlYXIsIGFjdHVhbGx5LiBUaGUgY29yZSBpcyB0aGUgYFNDVFBfSE1BQ19JREVOVGAgc29ja2V0IG9wdGlvbiwgdGhhdCYjMzk7cyB3aGVyZSB3ZSBzZXQgdXAgdGhlIEhNQUNzIHdlIHdhbnQgdG8gdXNlLiBUaGVuLCBkdXJpbmcgYXNzb2NpYXRpb24gaW5pdGlhbGl6YXRpb24sIHRoZSBzeXN0ZW0gdXNlcyBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCB0byBkbyB0aGUgaGVhdnkgbGlmdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBjb3BpZXMgdGhlIEhNQUMgbGlzdCwgYGVwLSZndDthdXRoX2htYWNzX2xpc3RgICh3aGljaCBJIGFzc3VtZSBpcyBhdCB0aGUgZW5kcG9pbnQgbGV2ZWwpLCB0byB0aGUgYXNzb2NpYXRpb24tc3BlY2lmaWMgc3RydWN0dXJlIGBhc29jLSZndDtjLmF1dGhfaG1hY3NgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHdlIG5lZWQgdGhlIGFzc29jaWF0aW9uIHRvIGhhdmUgaXRzIG93biBsb2NhbCBjb3B5IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLgoKTm93LCB3aGVyZSB0aGlzIGBhc29jLSZndDtjLmF1dGhfaG1hY3NgIHJlYWxseSBnZXRzIGxldmVyYWdlZCBpcyBpbiB0aGUgY29va2llIGdlbmVyYXRpb24gcGhhc2UuIEJvdGggYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2AgdXNlIHRoYXQgYGFzb2MtJmd0O2MuYXV0aF9obWFjc2AgZGF0YS4gVGhhdOKAmXMgaG93IHRoZSBITUFDcyBhcmUgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZSwgZW5zdXJpbmcgYXV0aGVudGljYXRpb24gZHVyaW5nIGFzc29jaWF0aW9uIGVzdGFibGlzaG1lbnQuIEFuZCwganVzdCB0byByb3VuZCBpdCBvdXQsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgIGFsc28gcmVsaWVzIG9uIHRoaXMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uLiBSaWdodCwgc28gdGhhdCYjMzk7cyB0aGUgbG9jYWwgdmVjdG9yIGdlbmVyYXRpb24uCgpTbywgdGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgLiBMZXTigJlzIHNlZSBleGFjdGx5IGhvdyB0aGF0IGNvcHkgaXMgcGVyZm9ybWVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBhc3BlY3RzIEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2Fzc29jaWF0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmM9NDY9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTAtLyogSW5pdGlhbGl6ZSBhIG5ldyBhc3NvY2lhdGlvbiBmcm9tIHByb3ZpZGVkIG1lbW9yeS4gKi9cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjUxOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9pbml0KFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTItXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jPTI4Nj1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9uZXcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI5NS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI5NjpcdGlmICghc2N0cF9hc3NvY2lhdGlvbl9pbml0KGFzb2MsIGVwLCBzaywgc2NvcGUsIGdmcCkpXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTctXHRcdGdvdG8gZmFpbF9pbml0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzb2NpYXRpb24gYW5kIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2tpbmcgdGhpcyBuZXcgU0NUUCBhc3NvY2lhdGlvbiBjcmVhdGlvbi4gVGhlIGBzY3RwX2Fzc29jaWF0aW9uX25ld2AgZnVuY3Rpb24gaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIOKAkyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuOiBuZXcgcmVzb3VyY2UsIGZvbGxvd2VkIGJ5IGluaXRpYWxpemF0aW9uLiBOb3csIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgKnJlcXVpcmVkKiBmb3IgU0NUUCB0byBmdW5jdGlvbiBwcm9wZXJseT8gQW5kIHRoZW4sIHdpdGggYXV0aGVudGljYXRpb24gaW4gdGhlIG1peCwgd2hhdCBhcmUgdGhlIG1hbmRhdG9yeSBwYXJhbWV0ZXJzIGZvciBTQ1RQIEFVVEg/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvcHRpb25zIGlzIGNyaXRpY2FsIHRvIHByb3BlciBhc3NvY2lhdGlvbiBhbmQga2V5IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBzZXR1cCBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU0NUUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXIuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBmaWxlIOKAkyBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgU0NUUCYjMzk7cyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgZ29hbCBoZXJlIGlzbiYjMzk7dCBhIHN1cmZhY2UtbGV2ZWwgc2NhbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCBhbmQgdGhlIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiBTQ1RQJiMzOTtzIGluY2x1c2lvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCB3aGljaCBtaWdodCBiZSBjb25zaWRlcmVkICYjMzQ7YmVzdCBwcmFjdGljZSYjMzQ7IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuIFRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgU0NUUCYjMzk7cyBvcHRpbWFsIHV0aWxpemF0aW9uLiBJIGV4cGVjdCB0byBmaW5kIGNyaXRpY2FsIGZsYWdzIGNvbnRyb2xsaW5nIGZlYXR1cmVzIGxpa2UgbXVsdGktaG9taW5nLCBidW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgY2hlY2tzdW0gb3IgZmxvdyBjb250cm9sIGFsZ29yaXRobXMuIEkgYW0gYWxzbyBnb2luZyB0byBiZSBsb29raW5nIGZvciByZWNlbnQgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3Igc29tZW9uZSBpbiB0aGUgZmllbGQ6CgoqKlNDVFAgQXV0aGVudGljYXRpb24gQ29uZmlndXJhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIFNDVFAgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgcmlnaHQsIGBJUF9TQ1RQYCBpcyB0aGUgbWFpbiBjb25maWcgb3B0aW9uIHRvIGNvbnNpZGVyLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gQnV0IEkmIzM5O20gYWxzbyB0aGlua2luZywgaXMgdGhhdCAqYWxsKiB0aGVyZSBpcz8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggU0NUUCBhdXRoZW50aWNhdGlvbi4gSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIHNldHRpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHNwZWNpZmljYWxseT8gT3IgbWF5YmUgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGFjdGl2ZT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgbmVlZCB0byBmYWN0b3IgaW50byB0aGUgY29uZmlndXJhdGlvbiBwbGFuLiBOZWVkIHRvIGJlIHN1cmUgYWxsIGFzcGVjdHMgb2YgdGhlIHNldHVwIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1RQX0FVVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg5MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipTQ1RQIEF1dGhlbnRpY2F0aW9uOiBBIFF1aWNrIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IFNDVFAgYW5kIHNwZWNpZmljYWxseSwgYXV0aGVudGljYXRpb24uIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSBpc24mIzM5O3QgYSBkZWRpY2F0ZWQgYFNDVFBfQVVUSGAgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhlIGtlcm5lbCBjb25maWcsIHdoaWNoIGlzLi4uIGludGVyZXN0aW5nLiBJdCBzZWVtcyB0aGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb25hbGl0eSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbmV2ZXIgYElQX1NDVFBgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBkZXBhcnR1cmUgZnJvbSBob3cgc29tZSBvdGhlciBwcm90b2NvbHMgaGFuZGxlIHNpbWlsYXIgZmVhdHVyZXMsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMuCgpIb2xkIG9uIGEgc2Vjb25kLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseS4gSSBjYW4mIzM5O3QgcmVseSBvbiBhc3N1bXB0aW9ucywgZXZlbiBpZiB0aGV5IHNlZW0gbG9naWNhbCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLiBJIG5lZWQgdGhlIGRlZmluaXRpdmUgYW5zd2VyIHN0cmFpZ2h0IGZyb20gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGljdGF0ZSBhbmQgY2xhcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgd2FudCB0byBiZSAqY2VydGFpbiogdGhhdCBhdXRoZW50aWNhdGlvbiBpcyBoYW5kbGVkIGFzIEkmIzM5O20gcGVyY2VpdmluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MTpcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbiAgNDI6XHRcdGJvb2wgXCYjMzQ7U0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1wmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDQ0Olx0XHRoZWxwXG4gIDQ1Olx0XHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXG4gIDQ2Olx0XHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDQ3Olx0XHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XG4gIDQ4Olx0XHQgICYjMzk7Y2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCYjMzk7XG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE5cbiAgNTE6XHRcbiAgNTI6XHRjaG9pY2VcbiAgNTM6XHRcdHByb21wdCBcJiMzNDtEZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFwmIzM0O1xuICA1NDpcdFx0ZGVmYXVsdCBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kLCBmb3JcbiAgNTc6XHRcdCAgd2hlbiBhIG1ldGhvZCBoYXNuJiMzOTt0IGJlZW4gZXhwbGljaXRseSBzZWxlY3RlZCB2aWEgdGhlXG4gIDU4Olx0XHQgIG5ldC5zY3RwLmNvb2tpZV9obWFjX2FsZyBzeXNjdGwuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIElmIHVuc3VyZSwgY2hvb3NlIHRoZSBkZWZhdWx0IChITUFDLVNIQTI1NikuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbiAgNjM6XHRcdGJvb2wgXCYjMzQ7SE1BQy1TSEEyNTZcJiMzNDtcbiAgNjQ6XHRcbiAgNjU6XHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcbiAgNjY6XHRcdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuICA2NzpcdFxuICA2ODpcdGVuZGNob2ljZVxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBJTkVUX1NDVFBfRElBR1xuICA3MTpcdFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbiAgNzI6XHRcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcbiAgNzM6XHRcbiAgNzQ6XHRcbiAgNzU6XHRlbmRpZiAjIElQX1NDVFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgU0NUUCBITUFDcyoqCgpPa2F5LCBzbyB0aGUgYElQX1NDVFBgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgaGFyZCByZXF1aXJlbWVudCBoZXJlLCBnb29kLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGZvY3VzaW5nIG9uIHRob3NlIHRoYXQgaGFuZGxlIEhNQUNzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGZvcm1pbmcgaW4gbXkgaGVhZDogYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBzaG91bGQgYmUgcHJvbWlzaW5nIHNpbmNlIGl0JiMzOTtzIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIEhNQUNzLiBBbHNvLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCB3aGljaCBjb3BpZXMgSE1BQ3MsIGFuZCBgc2N0cF9tYWtlX2luaXRgLCBgc2N0cF9tYWtlX2luaXRfYWNrYCBhbmQgYHNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3RvcmAgYmVjYXVzZSB0aGV5ICp1c2UqIHRoZSBITUFDcy4gRmluYWxseSwgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYCwgd2hpY2ggaXMgYWxzbyBjcml0aWNhbCBmb3IgdmFsaWRhdGlvbi4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgZXhpc3QsIGFyZW4mIzM5O3Qgb3Zlcmx5IGdlbmVyaWMsIGFuZCBhcmUgYWNjZXNzaWJsZS4gUnVubmluZyB0aHJvdWdoIHRoZSBsaXN0IGFnYWluOiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgLCBhbmQgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBzcGVjaWZpY3MuIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHNjdHBfc2V0c29ja29wdGAuIEludGVyZXN0aW5nLiBIb3cgYWJvdXQgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgPyBUaGF0JiMzOTtzIGV4cG9ydGVkLCBzbyB0aGF0JiMzOTtzIGdvb2QuIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIGlzIHN0YXRpYyBidXQgYHNjdHBfYXNzb2NpYXRpb25fbmV3YCBpcyBub24tc3RhdGljLiAgYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2AgYXJlIGJvdGggbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LiBgc2N0cF9hdXRoX21ha2VfbG9jYWxfdmVjdG9yYCBpcyBzdGF0aWMsIGJ1dCBgc2N0cF9hdXRoX2Fzb2NfZ2V0X2htYWNgIGNhbGxzIGl0LiBGaW5hbGx5LCBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgIGlzIG5vbi1zdGF0aWMuCgpPa2F5LCBzbyB0YWtpbmcgYWxsIG9mIHRoaXMgaW50byBhY2NvdW50LCB0aGUga2V5IHN5bWJvbHMgbG9vayBsaWtlIHRoaXM6CiogICBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgICh0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSB1c2Ugc3RhdGljIGZ1bmN0aW9ucywgYmVjYXVzZSBzeXprYWxsZXIgY2FuIG9mdGVuIGhhbmRsZSBpdCBpZiBpdCBpcyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBidXQgbGV0JiMzOTtzIGNvbnNpZGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBvciBib3RoKQoqICAgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgCiogICBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgCiogICBgc2N0cF9tYWtlX2luaXRgCiogICBgc2N0cF9tYWtlX2luaXRfYWNrYAoqICAgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYAoKTm93LCBsZXQmIzM5O3MgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgc2VlIGlmIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgaXMgdGhlcmUuIEl0JiMzOTtzIHN0YXRpYywgYnV0IFN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJiMzOTt0IGlubGluZWQsIHNvIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZS4gVGhpbmtpbmcgYWJvdXQgYHNjdHBfc2V0c29ja29wdGAgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGl0IGlzIGEgYml0IGdlbmVyaWMuIEZvY3VzaW5nIG9uIHNwZWNpZmljaXR5LCBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIG1vcmUgc3BlY2lmaWMuCgpTbywgaGVyZSYjMzk7cyB0aGUgbmFycm93ZWQtZG93biBsaXN0IEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb246IGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAsIGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGFuZCBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpbiBgbmV0L3NjdHAvc29ja2V0LmNgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyB3aGVyZSBJIHRoaW5rIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYz0zNTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1bmsoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTM2MDgtICovXG5uZXQvc2N0cC9zb2NrZXQuYzozNjA5OnN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLFxubmV0L3NjdHAvc29ja2V0LmMtMzYxMC1cdFx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX2htYWNhbGdvICpobWFjcyxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz00NTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy00NzAyLVx0Y2FzZSBTQ1RQX0hNQUNfSURFTlQ6XG5uZXQvc2N0cC9zb2NrZXQuYzo0NzAzOlx0XHRyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzaywga29wdCwgb3B0bGVuKTtcbm5ldC9zY3RwL3NvY2tldC5jLTQ3MDQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNjdHBfc2V0c29ja29wdGAgQ2FsbCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHNjdHBfc2V0c29ja29wdGAuIFRoYXQgc3VnZ2VzdHMgd2UmIzM5O3JlIG1vZGlmeWluZyBzb2NrZXQtbGV2ZWwgb3B0aW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byBhbiBTQ1RQIGFzc29jaWF0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZD8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBoYXBwZW5pbmcsIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBjaGVjayBpcyB0aGUgYHNjdHBfYXNzb2NpYXRpb25faW5pdGAgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZXhwZWN0IHN1Y2ggYSBjYWxsIHRvIGJlIG1hZGUsIGdpdmVuIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2Fzc29jaWF0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmM9NDY9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTAtLyogSW5pdGlhbGl6ZSBhIG5ldyBhc3NvY2lhdGlvbiBmcm9tIHByb3ZpZGVkIG1lbW9yeS4gKi9cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjUxOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9pbml0KFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTItXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jPTI4Nj1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9uZXcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI5NS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI5NjpcdGlmICghc2N0cF9hc3NvY2lhdGlvbl9pbml0KGFzb2MsIGVwLCBzaywgc2NvcGUsIGdmcCkpXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTctXHRcdGdvdG8gZmFpbF9pbml0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMsIGFuZCBhIERlZXAgRGl2ZSoqCgpIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZTogdGhlIGFzc29jaWF0aW9uIHN0YXRlIHNlZW1zIGZ1bmRhbWVudGFsbHkgc3RhdGljLCBhdCBsZWFzdCBpbiBpdHMgY3VycmVudCBzdHJ1Y3R1cmUuIEJ1dCB0aGUgY29uc3RydWN0b3Igb3IgaW5pdGlhbGl6ZXIsIGBzY3RwX2Fzc29jaWF0aW9uX25ld2AsIGlzICpub3QqIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGxpdHRsZeKApiBpbmNvbmdydW91cywgaXNuJiMzOTt0IGl0PyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgZGVzaWduIHNtZWxsIGhlcmUuIFRoZXJlIGNvdWxkIGJlIHJlYXNvbnMgZm9yIHRoaXMgY2hvaWNlLCBwZXJoYXBzIGEgbmVlZCBmb3IgbGF0ZSBpbml0aWFsaXphdGlvbiBvciBzb21lIGV4dGVybmFsIGRlcGVuZGVuY3kgdGhhdCBuZWNlc3NpdGF0ZXMgZHluYW1pYyBhbGxvY2F0aW9uIG9yIG5vbi1zdGF0aWMgYmVoYXZpb3IsIGJ1dCBteSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gSSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgaGVyZSBtb3JlIGNvbXBsZXRlbHkuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cCBhIGxpdHRsZSBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBgc2N0cF9tYWtlX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgYXNzb2NpYXRpb24gaXMgY3JlYXRlZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIG9mIHRoZSBrZXkgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gYHNjdHBfbWFrZV9pbml0YCDigJMgaXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9tYWtlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTEzNT1pbnQgc2N0cF9pbml0X2NhdXNlKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgX19iZTE2IGNhdXNlX2NvZGUsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE5Ny0gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoxOTg6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE5OS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzcwLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjM3MTpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXRfYWNrKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTM3Mi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi0tXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmM9MTI3NT1zdGF0aWMgaW50IHNjdHBfY21kX2ludGVycHJldGVyKGVudW0gc2N0cF9ldmVudF90eXBlIGV2ZW50X3R5cGUsXG4tLVxubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jLTEzNzctXHRcdFx0LyogR2VuZXJhdGUgYW4gSU5JVCBBQ0sgY2h1bmsuICAqL1xubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jOjEzNzg6XHRcdFx0bmV3X29iaiA9IHNjdHBfbWFrZV9pbml0X2Fjayhhc29jLCBjaHVuaywgR0ZQX0FUT01JQyxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy0xMzc5LVx0XHRcdFx0XHRcdCAgICAgMCk7XG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzE5PWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQ0LVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDQ1Olx0cmVwbCA9IHNjdHBfbWFrZV9pbml0X2FjayhuZXdfYXNvYywgY2h1bmssIEdGUF9BVE9NSUMsIGxlbik7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDYtXHRpZiAoIXJlcGwpXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTUyOT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fdW5leHBlY3RlZF9pbml0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE2NjgtXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxNjY5Olx0cmVwbCA9IHNjdHBfbWFrZV9pbml0X2FjayhuZXdfYXNvYywgY2h1bmssIEdGUF9BVE9NSUMsIGxlbik7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNjcwLVx0aWYgKCFyZXBsKVxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI1Nzc9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl82X3N0YWxlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI2MjItXHRicCA9IChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKikgXHUwMDI2YXNvYy1cdTAwM2ViYXNlLmJpbmRfYWRkcjtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjI2MjM6XHRyZXBseSA9IHNjdHBfbWFrZV9pbml0KGFzb2MsIGJwLCBHRlBfQVRPTUlDLCBzaXplb2YoYmh0KSk7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yNjI0LVx0aWYgKCFyZXBseSlcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz01MDE4PWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9hc29jKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MDQyLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTA0MzpcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBcdTAwMjZhc29jLVx1MDAzZWJhc2UuYmluZF9hZGRyLCBHRlBfQVRPTUlDLCAwKTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUwNDQtXHRpZiAoIXJlcGwpXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTk1Mj1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl90MV9pbml0X3RpbWVyX2V4cGlyZShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01OTY5LVx0XHRicCA9IChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKikgXHUwMDI2YXNvYy1cdTAwM2ViYXNlLmJpbmRfYWRkcjtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU5NzA6XHRcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBicCwgR0ZQX0FUT01JQywgMCk7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01OTcxLVx0XHRpZiAoIXJlcGwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIFNjYW4gb2YgU0NUUCBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2Agc2VlbSBwZXJmZWN0bHkgcmVhc29uYWJsZSBjaG9pY2VzIGFzIGJ1aWxkaW5nIGJsb2Nrcy4gTm8gcmVkIGZsYWdzIGp1bXBpbmcgb3V0IHRoZXJlLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgdGhpbmsgaXQmIzM5O3Mgd29ydGggYSBxdWljayByZXZpZXcgb2YgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC4gSSYjMzk7bGwgd2FudCB0byBlbnN1cmUgdGhvc2UgYXV0aGVudGljYXRpb24gc3RlcHMgYXJlIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hdXRoLmM9NDg1PXN0YXRpYyBpbnQgX19zY3RwX2F1dGhfZmluZF9obWFjaWQoX19iZTE2ICpobWFjcywgaW50IG5fZWx0cywgX19iZTE2IGhtYWNfaWQpXG4tLVxubmV0L3NjdHAvYXV0aC5jLTUwMC0vKiBTZWUgaWYgdGhlIEhNQUNfSUQgaXMgb25lIHRoYXQgd2UgY2xhaW0gYXMgc3VwcG9ydGVkICovXG5uZXQvc2N0cC9hdXRoLmM6NTAxOmludCBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2F1dGguYy01MDItXHRcdFx0XHQgICAgX19iZTE2IGhtYWNfaWQpXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQwMT1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDE5LVx0ICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDIwOlx0aWYgKCFzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChhc29jLCBhdXRoX2hkci1cdTAwM2VobWFjX2lkKSlcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0MjEtXHRcdHJldHVybiBTQ1RQX0lFUlJPUl9BVVRIX0JBRF9ITUFDO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1OQoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkLCB0aGUgZm9jdXMgc3ltYm9scy4gQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEkmIzM5O20gbm90aW5nIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgYXJlYXMgdG8gc2NydXRpbml6ZTogYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCwgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgLCBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgLCBgc2N0cF9tYWtlX2luaXRgLCBgc2N0cF9tYWtlX2luaXRfYWNrYCwgYW5kIGBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZGAuCgpBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBXaGlsZSBpdCYjMzk7cyB3b3J0aCBrZWVwaW5nIGluIG1pbmQsIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2Agc2luY2UgdGhhdCBpcyBtb3JlIGxpa2VseSB0byBiZSBleHBvc2VkIHRvIGV4dGVybmFsIGlucHV0cy4gSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgaXMgc3RpbGwgYSBnb29kIHRhcmdldC4KCkxldCBtZSBzdW1tYXJpemUgbXkgZmluZGluZ3MsIGVuc3VyaW5nIEkmIzM5O20gY2xlYXIgYW5kIGNvbmNpc2U6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgaXMgYSBidWZmZXIgb3ZlcmZsb3cgZml4LCBhIGNsYXNzaWMgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoqICAgKipFbmFibGVDb25maWdzOioqIFxb4oCcSVBcX1NDVFDigJ1dIC0gVGhhdCYjMzk7cyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiwgb2YgY291cnNlLgoqICAgKipGb2N1c1N5bWJvbHM6KiogXFvigJxzY3RwXF9zZXRzb2Nrb3B0XF9obWFjXF9pZGVudOKAnSwg4oCcc2N0cFxfYXV0aFxfZXBcX3NldFxfaG1hY3PigJ0sIOKAnHNjdHBcX2Fzc29jaWF0aW9uXF9uZXfigJ0sIOKAnHNjdHBcX21ha2VcX2luaXTigJ0sIOKAnHNjdHBcX21ha2VcX2luaXRcX2Fja+KAnSwg4oCcc2N0cFxfYXV0aFxfYXNvY1xfdmVyaWZ5XF9obWFjXF9pZOKAnV0gLSBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbiwgbGlzdGVkIGluIG9yZGVyIG9mIHBvdGVudGlhbCBleHBsb2l0YWJpbGl0eS4KKiAgICoqUmVhc29uaW5nOioqICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgYGF1dGhfaG1hY3NgIGFycmF5LiBUaGlzIGNoYW5nZSBpcyB0byBwcm9wZXJseSBhY2NvdW50IGZvciB0aGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIEluIHNob3J0LCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQmIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2VwX3NldF9obWFjcyYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jaWF0aW9uX25ldyYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdCYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdF9hY2smIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIGJ5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgYGF1dGhfaG1hY3NgIGFycmF5IHRvIHByb3Blcmx5IGFjY29tbW9kYXRlIGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVmZmVyIG92ZXJmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQmIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2VwX3NldF9obWFjcyYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jaWF0aW9uX25ldyYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdCYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdF9hY2smIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIGJ5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgYGF1dGhfaG1hY3NgIGFycmF5IHRvIHByb3Blcmx5IGFjY29tbW9kYXRlIGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVmZmVyIG92ZXJmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTU6NTkuNDQ4OTc4MzgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NDkwMzkwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE1OjU5LjQ0OTAwMDE1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4NzI0OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmZhNGZhZDExYTBhZDhkZjY1NjU0N2RhMzMwNThlMzJjYzY1MzdlZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNjoxNTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXFxuaW5kZXggYWZmZWU0NGJkMzhlMzEuLmNjY2M2NjI1NjFhYWMzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcXG5AQCAtMzEyLDcgKzMxMiw4IEBAIHN0cnVjdCBzY3RwX2Nvb2tpZSB7XFxuIFxcbiBcXHRfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbiBcXHRcXHRcXHQgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdO1xcbi1cXHRfX3U4IGF1dGhfaG1hY3NbU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNikgKyAyXTtcXG4rXFx0X191OCBhdXRoX2htYWNzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbitcXHRcXHRcXHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XFxuIFxcdF9fdTggYXV0aF9jaHVua3Nbc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIFNDVFBfQVVUSF9NQVhfQ0hVTktTXTtcXG4gXFxuIFxcdC8qIFRoaXMgaXMgYSBzaGltIGZvciBteSBwZWVyJ3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE1OjU5Ljc0ODUyMTQ0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI2NDk0ODc1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmZhNGZhZDExYTBhZDhkZjY1NjU0N2RhMzMwNThlMzJjYzY1MzdlZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDE2OjE1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggYWZmZWU0NGJkMzhlMzEuLmNjY2M2NjI1NjFhYWMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcbisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5AQCAtMzEyLDcgKzMxMiw4IEBAIHN0cnVjdCBzY3RwX2Nvb2tpZSB7XG4gXG4gXHRfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xuIFx0XHRcdCBTQ1RQX0FVVEhfUkFORE9NX0xFTkdUSF07XG4tXHRfX3U4IGF1dGhfaG1hY3NbU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNikgKyAyXTtcbitcdF9fdTggYXV0aF9obWFjc1tzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICtcbitcdFx0XHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XG4gXHRfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBTQ1RQX0FVVEhfTUFYX0NIVU5LU107XG4gXG4gXHQvKiBUaGlzIGlzIGEgc2hpbSBmb3IgbXkgcGVlcidzIElOSVQgcGFja2V0LCBmb2xsb3dlZCBieVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTU6NTkuNzQ4NTIyNjUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNjE0ODU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU0NUUCBDb29raWUgU2l6ZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBzY3RwX2Nvb2tpZWAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIGBhdXRoX2htYWNzYCBhcnJheSB3aXRoaW4gaXQuIEludGVyZXN0aW5nLCB0aGlzIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIGBhdXRoX2htYWNzYC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0byBoYXZlIGluY2x1ZGVkIGFuIGV4dHJhIHR3byBieXRlcywgYnV0IG5vdyB0aGV5J3JlIGdvbmUuIFRoZSBhcnJheSBzaXplIG5vdyBzZWVtcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgaGVhZGVyIHBsdXMgdGhlIG51bWJlciBvZiBITUFDcywgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBvZiBhIGBfX3UxNmAuIFRoaXMgc3RyaWtlcyBtZSBhcyBhIHJlZmluZW1lbnQsIGFpbWluZyB0byBiZSBtb3JlIHByZWNpc2UgaW4gdGhlIGFsbG9jYXRpb24uXG5cblRoaXMgKmNvdWxkKiBiZSBhIGJ1ZyBmaXgsIG9yIGFuIG9wdGltaXphdGlvbi4gSXQgY291bGQgYWxzbyBiZSBhIHN1YnRsZSBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBjb21wYXRpYmlsaXR5IG9mIFNDVFAgY29va2llIGV4Y2hhbmdlLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgdXNlcyBvZiBgYXV0aF9obWFjc2AgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBieXRlcyBhcmUgYmVpbmcgaGFuZGxlZCwgcmVhZCwgYW5kIHdyaXR0ZW4uIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoaXMgY2hhbmdlIG1pZ2h0IGltcGFjdCBleGlzdGluZyBjb29raWUgcHJvY2Vzc2luZyBsb2dpYy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgdXNhZ2UgaXMgdml0YWwgYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIGEgbmV0IHBvc2l0aXZlIG9yIGEgcG90ZW50aWFsIHJlZ3Jlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjowNC42NTQ2NzI5MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwMDQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXV0aF9obWFjc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmM9NTE9c3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX2luaXQoXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yNjItXFx0LyogU2F2ZSB0aGUgaG1hY3MgYW5kIGNodW5rcyBsaXN0IGludG8gdGhpcyBhc3NvY2lhdGlvbiAqL1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI2MzpcXHRpZiAoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdClcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyNjQ6XFx0XFx0bWVtY3B5KGFzb2MtXFx1MDAzZWMuYXV0aF9obWFjcywgZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCxcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyNjU6XFx0XFx0XFx0bnRvaHMoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCkpO1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI2Ni1cXHRpZiAoZXAtXFx1MDAzZWF1dGhfY2h1bmtfbGlzdClcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz0yMjI9c3RhdGljIHN0cnVjdCBzY3RwX2F1dGhfYnl0ZXMgKnNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3RvcihcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy0yMjgtXFx0XFx0XFx0KHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqKWFzb2MtXFx1MDAzZWMuYXV0aF9jaHVua3MsXFxubmV0L3NjdHAvYXV0aC5jOjIyOTpcXHRcXHRcXHQoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopYXNvYy1cXHUwMDNlYy5hdXRoX2htYWNzLCBnZnApO1xcbm5ldC9zY3RwL2F1dGguYy0yMzAtfVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTUwMT1pbnQgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNTA5LVxcbm5ldC9zY3RwL2F1dGguYzo1MTA6XFx0aG1hY3MgPSAoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopYXNvYy1cXHUwMDNlYy5hdXRoX2htYWNzO1xcbm5ldC9zY3RwL2F1dGguYy01MTEtXFx0bl9lbHQgPSAobnRvaHMoaG1hY3MtXFx1MDAzZXBhcmFtX2hkci5sZW5ndGgpIC1cXG4tLVxcbm5ldC9zY3RwL2F1dGguYz02ODQ9aW50IHNjdHBfYXV0aF9lcF9zZXRfaG1hY3Moc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTcwNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaG1hY3MtXFx1MDAzZXNobWFjX251bV9pZGVudHM7IGkrKylcXG5uZXQvc2N0cC9hdXRoLmM6NzA4OlxcdFxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QtXFx1MDAzZWhtYWNfaWRzW2ldID1cXG5uZXQvc2N0cC9hdXRoLmMtNzA5LVxcdFxcdFxcdFxcdGh0b25zKGhtYWNzLVxcdTAwM2VzaG1hY19pZGVudHNbaV0pO1xcbm5ldC9zY3RwL2F1dGguYzo3MTA6XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XFxubmV0L3NjdHAvYXV0aC5jLTcxMS1cXHRcXHRcXHRodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICtcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz05MjU9aW50IHNjdHBfYXV0aF9pbml0KHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTkzMC1cXHQgKi9cXG5uZXQvc2N0cC9hdXRoLmM6OTMxOlxcdGlmICghZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCkge1xcbm5ldC9zY3RwL2F1dGguYzo5MzI6XFx0XFx0c3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICphdXRoX2htYWNzO1xcbm5ldC9zY3RwL2F1dGguYy05MzMtXFxubmV0L3NjdHAvYXV0aC5jOjkzNDpcXHRcXHRhdXRoX2htYWNzID0ga3phbGxvY19mbGV4KCphdXRoX2htYWNzLCBobWFjX2lkcyxcXG5uZXQvc2N0cC9hdXRoLmMtOTM1LVxcdFxcdFxcdFxcdFxcdCAgU0NUUF9BVVRIX05VTV9ITUFDUywgZ2ZwKTtcXG5uZXQvc2N0cC9hdXRoLmM6OTM2OlxcdFxcdGlmICghYXV0aF9obWFjcylcXG5uZXQvc2N0cC9hdXRoLmMtOTM3LVxcdFxcdFxcdGdvdG8gbm9tZW07XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtOTQyLVxcdFxcdCAqL1xcbm5ldC9zY3RwL2F1dGguYzo5NDM6XFx0XFx0YXV0aF9obWFjcy1cXHUwMDNlcGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0hNQUNfQUxHTztcXG5uZXQvc2N0cC9hdXRoLmM6OTQ0OlxcdFxcdGF1dGhfaG1hY3MtXFx1MDAzZXBhcmFtX2hkci5sZW5ndGggPVxcbm5ldC9zY3RwL2F1dGguYy05NDUtXFx0XFx0XFx0XFx0aHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIDIpO1xcbm5ldC9zY3RwL2F1dGguYzo5NDY6XFx0XFx0YXV0aF9obWFjcy1cXHUwMDNlaG1hY19pZHNbMF0gPSBodG9ucyhTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKTtcXG5uZXQvc2N0cC9hdXRoLmM6OTQ3OlxcdFxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBhdXRoX2htYWNzO1xcbm5ldC9zY3RwL2F1dGguYy05NDgtXFx0fVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTk2Ny1cXHQvKiBGcmVlIGFsbCBhbGxvY2F0aW9ucyAqL1xcbm5ldC9zY3RwL2F1dGguYzo5Njg6XFx0a2ZyZWUoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XFxubmV0L3NjdHAvYXV0aC5jLTk2OS1cXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmM6OTcwOlxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xcbm5ldC9zY3RwL2F1dGguYy05NzEtXFx0ZXAtXFx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmM9OTc1PXZvaWQgc2N0cF9hdXRoX2ZyZWUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwKVxcbm5ldC9zY3RwL2F1dGguYy05NzYte1xcbm5ldC9zY3RwL2F1dGguYzo5Nzc6XFx0a2ZyZWUoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XFxubmV0L3NjdHAvYXV0aC5jLTk3OC1cXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmM6OTc5OlxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xcbm5ldC9zY3RwL2F1dGguYy05ODAtXFx0ZXAtXFx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTk4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMDQtXFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfY2h1bmtzID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjA1OlxcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICphdXRoX2htYWNzID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA2LVxcdHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9hZGRyc19wYXJhbSBzYXQ7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc3LVxcdFxcdC8qIEFkZCBITUFDUyBwYXJhbWV0ZXIgbGVuZ3RoIGlmIGFueSB3ZXJlIGRlZmluZWQgKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mjc4OlxcdFxcdGF1dGhfaG1hY3MgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3OTpcXHRcXHRpZiAoYXV0aF9obWFjcy1cXHUwMDNlbGVuZ3RoKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyODA6XFx0XFx0XFx0Y2h1bmtzaXplICs9IFNDVFBfUEFENChudG9ocyhhdXRoX2htYWNzLVxcdTAwM2VsZW5ndGgpKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjgxLVxcdFxcdGVsc2VcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjgyOlxcdFxcdFxcdGF1dGhfaG1hY3MgPSBOVUxMO1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yODMtXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzU4LVxcdFxcdFxcdFxcdCBhc29jLVxcdTAwM2VjLmF1dGhfcmFuZG9tKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MzU5OlxcdFxcdGlmIChhdXRoX2htYWNzKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNjA6XFx0XFx0XFx0c2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfaG1hY3MtXFx1MDAzZWxlbmd0aCksXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjM2MTpcXHRcXHRcXHRcXHRcXHRhdXRoX2htYWNzKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzYyLVxcdFxcdGlmIChhdXRoX2NodW5rcylcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0zNzE9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0zNzgtXFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfcmFuZG9tID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mzc5OlxcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICphdXRoX2htYWNzID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzgwLVxcdHN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWwgPSBOVUxMO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTQ0My1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NDQ0OlxcdFxcdGF1dGhfaG1hY3MgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjQ0NTpcXHRcXHRpZiAoYXV0aF9obWFjcy1cXHUwMDNlbGVuZ3RoKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDY6XFx0XFx0XFx0Y2h1bmtzaXplICs9IFNDVFBfUEFENChudG9ocyhhdXRoX2htYWNzLVxcdTAwM2VsZW5ndGgpKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNDQ3LVxcdFxcdGVsc2VcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NDQ4OlxcdFxcdFxcdGF1dGhfaG1hY3MgPSBOVUxMO1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy00NDktXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNTA2LVxcdFxcdFxcdFxcdCBhdXRoX3JhbmRvbSk7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjUwNzpcXHRcXHRpZiAoYXV0aF9obWFjcylcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NTA4OlxcdFxcdFxcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBudG9ocyhhdXRoX2htYWNzLVxcdTAwM2VsZW5ndGgpLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo1MDk6XFx0XFx0XFx0XFx0XFx0YXV0aF9obWFjcyk7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTUxMC1cXHRcXHRpZiAoYXV0aF9jaHVua3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz02OTYwPXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtNjk3Mi1cXG5uZXQvc2N0cC9zb2NrZXQuYzo2OTczOlxcdGhtYWNzID0gZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdDtcXG5uZXQvc2N0cC9zb2NrZXQuYy02OTc0LVxcdGRhdGFfbGVuID0gbnRvaHMoaG1hY3MtXFx1MDAzZXBhcmFtX2hkci5sZW5ndGgpIC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MDQuNzEyNjgzODgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NjE3NTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogU0NUUCBDb29raWUgU2l6ZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHNvbWV0aGluZyBpbiB0aGUgYHNjdHBfY29va2llYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgYGF1dGhfaG1hY3NgIGFycmF5LiBUaGUgb3JpZ2luYWwgc2l6ZSBjYWxjdWxhdGlvbiB3YXMgYSBiaXTigKYgd2VsbCwgbGV0J3MganVzdCBzYXkgaXQgbG9va3MgYSBsaXR0bGUgc3VzcGljaW91cywgYW5kIG5vdyB0aGV5J3ZlIGNoYW5nZWQgaXQuIEl0IHdhcyBwcmV2aW91c2x5IGNvbXB1dGVkIGFzIGBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSArIDJgLiBOb3cgaXTigJlzIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNilgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHNpemUgaW5jcmVhc2Ug4oCTIGVmZmVjdGl2ZWx5LCBpdCdzIGFkZGluZyBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdoaWNoIGlzIDQgYnl0ZXMsIG1pbnVzIHRoZSBvcmlnaW5hbCAyLCBzbyBhIG5ldCBpbmNyZWFzZSBvZiAyIGJ5dGVzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJXaGF0J3MgdGhlICp3aHkqP1wiLiBUaGlzIHNjcmVhbXMgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWUuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIHNvbWUgZm9ybSBvZiBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXR5LCBwb3RlbnRpYWxseSBhIHN1YnRsZSBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUuIEl0J3MgbGlrZWx5IGZpeGluZyBzb21lIHN0cnVjdCBsYXlvdXQgcHJvYmxlbSBpbiB0aGUgZXhpc3RpbmcgY29kZWJhc2UgdGhhdCBoYXMgYmVlbiBleHBvc2VkIHJlY2VudGx5LlxuXG5UaGUgaW5jbHVzaW9uIG9mIGBzdHJ1Y3Qgc2N0cF9wYXJhbWhkcmAgaXMgdGhlIGtleS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB3aGF0IHRoYXQgaGVhZGVyIGNvbnRhaW5zLiBXaGF0IGFib3V0IGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gPyBJcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIHN1cHBvcnRpbmcgbmV3IEhNQUMgYWxnb3JpdGhtcyBvciBzb21lIGtpbmQgb2YgcGFyYW1ldGVyIGhhbmRsaW5nIGR1cmluZyBhdXRoZW50aWNhdGlvbj8gTGV0IG1lIGV4YW1pbmUgdGhvc2UgdHdvIHN0cnVjdHVyZXMgaW4gZGV0YWlsLCBhbmQgdGhlbiBJIGNhbiBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGZpeGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjowOS43Nzg4NjA5OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4NTU3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNjdHBfcGFyYW1oZHIgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmg9MTI1PWVudW0geyBTQ1RQX0NIVU5LX0ZMQUdfVCA9IDB4MDEgfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2N0cC5oLTE1NC1cXG5pbmNsdWRlL2xpbnV4L3NjdHAuaDoxNTU6c3RydWN0IHNjdHBfcGFyYW1oZHIge1xcbmluY2x1ZGUvbGludXgvc2N0cC5oLTE1Ni1cXHRfX2JlMTYgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MDkuODM1NzQwNjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2ODQxMDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU0NUUCBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgYXJvdW5kIGxpbmUgMTU1IGluIGBpbmNsdWRlL2xpbnV4L3NjdHAuaGAuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCdzIGhlYWRlciBtYWdpYyBzaG91bGQgYmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RydWN0dXJhbCBibHVlcHJpbnRzIGZvciBob3cgU0NUUCBtZXNzYWdlcyBhcmUgZm9ybWF0dGVkLCBob3cgY2h1bmsgdHlwZXMgYXJlIGRlZmluZWQsIGFuZCBtYXliZSBldmVuIHNvbWUga2V5IGZsYWdzIG9yIGNvbnRyb2wgaW5mb3JtYXRpb24uIFRoaXMgaGVhZGVyIGZpbGUgd2lsbCBsaWtlbHkgbGF5IHRoZSBncm91bmR3b3JrIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGxvdy1sZXZlbCBhc3BlY3RzIG9mIFNDVFAgY29tbXVuaWNhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50IGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjEzLjQwNDE1MzE1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjdHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFxuIDE1MTpcXHQvKiBSRkMgMjk2MFxcbiAxNTI6XFx0ICogU2VjdGlvbiAzLjIuMSBPcHRpb25hbC9WYXJpYWJsZS1sZW5ndGggUGFybWFldGVyIEZvcm1hdC5cXG4gMTUzOlxcdCAqL1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB7XFxuIDE1NjpcXHRcXHRfX2JlMTYgdHlwZTtcXG4gMTU3OlxcdFxcdF9fYmUxNiBsZW5ndGg7XFxuIDE1ODpcXHR9O1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRlbnVtIHNjdHBfcGFyYW0ge1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHQvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy41ICovXFxuIDE2MzpcXHRcXHRTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPXFx0XFx0PSBjcHVfdG9fYmUxNigxKSxcXG4gMTY0OlxcdFxcdC8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjIuMSAqL1xcbiAxNjU6XFx0XFx0U0NUUF9QQVJBTV9JUFY0X0FERFJFU1NcXHRcXHRcXHQ9IGNwdV90b19iZTE2KDUpLFxcbiAxNjY6XFx0XFx0U0NUUF9QQVJBTV9JUFY2X0FERFJFU1NcXHRcXHRcXHQ9IGNwdV90b19iZTE2KDYpLFxcbiAxNjc6XFx0XFx0U0NUUF9QQVJBTV9TVEFURV9DT09LSUVcXHRcXHRcXHQ9IGNwdV90b19iZTE2KDcpLFxcbiAxNjg6XFx0XFx0U0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSU1xcdD0gY3B1X3RvX2JlMTYoOCksXFxuIDE2OTpcXHRcXHRTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkVcXHRcXHQ9IGNwdV90b19iZTE2KDkpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoxMy40MDQyNTcyMzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI5MTA4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqU0NUUCBQYXJhbWV0ZXIgSGVhZGVyIFNpemUqKlxuXG5SaWdodCwgc28gdGhlIGBzdHJ1Y3Qgc2N0cF9wYXJhbWhkcmAgaXMgZGVmaW5pdGl2ZWx5IDQgYnl0ZXMuIEdvdCB0aGF0LiBOb3csIEknbSBsb29raW5nIGF0IHRoZSBvbGQgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYGF1dGhfaG1hY3NgLiBJdCB3YXMgYFNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICsgMmAuIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgaXNzdWUgaXMgdGhhdCBJIG5lZWQgdG8gYmUgc3VyZSB3aGF0IGBTQ1RQX0FVVEhfTlVNX0hNQUNTYCAqaXMqLiBNeSBodW5jaCBpcyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBITUFDcywgYnV0IGxldCdzIGNvbmZpcm0gdGhhdCBxdWlja2x5LiBJJ2xsIHNlYXJjaCBmb3IgaXRzIGRlZmluaXRpb24gYW5kIHZlcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoxNi45MzMzNjczMDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODE1NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU0NUUF9BVVRIX05VTV9ITUFDU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oPTQxNT1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDIzLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfTUFYXFx0X19TQ1RQX0FVVEhfSE1BQ19NQVggLSAxXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjQ6I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIFxcdF9fU0NUUF9BVVRIX0hNQUNfTUFYXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjE2Ljk4ODE4ODU3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkxMjk2OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgX19TQ1RQX0FVVEhfSE1BQ19NQVhgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYF9fU0NUUF9BVVRIX0hNQUNfTUFYYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIkFoYSwgYXV0aGVudGljYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEhNQUMsIGFuZCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLlwiIFRoaXMgaXMgY2xlYXJseSBzb21ldGhpbmcgY2VudHJhbCB0byB0aGUgc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSwgbGlrZWx5IGRlZmluaW5nIHRoZSB1cHBlciBib3VuZCBmb3IgdGhlIGtleSBzaXplIG9yIG90aGVyIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBITUFDIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuXG5cbk15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBwcm9iYWJseSBkZWZpbmVzIHRoZSBsb25nZXN0IHBlcm1pdHRlZCBITUFDIGtleSwgdGhlIGJpZ2dlc3QgZGlnZXN0IHNpemUsIG9yIHBlcmhhcHMgYSBjb25zdGFudCByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGF1dGhlbnRpY2F0aW9uIHNldHVwIHdpdGhpbiB0aGUgU0NUUCBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIG1heGltdW0gaXMgY3J1Y2lhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJdCBhbGxvd3MgZm9yIGJ1ZmZlciBhbGxvY2F0aW9uLCBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgc2VjdXJlIGhhbmRsaW5nIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhIHdpdGhpbiBTQ1RQIGltcGxlbWVudGF0aW9ucy4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgdmFsdWUgY2hvc2VuIGZvciBzb21lIGhhcmR3YXJlLXNwZWNpZmljIHJlYXNvbiwgb3IgaXMgaXQgYSBzZWN1cml0eS1mb2N1c2VkIGxpbWl0IHRvIGF2b2lkIGNlcnRhaW4gYXR0YWNrcz8gUGVyaGFwcyBpdCdzIHRpZWQgdG8gYW4gZXN0YWJsaXNoZWQgc3RhbmRhcmQsIG9yIGEga25vd24gY29uc3RyYWludC4gVW5kZXJzdGFuZGluZyB0aGlzIG1heGltdW0gaXMgY3JpdGljYWwgZm9yIHNlY3VyZSBjb2RpbmcsIHRlc3RpbmcsIGFuZCBkZWJ1Z2dpbmcgYW55IFNDVFAtYmFzZWQgYXBwbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IFJGQ3MgYW5kIHN0YW5kYXJkIGRlZmluaXRpb25zIHRvIHNlZSB0aGUgcHJlY2lzZSBjb250ZXh0IGFuZCBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoyMC40Nzk0ODg1NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTI1MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fU0NUUF9BVVRIX0hNQUNfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg9NDE1PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MTktXFx0U0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2LFxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg6NDIwOlxcdF9fU0NUUF9BVVRIX0hNQUNfTUFYXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjEtfTtcXG5pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oLTQyMi1cXG5pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oOjQyMzojZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX01BWFxcdF9fU0NUUF9BVVRIX0hNQUNfTUFYIC0gMVxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg6NDI0OiNkZWZpbmUgU0NUUF9BVVRIX05VTV9ITUFDUyBcXHRfX1NDVFBfQVVUSF9ITUFDX01BWFxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoyMC41MzQ2MTk0OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNzYyMzY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0NUUCBITUFDIEFsZ29yaXRobSBQYXJhbWV0ZXIgU3RydWN0dXJlIFNpemUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBTQ1RQLXJlbGF0ZWQgY29uc3RhbnRzIGFuZCBkb2luZyBzb21lIHF1aWNrIGNhbGN1bGF0aW9ucy4gSXQgc2VlbXMgYF9fU0NUUF9BVVRIX0hNQUNfTUFYYCBhbmQgYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGJvdGggY2xvY2sgaW4gYXQgYSB2YWx1ZSBvZiAzLiBJIHJlbWVtYmVyIHRoZSBvbGQgc2l6ZSBmb3Igc29tZXRoaW5nIHdhcyBjYWxjdWxhdGVkIGFzIGAzICogMiArIDIgPSA4YCBieXRlcy4gTm93LCB0aGUgbmV3IHNpemUgaXMgYDQgKyAzICogMiA9IDEwYCBieXRlcy5cblxuSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJIHNob3VsZCBub3cgZXhhbWluZSB0aGUgZGV0YWlscyBvZiBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYC4gTmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeSB3ZSBuZWVkIHRoZSBleHRyYSBieXRlcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MjMuNjcyMjQ0NzM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ5NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmg9MzI5PXN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjdHAuaC0zMzQtLyogQVVUSCBTZWN0aW9uIDMuMyBITUFDIEFsZ29yaXRobSAqL1xcbmluY2x1ZGUvbGludXgvc2N0cC5oOjMzNTpzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0ge1xcbmluY2x1ZGUvbGludXgvc2N0cC5oLTMzNi1cXHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9oZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjIzLjcyOTc0NjEwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMjQzMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU0NUUCBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBTQ1RQIHN0dWZmIGEgYml0IGJldHRlciwgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NjdHAuaGAuIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDMzNS4gSSdtIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIFttZW50aW9uIHNwZWNpZmljIGFyZWEgeW91IGFyZSBsb29raW5nIGZvciwgZS5nLiwgY2h1bmsgdHlwZXMsIGFzc29jaWF0aW9uIG1hbmFnZW1lbnQsIGV0Yy5dLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgW21lbnRpb24gc3BlY2lmaWMgc3RydWN0dXJlcywgZGVmaW5lcywgb3IgZnVuY3Rpb25zIHlvdSBhbnRpY2lwYXRlXS4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MjYuNjM5OTkxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjdHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xcbiAzMzE6XFx0XFx0X191OCBjaHVua3NbXTtcXG4gMzMyOlxcdH07XFxuIDMzMzpcXHRcXG4gMzM0OlxcdC8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi9cXG4gMzM1OlxcdHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSB7XFxuIDMzNjpcXHRcXHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9oZHI7XFxuIDMzNzpcXHRcXHRfX2JlMTYgaG1hY19pZHNbXTtcXG4gMzM4OlxcdH07XFxuIDMzOTpcXHRcXG4gMzQwOlxcdC8qIFJGQyAyOTYwLiAgU2VjdGlvbiAzLjMuMyBJbml0aWF0aW9uIEFja25vd2xlZGdlbWVudCAoSU5JVCBBQ0spICgyKTpcXG4gMzQxOlxcdCAqICAgVGhlIElOSVQgQUNLIGNodW5rIGlzIHVzZWQgdG8gYWNrbm93bGVkZ2UgdGhlIGluaXRpYXRpb24gb2YgYW4gU0NUUFxcbiAzNDI6XFx0ICogICBhc3NvY2lhdGlvbi5cXG4gMzQzOlxcdCAqL1xcbiAzNDQ6XFx0c3RydWN0IHNjdHBfaW5pdGFja19jaHVuayB7XFxuIDM0NTpcXHRcXHRzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaHVua19oZHI7XFxuIDM0NjpcXHRcXHRzdHJ1Y3Qgc2N0cF9pbml0aGRyIGluaXRfaGRyO1xcbiAzNDc6XFx0fTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0LyogU2VjdGlvbiAzLjMuMy4xIFN0YXRlIENvb2tpZSAoNykgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MjYuNjQwMDg1NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwMzEzMTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU2VjdXJpdHkgVnVsbmVyYWJpbGl0eSBpbiBTQ1RQIEhNQUMgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYC4gSXQncyBzdHJ1Y3R1cmVkIHdpdGggYSBgcGFyYW1faGRyYCwgd2hpY2ggaXMgNCBieXRlcywgZm9sbG93ZWQgYnkgYSBmbGV4aWJsZSBhcnJheSBjYWxsZWQgYGhtYWNfaWRzYCB0aGF0IGNvbnRhaW5zIGBfX2JlMTZgIGVsZW1lbnRzLiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgLCB3aGljaCBpcyBjdXJyZW50bHkgc2V0IHRvIDMsIHRoZSB0b3RhbCBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBgNCArICgzICogMilgIG9yIDEwIGJ5dGVzLCBnaXZlbiB0aGF0IGVhY2ggYF9fYmUxNmAgaXMgMiBieXRlcy4gQnV0IGhvbGQgb24sIHRoZSAqb2xkKiBzaXppbmcgY2FsY3VsYXRpb24gd2FzIG9ubHkgYFNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICsgMmAsIHdoaWNoIHdvcmtzIG91dCB0byBgMyAqIDIgKyAyID0gOGAgYnl0ZXMuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhhdCdzIGEgcHJvYmxlbS4gVGhhdCBtZWFucyB0aGUgb2xkIGFsbG9jYXRpb24gd2FzICp0b28gc21hbGwqIHRvIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IHN0cnVjdHVyZSB3aXRoIHRocmVlIEhNQUNzLiBUaGF0IDgtYnl0ZSBhbGxvY2F0aW9uIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIHdoZW5ldmVyIGBhdXRoX2htYWNzYCBpbiBgc3RydWN0IHNjdHBfY29va2llYCB3YXMgYWNjZXNzZWQsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCAzIEhNQUNzISBUaGF0J3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzY2VuYXJpby5cblxuSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBhdXRoX2htYWNzYCBpcyB1c2VkLiBJJ2xsIGNoZWNrIGBuZXQvc2N0cC9hdXRoLmNgIGFuZCB0cmFjZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXRpbGl6ZWQuIFRoaXMgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjMxLjQ0MzIxOTMzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3NDU2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXV0aF9obWFjc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9hdXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTIyMj1zdGF0aWMgc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqc2N0cF9hdXRoX21ha2VfbG9jYWxfdmVjdG9yKFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTIyOC1cXHRcXHRcXHQoc3RydWN0IHNjdHBfY2h1bmtzX3BhcmFtICopYXNvYy1cXHUwMDNlYy5hdXRoX2NodW5rcyxcXG5uZXQvc2N0cC9hdXRoLmM6MjI5OlxcdFxcdFxcdChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3MsIGdmcCk7XFxubmV0L3NjdHAvYXV0aC5jLTIzMC19XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmM9NTAxPWludCBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy01MDktXFxubmV0L3NjdHAvYXV0aC5jOjUxMDpcXHRobWFjcyA9IChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvYXV0aC5jLTUxMS1cXHRuX2VsdCA9IChudG9ocyhobWFjcy1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCkgLVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTY4ND1pbnQgc2N0cF9hdXRoX2VwX3NldF9obWFjcyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNzA3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBobWFjcy1cXHUwMDNlc2htYWNfbnVtX2lkZW50czsgaSsrKVxcbm5ldC9zY3RwL2F1dGguYzo3MDg6XFx0XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cXHUwMDNlaG1hY19pZHNbaV0gPVxcbm5ldC9zY3RwL2F1dGguYy03MDktXFx0XFx0XFx0XFx0aHRvbnMoaG1hY3MtXFx1MDAzZXNobWFjX2lkZW50c1tpXSk7XFxubmV0L3NjdHAvYXV0aC5jOjcxMDpcXHRlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0LVxcdTAwM2VwYXJhbV9oZHIubGVuZ3RoID1cXG5uZXQvc2N0cC9hdXRoLmMtNzExLVxcdFxcdFxcdGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTkyNT1pbnQgc2N0cF9hdXRoX2luaXQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtOTMwLVxcdCAqL1xcbm5ldC9zY3RwL2F1dGguYzo5MzE6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0KSB7XFxubmV0L3NjdHAvYXV0aC5jOjkzMjpcXHRcXHRzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvYXV0aC5jLTkzMy1cXG5uZXQvc2N0cC9hdXRoLmM6OTM0OlxcdFxcdGF1dGhfaG1hY3MgPSBremFsbG9jX2ZsZXgoKmF1dGhfaG1hY3MsIGhtYWNfaWRzLFxcbm5ldC9zY3RwL2F1dGguYy05MzUtXFx0XFx0XFx0XFx0XFx0ICBTQ1RQX0FVVEhfTlVNX0hNQUNTLCBnZnApO1xcbm5ldC9zY3RwL2F1dGguYzo5MzY6XFx0XFx0aWYgKCFhdXRoX2htYWNzKVxcbm5ldC9zY3RwL2F1dGguYy05MzctXFx0XFx0XFx0Z290byBub21lbTtcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy05NDItXFx0XFx0ICovXFxubmV0L3NjdHAvYXV0aC5jOjk0MzpcXHRcXHRhdXRoX2htYWNzLVxcdTAwM2VwYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fSE1BQ19BTEdPO1xcbm5ldC9zY3RwL2F1dGguYzo5NDQ6XFx0XFx0YXV0aF9obWFjcy1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XFxubmV0L3NjdHAvYXV0aC5jLTk0NS1cXHRcXHRcXHRcXHRodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgMik7XFxubmV0L3NjdHAvYXV0aC5jOjk0NjpcXHRcXHRhdXRoX2htYWNzLVxcdTAwM2VobWFjX2lkc1swXSA9IGh0b25zKFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpO1xcbm5ldC9zY3RwL2F1dGguYzo5NDc6XFx0XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IGF1dGhfaG1hY3M7XFxubmV0L3NjdHAvYXV0aC5jLTk0OC1cXHR9XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtOTY3LVxcdC8qIEZyZWUgYWxsIGFsbG9jYXRpb25zICovXFxubmV0L3NjdHAvYXV0aC5jOjk2ODpcXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmMtOTY5LVxcdGtmcmVlKGVwLVxcdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xcbm5ldC9zY3RwL2F1dGguYzo5NzA6XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XFxubmV0L3NjdHAvYXV0aC5jLTk3MS1cXHRlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz05NzU9dm9pZCBzY3RwX2F1dGhfZnJlZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXApXFxubmV0L3NjdHAvYXV0aC5jLTk3Ni17XFxubmV0L3NjdHAvYXV0aC5jOjk3NzpcXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmMtOTc4LVxcdGtmcmVlKGVwLVxcdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xcbm5ldC9zY3RwL2F1dGguYzo5Nzk6XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XFxubmV0L3NjdHAvYXV0aC5jLTk4MC1cXHRlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MzEuNTAyOTcyMDc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjI2MjU2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0NUUCBITUFDIEFsZ29yaXRobSBQYXJhbWV0ZXIgQnVmZmVyIE92ZXJmbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBjYWxsIGluIGBuZXQvc2N0cC9hc3NvY2lvbGEuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgZ29lcyB1cC4gV2UncmUgY29weWluZyBkYXRhIGZyb20gYGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdGAsIHdoaWNoIGlzIGEgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqYCwgaW50byBgYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3NgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGUgc2l6ZXMuIFRoZSBsZW5ndGggb2YgYGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdGAgaXMgZGV0ZXJtaW5lZCBieSBgbnRvaHMoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0LVx1MDAzZXBhcmFtX2hkci5sZW5ndGgpYCwgd2hpY2gsIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nLCBjYW4gZ28gdXAgdG8gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KWAuICBUaGF0IGFkZHMgdXAgdG8gYSBwb3RlbnRpYWwgb2YgMTAgYnl0ZXMuXG5cbkhvd2V2ZXIsIGBhc29jLVx1MDAzZWMuYXV0aF9obWFjc2AgaXMgb25seSBhbGxvY2F0ZWQgZm9yIDggYnl0ZXMuIFRoYXQncyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHNjZW5hcmlvISBUaGlzIGBtZW1jcHlgIGNvdWxkIG92ZXJ3cml0ZSB0d28gYnl0ZXMgb2YgZGF0YSBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgcXVlc3Rpb24gSSBub3cgbmVlZCB0byBhbnN3ZXIgaXM6IFdoYXQgZGF0YSBpcyBzdG9yZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBhdXRoX2htYWNzYCBidWZmZXIgd2l0aGluIHRoZSBgc3RydWN0IHNjdHBfY29va2llYCBzdHJ1Y3R1cmU/ICBVbmRlcnN0YW5kaW5nIHRoZSBzdWJzZXF1ZW50IG1lbW9yeSBsYXlvdXQgaXMgY3JpdGljYWwgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgb3ZlcmZsb3cuIFRoaXMgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDM0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjM1Ljk2NTU5OTQ5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcbiAzMDE6XFx0XFx0LyogSUcgU2VjdGlvbiAyLjM1LjMgXFxuIDMwMjpcXHRcXHQgKiBJbmNsdWRlIHRoZSBzb3VyY2UgcG9ydCBvZiB0aGUgSU5JVC1BQ0tcXG4gMzAzOlxcdFxcdCAqL1xcbiAzMDQ6XFx0XFx0X191MTZcXHRcXHRteV9wb3J0O1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRfX3U4IHByc2N0cF9jYXBhYmxlO1xcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHQvKiBQYWRkaW5nIGZvciBmdXR1cmUgdXNlICovXFxuIDMwOTpcXHRcXHRfX3U4IHBhZGRpbmc7ICBcXHRcXHRcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0X191MzIgYWRhcHRhdGlvbl9pbmQ7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdF9fdTggYXV0aF9yYW5kb21bc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArXFxuIDMxNDpcXHRcXHRcXHRcXHQgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdO1xcbiAzMTU6XFx0XFx0X191OCBhdXRoX2htYWNzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbiAzMTY6XFx0XFx0XFx0XFx0U0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNildO1xcbiAzMTc6XFx0XFx0X191OCBhdXRoX2NodW5rc1tzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgU0NUUF9BVVRIX01BWF9DSFVOS1NdO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHQvKiBUaGlzIGlzIGEgc2hpbSBmb3IgbXkgcGVlcidzIElOSVQgcGFja2V0LCBmb2xsb3dlZCBieVxcbiAzMjA6XFx0XFx0ICogYSBjb3B5IG9mIHRoZSByYXcgYWRkcmVzcyBsaXN0IG9mIHRoZSBhc3NvY2lhdGlvbi5cXG4gMzIxOlxcdFxcdCAqIFRoZSBsZW5ndGggb2YgdGhlIHJhdyBhZGRyZXNzIGxpc3QgaXMgc2F2ZWQgaW4gdGhlXFxuIDMyMjpcXHRcXHQgKiByYXdfYWRkcl9saXN0X2xlbiBmaWVsZCwgd2hpY2ggd2lsbCBiZSB1c2VkIGF0IHRoZSB0aW1lIHdoZW5cXG4gMzIzOlxcdFxcdCAqIHRoZSBhc3NvY2lhdGlvbiBUQ0IgaXMgcmUtY29uc3RydWN0ZWQgZnJvbSB0aGUgY29va2llLlxcbiAzMjQ6XFx0XFx0ICovXFxuIDMyNTpcXHRcXHRfX3UzMiByYXdfYWRkcl9saXN0X2xlbjtcXG4gMzI2OlxcdFxcdC8qIHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgcGVlcl9pbml0W107ICovXFxuIDMyNzpcXHR9O1xcbiAzMjg6XFx0XFxuIDMyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MzUuOTY1NzI3Mjg1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzY0NTk4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIEF1dGhlbnRpY2F0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3ZlIGdvdCBhIHBvdGVudGlhbCBzZWN1cml0eSBmaXggaGVyZSwgYSBidWZmZXIgb3ZlcmZsb3csIHNwZWNpZmljYWxseS4gVGhlIGtleSBpcyB0aGUgc2hpZnQgZnJvbSBgYXV0aF9obWFjc2AgdG8gYGF1dGhfY2h1bmtzYC4gSXQncyBwcmV0dHkgY2xlYXI6IGEgdHdvLWJ5dGUgb3ZlcmZsb3cgZnJvbSB0aGUgZm9ybWVyIGNvdWxkIHN0b21wIGFsbCBvdmVyIHRoZSBpbml0aWFsIHR3byBieXRlcyBvZiB0aGUgbGF0dGVyLiBBbmQgc2luY2UgYGF1dGhfY2h1bmtzYCBpcyBhbiBhcnJheSBvZiBgX191OGAsIGFuZCB1c2VkIGFzIGEgYHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqYCwgdGhvc2UgZmlyc3QgdHdvIGJ5dGVzIG9mIGBhdXRoX2NodW5rc2AgYXJlIGFjdHVhbGx5IHRoZSBgdHlwZWAgZmllbGQgb2YgYSBgc2N0cF9wYXJhbWhkcmAuIFNvLCBpZiB0aGUgb3ZlcmZsb3cgaGFwcGVucywgdGhlIGB0eXBlYCBmaWVsZCBvZiBgYXV0aF9jaHVua3NgIGdldHMgY29ycnVwdGVkLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC4gVmVyeSBnb29kLiBGaXhpbmcgYnVmZmVyIG92ZXJmbG93cyBpcyBhbHdheXMgYSBwcmlvcml0eS4gSXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBXZSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGV4cGxvaXRhYmxlIG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGluIG90aGVyIHdheXMuXG5cbk5vdywgaG93IGRvIHdlIHRyaWdnZXIgdGhpcz8gSG93IGRvIHdlIHJlYWNoIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgY29kZT8gQWxyaWdodCwgd2UgbmVlZCB0byBjcmVhdGUgYW4gU0NUUCBhc3NvY2lhdGlvbiBhbmQgc2V0IEhNQUNzLiBUaGUgY29kZSBwYXRoIHRoYXQgc2V0cyB0aGUgSE1BQ3MgaXMgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgLCBhbmQgdGhhdCBnZXRzIGNhbGxlZCBmcm9tIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIHRvIGJ1aWxkIGEgZnV6emluZyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjQwLjg0MjE4OTI1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9hdXRoX2VwX3NldF9obWFjc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTY2Mj1pbnQgc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgX191OCBjaHVua19pZClcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy02ODMtLyogQWRkIGhtYWMgaWRlbnRpZmlyZXMgdG8gdGhlIGVuZHBvaW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGhtYWMgaWRzICovXFxubmV0L3NjdHAvYXV0aC5jOjY4NDppbnQgc2N0cF9hdXRoX2VwX3NldF9obWFjcyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxubmV0L3NjdHAvYXV0aC5jLTY4NS1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqaG1hY3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz0zNjA5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMzYyOC1cXG5uZXQvc2N0cC9zb2NrZXQuYzozNjI5OlxcdHJldHVybiBzY3RwX2F1dGhfZXBfc2V0X2htYWNzKGVwLCBobWFjcyk7XFxubmV0L3NjdHAvc29ja2V0LmMtMzYzMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjQwLjkwMjkwNjQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTc0MDg4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgSE1BQyBJZGVudGlmaWVyIFNvY2tldCBPcHRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgY2xlYXI6IEknbSBmb2N1c2luZyBvbiBzZXR0aW5nIG9yIG1vZGlmeWluZyB0aGUgSE1BQyBpZGVudGlmaWVyIGZvciBTQ1RQIHNvY2tldHMuIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBmdW5jdGlvbi4gVGhhdCBuYW1lIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBidXQgSSBrbm93IGJldHRlciB0aGFuIHRvIGp1c3QgYXNzdW1lLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcsIG1heWJlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvciB0aGUgbWFuIHBhZ2UuIExldCdzIHNlZSBob3cgdGhpcyB0aGluZyB3b3JrcyBpbiBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NDUuMTYwMzE4MTEyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9zb2NrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjAwOlxcdFxcdHJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAsIHZhbC1cXHUwMDNlc2F1dGhfY2h1bmspO1xcbjM2MDE6XFx0fVxcbjM2MDI6XFx0XFxuMzYwMzpcXHQvKlxcbjM2MDQ6XFx0ICogNy4xLjE5LiAgR2V0IG9yIHNldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVycyAoU0NUUF9ITUFDX0lERU5UKVxcbjM2MDU6XFx0ICpcXG4zNjA2OlxcdCAqIFRoaXMgb3B0aW9uIGdldHMgb3Igc2V0cyB0aGUgbGlzdCBvZiBITUFDIGFsZ29yaXRobXMgdGhhdCB0aGUgbG9jYWxcXG4zNjA3OlxcdCAqIGVuZHBvaW50IHJlcXVpcmVzIHRoZSBwZWVyIHRvIHVzZS5cXG4zNjA4OlxcdCAqL1xcbjM2MDk6XFx0c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXFxuMzYxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqaG1hY3MsXFxuMzYxMTpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbjM2MTI6XFx0e1xcbjM2MTM6XFx0XFx0c3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktXFx1MDAzZWVwO1xcbjM2MTQ6XFx0XFx0dTMyIGlkZW50cztcXG4zNjE1OlxcdFxcbjM2MTY6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxuMzYxNzpcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4zNjE4OlxcdFxcbjM2MTk6XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9obWFjYWxnbykpXFxuMzYyMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNjIxOlxcdFxcdG9wdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgb3B0bGVuLCBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pICtcXG4zNjIyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZih1MTYpKTtcXG4zNjIzOlxcdFxcbjM2MjQ6XFx0XFx0aWRlbnRzID0gaG1hY3MtXFx1MDAzZXNobWFjX251bV9pZGVudHM7XFxuMzYyNTpcXHRcXHRpZiAoaWRlbnRzID09IDAgfHwgaWRlbnRzIFxcdTAwM2UgU0NUUF9BVVRIX05VTV9ITUFDUyB8fFxcbjM2MjY6XFx0XFx0ICAgIChpZGVudHMgKiBzaXplb2YodTE2KSkgXFx1MDAzZSAob3B0bGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2htYWNhbGdvKSkpXFxuMzYyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNjI4OlxcdFxcbjM2Mjk6XFx0XFx0cmV0dXJuIHNjdHBfYXV0aF9lcF9zZXRfaG1hY3MoZXAsIGhtYWNzKTtcXG4zNjMwOlxcdH1cXG4zNjMxOlxcdFxcbjM2MzI6XFx0LypcXG4zNjMzOlxcdCAqIDcuMS4yMC4gIFNldCBhIHNoYXJlZCBrZXkgKFNDVFBfQVVUSF9LRVkpXFxuMzYzNDpcXHQgKlxcbjM2MzU6XFx0ICogVGhpcyBvcHRpb24gd2lsbCBzZXQgYSBzaGFyZWQgc2VjcmV0IGtleSB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIGFuXFxuMzYzNjpcXHQgKiBhc3NvY2lhdGlvbiBzaGFyZWQga2V5LlxcbjM2Mzc6XFx0ICovXFxuMzYzODpcXHRzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX2tleShzdHJ1Y3Qgc29jayAqc2ssXFxuMzYzOTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjdHBfYXV0aGtleSAqYXV0aGtleSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NDUuMTYwOTEzOTkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTkyNzA2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU0NUUCBITUFDIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IEhNQUNzIGFyZSBoYW5kbGVkIGluIFNDVFAsIGFuZCB0aGUgZmxvdyBpcyBwcmV0dHkgY2xlYXIsIGFjdHVhbGx5LiBUaGUgY29yZSBpcyB0aGUgYFNDVFBfSE1BQ19JREVOVGAgc29ja2V0IG9wdGlvbiwgdGhhdCdzIHdoZXJlIHdlIHNldCB1cCB0aGUgSE1BQ3Mgd2Ugd2FudCB0byB1c2UuIFRoZW4sIGR1cmluZyBhc3NvY2lhdGlvbiBpbml0aWFsaXphdGlvbiwgdGhlIHN5c3RlbSB1c2VzIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIHRvIGRvIHRoZSBoZWF2eSBsaWZ0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGNvcGllcyB0aGUgSE1BQyBsaXN0LCBgZXAtXHUwMDNlYXV0aF9obWFjc19saXN0YCAod2hpY2ggSSBhc3N1bWUgaXMgYXQgdGhlIGVuZHBvaW50IGxldmVsKSwgdG8gdGhlIGFzc29jaWF0aW9uLXNwZWNpZmljIHN0cnVjdHVyZSBgYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3NgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHdlIG5lZWQgdGhlIGFzc29jaWF0aW9uIHRvIGhhdmUgaXRzIG93biBsb2NhbCBjb3B5IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLlxuXG5Ob3csIHdoZXJlIHRoaXMgYGFzb2MtXHUwMDNlYy5hdXRoX2htYWNzYCByZWFsbHkgZ2V0cyBsZXZlcmFnZWQgaXMgaW4gdGhlIGNvb2tpZSBnZW5lcmF0aW9uIHBoYXNlLiBCb3RoIGBzY3RwX21ha2VfaW5pdGAgYW5kIGBzY3RwX21ha2VfaW5pdF9hY2tgIHVzZSB0aGF0IGBhc29jLVx1MDAzZWMuYXV0aF9obWFjc2AgZGF0YS4gVGhhdOKAmXMgaG93IHRoZSBITUFDcyBhcmUgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZSwgZW5zdXJpbmcgYXV0aGVudGljYXRpb24gZHVyaW5nIGFzc29jaWF0aW9uIGVzdGFibGlzaG1lbnQuIEFuZCwganVzdCB0byByb3VuZCBpdCBvdXQsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgIGFsc28gcmVsaWVzIG9uIHRoaXMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uLiBSaWdodCwgc28gdGhhdCdzIHRoZSBsb2NhbCB2ZWN0b3IgZ2VuZXJhdGlvbi5cblxuU28sIHRoZSBuZXh0IG9idmlvdXMgc3RlcCBpcyB0byBkaWcgaW50byBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YC4gTGV04oCZcyBzZWUgZXhhY3RseSBob3cgdGhhdCBjb3B5IGlzIHBlcmZvcm1lZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBJJ20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjQ5LjQ2MDE4NzM1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMTcxMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfYXNzb2NpYXRpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmM9NDY9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy01MC0vKiBJbml0aWFsaXplIGEgbmV3IGFzc29jaWF0aW9uIGZyb20gcHJvdmlkZWQgbWVtb3J5LiAqL1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjUxOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9pbml0KFxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTUyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM9Mjg2PXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX25ldyhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTUtXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM6Mjk2OlxcdGlmICghc2N0cF9hc3NvY2lhdGlvbl9pbml0KGFzb2MsIGVwLCBzaywgc2NvcGUsIGdmcCkpXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMjk3LVxcdFxcdGdvdG8gZmFpbF9pbml0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjo0OS42NDMzNjQ2ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2ODI5NTQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBBc3NvY2lhdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJhY2tpbmcgdGhpcyBuZXcgU0NUUCBhc3NvY2lhdGlvbiBjcmVhdGlvbi4gVGhlIGBzY3RwX2Fzc29jaWF0aW9uX25ld2AgZnVuY3Rpb24gaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCdzIGNhbGxpbmcgYHNjdHBfYXNzb2NpYXRpb25faW5pdGAg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQncyB0aGUgc3RhbmRhcmQgcGF0dGVybjogbmV3IHJlc291cmNlLCBmb2xsb3dlZCBieSBpbml0aWFsaXphdGlvbi4gTm93LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgKnJlcXVpcmVkKiBmb3IgU0NUUCB0byBmdW5jdGlvbiBwcm9wZXJseT8gQW5kIHRoZW4sIHdpdGggYXV0aGVudGljYXRpb24gaW4gdGhlIG1peCwgd2hhdCBhcmUgdGhlIG1hbmRhdG9yeSBwYXJhbWV0ZXJzIGZvciBTQ1RQIEFVVEg/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvcHRpb25zIGlzIGNyaXRpY2FsIHRvIHByb3BlciBhc3NvY2lhdGlvbiBhbmQga2V5IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBzZXR1cCBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjUzLjAxMTY2MjA1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzNTYyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL0tjb25maWctNS1cXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXFxubmV0L3NjdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NTMuMDY4MDIwOTI5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTcyODgxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU0NUUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGZpbGUg4oCTIGl0J3MgdGhlIGhlYXJ0IG9mIFNDVFAncyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgZ29hbCBoZXJlIGlzbid0IGEgc3VyZmFjZS1sZXZlbCBzY2FuOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBjaG9pY2VzLCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIFNDVFAncyBpbmNsdXNpb24uIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoaWNoIG1pZ2h0IGJlIGNvbnNpZGVyZWQgXCJiZXN0IHByYWN0aWNlXCIgYmFzZWQgb24gbXkgZXhwZXJpZW5jZS4gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBTQ1RQJ3Mgb3B0aW1hbCB1dGlsaXphdGlvbi4gSSBleHBlY3QgdG8gZmluZCBjcml0aWNhbCBmbGFncyBjb250cm9sbGluZyBmZWF0dXJlcyBsaWtlIG11bHRpLWhvbWluZywgYnVuZGxpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGNoZWNrc3VtIG9yIGZsb3cgY29udHJvbCBhbGdvcml0aG1zLiBJIGFtIGFsc28gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcmVjZW50IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NTYuNTY1MzExMDIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU0NUUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBfU0NUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gIDExOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZyb20gUkZDIDI5NjAgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBcXFwiU0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcXG4gIDIwOlxcdFxcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXFxuICAyMTpcXHRcXHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXFxuICAyNDpcXHRcXHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcXG4gIDI1OlxcdFxcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXFxuICAyNjpcXHRcXHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxcbiAgMjc6XFx0XFx0ICBtZXNzYWdlcyxcXG4gIDI4OlxcdFxcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcXG4gIDI5OlxcdFxcdCAgcGFja2V0LCBhbmRcXG4gIDMwOlxcdFxcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxcbiAgMzE6XFx0XFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGtlcm5lbCdzIGR5bmFtaWMgZGVidWdnaW5nIGZyYW1ld29yay5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGlmIElQX1NDVFBcXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjo1Ni41NjUzNzIzNjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTA5Mjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3Igc29tZW9uZSBpbiB0aGUgZmllbGQ6XG5cbioqU0NUUCBBdXRoZW50aWNhdGlvbiBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIFNDVFAgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgcmlnaHQsIGBJUF9TQ1RQYCBpcyB0aGUgbWFpbiBjb25maWcgb3B0aW9uIHRvIGNvbnNpZGVyLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBCdXQgSSdtIGFsc28gdGhpbmtpbmcsIGlzIHRoYXQgKmFsbCogdGhlcmUgaXM/IFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggU0NUUCBhdXRoZW50aWNhdGlvbi4gSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIHNldHRpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHNwZWNpZmljYWxseT8gT3IgbWF5YmUgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGFjdGl2ZT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgbmVlZCB0byBmYWN0b3IgaW50byB0aGUgY29uZmlndXJhdGlvbiBwbGFuLiBOZWVkIHRvIGJlIHN1cmUgYWxsIGFzcGVjdHMgb2YgdGhlIHNldHVwIGFyZSBhY2NvdW50ZWQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MDAuMDc0NDY3NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTI0Nzg3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0NUUF9BVVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MDAuMTUwNTk2NDI3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTUyMTU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlNDVFAgQXV0aGVudGljYXRpb246IEEgUXVpY2sgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IFNDVFAgYW5kIHNwZWNpZmljYWxseSwgYXV0aGVudGljYXRpb24uIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSBpc24ndCBhIGRlZGljYXRlZCBgU0NUUF9BVVRIYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZywgd2hpY2ggaXMuLi4gaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuZXZlciBgSVBfU0NUUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZGVwYXJ0dXJlIGZyb20gaG93IHNvbWUgb3RoZXIgcHJvdG9jb2xzIGhhbmRsZSBzaW1pbGFyIGZlYXR1cmVzLCBhbmQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseS4gSSBjYW4ndCByZWx5IG9uIGFzc3VtcHRpb25zLCBldmVuIGlmIHRoZXkgc2VlbSBsb2dpY2FsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UuIEkgbmVlZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgc3RyYWlnaHQgZnJvbSB0aGUgc291cmNlIGNvZGUuIExldCdzIHNlZSB3aGF0IHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpY3RhdGUgYW5kIGNsYXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoYXQgYXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCBhcyBJJ20gcGVyY2VpdmluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzowMy43NjU4MTUxOTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MTpcXHRjb25maWcgU0NUUF9EQkdfT0JKQ05UXFxuICA0MjpcXHRcXHRib29sIFxcXCJTQ1RQOiBEZWJ1ZyBvYmplY3QgY291bnRzXFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICA0NDpcXHRcXHRoZWxwXFxuICA0NTpcXHRcXHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXFxuICA0NjpcXHRcXHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXFxuICA0NzpcXHRcXHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XFxuICA0ODpcXHRcXHQgICdjYXQgL3Byb2MvbmV0L3NjdHAvc2N0cF9kYmdfb2JqY250J1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE5cXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y2hvaWNlXFxuICA1MzpcXHRcXHRwcm9tcHQgXFxcIkRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kXFxcIlxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kLCBmb3JcXG4gIDU3OlxcdFxcdCAgd2hlbiBhIG1ldGhvZCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNlbGVjdGVkIHZpYSB0aGVcXG4gIDU4OlxcdFxcdCAgbmV0LnNjdHAuY29va2llX2htYWNfYWxnIHN5c2N0bC5cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0ICBJZiB1bnN1cmUsIGNob29zZSB0aGUgZGVmYXVsdCAoSE1BQy1TSEEyNTYpLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX1NIQTI1NlxcbiAgNjM6XFx0XFx0Ym9vbCBcXFwiSE1BQy1TSEEyNTZcXFwiXFxuICA2NDpcXHRcXG4gIDY1OlxcdGNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORVxcbiAgNjY6XFx0XFx0Ym9vbCBcXFwiTm9uZVxcXCJcXG4gIDY3OlxcdFxcbiAgNjg6XFx0ZW5kY2hvaWNlXFxuICA2OTpcXHRcXG4gIDcwOlxcdGNvbmZpZyBJTkVUX1NDVFBfRElBR1xcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDcyOlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRlbmRpZiAjIElQX1NDVFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MDMuNzY1ODg3OTU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODg5MzYwMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFNDVFAgSE1BQ3MqKlxuXG5Pa2F5LCBzbyB0aGUgYElQX1NDVFBgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgaGFyZCByZXF1aXJlbWVudCBoZXJlLCBnb29kLiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBoYW5kbGUgSE1BQ3MuIEkndmUgZ290IGEgbGlzdCBmb3JtaW5nIGluIG15IGhlYWQ6IGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgc2hvdWxkIGJlIHByb21pc2luZyBzaW5jZSBpdCdzIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIEhNQUNzLiBBbHNvLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCB3aGljaCBjb3BpZXMgSE1BQ3MsIGFuZCBgc2N0cF9tYWtlX2luaXRgLCBgc2N0cF9tYWtlX2luaXRfYWNrYCBhbmQgYHNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3RvcmAgYmVjYXVzZSB0aGV5ICp1c2UqIHRoZSBITUFDcy4gRmluYWxseSwgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYCwgd2hpY2ggaXMgYWxzbyBjcml0aWNhbCBmb3IgdmFsaWRhdGlvbi5cblxuQWxyaWdodCwgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0LCBhcmVuJ3Qgb3Zlcmx5IGdlbmVyaWMsIGFuZCBhcmUgYWNjZXNzaWJsZS4gUnVubmluZyB0aHJvdWdoIHRoZSBsaXN0IGFnYWluOiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgLCBhbmQgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC5cblxuTm93LCBkaWdnaW5nIGludG8gdGhlIHNwZWNpZmljcy4gYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpcyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBmcm9tIGBzY3RwX3NldHNvY2tvcHRgLiBJbnRlcmVzdGluZy4gSG93IGFib3V0IGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYD8gVGhhdCdzIGV4cG9ydGVkLCBzbyB0aGF0J3MgZ29vZC4gYHNjdHBfYXNzb2NpYXRpb25faW5pdGAgaXMgc3RhdGljIGJ1dCBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgIGlzIG5vbi1zdGF0aWMuICBgc2N0cF9tYWtlX2luaXRgIGFuZCBgc2N0cF9tYWtlX2luaXRfYWNrYCBhcmUgYm90aCBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgIGlzIHN0YXRpYywgYnV0IGBzY3RwX2F1dGhfYXNvY19nZXRfaG1hY2AgY2FsbHMgaXQuIEZpbmFsbHksIGBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZGAgaXMgbm9uLXN0YXRpYy5cblxuT2theSwgc28gdGFraW5nIGFsbCBvZiB0aGlzIGludG8gYWNjb3VudCwgdGhlIGtleSBzeW1ib2xzIGxvb2sgbGlrZSB0aGlzOlxuKiAgIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgKHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCBiZWNhdXNlIHN5emthbGxlciBjYW4gb2Z0ZW4gaGFuZGxlIGl0IGlmIGl0IGlzIGluIHRoZSBzeW1ib2wgdGFibGUsIGJ1dCBsZXQncyBjb25zaWRlciBub24tc3RhdGljIGZ1bmN0aW9ucywgb3IgYm90aClcbiogICBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2BcbiogICBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgXG4qICAgYHNjdHBfbWFrZV9pbml0YFxuKiAgIGBzY3RwX21ha2VfaW5pdF9hY2tgXG4qICAgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYFxuXG5Ob3csIGxldCdzIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgYW5kIHNlZSBpZiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIHRoZXJlLiBJdCdzIHN0YXRpYywgYnV0IFN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJ3QgaW5saW5lZCwgc28gdGhhdCdzIGEgcG9zaXRpdmUuIFRoaW5raW5nIGFib3V0IGBzY3RwX3NldHNvY2tvcHRgIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBpdCBpcyBhIGJpdCBnZW5lcmljLiBGb2N1c2luZyBvbiBzcGVjaWZpY2l0eSwgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpcyBtb3JlIHNwZWNpZmljLlxuXG5TbywgaGVyZSdzIHRoZSBuYXJyb3dlZC1kb3duIGxpc3QgSSdtIGdvaW5nIHRvIGZvY3VzIG9uOiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgLCBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2AsIGBzY3RwX21ha2VfaW5pdGAsIGBzY3RwX21ha2VfaW5pdF9hY2tgLCBhbmQgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpbiBgbmV0L3NjdHAvc29ja2V0LmNgIHRvIG1ha2Ugc3VyZSBpdCdzIHdoZXJlIEkgdGhpbmsgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjU5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MTQuNjU1MjUxMzU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMTgwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NvY2tldC5jPTM1Nzk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0zNjA4LSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjM2MDk6c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3NjdHAvc29ja2V0LmMtMzYxMC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqaG1hY3MsXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz00NTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ3MDItXFx0Y2FzZSBTQ1RQX0hNQUNfSURFTlQ6XFxubmV0L3NjdHAvc29ja2V0LmM6NDcwMzpcXHRcXHRyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzaywga29wdCwgb3B0bGVuKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy00NzA0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzoxNC43NjA1ODI2MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjEyNzQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzY3RwX3NldHNvY2tvcHRgIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBgc2N0cF9zZXRzb2Nrb3B0YC4gVGhhdCBzdWdnZXN0cyB3ZSdyZSBtb2RpZnlpbmcgc29ja2V0LWxldmVsIG9wdGlvbnMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYW4gU0NUUCBhc3NvY2lhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCB3aGF0J3MgYmVpbmcgY29uZmlndXJlZD8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGhvdyBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBjYWxsIGlzIGhhcHBlbmluZywgYW5kIHRoZSBmaXJzdCBwbGFjZSBJJ2QgY2hlY2sgaXMgdGhlIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZXhwZWN0IHN1Y2ggYSBjYWxsIHRvIGJlIG1hZGUsIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYwNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE3OjE4LjU1MjcxMjQ3OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyMjg1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9hc3NvY2lhdGlvbl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hc3NvY2lvbGEuYz00Nj1zdGF0aWMgdm9pZCBzY3RwX2Fzc29jX2ZyZWVfYXNjb25mX3F1ZXVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcXG4tLVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTUwLS8qIEluaXRpYWxpemUgYSBuZXcgYXNzb2NpYXRpb24gZnJvbSBwcm92aWRlZCBtZW1vcnkuICovXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM6NTE6c3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX2luaXQoXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz0yODY9c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnNjdHBfYXNzb2NpYXRpb25fbmV3KGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI5NS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyOTY6XFx0aWYgKCFzY3RwX2Fzc29jaWF0aW9uX2luaXQoYXNvYywgZXAsIHNrLCBzY29wZSwgZ2ZwKSlcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTctXFx0XFx0Z290byBmYWlsX2luaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE3OjE4LjYxNTk0NTUxOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3ODUzNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqU3RhdGljIHZzLiBOb24tU3RhdGljLCBhbmQgYSBEZWVwIERpdmUqKlxuXG5IbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWU6IHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBzZWVtcyBmdW5kYW1lbnRhbGx5IHN0YXRpYywgYXQgbGVhc3QgaW4gaXRzIGN1cnJlbnQgc3RydWN0dXJlLiBCdXQgdGhlIGNvbnN0cnVjdG9yIG9yIGluaXRpYWxpemVyLCBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgLCBpcyAqbm90KiBzdGF0aWMuIFRoYXQncyBhIGxpdHRsZeKApiBpbmNvbmdydW91cywgaXNuJ3QgaXQ/IE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBkZXNpZ24gc21lbGwgaGVyZS4gVGhlcmUgY291bGQgYmUgcmVhc29ucyBmb3IgdGhpcyBjaG9pY2UsIHBlcmhhcHMgYSBuZWVkIGZvciBsYXRlIGluaXRpYWxpemF0aW9uIG9yIHNvbWUgZXh0ZXJuYWwgZGVwZW5kZW5jeSB0aGF0IG5lY2Vzc2l0YXRlcyBkeW5hbWljIGFsbG9jYXRpb24gb3Igbm9uLXN0YXRpYyBiZWhhdmlvciwgYnV0IG15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlIG1vcmUgY29tcGxldGVseS5cblxuT2theSwgbGV0J3MgYmFjayB1cCBhIGxpdHRsZSBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGBzY3RwX21ha2VfaW5pdGAuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gZmlndXJlIG91dCBob3cgdGhlIGFzc29jaWF0aW9uIGlzIGNyZWF0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBvZiB0aGUga2V5IGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGBzY3RwX21ha2VfaW5pdGAg4oCTIGl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgwOTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzoyMS45MjM4MDEyNzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDA4OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfbWFrZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTM1PWludCBzY3RwX2luaXRfY2F1c2Uoc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCBfX2JlMTYgY2F1c2VfY29kZSxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xOTctICovXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjE5ODpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE5OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzcwLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNzE6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzcyLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4tLVxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYz0xMjc1PXN0YXRpYyBpbnQgc2N0cF9jbWRfaW50ZXJwcmV0ZXIoZW51bSBzY3RwX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSxcXG4tLVxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy0xMzc3LVxcdFxcdFxcdC8qIEdlbmVyYXRlIGFuIElOSVQgQUNLIGNodW5rLiAgKi9cXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmM6MTM3ODpcXHRcXHRcXHRuZXdfb2JqID0gc2N0cF9tYWtlX2luaXRfYWNrKGFzb2MsIGNodW5rLCBHRlBfQVRPTUlDLFxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy0xMzc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgMCk7XFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0zMTk9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQl9pbml0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0NC1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDU6XFx0cmVwbCA9IHNjdHBfbWFrZV9pbml0X2FjayhuZXdfYXNvYywgY2h1bmssIEdGUF9BVE9NSUMsIGxlbik7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQ2LVxcdGlmICghcmVwbClcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE1Mjk9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3VuZXhwZWN0ZWRfaW5pdChcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE2NjgtXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MTY2OTpcXHRyZXBsID0gc2N0cF9tYWtlX2luaXRfYWNrKG5ld19hc29jLCBjaHVuaywgR0ZQX0FUT01JQywgbGVuKTtcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNjcwLVxcdGlmICghcmVwbClcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI1Nzc9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl82X3N0YWxlKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjYyMi1cXHRicCA9IChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKikgXFx1MDAyNmFzb2MtXFx1MDAzZWJhc2UuYmluZF9hZGRyO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjI2MjM6XFx0cmVwbHkgPSBzY3RwX21ha2VfaW5pdChhc29jLCBicCwgR0ZQX0FUT01JQywgc2l6ZW9mKGJodCkpO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI2MjQtXFx0aWYgKCFyZXBseSlcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTUwMTg9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2Fzb2Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTA0Mi1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1MDQzOlxcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBcXHUwMDI2YXNvYy1cXHUwMDNlYmFzZS5iaW5kX2FkZHIsIEdGUF9BVE9NSUMsIDApO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUwNDQtXFx0aWYgKCFyZXBsKVxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTk1Mj1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl90MV9pbml0X3RpbWVyX2V4cGlyZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU5NjktXFx0XFx0YnAgPSAoc3RydWN0IHNjdHBfYmluZF9hZGRyICopIFxcdTAwMjZhc29jLVxcdTAwM2ViYXNlLmJpbmRfYWRkcjtcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1OTcwOlxcdFxcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBicCwgR0ZQX0FUT01JQywgMCk7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTk3MS1cXHRcXHRpZiAoIXJlcGwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE3OjIxLjk5MjgxNTgzMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYyMTA4MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBTY2FuIG9mIFNDVFAgSW5pdGlhbGl6YXRpb24qKlxuXG5SaWdodCwgYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2Agc2VlbSBwZXJmZWN0bHkgcmVhc29uYWJsZSBjaG9pY2VzIGFzIGJ1aWxkaW5nIGJsb2Nrcy4gTm8gcmVkIGZsYWdzIGp1bXBpbmcgb3V0IHRoZXJlLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgdGhpbmsgaXQncyB3b3J0aCBhIHF1aWNrIHJldmlldyBvZiBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgLiBJJ2xsIHdhbnQgdG8gZW5zdXJlIHRob3NlIGF1dGhlbnRpY2F0aW9uIHN0ZXBzIGFyZSBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzoyNC44NTQ5MjcyNTFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDM2NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hdXRoLmM9NDg1PXN0YXRpYyBpbnQgX19zY3RwX2F1dGhfZmluZF9obWFjaWQoX19iZTE2ICpobWFjcywgaW50IG5fZWx0cywgX19iZTE2IGhtYWNfaWQpXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNTAwLS8qIFNlZSBpZiB0aGUgSE1BQ19JRCBpcyBvbmUgdGhhdCB3ZSBjbGFpbSBhcyBzdXBwb3J0ZWQgKi9cXG5uZXQvc2N0cC9hdXRoLmM6NTAxOmludCBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9hdXRoLmMtNTAyLVxcdFxcdFxcdFxcdCAgICBfX2JlMTYgaG1hY19pZClcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQ0MDE9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDE5LVxcdCAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ0MjA6XFx0aWYgKCFzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChhc29jLCBhdXRoX2hkci1cXHUwMDNlaG1hY19pZCkpXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQyMS1cXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfQVVUSF9CQURfSE1BQztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MjQuOTIzOTY1ODg5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTY1MDIwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQsIHRoZSBmb2N1cyBzeW1ib2xzLiBCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSdtIG5vdGluZyB0aGVzZSBmdW5jdGlvbnMgYXMgcG90ZW50aWFsIGFyZWFzIHRvIHNjcnV0aW5pemU6IGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAsIGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYCwgYHNjdHBfYXNzb2NpYXRpb25fbmV3YCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGFuZCBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgLlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBXaGlsZSBpdCdzIHdvcnRoIGtlZXBpbmcgaW4gbWluZCwgSSBzaG91bGQgZGVmaW5pdGVseSBwcmlvcml0aXplIGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYCBzaW5jZSB0aGF0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIGV4cG9zZWQgdG8gZXh0ZXJuYWwgaW5wdXRzLiBIb3dldmVyLCBvbiBzZWNvbmQgdGhvdWdodCwgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpcyBzdGlsbCBhIGdvb2QgdGFyZ2V0LlxuXG5MZXQgbWUgc3VtbWFyaXplIG15IGZpbmRpbmdzLCBlbnN1cmluZyBJJ20gY2xlYXIgYW5kIGNvbmNpc2U6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBpcyBhIGJ1ZmZlciBvdmVyZmxvdyBmaXgsIGEgY2xhc3NpYyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG4qICAgKipFbmFibGVDb25maWdzOioqIFxcW+KAnElQXFxfU0NUUOKAnV0gLSBUaGF0J3MgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZS5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBcXFvigJxzY3RwXFxfc2V0c29ja29wdFxcX2htYWNcXF9pZGVudOKAnSwg4oCcc2N0cFxcX2F1dGhcXF9lcFxcX3NldFxcX2htYWNz4oCdLCDigJxzY3RwXFxfYXNzb2NpYXRpb25cXF9uZXfigJ0sIOKAnHNjdHBcXF9tYWtlXFxfaW5pdOKAnSwg4oCcc2N0cFxcX21ha2VcXF9pbml0XFxfYWNr4oCdLCDigJxzY3RwXFxfYXV0aFxcX2Fzb2NcXF92ZXJpZnlcXF9obWFjXFxfaWTigJ1dIC0gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiwgbGlzdGVkIGluIG9yZGVyIG9mIHBvdGVudGlhbCBleHBsb2l0YWJpbGl0eS5cbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIGJ5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIGBhdXRoX2htYWNzYCBhcnJheS4gVGhpcyBjaGFuZ2UgaXMgdG8gcHJvcGVybHkgYWNjb3VudCBmb3IgdGhlIGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGVsZW1lbnRzLiBJbiBzaG9ydCwgaXQncyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDU5LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzozMi4zMjA0NzEwNDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUzNDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjw7p6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 15:47:44 +0000 UTC FinishedAt: 2026-07-11 16:17:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1cd23ca80784223fa2204e16203f754da4e821f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1cd23ca80784223fa2204e16203f754da4e821f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "0f73dc18-9bed-4707-89b1-1ba3ba9ea538" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_setsockopt_hmac_ident", "sctp_auth_ep_set_hmacs", "sctp_association_new", "sctp_make_init", "sctp_make_init_ack", "sctp_auth_asoc_verify_hmac_id" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudCYjMzQ7LAogICAgJiMzNDtzY3RwX2F1dGhfZXBfc2V0X2htYWNzJiMzNDssCiAgICAmIzM0O3NjdHBfYXNzb2NpYXRpb25fbmV3JiMzNDssCiAgICAmIzM0O3NjdHBfbWFrZV9pbml0JiMzNDssCiAgICAmIzM0O3NjdHBfbWFrZV9pbml0X2FjayYjMzQ7LAogICAgJiMzNDtzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZmE0ZmFkMTFhMGFkOGRmNjU2NTQ3ZGEzMzA1OGUzMmNjNjUzN2VkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTY6MTU6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggYWZmZWU0NGJkMzhlMzEuLmNjY2M2NjI1NjFhYWMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5AQCAtMzEyLDcgJiM0MzszMTIsOCBAQCBzdHJ1Y3Qgc2N0cF9jb29raWUge1xuIFxuIFx0X191OCBhdXRoX3JhbmRvbVtzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICYjNDM7XG4gXHRcdFx0IFNDVFBfQVVUSF9SQU5ET01fTEVOR1RIXTtcbi1cdF9fdTggYXV0aF9obWFjc1tTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSAmIzQzOyAyXTtcbiYjNDM7XHRfX3U4IGF1dGhfaG1hY3Nbc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzO1xuJiM0MztcdFx0XHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XG4gXHRfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX01BWF9DSFVOS1NdO1xuIFxuIFx0LyogVGhpcyBpcyBhIHNoaW0gZm9yIG15IHBlZXImIzM5O3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2V0c29ja29wdF9obWFjX2lkZW50JiMzNDssCiAgICAmIzM0O3NjdHBfYXV0aF9lcF9zZXRfaG1hY3MmIzM0OywKICAgICYjMzQ7c2N0cF9hc3NvY2lhdGlvbl9uZXcmIzM0OywKICAgICYjMzQ7c2N0cF9tYWtlX2luaXQmIzM0OywKICAgICYjMzQ7c2N0cF9tYWtlX2luaXRfYWNrJiMzNDssCiAgICAmIzM0O3NjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiBgc3RydWN0IHNjdHBfY29va2llYCBieSBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIGBhdXRoX2htYWNzYCBhcnJheSB0byBwcm9wZXJseSBhY2NvbW1vZGF0ZSBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYCB3aXRoIGBTQ1RQX0FVVEhfTlVNX0hNQUNTYCBlbGVtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZmZlciBvdmVyZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmZhNGZhZDExYTBhZDhkZjY1NjU0N2RhMzMwNThlMzJjYzY1MzdlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDE2OjE1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBhZmZlZTQ0YmQzOGUzMS4uY2NjYzY2MjU2MWFhYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0zMTIsNyAmIzQzOzMxMiw4IEBAIHN0cnVjdCBzY3RwX2Nvb2tpZSB7CiAKIAlfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsKIAkJCSBTQ1RQX0FVVEhfUkFORE9NX0xFTkdUSF07Ci0JX191OCBhdXRoX2htYWNzW1NDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICYjNDM7IDJdOwomIzQzOwlfX3U4IGF1dGhfaG1hY3Nbc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzOwomIzQzOwkJCVNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpXTsKIAlfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX01BWF9DSFVOS1NdOwogCiAJLyogVGhpcyBpcyBhIHNoaW0gZm9yIG15IHBlZXImIzM5O3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNDVFAgQ29va2llIFNpemUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oYC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgc2N0cF9jb29raWVgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXV0aF9obWFjc2AgYXJyYXkgd2l0aGluIGl0LiBJbnRlcmVzdGluZywgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBUaGUgZGlmZiBzaG93cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYGF1dGhfaG1hY3NgLiBQcmV2aW91c2x5LCBpdCBhcHBlYXJzIHRvIGhhdmUgaW5jbHVkZWQgYW4gZXh0cmEgdHdvIGJ5dGVzLCBidXQgbm93IHRoZXkmIzM5O3JlIGdvbmUuIFRoZSBhcnJheSBzaXplIG5vdyBzZWVtcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgaGVhZGVyIHBsdXMgdGhlIG51bWJlciBvZiBITUFDcywgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBvZiBhIGBfX3UxNmAuIFRoaXMgc3RyaWtlcyBtZSBhcyBhIHJlZmluZW1lbnQsIGFpbWluZyB0byBiZSBtb3JlIHByZWNpc2UgaW4gdGhlIGFsbG9jYXRpb24uCgpUaGlzICpjb3VsZCogYmUgYSBidWcgZml4LCBvciBhbiBvcHRpbWl6YXRpb24uIEl0IGNvdWxkIGFsc28gYmUgYSBzdWJ0bGUgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgY29tcGF0aWJpbGl0eSBvZiBTQ1RQIGNvb2tpZSBleGNoYW5nZS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzZXMgb2YgYGF1dGhfaG1hY3NgIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYnl0ZXMgYXJlIGJlaW5nIGhhbmRsZWQsIHJlYWQsIGFuZCB3cml0dGVuLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGlzIGNoYW5nZSBtaWdodCBpbXBhY3QgZXhpc3RpbmcgY29va2llIHByb2Nlc3NpbmcgbG9naWMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIHVzYWdlIGlzIHZpdGFsIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIG5ldCBwb3NpdGl2ZSBvciBhIHBvdGVudGlhbCByZWdyZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F1dGhfaG1hY3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmM9NTE9c3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX2luaXQoXG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMjYyLVx0LyogU2F2ZSB0aGUgaG1hY3MgYW5kIGNodW5rcyBsaXN0IGludG8gdGhpcyBhc3NvY2lhdGlvbiAqL1xubmV0L3NjdHAvYXNzb2Npb2xhLmM6MjYzOlx0aWYgKGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdClcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI2NDpcdFx0bWVtY3B5KGFzb2MtXHUwMDNlYy5hdXRoX2htYWNzLCBlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QsXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyNjU6XHRcdFx0bnRvaHMoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0LVx1MDAzZXBhcmFtX2hkci5sZW5ndGgpKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI2Ni1cdGlmIChlcC1cdTAwM2VhdXRoX2NodW5rX2xpc3QpXG4tLVxubmV0L3NjdHAvYXV0aC5jPTIyMj1zdGF0aWMgc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqc2N0cF9hdXRoX21ha2VfbG9jYWxfdmVjdG9yKFxuLS1cbm5ldC9zY3RwL2F1dGguYy0yMjgtXHRcdFx0KHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqKWFzb2MtXHUwMDNlYy5hdXRoX2NodW5rcyxcbm5ldC9zY3RwL2F1dGguYzoyMjk6XHRcdFx0KHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqKWFzb2MtXHUwMDNlYy5hdXRoX2htYWNzLCBnZnApO1xubmV0L3NjdHAvYXV0aC5jLTIzMC19XG4tLVxubmV0L3NjdHAvYXV0aC5jPTUwMT1pbnQgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvYXV0aC5jLTUwOS1cbm5ldC9zY3RwL2F1dGguYzo1MTA6XHRobWFjcyA9IChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVx1MDAzZWMuYXV0aF9obWFjcztcbm5ldC9zY3RwL2F1dGguYy01MTEtXHRuX2VsdCA9IChudG9ocyhobWFjcy1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoKSAtXG4tLVxubmV0L3NjdHAvYXV0aC5jPTY4ND1pbnQgc2N0cF9hdXRoX2VwX3NldF9obWFjcyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvYXV0aC5jLTcwNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhtYWNzLVx1MDAzZXNobWFjX251bV9pZGVudHM7IGkmIzQzOyYjNDM7KVxubmV0L3NjdHAvYXV0aC5jOjcwODpcdFx0ZXAtXHUwMDNlYXV0aF9obWFjc19saXN0LVx1MDAzZWhtYWNfaWRzW2ldID1cbm5ldC9zY3RwL2F1dGguYy03MDktXHRcdFx0XHRodG9ucyhobWFjcy1cdTAwM2VzaG1hY19pZGVudHNbaV0pO1xubmV0L3NjdHAvYXV0aC5jOjcxMDpcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoID1cbm5ldC9zY3RwL2F1dGguYy03MTEtXHRcdFx0aHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzO1xuLS1cbm5ldC9zY3RwL2F1dGguYz05MjU9aW50IHNjdHBfYXV0aF9pbml0KHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9zY3RwL2F1dGguYy05MzAtXHQgKi9cbm5ldC9zY3RwL2F1dGguYzo5MzE6XHRpZiAoIWVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCkge1xubmV0L3NjdHAvYXV0aC5jOjkzMjpcdFx0c3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICphdXRoX2htYWNzO1xubmV0L3NjdHAvYXV0aC5jLTkzMy1cbm5ldC9zY3RwL2F1dGguYzo5MzQ6XHRcdGF1dGhfaG1hY3MgPSBremFsbG9jX2ZsZXgoKmF1dGhfaG1hY3MsIGhtYWNfaWRzLFxubmV0L3NjdHAvYXV0aC5jLTkzNS1cdFx0XHRcdFx0ICBTQ1RQX0FVVEhfTlVNX0hNQUNTLCBnZnApO1xubmV0L3NjdHAvYXV0aC5jOjkzNjpcdFx0aWYgKCFhdXRoX2htYWNzKVxubmV0L3NjdHAvYXV0aC5jLTkzNy1cdFx0XHRnb3RvIG5vbWVtO1xuLS1cbm5ldC9zY3RwL2F1dGguYy05NDItXHRcdCAqL1xubmV0L3NjdHAvYXV0aC5jOjk0MzpcdFx0YXV0aF9obWFjcy1cdTAwM2VwYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fSE1BQ19BTEdPO1xubmV0L3NjdHAvYXV0aC5jOjk0NDpcdFx0YXV0aF9obWFjcy1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoID1cbm5ldC9zY3RwL2F1dGguYy05NDUtXHRcdFx0XHRodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICYjNDM7IDIpO1xubmV0L3NjdHAvYXV0aC5jOjk0NjpcdFx0YXV0aF9obWFjcy1cdTAwM2VobWFjX2lkc1swXSA9IGh0b25zKFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpO1xubmV0L3NjdHAvYXV0aC5jOjk0NzpcdFx0ZXAtXHUwMDNlYXV0aF9obWFjc19saXN0ID0gYXV0aF9obWFjcztcbm5ldC9zY3RwL2F1dGguYy05NDgtXHR9XG4tLVxubmV0L3NjdHAvYXV0aC5jLTk2Ny1cdC8qIEZyZWUgYWxsIGFsbG9jYXRpb25zICovXG5uZXQvc2N0cC9hdXRoLmM6OTY4Olx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0KTtcbm5ldC9zY3RwL2F1dGguYy05NjktXHRrZnJlZShlcC1cdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xubmV0L3NjdHAvYXV0aC5jOjk3MDpcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XG5uZXQvc2N0cC9hdXRoLmMtOTcxLVx0ZXAtXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcbi0tXG5uZXQvc2N0cC9hdXRoLmM9OTc1PXZvaWQgc2N0cF9hdXRoX2ZyZWUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwKVxubmV0L3NjdHAvYXV0aC5jLTk3Ni17XG5uZXQvc2N0cC9hdXRoLmM6OTc3Olx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0KTtcbm5ldC9zY3RwL2F1dGguYy05NzgtXHRrZnJlZShlcC1cdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xubmV0L3NjdHAvYXV0aC5jOjk3OTpcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XG5uZXQvc2N0cC9hdXRoLmMtOTgwLVx0ZXAtXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTk4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA0LVx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfY2h1bmtzID0gTlVMTDtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMDU6XHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqYXV0aF9obWFjcyA9IE5VTEw7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA2LVx0c3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJzX3BhcmFtIHNhdDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc3LVx0XHQvKiBBZGQgSE1BQ1MgcGFyYW1ldGVyIGxlbmd0aCBpZiBhbnkgd2VyZSBkZWZpbmVkICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mjc4Olx0XHRhdXRoX2htYWNzID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3M7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mjc5Olx0XHRpZiAoYXV0aF9obWFjcy1cdTAwM2VsZW5ndGgpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjgwOlx0XHRcdGNodW5rc2l6ZSAmIzQzOz0gU0NUUF9QQUQ0KG50b2hzKGF1dGhfaG1hY3MtXHUwMDNlbGVuZ3RoKSk7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjgxLVx0XHRlbHNlXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjgyOlx0XHRcdGF1dGhfaG1hY3MgPSBOVUxMO1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI4My1cbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzU4LVx0XHRcdFx0IGFzb2MtXHUwMDNlYy5hdXRoX3JhbmRvbSk7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MzU5Olx0XHRpZiAoYXV0aF9obWFjcylcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNjA6XHRcdFx0c2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfaG1hY3MtXHUwMDNlbGVuZ3RoKSxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNjE6XHRcdFx0XHRcdGF1dGhfaG1hY3MpO1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTM2Mi1cdFx0aWYgKGF1dGhfY2h1bmtzKVxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0zNzE9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzc4LVx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfcmFuZG9tID0gTlVMTDtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNzk6XHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqYXV0aF9obWFjcyA9IE5VTEw7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzgwLVx0c3RydWN0IHNjdHBfY2h1bmsgKnJldHZhbCA9IE5VTEw7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTQ0My1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDQ6XHRcdGF1dGhfaG1hY3MgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilhc29jLVx1MDAzZWMuYXV0aF9obWFjcztcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDU6XHRcdGlmIChhdXRoX2htYWNzLVx1MDAzZWxlbmd0aClcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDY6XHRcdFx0Y2h1bmtzaXplICYjNDM7PSBTQ1RQX1BBRDQobnRvaHMoYXV0aF9obWFjcy1cdTAwM2VsZW5ndGgpKTtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy00NDctXHRcdGVsc2Vcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDg6XHRcdFx0YXV0aF9obWFjcyA9IE5VTEw7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNDQ5LVxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy01MDYtXHRcdFx0XHQgYXV0aF9yYW5kb20pO1xubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjUwNzpcdFx0aWYgKGF1dGhfaG1hY3MpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NTA4Olx0XHRcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBudG9ocyhhdXRoX2htYWNzLVx1MDAzZWxlbmd0aCksXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NTA5Olx0XHRcdFx0XHRhdXRoX2htYWNzKTtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy01MTAtXHRcdGlmIChhdXRoX2NodW5rcylcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz02OTYwPXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTY5NzItXG5uZXQvc2N0cC9zb2NrZXQuYzo2OTczOlx0aG1hY3MgPSBlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3Q7XG5uZXQvc2N0cC9zb2NrZXQuYy02OTc0LVx0ZGF0YV9sZW4gPSBudG9ocyhobWFjcy1cdTAwM2VwYXJhbV9oZHIubGVuZ3RoKSAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogU0NUUCBDb29raWUgU2l6ZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBzb21ldGhpbmcgaW4gdGhlIGBzY3RwX2Nvb2tpZWAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIGBhdXRoX2htYWNzYCBhcnJheS4gVGhlIG9yaWdpbmFsIHNpemUgY2FsY3VsYXRpb24gd2FzIGEgYml04oCmIHdlbGwsIGxldCYjMzk7cyBqdXN0IHNheSBpdCBsb29rcyBhIGxpdHRsZSBzdXNwaWNpb3VzLCBhbmQgbm93IHRoZXkmIzM5O3ZlIGNoYW5nZWQgaXQuIEl0IHdhcyBwcmV2aW91c2x5IGNvbXB1dGVkIGFzIGBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSAmIzQzOyAyYC4gTm93IGl04oCZcyBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzOyBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgc2l6ZSBpbmNyZWFzZSDigJMgZWZmZWN0aXZlbHksIGl0JiMzOTtzIGFkZGluZyBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdoaWNoIGlzIDQgYnl0ZXMsIG1pbnVzIHRoZSBvcmlnaW5hbCAyLCBzbyBhIG5ldCBpbmNyZWFzZSBvZiAyIGJ5dGVzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgKndoeSo/JiMzNDsuIFRoaXMgc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIHNvbWUgZm9ybSBvZiBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXR5LCBwb3RlbnRpYWxseSBhIHN1YnRsZSBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUuIEl0JiMzOTtzIGxpa2VseSBmaXhpbmcgc29tZSBzdHJ1Y3QgbGF5b3V0IHByb2JsZW0gaW4gdGhlIGV4aXN0aW5nIGNvZGViYXNlIHRoYXQgaGFzIGJlZW4gZXhwb3NlZCByZWNlbnRseS4KClRoZSBpbmNsdXNpb24gb2YgYHN0cnVjdCBzY3RwX3BhcmFtaGRyYCBpcyB0aGUga2V5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIHdoYXQgdGhhdCBoZWFkZXIgY29udGFpbnMuIFdoYXQgYWJvdXQgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWA/IElzIHRoaXMgY2hhbmdlIHJlbGF0ZWQgdG8gc3VwcG9ydGluZyBuZXcgSE1BQyBhbGdvcml0aG1zIG9yIHNvbWUga2luZCBvZiBwYXJhbWV0ZXIgaGFuZGxpbmcgZHVyaW5nIGF1dGhlbnRpY2F0aW9uPyBMZXQgbWUgZXhhbWluZSB0aG9zZSB0d28gc3RydWN0dXJlcyBpbiBkZXRhaWwsIGFuZCB0aGVuIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgZml4aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzY3RwX3BhcmFtaGRyIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2N0cC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2N0cC5oPTEyNT1lbnVtIHsgU0NUUF9DSFVOS19GTEFHX1QgPSAweDAxIH07XG4tLVxuaW5jbHVkZS9saW51eC9zY3RwLmgtMTU0LVxuaW5jbHVkZS9saW51eC9zY3RwLmg6MTU1OnN0cnVjdCBzY3RwX3BhcmFtaGRyIHtcbmluY2x1ZGUvbGludXgvc2N0cC5oLTE1Ni1cdF9fYmUxNiB0eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTQ1RQIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGFyb3VuZCBsaW5lIDE1NSBpbiBgaW5jbHVkZS9saW51eC9zY3RwLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sJiMzOTtzIGhlYWRlciBtYWdpYyBzaG91bGQgYmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0cnVjdHVyYWwgYmx1ZXByaW50cyBmb3IgaG93IFNDVFAgbWVzc2FnZXMgYXJlIGZvcm1hdHRlZCwgaG93IGNodW5rIHR5cGVzIGFyZSBkZWZpbmVkLCBhbmQgbWF5YmUgZXZlbiBzb21lIGtleSBmbGFncyBvciBjb250cm9sIGluZm9ybWF0aW9uLiBUaGlzIGhlYWRlciBmaWxlIHdpbGwgbGlrZWx5IGxheSB0aGUgZ3JvdW5kd29yayBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgYXNwZWN0cyBvZiBTQ1RQIGNvbW11bmljYXRpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NjdHAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0LyogUkZDIDI5NjBcbiAxNTI6XHQgKiBTZWN0aW9uIDMuMi4xIE9wdGlvbmFsL1ZhcmlhYmxlLWxlbmd0aCBQYXJtYWV0ZXIgRm9ybWF0LlxuIDE1MzpcdCAqL1xuIDE1NDpcdFxuIDE1NTpcdHN0cnVjdCBzY3RwX3BhcmFtaGRyIHtcbiAxNTY6XHRcdF9fYmUxNiB0eXBlO1xuIDE1NzpcdFx0X19iZTE2IGxlbmd0aDtcbiAxNTg6XHR9O1xuIDE1OTpcdFxuIDE2MDpcdGVudW0gc2N0cF9wYXJhbSB7XG4gMTYxOlx0XG4gMTYyOlx0XHQvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy41ICovXG4gMTYzOlx0XHRTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPXHRcdD0gY3B1X3RvX2JlMTYoMSksXG4gMTY0Olx0XHQvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4yLjEgKi9cbiAxNjU6XHRcdFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTXHRcdFx0PSBjcHVfdG9fYmUxNig1KSxcbiAxNjY6XHRcdFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTXHRcdFx0PSBjcHVfdG9fYmUxNig2KSxcbiAxNjc6XHRcdFNDVFBfUEFSQU1fU1RBVEVfQ09PS0lFXHRcdFx0PSBjcHVfdG9fYmUxNig3KSxcbiAxNjg6XHRcdFNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlNcdD0gY3B1X3RvX2JlMTYoOCksXG4gMTY5Olx0XHRTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkVcdFx0PSBjcHVfdG9fYmUxNig5KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlNDVFAgUGFyYW1ldGVyIEhlYWRlciBTaXplKioKClJpZ2h0LCBzbyB0aGUgYHN0cnVjdCBzY3RwX3BhcmFtaGRyYCBpcyBkZWZpbml0aXZlbHkgNCBieXRlcy4gR290IHRoYXQuIE5vdywgSSYjMzk7bSBsb29raW5nIGF0IHRoZSBvbGQgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYGF1dGhfaG1hY3NgLiBJdCB3YXMgYFNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICYjNDM7IDJgLiBPa2F5LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBpc3N1ZSBpcyB0aGF0IEkgbmVlZCB0byBiZSBzdXJlIHdoYXQgYFNDVFBfQVVUSF9OVU1fSE1BQ1NgICppcyouIE15IGh1bmNoIGlzIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIEhNQUNzLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBxdWlja2x5LiBJJiMzOTtsbCBzZWFyY2ggZm9yIGl0cyBkZWZpbml0aW9uIGFuZCB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaD00MTU9ZW51bSB7XG4tLVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjMtI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9NQVhcdF9fU0NUUF9BVVRIX0hNQUNfTUFYIC0gMVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjQ6I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIFx0X19TQ1RQX0FVVEhfSE1BQ19NQVhcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgX19TQ1RQX0FVVEhfSE1BQ19NQVhgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgX19TQ1RQX0FVVEhfSE1BQ19NQVhgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0FoYSwgYXV0aGVudGljYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEhNQUMsIGFuZCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiYjMzQ7IFRoaXMgaXMgY2xlYXJseSBzb21ldGhpbmcgY2VudHJhbCB0byB0aGUgc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSwgbGlrZWx5IGRlZmluaW5nIHRoZSB1cHBlciBib3VuZCBmb3IgdGhlIGtleSBzaXplIG9yIG90aGVyIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBITUFDIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuCgpNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgcHJvYmFibHkgZGVmaW5lcyB0aGUgbG9uZ2VzdCBwZXJtaXR0ZWQgSE1BQyBrZXksIHRoZSBiaWdnZXN0IGRpZ2VzdCBzaXplLCBvciBwZXJoYXBzIGEgY29uc3RhbnQgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBhdXRoZW50aWNhdGlvbiBzZXR1cCB3aXRoaW4gdGhlIFNDVFAgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBtYXhpbXVtIGlzIGNydWNpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgYWxsb3dzIGZvciBidWZmZXIgYWxsb2NhdGlvbiwgaW5wdXQgdmFsaWRhdGlvbiwgYW5kIHNlY3VyZSBoYW5kbGluZyBvZiB0aGUgYXV0aGVudGljYXRpb24gZGF0YSB3aXRoaW4gU0NUUCBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyB2YWx1ZSBjaG9zZW4gZm9yIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgcmVhc29uLCBvciBpcyBpdCBhIHNlY3VyaXR5LWZvY3VzZWQgbGltaXQgdG8gYXZvaWQgY2VydGFpbiBhdHRhY2tzPyBQZXJoYXBzIGl0JiMzOTtzIHRpZWQgdG8gYW4gZXN0YWJsaXNoZWQgc3RhbmRhcmQsIG9yIGEga25vd24gY29uc3RyYWludC4gVW5kZXJzdGFuZGluZyB0aGlzIG1heGltdW0gaXMgY3JpdGljYWwgZm9yIHNlY3VyZSBjb2RpbmcsIHRlc3RpbmcsIGFuZCBkZWJ1Z2dpbmcgYW55IFNDVFAtYmFzZWQgYXBwbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBSRkNzIGFuZCBzdGFuZGFyZCBkZWZpbml0aW9ucyB0byBzZWUgdGhlIHByZWNpc2UgY29udGV4dCBhbmQgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX1NDVFBfQVVUSF9ITUFDX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg9NDE1PWVudW0ge1xuLS1cbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDE5LVx0U0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2LFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjA6XHRfX1NDVFBfQVVUSF9ITUFDX01BWFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjEtfTtcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDIyLVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjM6I2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9NQVhcdF9fU0NUUF9BVVRIX0hNQUNfTUFYIC0gMVxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjQ6I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIFx0X19TQ1RQX0FVVEhfSE1BQ19NQVhcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNDVFAgSE1BQyBBbGdvcml0aG0gUGFyYW1ldGVyIFN0cnVjdHVyZSBTaXplKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBTQ1RQLXJlbGF0ZWQgY29uc3RhbnRzIGFuZCBkb2luZyBzb21lIHF1aWNrIGNhbGN1bGF0aW9ucy4gSXQgc2VlbXMgYF9fU0NUUF9BVVRIX0hNQUNfTUFYYCBhbmQgYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGJvdGggY2xvY2sgaW4gYXQgYSB2YWx1ZSBvZiAzLiBJIHJlbWVtYmVyIHRoZSBvbGQgc2l6ZSBmb3Igc29tZXRoaW5nIHdhcyBjYWxjdWxhdGVkIGFzIGAzICogMiAmIzQzOyAyID0gOGAgYnl0ZXMuIE5vdywgdGhlIG5ldyBzaXplIGlzIGA0ICYjNDM7IDMgKiAyID0gMTBgIGJ5dGVzLgoKSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJIHNob3VsZCBub3cgZXhhbWluZSB0aGUgZGV0YWlscyBvZiBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYC4gTmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aHkgd2UgbmVlZCB0aGUgZXh0cmEgYnl0ZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY3RwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY3RwLmg9MzI5PXN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSB7XG4tLVxuaW5jbHVkZS9saW51eC9zY3RwLmgtMzM0LS8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi9cbmluY2x1ZGUvbGludXgvc2N0cC5oOjMzNTpzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0ge1xuaW5jbHVkZS9saW51eC9zY3RwLmgtMzM2LVx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNDVFAgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFNDVFAgc3R1ZmYgYSBiaXQgYmV0dGVyLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gbG9vayBhdCB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NjdHAuaGAuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAzMzUuIEkmIzM5O20gaG9waW5nIHRoYXQgYXJlYSB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gW21lbnRpb24gc3BlY2lmaWMgYXJlYSB5b3UgYXJlIGxvb2tpbmcgZm9yLCBlLmcuLCBjaHVuayB0eXBlcywgYXNzb2NpYXRpb24gbWFuYWdlbWVudCwgZXRjLl0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBbbWVudGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVzLCBkZWZpbmVzLCBvciBmdW5jdGlvbnMgeW91IGFudGljaXBhdGVdLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY3RwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xuIDMzMTpcdFx0X191OCBjaHVua3NbXTtcbiAzMzI6XHR9O1xuIDMzMzpcdFxuIDMzNDpcdC8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi9cbiAzMzU6XHRzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0ge1xuIDMzNjpcdFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xuIDMzNzpcdFx0X19iZTE2IGhtYWNfaWRzW107XG4gMzM4Olx0fTtcbiAzMzk6XHRcbiAzNDA6XHQvKiBSRkMgMjk2MC4gIFNlY3Rpb24gMy4zLjMgSW5pdGlhdGlvbiBBY2tub3dsZWRnZW1lbnQgKElOSVQgQUNLKSAoMik6XG4gMzQxOlx0ICogICBUaGUgSU5JVCBBQ0sgY2h1bmsgaXMgdXNlZCB0byBhY2tub3dsZWRnZSB0aGUgaW5pdGlhdGlvbiBvZiBhbiBTQ1RQXG4gMzQyOlx0ICogICBhc3NvY2lhdGlvbi5cbiAzNDM6XHQgKi9cbiAzNDQ6XHRzdHJ1Y3Qgc2N0cF9pbml0YWNrX2NodW5rIHtcbiAzNDU6XHRcdHN0cnVjdCBzY3RwX2NodW5raGRyIGNodW5rX2hkcjtcbiAzNDY6XHRcdHN0cnVjdCBzY3RwX2luaXRoZHIgaW5pdF9oZHI7XG4gMzQ3Olx0fTtcbiAzNDg6XHRcbiAzNDk6XHQvKiBTZWN0aW9uIDMuMy4zLjEgU3RhdGUgQ29va2llICg3KSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTZWN1cml0eSBWdWxuZXJhYmlsaXR5IGluIFNDVFAgSE1BQyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAuIEl0JiMzOTtzIHN0cnVjdHVyZWQgd2l0aCBhIGBwYXJhbV9oZHJgLCB3aGljaCBpcyA0IGJ5dGVzLCBmb2xsb3dlZCBieSBhIGZsZXhpYmxlIGFycmF5IGNhbGxlZCBgaG1hY19pZHNgIHRoYXQgY29udGFpbnMgYF9fYmUxNmAgZWxlbWVudHMuIElmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgLCB3aGljaCBpcyBjdXJyZW50bHkgc2V0IHRvIDMsIHRoZSB0b3RhbCBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBgNCAmIzQzOyAoMyAqIDIpYCBvciAxMCBieXRlcywgZ2l2ZW4gdGhhdCBlYWNoIGBfX2JlMTZgIGlzIDIgYnl0ZXMuIEJ1dCBob2xkIG9uLCB0aGUgKm9sZCogc2l6aW5nIGNhbGN1bGF0aW9uIHdhcyBvbmx5IGBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSAmIzQzOyAyYCwgd2hpY2ggd29ya3Mgb3V0IHRvIGAzICogMiAmIzQzOyAyID0gOGAgYnl0ZXMuCgpXYWl0IGEgc2Vjb25k4oCmIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBUaGF0IG1lYW5zIHRoZSBvbGQgYWxsb2NhdGlvbiB3YXMgKnRvbyBzbWFsbCogdG8gYWNjb21tb2RhdGUgdGhlIGN1cnJlbnQgc3RydWN0dXJlIHdpdGggdGhyZWUgSE1BQ3MuIFRoYXQgOC1ieXRlIGFsbG9jYXRpb24gd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUgd2hlbmV2ZXIgYGF1dGhfaG1hY3NgIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIHdhcyBhY2Nlc3NlZCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIDMgSE1BQ3MhIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzY2VuYXJpby4KCkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgYXV0aF9obWFjc2AgaXMgdXNlZC4gSSYjMzk7bGwgY2hlY2sgYG5ldC9zY3RwL2F1dGguY2AgYW5kIHRyYWNlIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyB1dGlsaXplZC4gVGhpcyBuZWVkcyBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdXRoX2htYWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2F1dGguYz0yMjI9c3RhdGljIHN0cnVjdCBzY3RwX2F1dGhfYnl0ZXMgKnNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3Rvcihcbi0tXG5uZXQvc2N0cC9hdXRoLmMtMjI4LVx0XHRcdChzdHJ1Y3Qgc2N0cF9jaHVua3NfcGFyYW0gKilhc29jLVx1MDAzZWMuYXV0aF9jaHVua3MsXG5uZXQvc2N0cC9hdXRoLmM6MjI5Olx0XHRcdChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVx1MDAzZWMuYXV0aF9obWFjcywgZ2ZwKTtcbm5ldC9zY3RwL2F1dGguYy0yMzAtfVxuLS1cbm5ldC9zY3RwL2F1dGguYz01MDE9aW50IHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2F1dGguYy01MDktXG5uZXQvc2N0cC9hdXRoLmM6NTEwOlx0aG1hY3MgPSAoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3M7XG5uZXQvc2N0cC9hdXRoLmMtNTExLVx0bl9lbHQgPSAobnRvaHMoaG1hY3MtXHUwMDNlcGFyYW1faGRyLmxlbmd0aCkgLVxuLS1cbm5ldC9zY3RwL2F1dGguYz02ODQ9aW50IHNjdHBfYXV0aF9lcF9zZXRfaG1hY3Moc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2F1dGguYy03MDctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBobWFjcy1cdTAwM2VzaG1hY19udW1faWRlbnRzOyBpJiM0MzsmIzQzOylcbm5ldC9zY3RwL2F1dGguYzo3MDg6XHRcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cdTAwM2VobWFjX2lkc1tpXSA9XG5uZXQvc2N0cC9hdXRoLmMtNzA5LVx0XHRcdFx0aHRvbnMoaG1hY3MtXHUwMDNlc2htYWNfaWRlbnRzW2ldKTtcbm5ldC9zY3RwL2F1dGguYzo3MTA6XHRlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QtXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XG5uZXQvc2N0cC9hdXRoLmMtNzExLVx0XHRcdGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0Mztcbi0tXG5uZXQvc2N0cC9hdXRoLmM9OTI1PWludCBzY3RwX2F1dGhfaW5pdChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIGdmcF90IGdmcClcbi0tXG5uZXQvc2N0cC9hdXRoLmMtOTMwLVx0ICovXG5uZXQvc2N0cC9hdXRoLmM6OTMxOlx0aWYgKCFlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QpIHtcbm5ldC9zY3RwL2F1dGguYzo5MzI6XHRcdHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqYXV0aF9obWFjcztcbm5ldC9zY3RwL2F1dGguYy05MzMtXG5uZXQvc2N0cC9hdXRoLmM6OTM0Olx0XHRhdXRoX2htYWNzID0ga3phbGxvY19mbGV4KCphdXRoX2htYWNzLCBobWFjX2lkcyxcbm5ldC9zY3RwL2F1dGguYy05MzUtXHRcdFx0XHRcdCAgU0NUUF9BVVRIX05VTV9ITUFDUywgZ2ZwKTtcbm5ldC9zY3RwL2F1dGguYzo5MzY6XHRcdGlmICghYXV0aF9obWFjcylcbm5ldC9zY3RwL2F1dGguYy05MzctXHRcdFx0Z290byBub21lbTtcbi0tXG5uZXQvc2N0cC9hdXRoLmMtOTQyLVx0XHQgKi9cbm5ldC9zY3RwL2F1dGguYzo5NDM6XHRcdGF1dGhfaG1hY3MtXHUwMDNlcGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0hNQUNfQUxHTztcbm5ldC9zY3RwL2F1dGguYzo5NDQ6XHRcdGF1dGhfaG1hY3MtXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XG5uZXQvc2N0cC9hdXRoLmMtOTQ1LVx0XHRcdFx0aHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSAmIzQzOyAyKTtcbm5ldC9zY3RwL2F1dGguYzo5NDY6XHRcdGF1dGhfaG1hY3MtXHUwMDNlaG1hY19pZHNbMF0gPSBodG9ucyhTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKTtcbm5ldC9zY3RwL2F1dGguYzo5NDc6XHRcdGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IGF1dGhfaG1hY3M7XG5uZXQvc2N0cC9hdXRoLmMtOTQ4LVx0fVxuLS1cbm5ldC9zY3RwL2F1dGguYy05NjctXHQvKiBGcmVlIGFsbCBhbGxvY2F0aW9ucyAqL1xubmV0L3NjdHAvYXV0aC5jOjk2ODpcdGtmcmVlKGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XG5uZXQvc2N0cC9hdXRoLmMtOTY5LVx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9jaHVua19saXN0KTtcbm5ldC9zY3RwL2F1dGguYzo5NzA6XHRlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xubmV0L3NjdHAvYXV0aC5jLTk3MS1cdGVwLVx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XG4tLVxubmV0L3NjdHAvYXV0aC5jPTk3NT12b2lkIHNjdHBfYXV0aF9mcmVlKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcClcbm5ldC9zY3RwL2F1dGguYy05NzYte1xubmV0L3NjdHAvYXV0aC5jOjk3NzpcdGtmcmVlKGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XG5uZXQvc2N0cC9hdXRoLmMtOTc4LVx0a2ZyZWUoZXAtXHUwMDNlYXV0aF9jaHVua19saXN0KTtcbm5ldC9zY3RwL2F1dGguYzo5Nzk6XHRlcC1cdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xubmV0L3NjdHAvYXV0aC5jLTk4MC1cdGVwLVx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDM0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNDVFAgSE1BQyBBbGdvcml0aG0gUGFyYW1ldGVyIEJ1ZmZlciBPdmVyZmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBjYWxsIGluIGBuZXQvc2N0cC9hc3NvY2lvbGEuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgZ29lcyB1cC4gV2UmIzM5O3JlIGNvcHlpbmcgZGF0YSBmcm9tIGBlcC0mZ3Q7YXV0aF9obWFjc19saXN0YCwgd2hpY2ggaXMgYSBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICpgLCBpbnRvIGBhc29jLSZndDtjLmF1dGhfaG1hY3NgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGUgc2l6ZXMuIFRoZSBsZW5ndGggb2YgYGVwLSZndDthdXRoX2htYWNzX2xpc3RgIGlzIGRldGVybWluZWQgYnkgYG50b2hzKGVwLSZndDthdXRoX2htYWNzX2xpc3QtJmd0O3BhcmFtX2hkci5sZW5ndGgpYCwgd2hpY2gsIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nLCBjYW4gZ28gdXAgdG8gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNilgLiAgVGhhdCBhZGRzIHVwIHRvIGEgcG90ZW50aWFsIG9mIDEwIGJ5dGVzLgoKSG93ZXZlciwgYGFzb2MtJmd0O2MuYXV0aF9obWFjc2AgaXMgb25seSBhbGxvY2F0ZWQgZm9yIDggYnl0ZXMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzY2VuYXJpbyEgVGhpcyBgbWVtY3B5YCBjb3VsZCBvdmVyd3JpdGUgdHdvIGJ5dGVzIG9mIGRhdGEgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIHF1ZXN0aW9uIEkgbm93IG5lZWQgdG8gYW5zd2VyIGlzOiBXaGF0IGRhdGEgaXMgc3RvcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBgYXV0aF9obWFjc2AgYnVmZmVyIHdpdGhpbiB0aGUgYHN0cnVjdCBzY3RwX2Nvb2tpZWAgc3RydWN0dXJlPyAgVW5kZXJzdGFuZGluZyB0aGUgc3Vic2VxdWVudCBtZW1vcnkgbGF5b3V0IGlzIGNyaXRpY2FsIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG92ZXJmbG93LiBUaGlzIG5lZWRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcbiAzMDE6XHRcdC8qIElHIFNlY3Rpb24gMi4zNS4zIFxuIDMwMjpcdFx0ICogSW5jbHVkZSB0aGUgc291cmNlIHBvcnQgb2YgdGhlIElOSVQtQUNLXG4gMzAzOlx0XHQgKi9cbiAzMDQ6XHRcdF9fdTE2XHRcdG15X3BvcnQ7XG4gMzA1Olx0XG4gMzA2Olx0XHRfX3U4IHByc2N0cF9jYXBhYmxlO1xuIDMwNzpcdFxuIDMwODpcdFx0LyogUGFkZGluZyBmb3IgZnV0dXJlIHVzZSAqL1xuIDMwOTpcdFx0X191OCBwYWRkaW5nOyAgXHRcdFxuIDMxMDpcdFxuIDMxMTpcdFx0X191MzIgYWRhcHRhdGlvbl9pbmQ7XG4gMzEyOlx0XG4gMzEzOlx0XHRfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MztcbiAzMTQ6XHRcdFx0XHQgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdO1xuIDMxNTpcdFx0X191OCBhdXRoX2htYWNzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MztcbiAzMTY6XHRcdFx0XHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XG4gMzE3Olx0XHRfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgJiM0MzsgU0NUUF9BVVRIX01BWF9DSFVOS1NdO1xuIDMxODpcdFxuIDMxOTpcdFx0LyogVGhpcyBpcyBhIHNoaW0gZm9yIG15IHBlZXImIzM5O3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5XG4gMzIwOlx0XHQgKiBhIGNvcHkgb2YgdGhlIHJhdyBhZGRyZXNzIGxpc3Qgb2YgdGhlIGFzc29jaWF0aW9uLlxuIDMyMTpcdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgcmF3IGFkZHJlc3MgbGlzdCBpcyBzYXZlZCBpbiB0aGVcbiAzMjI6XHRcdCAqIHJhd19hZGRyX2xpc3RfbGVuIGZpZWxkLCB3aGljaCB3aWxsIGJlIHVzZWQgYXQgdGhlIHRpbWUgd2hlblxuIDMyMzpcdFx0ICogdGhlIGFzc29jaWF0aW9uIFRDQiBpcyByZS1jb25zdHJ1Y3RlZCBmcm9tIHRoZSBjb29raWUuXG4gMzI0Olx0XHQgKi9cbiAzMjU6XHRcdF9fdTMyIHJhd19hZGRyX2xpc3RfbGVuO1xuIDMyNjpcdFx0Lyogc3RydWN0IHNjdHBfaW5pdF9jaHVuayBwZWVyX2luaXRbXTsgKi9cbiAzMjc6XHR9O1xuIDMyODpcdFxuIDMyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAzNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIHNlY3VyaXR5IGZpeCBoZXJlLCBhIGJ1ZmZlciBvdmVyZmxvdywgc3BlY2lmaWNhbGx5LiBUaGUga2V5IGlzIHRoZSBzaGlmdCBmcm9tIGBhdXRoX2htYWNzYCB0byBgYXV0aF9jaHVua3NgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGEgdHdvLWJ5dGUgb3ZlcmZsb3cgZnJvbSB0aGUgZm9ybWVyIGNvdWxkIHN0b21wIGFsbCBvdmVyIHRoZSBpbml0aWFsIHR3byBieXRlcyBvZiB0aGUgbGF0dGVyLiBBbmQgc2luY2UgYGF1dGhfY2h1bmtzYCBpcyBhbiBhcnJheSBvZiBgX191OGAsIGFuZCB1c2VkIGFzIGEgYHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqYCwgdGhvc2UgZmlyc3QgdHdvIGJ5dGVzIG9mIGBhdXRoX2NodW5rc2AgYXJlIGFjdHVhbGx5IHRoZSBgdHlwZWAgZmllbGQgb2YgYSBgc2N0cF9wYXJhbWhkcmAuIFNvLCBpZiB0aGUgb3ZlcmZsb3cgaGFwcGVucywgdGhlIGB0eXBlYCBmaWVsZCBvZiBgYXV0aF9jaHVua3NgIGdldHMgY29ycnVwdGVkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguIFZlcnkgZ29vZC4gRml4aW5nIGJ1ZmZlciBvdmVyZmxvd3MgaXMgYWx3YXlzIGEgcHJpb3JpdHkuIEl0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gV2UgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBleHBsb2l0YWJsZSBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbiBvdGhlciB3YXlzLgoKTm93LCBob3cgZG8gd2UgdHJpZ2dlciB0aGlzPyBIb3cgZG8gd2UgcmVhY2ggdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBjb2RlPyBBbHJpZ2h0LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhbiBTQ1RQIGFzc29jaWF0aW9uIGFuZCBzZXQgSE1BQ3MuIFRoZSBjb2RlIHBhdGggdGhhdCBzZXRzIHRoZSBITUFDcyBpcyBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2AsIGFuZCB0aGF0IGdldHMgY2FsbGVkIGZyb20gYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YC4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyB0byBidWlsZCBhIGZ1enppbmcgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9hdXRoX2VwX3NldF9obWFjcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hdXRoLmM9NjYyPWludCBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCBfX3U4IGNodW5rX2lkKVxuLS1cbm5ldC9zY3RwL2F1dGguYy02ODMtLyogQWRkIGhtYWMgaWRlbnRpZmlyZXMgdG8gdGhlIGVuZHBvaW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGhtYWMgaWRzICovXG5uZXQvc2N0cC9hdXRoLmM6Njg0OmludCBzY3RwX2F1dGhfZXBfc2V0X2htYWNzKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbm5ldC9zY3RwL2F1dGguYy02ODUtXHRcdFx0ICAgc3RydWN0IHNjdHBfaG1hY2FsZ28gKmhtYWNzKVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTM2MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMzYyOC1cbm5ldC9zY3RwL3NvY2tldC5jOjM2Mjk6XHRyZXR1cm4gc2N0cF9hdXRoX2VwX3NldF9obWFjcyhlcCwgaG1hY3MpO1xubmV0L3NjdHAvc29ja2V0LmMtMzYzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODUzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgSE1BQyBJZGVudGlmaWVyIFNvY2tldCBPcHRpb24qKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIGNsZWFyOiBJJiMzOTttIGZvY3VzaW5nIG9uIHNldHRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBITUFDIGlkZW50aWZpZXIgZm9yIFNDVFAgc29ja2V0cy4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGZ1bmN0aW9uLiBUaGF0IG5hbWUgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCBhc3N1bWUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgbWF5YmUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9yIHRoZSBtYW4gcGFnZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aGluZyB3b3JrcyBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2MDA6XHRcdHJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAsIHZhbC1cdTAwM2VzYXV0aF9jaHVuayk7XG4zNjAxOlx0fVxuMzYwMjpcdFxuMzYwMzpcdC8qXG4zNjA0Olx0ICogNy4xLjE5LiAgR2V0IG9yIHNldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVycyAoU0NUUF9ITUFDX0lERU5UKVxuMzYwNTpcdCAqXG4zNjA2Olx0ICogVGhpcyBvcHRpb24gZ2V0cyBvciBzZXRzIHRoZSBsaXN0IG9mIEhNQUMgYWxnb3JpdGhtcyB0aGF0IHRoZSBsb2NhbFxuMzYwNzpcdCAqIGVuZHBvaW50IHJlcXVpcmVzIHRoZSBwZWVyIHRvIHVzZS5cbjM2MDg6XHQgKi9cbjM2MDk6XHRzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50KHN0cnVjdCBzb2NrICpzayxcbjM2MTA6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX2htYWNhbGdvICpobWFjcyxcbjM2MTE6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4zNjEyOlx0e1xuMzYxMzpcdFx0c3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktXHUwMDNlZXA7XG4zNjE0Olx0XHR1MzIgaWRlbnRzO1xuMzYxNTpcdFxuMzYxNjpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbjM2MTc6XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4zNjE4Olx0XG4zNjE5Olx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pKVxuMzYyMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM2MjE6XHRcdG9wdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgb3B0bGVuLCBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pICYjNDM7XG4zNjIyOlx0XHRcdFx0XHRcdCAgICAgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZih1MTYpKTtcbjM2MjM6XHRcbjM2MjQ6XHRcdGlkZW50cyA9IGhtYWNzLVx1MDAzZXNobWFjX251bV9pZGVudHM7XG4zNjI1Olx0XHRpZiAoaWRlbnRzID09IDAgfHwgaWRlbnRzIFx1MDAzZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIHx8XG4zNjI2Olx0XHQgICAgKGlkZW50cyAqIHNpemVvZih1MTYpKSBcdTAwM2UgKG9wdGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9obWFjYWxnbykpKVxuMzYyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM2Mjg6XHRcbjM2Mjk6XHRcdHJldHVybiBzY3RwX2F1dGhfZXBfc2V0X2htYWNzKGVwLCBobWFjcyk7XG4zNjMwOlx0fVxuMzYzMTpcdFxuMzYzMjpcdC8qXG4zNjMzOlx0ICogNy4xLjIwLiAgU2V0IGEgc2hhcmVkIGtleSAoU0NUUF9BVVRIX0tFWSlcbjM2MzQ6XHQgKlxuMzYzNTpcdCAqIFRoaXMgb3B0aW9uIHdpbGwgc2V0IGEgc2hhcmVkIHNlY3JldCBrZXkgd2hpY2ggaXMgdXNlZCB0byBidWlsZCBhblxuMzYzNjpcdCAqIGFzc29jaWF0aW9uIHNoYXJlZCBrZXkuXG4zNjM3Olx0ICovXG4zNjM4Olx0c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9rZXkoc3RydWN0IHNvY2sgKnNrLFxuMzYzOTpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzY3RwX2F1dGhrZXkgKmF1dGhrZXksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNDVFAgSE1BQyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEhNQUNzIGFyZSBoYW5kbGVkIGluIFNDVFAsIGFuZCB0aGUgZmxvdyBpcyBwcmV0dHkgY2xlYXIsIGFjdHVhbGx5LiBUaGUgY29yZSBpcyB0aGUgYFNDVFBfSE1BQ19JREVOVGAgc29ja2V0IG9wdGlvbiwgdGhhdCYjMzk7cyB3aGVyZSB3ZSBzZXQgdXAgdGhlIEhNQUNzIHdlIHdhbnQgdG8gdXNlLiBUaGVuLCBkdXJpbmcgYXNzb2NpYXRpb24gaW5pdGlhbGl6YXRpb24sIHRoZSBzeXN0ZW0gdXNlcyBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCB0byBkbyB0aGUgaGVhdnkgbGlmdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBjb3BpZXMgdGhlIEhNQUMgbGlzdCwgYGVwLSZndDthdXRoX2htYWNzX2xpc3RgICh3aGljaCBJIGFzc3VtZSBpcyBhdCB0aGUgZW5kcG9pbnQgbGV2ZWwpLCB0byB0aGUgYXNzb2NpYXRpb24tc3BlY2lmaWMgc3RydWN0dXJlIGBhc29jLSZndDtjLmF1dGhfaG1hY3NgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHdlIG5lZWQgdGhlIGFzc29jaWF0aW9uIHRvIGhhdmUgaXRzIG93biBsb2NhbCBjb3B5IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLgoKTm93LCB3aGVyZSB0aGlzIGBhc29jLSZndDtjLmF1dGhfaG1hY3NgIHJlYWxseSBnZXRzIGxldmVyYWdlZCBpcyBpbiB0aGUgY29va2llIGdlbmVyYXRpb24gcGhhc2UuIEJvdGggYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2AgdXNlIHRoYXQgYGFzb2MtJmd0O2MuYXV0aF9obWFjc2AgZGF0YS4gVGhhdOKAmXMgaG93IHRoZSBITUFDcyBhcmUgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZSwgZW5zdXJpbmcgYXV0aGVudGljYXRpb24gZHVyaW5nIGFzc29jaWF0aW9uIGVzdGFibGlzaG1lbnQuIEFuZCwganVzdCB0byByb3VuZCBpdCBvdXQsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgIGFsc28gcmVsaWVzIG9uIHRoaXMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uLiBSaWdodCwgc28gdGhhdCYjMzk7cyB0aGUgbG9jYWwgdmVjdG9yIGdlbmVyYXRpb24uCgpTbywgdGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgLiBMZXTigJlzIHNlZSBleGFjdGx5IGhvdyB0aGF0IGNvcHkgaXMgcGVyZm9ybWVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBhc3BlY3RzIEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2Fzc29jaWF0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmM9NDY9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTAtLyogSW5pdGlhbGl6ZSBhIG5ldyBhc3NvY2lhdGlvbiBmcm9tIHByb3ZpZGVkIG1lbW9yeS4gKi9cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjUxOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9pbml0KFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTItXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jPTI4Nj1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9uZXcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI5NS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI5NjpcdGlmICghc2N0cF9hc3NvY2lhdGlvbl9pbml0KGFzb2MsIGVwLCBzaywgc2NvcGUsIGdmcCkpXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTctXHRcdGdvdG8gZmFpbF9pbml0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzb2NpYXRpb24gYW5kIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2tpbmcgdGhpcyBuZXcgU0NUUCBhc3NvY2lhdGlvbiBjcmVhdGlvbi4gVGhlIGBzY3RwX2Fzc29jaWF0aW9uX25ld2AgZnVuY3Rpb24gaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIOKAkyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuOiBuZXcgcmVzb3VyY2UsIGZvbGxvd2VkIGJ5IGluaXRpYWxpemF0aW9uLiBOb3csIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgKnJlcXVpcmVkKiBmb3IgU0NUUCB0byBmdW5jdGlvbiBwcm9wZXJseT8gQW5kIHRoZW4sIHdpdGggYXV0aGVudGljYXRpb24gaW4gdGhlIG1peCwgd2hhdCBhcmUgdGhlIG1hbmRhdG9yeSBwYXJhbWV0ZXJzIGZvciBTQ1RQIEFVVEg/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvcHRpb25zIGlzIGNyaXRpY2FsIHRvIHByb3BlciBhc3NvY2lhdGlvbiBhbmQga2V5IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBzZXR1cCBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU0NUUCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXIuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBmaWxlIOKAkyBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgU0NUUCYjMzk7cyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgZ29hbCBoZXJlIGlzbiYjMzk7dCBhIHN1cmZhY2UtbGV2ZWwgc2NhbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCBhbmQgdGhlIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiBTQ1RQJiMzOTtzIGluY2x1c2lvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCB3aGljaCBtaWdodCBiZSBjb25zaWRlcmVkICYjMzQ7YmVzdCBwcmFjdGljZSYjMzQ7IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuIFRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgU0NUUCYjMzk7cyBvcHRpbWFsIHV0aWxpemF0aW9uLiBJIGV4cGVjdCB0byBmaW5kIGNyaXRpY2FsIGZsYWdzIGNvbnRyb2xsaW5nIGZlYXR1cmVzIGxpa2UgbXVsdGktaG9taW5nLCBidW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgY2hlY2tzdW0gb3IgZmxvdyBjb250cm9sIGFsZ29yaXRobXMuIEkgYW0gYWxzbyBnb2luZyB0byBiZSBsb29raW5nIGZvciByZWNlbnQgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3Igc29tZW9uZSBpbiB0aGUgZmllbGQ6CgoqKlNDVFAgQXV0aGVudGljYXRpb24gQ29uZmlndXJhdGlvbjogQSBRdWljayBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIFNDVFAgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgcmlnaHQsIGBJUF9TQ1RQYCBpcyB0aGUgbWFpbiBjb25maWcgb3B0aW9uIHRvIGNvbnNpZGVyLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gQnV0IEkmIzM5O20gYWxzbyB0aGlua2luZywgaXMgdGhhdCAqYWxsKiB0aGVyZSBpcz8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggU0NUUCBhdXRoZW50aWNhdGlvbi4gSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIHNldHRpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHNwZWNpZmljYWxseT8gT3IgbWF5YmUgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGFjdGl2ZT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgbmVlZCB0byBmYWN0b3IgaW50byB0aGUgY29uZmlndXJhdGlvbiBwbGFuLiBOZWVkIHRvIGJlIHN1cmUgYWxsIGFzcGVjdHMgb2YgdGhlIHNldHVwIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1RQX0FVVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg5MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipTQ1RQIEF1dGhlbnRpY2F0aW9uOiBBIFF1aWNrIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IFNDVFAgYW5kIHNwZWNpZmljYWxseSwgYXV0aGVudGljYXRpb24uIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSBpc24mIzM5O3QgYSBkZWRpY2F0ZWQgYFNDVFBfQVVUSGAgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhlIGtlcm5lbCBjb25maWcsIHdoaWNoIGlzLi4uIGludGVyZXN0aW5nLiBJdCBzZWVtcyB0aGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb25hbGl0eSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbmV2ZXIgYElQX1NDVFBgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBkZXBhcnR1cmUgZnJvbSBob3cgc29tZSBvdGhlciBwcm90b2NvbHMgaGFuZGxlIHNpbWlsYXIgZmVhdHVyZXMsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMuCgpIb2xkIG9uIGEgc2Vjb25kLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseS4gSSBjYW4mIzM5O3QgcmVseSBvbiBhc3N1bXB0aW9ucywgZXZlbiBpZiB0aGV5IHNlZW0gbG9naWNhbCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLiBJIG5lZWQgdGhlIGRlZmluaXRpdmUgYW5zd2VyIHN0cmFpZ2h0IGZyb20gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGljdGF0ZSBhbmQgY2xhcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgd2FudCB0byBiZSAqY2VydGFpbiogdGhhdCBhdXRoZW50aWNhdGlvbiBpcyBoYW5kbGVkIGFzIEkmIzM5O20gcGVyY2VpdmluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MTpcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbiAgNDI6XHRcdGJvb2wgXCYjMzQ7U0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1wmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDQ0Olx0XHRoZWxwXG4gIDQ1Olx0XHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXG4gIDQ2Olx0XHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDQ3Olx0XHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XG4gIDQ4Olx0XHQgICYjMzk7Y2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCYjMzk7XG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE5cbiAgNTE6XHRcbiAgNTI6XHRjaG9pY2VcbiAgNTM6XHRcdHByb21wdCBcJiMzNDtEZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFwmIzM0O1xuICA1NDpcdFx0ZGVmYXVsdCBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kLCBmb3JcbiAgNTc6XHRcdCAgd2hlbiBhIG1ldGhvZCBoYXNuJiMzOTt0IGJlZW4gZXhwbGljaXRseSBzZWxlY3RlZCB2aWEgdGhlXG4gIDU4Olx0XHQgIG5ldC5zY3RwLmNvb2tpZV9obWFjX2FsZyBzeXNjdGwuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIElmIHVuc3VyZSwgY2hvb3NlIHRoZSBkZWZhdWx0IChITUFDLVNIQTI1NikuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbiAgNjM6XHRcdGJvb2wgXCYjMzQ7SE1BQy1TSEEyNTZcJiMzNDtcbiAgNjQ6XHRcbiAgNjU6XHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcbiAgNjY6XHRcdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuICA2NzpcdFxuICA2ODpcdGVuZGNob2ljZVxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBJTkVUX1NDVFBfRElBR1xuICA3MTpcdFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbiAgNzI6XHRcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcbiAgNzM6XHRcbiAgNzQ6XHRcbiAgNzU6XHRlbmRpZiAjIElQX1NDVFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgU0NUUCBITUFDcyoqCgpPa2F5LCBzbyB0aGUgYElQX1NDVFBgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgaGFyZCByZXF1aXJlbWVudCBoZXJlLCBnb29kLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGZvY3VzaW5nIG9uIHRob3NlIHRoYXQgaGFuZGxlIEhNQUNzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGZvcm1pbmcgaW4gbXkgaGVhZDogYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBzaG91bGQgYmUgcHJvbWlzaW5nIHNpbmNlIGl0JiMzOTtzIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIEhNQUNzLiBBbHNvLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCB3aGljaCBjb3BpZXMgSE1BQ3MsIGFuZCBgc2N0cF9tYWtlX2luaXRgLCBgc2N0cF9tYWtlX2luaXRfYWNrYCBhbmQgYHNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3RvcmAgYmVjYXVzZSB0aGV5ICp1c2UqIHRoZSBITUFDcy4gRmluYWxseSwgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYCwgd2hpY2ggaXMgYWxzbyBjcml0aWNhbCBmb3IgdmFsaWRhdGlvbi4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgZXhpc3QsIGFyZW4mIzM5O3Qgb3Zlcmx5IGdlbmVyaWMsIGFuZCBhcmUgYWNjZXNzaWJsZS4gUnVubmluZyB0aHJvdWdoIHRoZSBsaXN0IGFnYWluOiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgLCBhbmQgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBzcGVjaWZpY3MuIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHNjdHBfc2V0c29ja29wdGAuIEludGVyZXN0aW5nLiBIb3cgYWJvdXQgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgPyBUaGF0JiMzOTtzIGV4cG9ydGVkLCBzbyB0aGF0JiMzOTtzIGdvb2QuIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIGlzIHN0YXRpYyBidXQgYHNjdHBfYXNzb2NpYXRpb25fbmV3YCBpcyBub24tc3RhdGljLiAgYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2AgYXJlIGJvdGggbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LiBgc2N0cF9hdXRoX21ha2VfbG9jYWxfdmVjdG9yYCBpcyBzdGF0aWMsIGJ1dCBgc2N0cF9hdXRoX2Fzb2NfZ2V0X2htYWNgIGNhbGxzIGl0LiBGaW5hbGx5LCBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgIGlzIG5vbi1zdGF0aWMuCgpPa2F5LCBzbyB0YWtpbmcgYWxsIG9mIHRoaXMgaW50byBhY2NvdW50LCB0aGUga2V5IHN5bWJvbHMgbG9vayBsaWtlIHRoaXM6CiogICBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgICh0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSB1c2Ugc3RhdGljIGZ1bmN0aW9ucywgYmVjYXVzZSBzeXprYWxsZXIgY2FuIG9mdGVuIGhhbmRsZSBpdCBpZiBpdCBpcyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBidXQgbGV0JiMzOTtzIGNvbnNpZGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBvciBib3RoKQoqICAgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgCiogICBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgCiogICBgc2N0cF9tYWtlX2luaXRgCiogICBgc2N0cF9tYWtlX2luaXRfYWNrYAoqICAgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYAoKTm93LCBsZXQmIzM5O3MgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgc2VlIGlmIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgaXMgdGhlcmUuIEl0JiMzOTtzIHN0YXRpYywgYnV0IFN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJiMzOTt0IGlubGluZWQsIHNvIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZS4gVGhpbmtpbmcgYWJvdXQgYHNjdHBfc2V0c29ja29wdGAgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGl0IGlzIGEgYml0IGdlbmVyaWMuIEZvY3VzaW5nIG9uIHNwZWNpZmljaXR5LCBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIG1vcmUgc3BlY2lmaWMuCgpTbywgaGVyZSYjMzk7cyB0aGUgbmFycm93ZWQtZG93biBsaXN0IEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb246IGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAsIGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGFuZCBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpbiBgbmV0L3NjdHAvc29ja2V0LmNgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyB3aGVyZSBJIHRoaW5rIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYz0zNTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1bmsoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTM2MDgtICovXG5uZXQvc2N0cC9zb2NrZXQuYzozNjA5OnN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLFxubmV0L3NjdHAvc29ja2V0LmMtMzYxMC1cdFx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX2htYWNhbGdvICpobWFjcyxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz00NTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy00NzAyLVx0Y2FzZSBTQ1RQX0hNQUNfSURFTlQ6XG5uZXQvc2N0cC9zb2NrZXQuYzo0NzAzOlx0XHRyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzaywga29wdCwgb3B0bGVuKTtcbm5ldC9zY3RwL3NvY2tldC5jLTQ3MDQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNjdHBfc2V0c29ja29wdGAgQ2FsbCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHNjdHBfc2V0c29ja29wdGAuIFRoYXQgc3VnZ2VzdHMgd2UmIzM5O3JlIG1vZGlmeWluZyBzb2NrZXQtbGV2ZWwgb3B0aW9ucywgcHJvYmFibHkgcmVsYXRlZCB0byBhbiBTQ1RQIGFzc29jaWF0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZD8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBoYXBwZW5pbmcsIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBjaGVjayBpcyB0aGUgYHNjdHBfYXNzb2NpYXRpb25faW5pdGAgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZXhwZWN0IHN1Y2ggYSBjYWxsIHRvIGJlIG1hZGUsIGdpdmVuIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2Fzc29jaWF0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmM9NDY9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTAtLyogSW5pdGlhbGl6ZSBhIG5ldyBhc3NvY2lhdGlvbiBmcm9tIHByb3ZpZGVkIG1lbW9yeS4gKi9cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjUxOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9pbml0KFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTItXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jPTI4Nj1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9uZXcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI5NS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI5NjpcdGlmICghc2N0cF9hc3NvY2lhdGlvbl9pbml0KGFzb2MsIGVwLCBzaywgc2NvcGUsIGdmcCkpXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTctXHRcdGdvdG8gZmFpbF9pbml0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMsIGFuZCBhIERlZXAgRGl2ZSoqCgpIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZTogdGhlIGFzc29jaWF0aW9uIHN0YXRlIHNlZW1zIGZ1bmRhbWVudGFsbHkgc3RhdGljLCBhdCBsZWFzdCBpbiBpdHMgY3VycmVudCBzdHJ1Y3R1cmUuIEJ1dCB0aGUgY29uc3RydWN0b3Igb3IgaW5pdGlhbGl6ZXIsIGBzY3RwX2Fzc29jaWF0aW9uX25ld2AsIGlzICpub3QqIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGxpdHRsZeKApiBpbmNvbmdydW91cywgaXNuJiMzOTt0IGl0PyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgZGVzaWduIHNtZWxsIGhlcmUuIFRoZXJlIGNvdWxkIGJlIHJlYXNvbnMgZm9yIHRoaXMgY2hvaWNlLCBwZXJoYXBzIGEgbmVlZCBmb3IgbGF0ZSBpbml0aWFsaXphdGlvbiBvciBzb21lIGV4dGVybmFsIGRlcGVuZGVuY3kgdGhhdCBuZWNlc3NpdGF0ZXMgZHluYW1pYyBhbGxvY2F0aW9uIG9yIG5vbi1zdGF0aWMgYmVoYXZpb3IsIGJ1dCBteSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gSSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgaGVyZSBtb3JlIGNvbXBsZXRlbHkuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cCBhIGxpdHRsZSBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBgc2N0cF9tYWtlX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgYXNzb2NpYXRpb24gaXMgY3JlYXRlZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIG9mIHRoZSBrZXkgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gYHNjdHBfbWFrZV9pbml0YCDigJMgaXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9tYWtlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTEzNT1pbnQgc2N0cF9pbml0X2NhdXNlKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgX19iZTE2IGNhdXNlX2NvZGUsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE5Ny0gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoxOTg6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE5OS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzcwLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjM3MTpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXRfYWNrKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTM3Mi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi0tXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmM9MTI3NT1zdGF0aWMgaW50IHNjdHBfY21kX2ludGVycHJldGVyKGVudW0gc2N0cF9ldmVudF90eXBlIGV2ZW50X3R5cGUsXG4tLVxubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jLTEzNzctXHRcdFx0LyogR2VuZXJhdGUgYW4gSU5JVCBBQ0sgY2h1bmsuICAqL1xubmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jOjEzNzg6XHRcdFx0bmV3X29iaiA9IHNjdHBfbWFrZV9pbml0X2Fjayhhc29jLCBjaHVuaywgR0ZQX0FUT01JQyxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy0xMzc5LVx0XHRcdFx0XHRcdCAgICAgMCk7XG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzE5PWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQ0LVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDQ1Olx0cmVwbCA9IHNjdHBfbWFrZV9pbml0X2FjayhuZXdfYXNvYywgY2h1bmssIEdGUF9BVE9NSUMsIGxlbik7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDYtXHRpZiAoIXJlcGwpXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTUyOT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fdW5leHBlY3RlZF9pbml0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE2NjgtXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxNjY5Olx0cmVwbCA9IHNjdHBfbWFrZV9pbml0X2FjayhuZXdfYXNvYywgY2h1bmssIEdGUF9BVE9NSUMsIGxlbik7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNjcwLVx0aWYgKCFyZXBsKVxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI1Nzc9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl82X3N0YWxlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI2MjItXHRicCA9IChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKikgXHUwMDI2YXNvYy1cdTAwM2ViYXNlLmJpbmRfYWRkcjtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjI2MjM6XHRyZXBseSA9IHNjdHBfbWFrZV9pbml0KGFzb2MsIGJwLCBHRlBfQVRPTUlDLCBzaXplb2YoYmh0KSk7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yNjI0LVx0aWYgKCFyZXBseSlcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz01MDE4PWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9hc29jKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MDQyLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTA0MzpcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBcdTAwMjZhc29jLVx1MDAzZWJhc2UuYmluZF9hZGRyLCBHRlBfQVRPTUlDLCAwKTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUwNDQtXHRpZiAoIXJlcGwpXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTk1Mj1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl90MV9pbml0X3RpbWVyX2V4cGlyZShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01OTY5LVx0XHRicCA9IChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKikgXHUwMDI2YXNvYy1cdTAwM2ViYXNlLmJpbmRfYWRkcjtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU5NzA6XHRcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBicCwgR0ZQX0FUT01JQywgMCk7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01OTcxLVx0XHRpZiAoIXJlcGwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIFNjYW4gb2YgU0NUUCBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2Agc2VlbSBwZXJmZWN0bHkgcmVhc29uYWJsZSBjaG9pY2VzIGFzIGJ1aWxkaW5nIGJsb2Nrcy4gTm8gcmVkIGZsYWdzIGp1bXBpbmcgb3V0IHRoZXJlLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgdGhpbmsgaXQmIzM5O3Mgd29ydGggYSBxdWljayByZXZpZXcgb2YgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC4gSSYjMzk7bGwgd2FudCB0byBlbnN1cmUgdGhvc2UgYXV0aGVudGljYXRpb24gc3RlcHMgYXJlIHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hdXRoLmM9NDg1PXN0YXRpYyBpbnQgX19zY3RwX2F1dGhfZmluZF9obWFjaWQoX19iZTE2ICpobWFjcywgaW50IG5fZWx0cywgX19iZTE2IGhtYWNfaWQpXG4tLVxubmV0L3NjdHAvYXV0aC5jLTUwMC0vKiBTZWUgaWYgdGhlIEhNQUNfSUQgaXMgb25lIHRoYXQgd2UgY2xhaW0gYXMgc3VwcG9ydGVkICovXG5uZXQvc2N0cC9hdXRoLmM6NTAxOmludCBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2F1dGguYy01MDItXHRcdFx0XHQgICAgX19iZTE2IGhtYWNfaWQpXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQwMT1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDE5LVx0ICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDIwOlx0aWYgKCFzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChhc29jLCBhdXRoX2hkci1cdTAwM2VobWFjX2lkKSlcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0MjEtXHRcdHJldHVybiBTQ1RQX0lFUlJPUl9BVVRIX0JBRF9ITUFDO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1OQoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkLCB0aGUgZm9jdXMgc3ltYm9scy4gQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEkmIzM5O20gbm90aW5nIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgYXJlYXMgdG8gc2NydXRpbml6ZTogYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCwgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgLCBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgLCBgc2N0cF9tYWtlX2luaXRgLCBgc2N0cF9tYWtlX2luaXRfYWNrYCwgYW5kIGBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZGAuCgpBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBXaGlsZSBpdCYjMzk7cyB3b3J0aCBrZWVwaW5nIGluIG1pbmQsIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2Agc2luY2UgdGhhdCBpcyBtb3JlIGxpa2VseSB0byBiZSBleHBvc2VkIHRvIGV4dGVybmFsIGlucHV0cy4gSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgaXMgc3RpbGwgYSBnb29kIHRhcmdldC4KCkxldCBtZSBzdW1tYXJpemUgbXkgZmluZGluZ3MsIGVuc3VyaW5nIEkmIzM5O20gY2xlYXIgYW5kIGNvbmNpc2U6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgaXMgYSBidWZmZXIgb3ZlcmZsb3cgZml4LCBhIGNsYXNzaWMgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoqICAgKipFbmFibGVDb25maWdzOioqIFxb4oCcSVBcX1NDVFDigJ1dIC0gVGhhdCYjMzk7cyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiwgb2YgY291cnNlLgoqICAgKipGb2N1c1N5bWJvbHM6KiogXFvigJxzY3RwXF9zZXRzb2Nrb3B0XF9obWFjXF9pZGVudOKAnSwg4oCcc2N0cFxfYXV0aFxfZXBcX3NldFxfaG1hY3PigJ0sIOKAnHNjdHBcX2Fzc29jaWF0aW9uXF9uZXfigJ0sIOKAnHNjdHBcX21ha2VcX2luaXTigJ0sIOKAnHNjdHBcX21ha2VcX2luaXRcX2Fja+KAnSwg4oCcc2N0cFxfYXV0aFxfYXNvY1xfdmVyaWZ5XF9obWFjXF9pZOKAnV0gLSBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbiwgbGlzdGVkIGluIG9yZGVyIG9mIHBvdGVudGlhbCBleHBsb2l0YWJpbGl0eS4KKiAgICoqUmVhc29uaW5nOioqICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgYGF1dGhfaG1hY3NgIGFycmF5LiBUaGlzIGNoYW5nZSBpcyB0byBwcm9wZXJseSBhY2NvdW50IGZvciB0aGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIEluIHNob3J0LCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQmIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2VwX3NldF9obWFjcyYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jaWF0aW9uX25ldyYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdCYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdF9hY2smIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIGJ5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgYGF1dGhfaG1hY3NgIGFycmF5IHRvIHByb3Blcmx5IGFjY29tbW9kYXRlIGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVmZmVyIG92ZXJmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQmIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2VwX3NldF9obWFjcyYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jaWF0aW9uX25ldyYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdCYjMzQ7LAogICAgJiMzNDtzY3RwX21ha2VfaW5pdF9hY2smIzM0OywKICAgICYjMzQ7c2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIGJ5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgYGF1dGhfaG1hY3NgIGFycmF5IHRvIHByb3Blcmx5IGFjY29tbW9kYXRlIGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVmZmVyIG92ZXJmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTU6NTkuNDQ4OTc4MzgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NDkwMzkwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE1OjU5LjQ0OTAwMDE1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4NzI0OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmZhNGZhZDExYTBhZDhkZjY1NjU0N2RhMzMwNThlMzJjYzY1MzdlZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNjoxNTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXFxuaW5kZXggYWZmZWU0NGJkMzhlMzEuLmNjY2M2NjI1NjFhYWMzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcXG5AQCAtMzEyLDcgKzMxMiw4IEBAIHN0cnVjdCBzY3RwX2Nvb2tpZSB7XFxuIFxcbiBcXHRfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbiBcXHRcXHRcXHQgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdO1xcbi1cXHRfX3U4IGF1dGhfaG1hY3NbU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNikgKyAyXTtcXG4rXFx0X191OCBhdXRoX2htYWNzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbitcXHRcXHRcXHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XFxuIFxcdF9fdTggYXV0aF9jaHVua3Nbc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIFNDVFBfQVVUSF9NQVhfQ0hVTktTXTtcXG4gXFxuIFxcdC8qIFRoaXMgaXMgYSBzaGltIGZvciBteSBwZWVyJ3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE1OjU5Ljc0ODUyMTQ0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI2NDk0ODc1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmZhNGZhZDExYTBhZDhkZjY1NjU0N2RhMzMwNThlMzJjYzY1MzdlZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDE2OjE1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggYWZmZWU0NGJkMzhlMzEuLmNjY2M2NjI1NjFhYWMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcbisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5AQCAtMzEyLDcgKzMxMiw4IEBAIHN0cnVjdCBzY3RwX2Nvb2tpZSB7XG4gXG4gXHRfX3U4IGF1dGhfcmFuZG9tW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xuIFx0XHRcdCBTQ1RQX0FVVEhfUkFORE9NX0xFTkdUSF07XG4tXHRfX3U4IGF1dGhfaG1hY3NbU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNikgKyAyXTtcbitcdF9fdTggYXV0aF9obWFjc1tzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICtcbitcdFx0XHRTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KV07XG4gXHRfX3U4IGF1dGhfY2h1bmtzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBTQ1RQX0FVVEhfTUFYX0NIVU5LU107XG4gXG4gXHQvKiBUaGlzIGlzIGEgc2hpbSBmb3IgbXkgcGVlcidzIElOSVQgcGFja2V0LCBmb2xsb3dlZCBieVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTU6NTkuNzQ4NTIyNjUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNjE0ODU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU0NUUCBDb29raWUgU2l6ZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBzY3RwX2Nvb2tpZWAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIGBhdXRoX2htYWNzYCBhcnJheSB3aXRoaW4gaXQuIEludGVyZXN0aW5nLCB0aGlzIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIGBhdXRoX2htYWNzYC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0byBoYXZlIGluY2x1ZGVkIGFuIGV4dHJhIHR3byBieXRlcywgYnV0IG5vdyB0aGV5J3JlIGdvbmUuIFRoZSBhcnJheSBzaXplIG5vdyBzZWVtcyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgaGVhZGVyIHBsdXMgdGhlIG51bWJlciBvZiBITUFDcywgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBvZiBhIGBfX3UxNmAuIFRoaXMgc3RyaWtlcyBtZSBhcyBhIHJlZmluZW1lbnQsIGFpbWluZyB0byBiZSBtb3JlIHByZWNpc2UgaW4gdGhlIGFsbG9jYXRpb24uXG5cblRoaXMgKmNvdWxkKiBiZSBhIGJ1ZyBmaXgsIG9yIGFuIG9wdGltaXphdGlvbi4gSXQgY291bGQgYWxzbyBiZSBhIHN1YnRsZSBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBjb21wYXRpYmlsaXR5IG9mIFNDVFAgY29va2llIGV4Y2hhbmdlLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgdXNlcyBvZiBgYXV0aF9obWFjc2AgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBieXRlcyBhcmUgYmVpbmcgaGFuZGxlZCwgcmVhZCwgYW5kIHdyaXR0ZW4uIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoaXMgY2hhbmdlIG1pZ2h0IGltcGFjdCBleGlzdGluZyBjb29raWUgcHJvY2Vzc2luZyBsb2dpYy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgdXNhZ2UgaXMgdml0YWwgYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIGEgbmV0IHBvc2l0aXZlIG9yIGEgcG90ZW50aWFsIHJlZ3Jlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjowNC42NTQ2NzI5MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwMDQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXV0aF9obWFjc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmM9NTE9c3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX2luaXQoXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yNjItXFx0LyogU2F2ZSB0aGUgaG1hY3MgYW5kIGNodW5rcyBsaXN0IGludG8gdGhpcyBhc3NvY2lhdGlvbiAqL1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjI2MzpcXHRpZiAoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdClcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyNjQ6XFx0XFx0bWVtY3B5KGFzb2MtXFx1MDAzZWMuYXV0aF9obWFjcywgZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCxcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyNjU6XFx0XFx0XFx0bnRvaHMoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCkpO1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI2Ni1cXHRpZiAoZXAtXFx1MDAzZWF1dGhfY2h1bmtfbGlzdClcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz0yMjI9c3RhdGljIHN0cnVjdCBzY3RwX2F1dGhfYnl0ZXMgKnNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3RvcihcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy0yMjgtXFx0XFx0XFx0KHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqKWFzb2MtXFx1MDAzZWMuYXV0aF9jaHVua3MsXFxubmV0L3NjdHAvYXV0aC5jOjIyOTpcXHRcXHRcXHQoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopYXNvYy1cXHUwMDNlYy5hdXRoX2htYWNzLCBnZnApO1xcbm5ldC9zY3RwL2F1dGguYy0yMzAtfVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTUwMT1pbnQgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNTA5LVxcbm5ldC9zY3RwL2F1dGguYzo1MTA6XFx0aG1hY3MgPSAoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopYXNvYy1cXHUwMDNlYy5hdXRoX2htYWNzO1xcbm5ldC9zY3RwL2F1dGguYy01MTEtXFx0bl9lbHQgPSAobnRvaHMoaG1hY3MtXFx1MDAzZXBhcmFtX2hkci5sZW5ndGgpIC1cXG4tLVxcbm5ldC9zY3RwL2F1dGguYz02ODQ9aW50IHNjdHBfYXV0aF9lcF9zZXRfaG1hY3Moc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTcwNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaG1hY3MtXFx1MDAzZXNobWFjX251bV9pZGVudHM7IGkrKylcXG5uZXQvc2N0cC9hdXRoLmM6NzA4OlxcdFxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QtXFx1MDAzZWhtYWNfaWRzW2ldID1cXG5uZXQvc2N0cC9hdXRoLmMtNzA5LVxcdFxcdFxcdFxcdGh0b25zKGhtYWNzLVxcdTAwM2VzaG1hY19pZGVudHNbaV0pO1xcbm5ldC9zY3RwL2F1dGguYzo3MTA6XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XFxubmV0L3NjdHAvYXV0aC5jLTcxMS1cXHRcXHRcXHRodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICtcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz05MjU9aW50IHNjdHBfYXV0aF9pbml0KHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTkzMC1cXHQgKi9cXG5uZXQvc2N0cC9hdXRoLmM6OTMxOlxcdGlmICghZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCkge1xcbm5ldC9zY3RwL2F1dGguYzo5MzI6XFx0XFx0c3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICphdXRoX2htYWNzO1xcbm5ldC9zY3RwL2F1dGguYy05MzMtXFxubmV0L3NjdHAvYXV0aC5jOjkzNDpcXHRcXHRhdXRoX2htYWNzID0ga3phbGxvY19mbGV4KCphdXRoX2htYWNzLCBobWFjX2lkcyxcXG5uZXQvc2N0cC9hdXRoLmMtOTM1LVxcdFxcdFxcdFxcdFxcdCAgU0NUUF9BVVRIX05VTV9ITUFDUywgZ2ZwKTtcXG5uZXQvc2N0cC9hdXRoLmM6OTM2OlxcdFxcdGlmICghYXV0aF9obWFjcylcXG5uZXQvc2N0cC9hdXRoLmMtOTM3LVxcdFxcdFxcdGdvdG8gbm9tZW07XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtOTQyLVxcdFxcdCAqL1xcbm5ldC9zY3RwL2F1dGguYzo5NDM6XFx0XFx0YXV0aF9obWFjcy1cXHUwMDNlcGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0hNQUNfQUxHTztcXG5uZXQvc2N0cC9hdXRoLmM6OTQ0OlxcdFxcdGF1dGhfaG1hY3MtXFx1MDAzZXBhcmFtX2hkci5sZW5ndGggPVxcbm5ldC9zY3RwL2F1dGguYy05NDUtXFx0XFx0XFx0XFx0aHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIDIpO1xcbm5ldC9zY3RwL2F1dGguYzo5NDY6XFx0XFx0YXV0aF9obWFjcy1cXHUwMDNlaG1hY19pZHNbMF0gPSBodG9ucyhTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKTtcXG5uZXQvc2N0cC9hdXRoLmM6OTQ3OlxcdFxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBhdXRoX2htYWNzO1xcbm5ldC9zY3RwL2F1dGguYy05NDgtXFx0fVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTk2Ny1cXHQvKiBGcmVlIGFsbCBhbGxvY2F0aW9ucyAqL1xcbm5ldC9zY3RwL2F1dGguYzo5Njg6XFx0a2ZyZWUoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XFxubmV0L3NjdHAvYXV0aC5jLTk2OS1cXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmM6OTcwOlxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xcbm5ldC9zY3RwL2F1dGguYy05NzEtXFx0ZXAtXFx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmM9OTc1PXZvaWQgc2N0cF9hdXRoX2ZyZWUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwKVxcbm5ldC9zY3RwL2F1dGguYy05NzYte1xcbm5ldC9zY3RwL2F1dGguYzo5Nzc6XFx0a2ZyZWUoZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCk7XFxubmV0L3NjdHAvYXV0aC5jLTk3OC1cXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmM6OTc5OlxcdGVwLVxcdTAwM2VhdXRoX2htYWNzX2xpc3QgPSBOVUxMO1xcbm5ldC9zY3RwL2F1dGguYy05ODAtXFx0ZXAtXFx1MDAzZWF1dGhfY2h1bmtfbGlzdCA9IE5VTEw7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTk4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMDQtXFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfY2h1bmtzID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjA1OlxcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICphdXRoX2htYWNzID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA2LVxcdHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9hZGRyc19wYXJhbSBzYXQ7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc3LVxcdFxcdC8qIEFkZCBITUFDUyBwYXJhbWV0ZXIgbGVuZ3RoIGlmIGFueSB3ZXJlIGRlZmluZWQgKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mjc4OlxcdFxcdGF1dGhfaG1hY3MgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3OTpcXHRcXHRpZiAoYXV0aF9obWFjcy1cXHUwMDNlbGVuZ3RoKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyODA6XFx0XFx0XFx0Y2h1bmtzaXplICs9IFNDVFBfUEFENChudG9ocyhhdXRoX2htYWNzLVxcdTAwM2VsZW5ndGgpKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjgxLVxcdFxcdGVsc2VcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjgyOlxcdFxcdFxcdGF1dGhfaG1hY3MgPSBOVUxMO1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yODMtXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzU4LVxcdFxcdFxcdFxcdCBhc29jLVxcdTAwM2VjLmF1dGhfcmFuZG9tKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MzU5OlxcdFxcdGlmIChhdXRoX2htYWNzKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNjA6XFx0XFx0XFx0c2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIG50b2hzKGF1dGhfaG1hY3MtXFx1MDAzZWxlbmd0aCksXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjM2MTpcXHRcXHRcXHRcXHRcXHRhdXRoX2htYWNzKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzYyLVxcdFxcdGlmIChhdXRoX2NodW5rcylcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYz0zNzE9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0zNzgtXFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKmF1dGhfcmFuZG9tID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6Mzc5OlxcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICphdXRoX2htYWNzID0gTlVMTDtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzgwLVxcdHN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWwgPSBOVUxMO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTQ0My1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NDQ0OlxcdFxcdGF1dGhfaG1hY3MgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjQ0NTpcXHRcXHRpZiAoYXV0aF9obWFjcy1cXHUwMDNlbGVuZ3RoKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo0NDY6XFx0XFx0XFx0Y2h1bmtzaXplICs9IFNDVFBfUEFENChudG9ocyhhdXRoX2htYWNzLVxcdTAwM2VsZW5ndGgpKTtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNDQ3LVxcdFxcdGVsc2VcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NDQ4OlxcdFxcdFxcdGF1dGhfaG1hY3MgPSBOVUxMO1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy00NDktXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtNTA2LVxcdFxcdFxcdFxcdCBhdXRoX3JhbmRvbSk7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjUwNzpcXHRcXHRpZiAoYXV0aF9obWFjcylcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6NTA4OlxcdFxcdFxcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBudG9ocyhhdXRoX2htYWNzLVxcdTAwM2VsZW5ndGgpLFxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzo1MDk6XFx0XFx0XFx0XFx0XFx0YXV0aF9obWFjcyk7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTUxMC1cXHRcXHRpZiAoYXV0aF9jaHVua3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz02OTYwPXN0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtNjk3Mi1cXG5uZXQvc2N0cC9zb2NrZXQuYzo2OTczOlxcdGhtYWNzID0gZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdDtcXG5uZXQvc2N0cC9zb2NrZXQuYy02OTc0LVxcdGRhdGFfbGVuID0gbnRvaHMoaG1hY3MtXFx1MDAzZXBhcmFtX2hkci5sZW5ndGgpIC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MDQuNzEyNjgzODgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NjE3NTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogU0NUUCBDb29raWUgU2l6ZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHNvbWV0aGluZyBpbiB0aGUgYHNjdHBfY29va2llYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgYGF1dGhfaG1hY3NgIGFycmF5LiBUaGUgb3JpZ2luYWwgc2l6ZSBjYWxjdWxhdGlvbiB3YXMgYSBiaXTigKYgd2VsbCwgbGV0J3MganVzdCBzYXkgaXQgbG9va3MgYSBsaXR0bGUgc3VzcGljaW91cywgYW5kIG5vdyB0aGV5J3ZlIGNoYW5nZWQgaXQuIEl0IHdhcyBwcmV2aW91c2x5IGNvbXB1dGVkIGFzIGBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KSArIDJgLiBOb3cgaXTigJlzIGBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNilgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHNpemUgaW5jcmVhc2Ug4oCTIGVmZmVjdGl2ZWx5LCBpdCdzIGFkZGluZyBgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKWAsIHdoaWNoIGlzIDQgYnl0ZXMsIG1pbnVzIHRoZSBvcmlnaW5hbCAyLCBzbyBhIG5ldCBpbmNyZWFzZSBvZiAyIGJ5dGVzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJXaGF0J3MgdGhlICp3aHkqP1wiLiBUaGlzIHNjcmVhbXMgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWUuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIHNvbWUgZm9ybSBvZiBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXR5LCBwb3RlbnRpYWxseSBhIHN1YnRsZSBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUuIEl0J3MgbGlrZWx5IGZpeGluZyBzb21lIHN0cnVjdCBsYXlvdXQgcHJvYmxlbSBpbiB0aGUgZXhpc3RpbmcgY29kZWJhc2UgdGhhdCBoYXMgYmVlbiBleHBvc2VkIHJlY2VudGx5LlxuXG5UaGUgaW5jbHVzaW9uIG9mIGBzdHJ1Y3Qgc2N0cF9wYXJhbWhkcmAgaXMgdGhlIGtleS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayB3aGF0IHRoYXQgaGVhZGVyIGNvbnRhaW5zLiBXaGF0IGFib3V0IGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gPyBJcyB0aGlzIGNoYW5nZSByZWxhdGVkIHRvIHN1cHBvcnRpbmcgbmV3IEhNQUMgYWxnb3JpdGhtcyBvciBzb21lIGtpbmQgb2YgcGFyYW1ldGVyIGhhbmRsaW5nIGR1cmluZyBhdXRoZW50aWNhdGlvbj8gTGV0IG1lIGV4YW1pbmUgdGhvc2UgdHdvIHN0cnVjdHVyZXMgaW4gZGV0YWlsLCBhbmQgdGhlbiBJIGNhbiBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2Ygd2hhdCB0aGlzIHBhdGNoIGlzIGZpeGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjowOS43Nzg4NjA5OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4NTU3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNjdHBfcGFyYW1oZHIgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmg9MTI1PWVudW0geyBTQ1RQX0NIVU5LX0ZMQUdfVCA9IDB4MDEgfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2N0cC5oLTE1NC1cXG5pbmNsdWRlL2xpbnV4L3NjdHAuaDoxNTU6c3RydWN0IHNjdHBfcGFyYW1oZHIge1xcbmluY2x1ZGUvbGludXgvc2N0cC5oLTE1Ni1cXHRfX2JlMTYgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MDkuODM1NzQwNjU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2ODQxMDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgU0NUUCBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIFNDVFAgaW1wbGVtZW50YXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgYXJvdW5kIGxpbmUgMTU1IGluIGBpbmNsdWRlL2xpbnV4L3NjdHAuaGAuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCdzIGhlYWRlciBtYWdpYyBzaG91bGQgYmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RydWN0dXJhbCBibHVlcHJpbnRzIGZvciBob3cgU0NUUCBtZXNzYWdlcyBhcmUgZm9ybWF0dGVkLCBob3cgY2h1bmsgdHlwZXMgYXJlIGRlZmluZWQsIGFuZCBtYXliZSBldmVuIHNvbWUga2V5IGZsYWdzIG9yIGNvbnRyb2wgaW5mb3JtYXRpb24uIFRoaXMgaGVhZGVyIGZpbGUgd2lsbCBsaWtlbHkgbGF5IHRoZSBncm91bmR3b3JrIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGxvdy1sZXZlbCBhc3BlY3RzIG9mIFNDVFAgY29tbXVuaWNhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50IGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjEzLjQwNDE1MzE1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjdHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFxuIDE1MTpcXHQvKiBSRkMgMjk2MFxcbiAxNTI6XFx0ICogU2VjdGlvbiAzLjIuMSBPcHRpb25hbC9WYXJpYWJsZS1sZW5ndGggUGFybWFldGVyIEZvcm1hdC5cXG4gMTUzOlxcdCAqL1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB7XFxuIDE1NjpcXHRcXHRfX2JlMTYgdHlwZTtcXG4gMTU3OlxcdFxcdF9fYmUxNiBsZW5ndGg7XFxuIDE1ODpcXHR9O1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRlbnVtIHNjdHBfcGFyYW0ge1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHQvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy41ICovXFxuIDE2MzpcXHRcXHRTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPXFx0XFx0PSBjcHVfdG9fYmUxNigxKSxcXG4gMTY0OlxcdFxcdC8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjIuMSAqL1xcbiAxNjU6XFx0XFx0U0NUUF9QQVJBTV9JUFY0X0FERFJFU1NcXHRcXHRcXHQ9IGNwdV90b19iZTE2KDUpLFxcbiAxNjY6XFx0XFx0U0NUUF9QQVJBTV9JUFY2X0FERFJFU1NcXHRcXHRcXHQ9IGNwdV90b19iZTE2KDYpLFxcbiAxNjc6XFx0XFx0U0NUUF9QQVJBTV9TVEFURV9DT09LSUVcXHRcXHRcXHQ9IGNwdV90b19iZTE2KDcpLFxcbiAxNjg6XFx0XFx0U0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSU1xcdD0gY3B1X3RvX2JlMTYoOCksXFxuIDE2OTpcXHRcXHRTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkVcXHRcXHQ9IGNwdV90b19iZTE2KDkpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoxMy40MDQyNTcyMzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI5MTA4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqU0NUUCBQYXJhbWV0ZXIgSGVhZGVyIFNpemUqKlxuXG5SaWdodCwgc28gdGhlIGBzdHJ1Y3Qgc2N0cF9wYXJhbWhkcmAgaXMgZGVmaW5pdGl2ZWx5IDQgYnl0ZXMuIEdvdCB0aGF0LiBOb3csIEknbSBsb29raW5nIGF0IHRoZSBvbGQgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYGF1dGhfaG1hY3NgLiBJdCB3YXMgYFNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICsgMmAuIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgaXNzdWUgaXMgdGhhdCBJIG5lZWQgdG8gYmUgc3VyZSB3aGF0IGBTQ1RQX0FVVEhfTlVNX0hNQUNTYCAqaXMqLiBNeSBodW5jaCBpcyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBITUFDcywgYnV0IGxldCdzIGNvbmZpcm0gdGhhdCBxdWlja2x5LiBJJ2xsIHNlYXJjaCBmb3IgaXRzIGRlZmluaXRpb24gYW5kIHZlcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoxNi45MzMzNjczMDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODE1NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU0NUUF9BVVRIX05VTV9ITUFDU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oPTQxNT1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDIzLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfTUFYXFx0X19TQ1RQX0FVVEhfSE1BQ19NQVggLSAxXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaDo0MjQ6I2RlZmluZSBTQ1RQX0FVVEhfTlVNX0hNQUNTIFxcdF9fU0NUUF9BVVRIX0hNQUNfTUFYXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjE2Ljk4ODE4ODU3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkxMjk2OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgX19TQ1RQX0FVVEhfSE1BQ19NQVhgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYF9fU0NUUF9BVVRIX0hNQUNfTUFYYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIkFoYSwgYXV0aGVudGljYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEhNQUMsIGFuZCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLlwiIFRoaXMgaXMgY2xlYXJseSBzb21ldGhpbmcgY2VudHJhbCB0byB0aGUgc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSwgbGlrZWx5IGRlZmluaW5nIHRoZSB1cHBlciBib3VuZCBmb3IgdGhlIGtleSBzaXplIG9yIG90aGVyIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBITUFDIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuXG5cbk15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBwcm9iYWJseSBkZWZpbmVzIHRoZSBsb25nZXN0IHBlcm1pdHRlZCBITUFDIGtleSwgdGhlIGJpZ2dlc3QgZGlnZXN0IHNpemUsIG9yIHBlcmhhcHMgYSBjb25zdGFudCByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGF1dGhlbnRpY2F0aW9uIHNldHVwIHdpdGhpbiB0aGUgU0NUUCBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIG1heGltdW0gaXMgY3J1Y2lhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJdCBhbGxvd3MgZm9yIGJ1ZmZlciBhbGxvY2F0aW9uLCBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgc2VjdXJlIGhhbmRsaW5nIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhIHdpdGhpbiBTQ1RQIGltcGxlbWVudGF0aW9ucy4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgdmFsdWUgY2hvc2VuIGZvciBzb21lIGhhcmR3YXJlLXNwZWNpZmljIHJlYXNvbiwgb3IgaXMgaXQgYSBzZWN1cml0eS1mb2N1c2VkIGxpbWl0IHRvIGF2b2lkIGNlcnRhaW4gYXR0YWNrcz8gUGVyaGFwcyBpdCdzIHRpZWQgdG8gYW4gZXN0YWJsaXNoZWQgc3RhbmRhcmQsIG9yIGEga25vd24gY29uc3RyYWludC4gVW5kZXJzdGFuZGluZyB0aGlzIG1heGltdW0gaXMgY3JpdGljYWwgZm9yIHNlY3VyZSBjb2RpbmcsIHRlc3RpbmcsIGFuZCBkZWJ1Z2dpbmcgYW55IFNDVFAtYmFzZWQgYXBwbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IFJGQ3MgYW5kIHN0YW5kYXJkIGRlZmluaXRpb25zIHRvIHNlZSB0aGUgcHJlY2lzZSBjb250ZXh0IGFuZCBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoyMC40Nzk0ODg1NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTI1MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fU0NUUF9BVVRIX0hNQUNfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg9NDE1PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MTktXFx0U0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2LFxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg6NDIwOlxcdF9fU0NUUF9BVVRIX0hNQUNfTUFYXFxuaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaC00MjEtfTtcXG5pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oLTQyMi1cXG5pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oOjQyMzojZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX01BWFxcdF9fU0NUUF9BVVRIX0hNQUNfTUFYIC0gMVxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmg6NDI0OiNkZWZpbmUgU0NUUF9BVVRIX05VTV9ITUFDUyBcXHRfX1NDVFBfQVVUSF9ITUFDX01BWFxcbmluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgtNDI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjoyMC41MzQ2MTk0OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzNzYyMzY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0NUUCBITUFDIEFsZ29yaXRobSBQYXJhbWV0ZXIgU3RydWN0dXJlIFNpemUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBTQ1RQLXJlbGF0ZWQgY29uc3RhbnRzIGFuZCBkb2luZyBzb21lIHF1aWNrIGNhbGN1bGF0aW9ucy4gSXQgc2VlbXMgYF9fU0NUUF9BVVRIX0hNQUNfTUFYYCBhbmQgYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGJvdGggY2xvY2sgaW4gYXQgYSB2YWx1ZSBvZiAzLiBJIHJlbWVtYmVyIHRoZSBvbGQgc2l6ZSBmb3Igc29tZXRoaW5nIHdhcyBjYWxjdWxhdGVkIGFzIGAzICogMiArIDIgPSA4YCBieXRlcy4gTm93LCB0aGUgbmV3IHNpemUgaXMgYDQgKyAzICogMiA9IDEwYCBieXRlcy5cblxuSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBzbyBJIHNob3VsZCBub3cgZXhhbWluZSB0aGUgZGV0YWlscyBvZiBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYC4gTmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeSB3ZSBuZWVkIHRoZSBleHRyYSBieXRlcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MjMuNjcyMjQ0NzM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ5NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY3RwLmg9MzI5PXN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjdHAuaC0zMzQtLyogQVVUSCBTZWN0aW9uIDMuMyBITUFDIEFsZ29yaXRobSAqL1xcbmluY2x1ZGUvbGludXgvc2N0cC5oOjMzNTpzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0ge1xcbmluY2x1ZGUvbGludXgvc2N0cC5oLTMzNi1cXHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9oZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjIzLjcyOTc0NjEwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMjQzMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU0NUUCBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBTQ1RQIHN0dWZmIGEgYml0IGJldHRlciwgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NjdHAuaGAuIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDMzNS4gSSdtIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBpbnRvIFttZW50aW9uIHNwZWNpZmljIGFyZWEgeW91IGFyZSBsb29raW5nIGZvciwgZS5nLiwgY2h1bmsgdHlwZXMsIGFzc29jaWF0aW9uIG1hbmFnZW1lbnQsIGV0Yy5dLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgW21lbnRpb24gc3BlY2lmaWMgc3RydWN0dXJlcywgZGVmaW5lcywgb3IgZnVuY3Rpb25zIHlvdSBhbnRpY2lwYXRlXS4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MjYuNjM5OTkxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NjdHAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyO1xcbiAzMzE6XFx0XFx0X191OCBjaHVua3NbXTtcXG4gMzMyOlxcdH07XFxuIDMzMzpcXHRcXG4gMzM0OlxcdC8qIEFVVEggU2VjdGlvbiAzLjMgSE1BQyBBbGdvcml0aG0gKi9cXG4gMzM1OlxcdHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSB7XFxuIDMzNjpcXHRcXHRzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9oZHI7XFxuIDMzNzpcXHRcXHRfX2JlMTYgaG1hY19pZHNbXTtcXG4gMzM4OlxcdH07XFxuIDMzOTpcXHRcXG4gMzQwOlxcdC8qIFJGQyAyOTYwLiAgU2VjdGlvbiAzLjMuMyBJbml0aWF0aW9uIEFja25vd2xlZGdlbWVudCAoSU5JVCBBQ0spICgyKTpcXG4gMzQxOlxcdCAqICAgVGhlIElOSVQgQUNLIGNodW5rIGlzIHVzZWQgdG8gYWNrbm93bGVkZ2UgdGhlIGluaXRpYXRpb24gb2YgYW4gU0NUUFxcbiAzNDI6XFx0ICogICBhc3NvY2lhdGlvbi5cXG4gMzQzOlxcdCAqL1xcbiAzNDQ6XFx0c3RydWN0IHNjdHBfaW5pdGFja19jaHVuayB7XFxuIDM0NTpcXHRcXHRzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaHVua19oZHI7XFxuIDM0NjpcXHRcXHRzdHJ1Y3Qgc2N0cF9pbml0aGRyIGluaXRfaGRyO1xcbiAzNDc6XFx0fTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0LyogU2VjdGlvbiAzLjMuMy4xIFN0YXRlIENvb2tpZSAoNykgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MjYuNjQwMDg1NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwMzEzMTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU2VjdXJpdHkgVnVsbmVyYWJpbGl0eSBpbiBTQ1RQIEhNQUMgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtYC4gSXQncyBzdHJ1Y3R1cmVkIHdpdGggYSBgcGFyYW1faGRyYCwgd2hpY2ggaXMgNCBieXRlcywgZm9sbG93ZWQgYnkgYSBmbGV4aWJsZSBhcnJheSBjYWxsZWQgYGhtYWNfaWRzYCB0aGF0IGNvbnRhaW5zIGBfX2JlMTZgIGVsZW1lbnRzLiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgLCB3aGljaCBpcyBjdXJyZW50bHkgc2V0IHRvIDMsIHRoZSB0b3RhbCBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBgNCArICgzICogMilgIG9yIDEwIGJ5dGVzLCBnaXZlbiB0aGF0IGVhY2ggYF9fYmUxNmAgaXMgMiBieXRlcy4gQnV0IGhvbGQgb24sIHRoZSAqb2xkKiBzaXppbmcgY2FsY3VsYXRpb24gd2FzIG9ubHkgYFNDVFBfQVVUSF9OVU1fSE1BQ1MgKiBzaXplb2YoX191MTYpICsgMmAsIHdoaWNoIHdvcmtzIG91dCB0byBgMyAqIDIgKyAyID0gOGAgYnl0ZXMuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhhdCdzIGEgcHJvYmxlbS4gVGhhdCBtZWFucyB0aGUgb2xkIGFsbG9jYXRpb24gd2FzICp0b28gc21hbGwqIHRvIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IHN0cnVjdHVyZSB3aXRoIHRocmVlIEhNQUNzLiBUaGF0IDgtYnl0ZSBhbGxvY2F0aW9uIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIHdoZW5ldmVyIGBhdXRoX2htYWNzYCBpbiBgc3RydWN0IHNjdHBfY29va2llYCB3YXMgYWNjZXNzZWQsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCAzIEhNQUNzISBUaGF0J3MgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzY2VuYXJpby5cblxuSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBhdXRoX2htYWNzYCBpcyB1c2VkLiBJJ2xsIGNoZWNrIGBuZXQvc2N0cC9hdXRoLmNgIGFuZCB0cmFjZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgdXRpbGl6ZWQuIFRoaXMgbmVlZHMgaW1tZWRpYXRlIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjMxLjQ0MzIxOTMzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3NDU2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXV0aF9obWFjc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9hdXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTIyMj1zdGF0aWMgc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqc2N0cF9hdXRoX21ha2VfbG9jYWxfdmVjdG9yKFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTIyOC1cXHRcXHRcXHQoc3RydWN0IHNjdHBfY2h1bmtzX3BhcmFtICopYXNvYy1cXHUwMDNlYy5hdXRoX2NodW5rcyxcXG5uZXQvc2N0cC9hdXRoLmM6MjI5OlxcdFxcdFxcdChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3MsIGdmcCk7XFxubmV0L3NjdHAvYXV0aC5jLTIzMC19XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmM9NTAxPWludCBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy01MDktXFxubmV0L3NjdHAvYXV0aC5jOjUxMDpcXHRobWFjcyA9IChzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKilhc29jLVxcdTAwM2VjLmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvYXV0aC5jLTUxMS1cXHRuX2VsdCA9IChudG9ocyhobWFjcy1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCkgLVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTY4ND1pbnQgc2N0cF9hdXRoX2VwX3NldF9obWFjcyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNzA3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBobWFjcy1cXHUwMDNlc2htYWNfbnVtX2lkZW50czsgaSsrKVxcbm5ldC9zY3RwL2F1dGguYzo3MDg6XFx0XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdC1cXHUwMDNlaG1hY19pZHNbaV0gPVxcbm5ldC9zY3RwL2F1dGguYy03MDktXFx0XFx0XFx0XFx0aHRvbnMoaG1hY3MtXFx1MDAzZXNobWFjX2lkZW50c1tpXSk7XFxubmV0L3NjdHAvYXV0aC5jOjcxMDpcXHRlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0LVxcdTAwM2VwYXJhbV9oZHIubGVuZ3RoID1cXG5uZXQvc2N0cC9hdXRoLmMtNzExLVxcdFxcdFxcdGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTkyNT1pbnQgc2N0cF9hdXRoX2luaXQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtOTMwLVxcdCAqL1xcbm5ldC9zY3RwL2F1dGguYzo5MzE6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0KSB7XFxubmV0L3NjdHAvYXV0aC5jOjkzMjpcXHRcXHRzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW0gKmF1dGhfaG1hY3M7XFxubmV0L3NjdHAvYXV0aC5jLTkzMy1cXG5uZXQvc2N0cC9hdXRoLmM6OTM0OlxcdFxcdGF1dGhfaG1hY3MgPSBremFsbG9jX2ZsZXgoKmF1dGhfaG1hY3MsIGhtYWNfaWRzLFxcbm5ldC9zY3RwL2F1dGguYy05MzUtXFx0XFx0XFx0XFx0XFx0ICBTQ1RQX0FVVEhfTlVNX0hNQUNTLCBnZnApO1xcbm5ldC9zY3RwL2F1dGguYzo5MzY6XFx0XFx0aWYgKCFhdXRoX2htYWNzKVxcbm5ldC9zY3RwL2F1dGguYy05MzctXFx0XFx0XFx0Z290byBub21lbTtcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy05NDItXFx0XFx0ICovXFxubmV0L3NjdHAvYXV0aC5jOjk0MzpcXHRcXHRhdXRoX2htYWNzLVxcdTAwM2VwYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fSE1BQ19BTEdPO1xcbm5ldC9zY3RwL2F1dGguYzo5NDQ6XFx0XFx0YXV0aF9obWFjcy1cXHUwMDNlcGFyYW1faGRyLmxlbmd0aCA9XFxubmV0L3NjdHAvYXV0aC5jLTk0NS1cXHRcXHRcXHRcXHRodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgMik7XFxubmV0L3NjdHAvYXV0aC5jOjk0NjpcXHRcXHRhdXRoX2htYWNzLVxcdTAwM2VobWFjX2lkc1swXSA9IGh0b25zKFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpO1xcbm5ldC9zY3RwL2F1dGguYzo5NDc6XFx0XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IGF1dGhfaG1hY3M7XFxubmV0L3NjdHAvYXV0aC5jLTk0OC1cXHR9XFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtOTY3LVxcdC8qIEZyZWUgYWxsIGFsbG9jYXRpb25zICovXFxubmV0L3NjdHAvYXV0aC5jOjk2ODpcXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmMtOTY5LVxcdGtmcmVlKGVwLVxcdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xcbm5ldC9zY3RwL2F1dGguYzo5NzA6XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XFxubmV0L3NjdHAvYXV0aC5jLTk3MS1cXHRlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz05NzU9dm9pZCBzY3RwX2F1dGhfZnJlZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXApXFxubmV0L3NjdHAvYXV0aC5jLTk3Ni17XFxubmV0L3NjdHAvYXV0aC5jOjk3NzpcXHRrZnJlZShlcC1cXHUwMDNlYXV0aF9obWFjc19saXN0KTtcXG5uZXQvc2N0cC9hdXRoLmMtOTc4LVxcdGtmcmVlKGVwLVxcdTAwM2VhdXRoX2NodW5rX2xpc3QpO1xcbm5ldC9zY3RwL2F1dGguYzo5Nzk6XFx0ZXAtXFx1MDAzZWF1dGhfaG1hY3NfbGlzdCA9IE5VTEw7XFxubmV0L3NjdHAvYXV0aC5jLTk4MC1cXHRlcC1cXHUwMDNlYXV0aF9jaHVua19saXN0ID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MzEuNTAyOTcyMDc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjI2MjU2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0NUUCBITUFDIEFsZ29yaXRobSBQYXJhbWV0ZXIgQnVmZmVyIE92ZXJmbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBjYWxsIGluIGBuZXQvc2N0cC9hc3NvY2lvbGEuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgZ29lcyB1cC4gV2UncmUgY29weWluZyBkYXRhIGZyb20gYGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdGAsIHdoaWNoIGlzIGEgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbSAqYCwgaW50byBgYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3NgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGUgc2l6ZXMuIFRoZSBsZW5ndGggb2YgYGVwLVx1MDAzZWF1dGhfaG1hY3NfbGlzdGAgaXMgZGV0ZXJtaW5lZCBieSBgbnRvaHMoZXAtXHUwMDNlYXV0aF9obWFjc19saXN0LVx1MDAzZXBhcmFtX2hkci5sZW5ndGgpYCwgd2hpY2gsIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nLCBjYW4gZ28gdXAgdG8gYHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBTQ1RQX0FVVEhfTlVNX0hNQUNTICogc2l6ZW9mKF9fdTE2KWAuICBUaGF0IGFkZHMgdXAgdG8gYSBwb3RlbnRpYWwgb2YgMTAgYnl0ZXMuXG5cbkhvd2V2ZXIsIGBhc29jLVx1MDAzZWMuYXV0aF9obWFjc2AgaXMgb25seSBhbGxvY2F0ZWQgZm9yIDggYnl0ZXMuIFRoYXQncyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHNjZW5hcmlvISBUaGlzIGBtZW1jcHlgIGNvdWxkIG92ZXJ3cml0ZSB0d28gYnl0ZXMgb2YgZGF0YSBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgcXVlc3Rpb24gSSBub3cgbmVlZCB0byBhbnN3ZXIgaXM6IFdoYXQgZGF0YSBpcyBzdG9yZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBhdXRoX2htYWNzYCBidWZmZXIgd2l0aGluIHRoZSBgc3RydWN0IHNjdHBfY29va2llYCBzdHJ1Y3R1cmU/ICBVbmRlcnN0YW5kaW5nIHRoZSBzdWJzZXF1ZW50IG1lbW9yeSBsYXlvdXQgaXMgY3JpdGljYWwgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgb3ZlcmZsb3cuIFRoaXMgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDM0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjM1Ljk2NTU5OTQ5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcbiAzMDE6XFx0XFx0LyogSUcgU2VjdGlvbiAyLjM1LjMgXFxuIDMwMjpcXHRcXHQgKiBJbmNsdWRlIHRoZSBzb3VyY2UgcG9ydCBvZiB0aGUgSU5JVC1BQ0tcXG4gMzAzOlxcdFxcdCAqL1xcbiAzMDQ6XFx0XFx0X191MTZcXHRcXHRteV9wb3J0O1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRfX3U4IHByc2N0cF9jYXBhYmxlO1xcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHQvKiBQYWRkaW5nIGZvciBmdXR1cmUgdXNlICovXFxuIDMwOTpcXHRcXHRfX3U4IHBhZGRpbmc7ICBcXHRcXHRcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0X191MzIgYWRhcHRhdGlvbl9pbmQ7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdF9fdTggYXV0aF9yYW5kb21bc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArXFxuIDMxNDpcXHRcXHRcXHRcXHQgU0NUUF9BVVRIX1JBTkRPTV9MRU5HVEhdO1xcbiAzMTU6XFx0XFx0X191OCBhdXRoX2htYWNzW3NpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgK1xcbiAzMTY6XFx0XFx0XFx0XFx0U0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZihfX3UxNildO1xcbiAzMTc6XFx0XFx0X191OCBhdXRoX2NodW5rc1tzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgU0NUUF9BVVRIX01BWF9DSFVOS1NdO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHQvKiBUaGlzIGlzIGEgc2hpbSBmb3IgbXkgcGVlcidzIElOSVQgcGFja2V0LCBmb2xsb3dlZCBieVxcbiAzMjA6XFx0XFx0ICogYSBjb3B5IG9mIHRoZSByYXcgYWRkcmVzcyBsaXN0IG9mIHRoZSBhc3NvY2lhdGlvbi5cXG4gMzIxOlxcdFxcdCAqIFRoZSBsZW5ndGggb2YgdGhlIHJhdyBhZGRyZXNzIGxpc3QgaXMgc2F2ZWQgaW4gdGhlXFxuIDMyMjpcXHRcXHQgKiByYXdfYWRkcl9saXN0X2xlbiBmaWVsZCwgd2hpY2ggd2lsbCBiZSB1c2VkIGF0IHRoZSB0aW1lIHdoZW5cXG4gMzIzOlxcdFxcdCAqIHRoZSBhc3NvY2lhdGlvbiBUQ0IgaXMgcmUtY29uc3RydWN0ZWQgZnJvbSB0aGUgY29va2llLlxcbiAzMjQ6XFx0XFx0ICovXFxuIDMyNTpcXHRcXHRfX3UzMiByYXdfYWRkcl9saXN0X2xlbjtcXG4gMzI2OlxcdFxcdC8qIHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgcGVlcl9pbml0W107ICovXFxuIDMyNzpcXHR9O1xcbiAzMjg6XFx0XFxuIDMyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6MzUuOTY1NzI3Mjg1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzY0NTk4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIEF1dGhlbnRpY2F0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3ZlIGdvdCBhIHBvdGVudGlhbCBzZWN1cml0eSBmaXggaGVyZSwgYSBidWZmZXIgb3ZlcmZsb3csIHNwZWNpZmljYWxseS4gVGhlIGtleSBpcyB0aGUgc2hpZnQgZnJvbSBgYXV0aF9obWFjc2AgdG8gYGF1dGhfY2h1bmtzYC4gSXQncyBwcmV0dHkgY2xlYXI6IGEgdHdvLWJ5dGUgb3ZlcmZsb3cgZnJvbSB0aGUgZm9ybWVyIGNvdWxkIHN0b21wIGFsbCBvdmVyIHRoZSBpbml0aWFsIHR3byBieXRlcyBvZiB0aGUgbGF0dGVyLiBBbmQgc2luY2UgYGF1dGhfY2h1bmtzYCBpcyBhbiBhcnJheSBvZiBgX191OGAsIGFuZCB1c2VkIGFzIGEgYHN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqYCwgdGhvc2UgZmlyc3QgdHdvIGJ5dGVzIG9mIGBhdXRoX2NodW5rc2AgYXJlIGFjdHVhbGx5IHRoZSBgdHlwZWAgZmllbGQgb2YgYSBgc2N0cF9wYXJhbWhkcmAuIFNvLCBpZiB0aGUgb3ZlcmZsb3cgaGFwcGVucywgdGhlIGB0eXBlYCBmaWVsZCBvZiBgYXV0aF9jaHVua3NgIGdldHMgY29ycnVwdGVkLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC4gVmVyeSBnb29kLiBGaXhpbmcgYnVmZmVyIG92ZXJmbG93cyBpcyBhbHdheXMgYSBwcmlvcml0eS4gSXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBXZSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGV4cGxvaXRhYmxlIG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGluIG90aGVyIHdheXMuXG5cbk5vdywgaG93IGRvIHdlIHRyaWdnZXIgdGhpcz8gSG93IGRvIHdlIHJlYWNoIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgY29kZT8gQWxyaWdodCwgd2UgbmVlZCB0byBjcmVhdGUgYW4gU0NUUCBhc3NvY2lhdGlvbiBhbmQgc2V0IEhNQUNzLiBUaGUgY29kZSBwYXRoIHRoYXQgc2V0cyB0aGUgSE1BQ3MgaXMgYHNjdHBfYXV0aF9lcF9zZXRfaG1hY3NgLCBhbmQgdGhhdCBnZXRzIGNhbGxlZCBmcm9tIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIHRvIGJ1aWxkIGEgZnV6emluZyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjQwLjg0MjE4OTI1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9hdXRoX2VwX3NldF9obWFjc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTY2Mj1pbnQgc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgX191OCBjaHVua19pZClcXG4tLVxcbm5ldC9zY3RwL2F1dGguYy02ODMtLyogQWRkIGhtYWMgaWRlbnRpZmlyZXMgdG8gdGhlIGVuZHBvaW50IGxpc3Qgb2Ygc3VwcG9ydGVkIGhtYWMgaWRzICovXFxubmV0L3NjdHAvYXV0aC5jOjY4NDppbnQgc2N0cF9hdXRoX2VwX3NldF9obWFjcyhzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxubmV0L3NjdHAvYXV0aC5jLTY4NS1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqaG1hY3MpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz0zNjA5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtMzYyOC1cXG5uZXQvc2N0cC9zb2NrZXQuYzozNjI5OlxcdHJldHVybiBzY3RwX2F1dGhfZXBfc2V0X2htYWNzKGVwLCBobWFjcyk7XFxubmV0L3NjdHAvc29ja2V0LmMtMzYzMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjQwLjkwMjkwNjQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTc0MDg4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgSE1BQyBJZGVudGlmaWVyIFNvY2tldCBPcHRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgY2xlYXI6IEknbSBmb2N1c2luZyBvbiBzZXR0aW5nIG9yIG1vZGlmeWluZyB0aGUgSE1BQyBpZGVudGlmaWVyIGZvciBTQ1RQIHNvY2tldHMuIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBmdW5jdGlvbi4gVGhhdCBuYW1lIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBidXQgSSBrbm93IGJldHRlciB0aGFuIHRvIGp1c3QgYXNzdW1lLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcsIG1heWJlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvciB0aGUgbWFuIHBhZ2UuIExldCdzIHNlZSBob3cgdGhpcyB0aGluZyB3b3JrcyBpbiBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NDUuMTYwMzE4MTEyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9zb2NrZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjAwOlxcdFxcdHJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAsIHZhbC1cXHUwMDNlc2F1dGhfY2h1bmspO1xcbjM2MDE6XFx0fVxcbjM2MDI6XFx0XFxuMzYwMzpcXHQvKlxcbjM2MDQ6XFx0ICogNy4xLjE5LiAgR2V0IG9yIHNldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVycyAoU0NUUF9ITUFDX0lERU5UKVxcbjM2MDU6XFx0ICpcXG4zNjA2OlxcdCAqIFRoaXMgb3B0aW9uIGdldHMgb3Igc2V0cyB0aGUgbGlzdCBvZiBITUFDIGFsZ29yaXRobXMgdGhhdCB0aGUgbG9jYWxcXG4zNjA3OlxcdCAqIGVuZHBvaW50IHJlcXVpcmVzIHRoZSBwZWVyIHRvIHVzZS5cXG4zNjA4OlxcdCAqL1xcbjM2MDk6XFx0c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXFxuMzYxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqaG1hY3MsXFxuMzYxMTpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbjM2MTI6XFx0e1xcbjM2MTM6XFx0XFx0c3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc2N0cF9zayhzayktXFx1MDAzZWVwO1xcbjM2MTQ6XFx0XFx0dTMyIGlkZW50cztcXG4zNjE1OlxcdFxcbjM2MTY6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxuMzYxNzpcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4zNjE4OlxcdFxcbjM2MTk6XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc2N0cF9obWFjYWxnbykpXFxuMzYyMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNjIxOlxcdFxcdG9wdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgb3B0bGVuLCBzaXplb2Yoc3RydWN0IHNjdHBfaG1hY2FsZ28pICtcXG4zNjIyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgU0NUUF9BVVRIX05VTV9ITUFDUyAqIHNpemVvZih1MTYpKTtcXG4zNjIzOlxcdFxcbjM2MjQ6XFx0XFx0aWRlbnRzID0gaG1hY3MtXFx1MDAzZXNobWFjX251bV9pZGVudHM7XFxuMzYyNTpcXHRcXHRpZiAoaWRlbnRzID09IDAgfHwgaWRlbnRzIFxcdTAwM2UgU0NUUF9BVVRIX05VTV9ITUFDUyB8fFxcbjM2MjY6XFx0XFx0ICAgIChpZGVudHMgKiBzaXplb2YodTE2KSkgXFx1MDAzZSAob3B0bGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2htYWNhbGdvKSkpXFxuMzYyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zNjI4OlxcdFxcbjM2Mjk6XFx0XFx0cmV0dXJuIHNjdHBfYXV0aF9lcF9zZXRfaG1hY3MoZXAsIGhtYWNzKTtcXG4zNjMwOlxcdH1cXG4zNjMxOlxcdFxcbjM2MzI6XFx0LypcXG4zNjMzOlxcdCAqIDcuMS4yMC4gIFNldCBhIHNoYXJlZCBrZXkgKFNDVFBfQVVUSF9LRVkpXFxuMzYzNDpcXHQgKlxcbjM2MzU6XFx0ICogVGhpcyBvcHRpb24gd2lsbCBzZXQgYSBzaGFyZWQgc2VjcmV0IGtleSB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIGFuXFxuMzYzNjpcXHQgKiBhc3NvY2lhdGlvbiBzaGFyZWQga2V5LlxcbjM2Mzc6XFx0ICovXFxuMzYzODpcXHRzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX2tleShzdHJ1Y3Qgc29jayAqc2ssXFxuMzYzOTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjdHBfYXV0aGtleSAqYXV0aGtleSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NDUuMTYwOTEzOTkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTkyNzA2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU0NUUCBITUFDIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IEhNQUNzIGFyZSBoYW5kbGVkIGluIFNDVFAsIGFuZCB0aGUgZmxvdyBpcyBwcmV0dHkgY2xlYXIsIGFjdHVhbGx5LiBUaGUgY29yZSBpcyB0aGUgYFNDVFBfSE1BQ19JREVOVGAgc29ja2V0IG9wdGlvbiwgdGhhdCdzIHdoZXJlIHdlIHNldCB1cCB0aGUgSE1BQ3Mgd2Ugd2FudCB0byB1c2UuIFRoZW4sIGR1cmluZyBhc3NvY2lhdGlvbiBpbml0aWFsaXphdGlvbiwgdGhlIHN5c3RlbSB1c2VzIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIHRvIGRvIHRoZSBoZWF2eSBsaWZ0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGNvcGllcyB0aGUgSE1BQyBsaXN0LCBgZXAtXHUwMDNlYXV0aF9obWFjc19saXN0YCAod2hpY2ggSSBhc3N1bWUgaXMgYXQgdGhlIGVuZHBvaW50IGxldmVsKSwgdG8gdGhlIGFzc29jaWF0aW9uLXNwZWNpZmljIHN0cnVjdHVyZSBgYXNvYy1cdTAwM2VjLmF1dGhfaG1hY3NgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHdlIG5lZWQgdGhlIGFzc29jaWF0aW9uIHRvIGhhdmUgaXRzIG93biBsb2NhbCBjb3B5IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLlxuXG5Ob3csIHdoZXJlIHRoaXMgYGFzb2MtXHUwMDNlYy5hdXRoX2htYWNzYCByZWFsbHkgZ2V0cyBsZXZlcmFnZWQgaXMgaW4gdGhlIGNvb2tpZSBnZW5lcmF0aW9uIHBoYXNlLiBCb3RoIGBzY3RwX21ha2VfaW5pdGAgYW5kIGBzY3RwX21ha2VfaW5pdF9hY2tgIHVzZSB0aGF0IGBhc29jLVx1MDAzZWMuYXV0aF9obWFjc2AgZGF0YS4gVGhhdOKAmXMgaG93IHRoZSBITUFDcyBhcmUgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZSwgZW5zdXJpbmcgYXV0aGVudGljYXRpb24gZHVyaW5nIGFzc29jaWF0aW9uIGVzdGFibGlzaG1lbnQuIEFuZCwganVzdCB0byByb3VuZCBpdCBvdXQsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgIGFsc28gcmVsaWVzIG9uIHRoaXMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uLiBSaWdodCwgc28gdGhhdCdzIHRoZSBsb2NhbCB2ZWN0b3IgZ2VuZXJhdGlvbi5cblxuU28sIHRoZSBuZXh0IG9idmlvdXMgc3RlcCBpcyB0byBkaWcgaW50byBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YC4gTGV04oCZcyBzZWUgZXhhY3RseSBob3cgdGhhdCBjb3B5IGlzIHBlcmZvcm1lZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBJJ20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjQ5LjQ2MDE4NzM1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMTcxMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfYXNzb2NpYXRpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmM9NDY9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19mcmVlX2FzY29uZl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy01MC0vKiBJbml0aWFsaXplIGEgbmV3IGFzc29jaWF0aW9uIGZyb20gcHJvdmlkZWQgbWVtb3J5LiAqL1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjUxOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF9hc3NvY2lhdGlvbl9pbml0KFxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTUyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM9Mjg2PXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX25ldyhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTUtXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM6Mjk2OlxcdGlmICghc2N0cF9hc3NvY2lhdGlvbl9pbml0KGFzb2MsIGVwLCBzaywgc2NvcGUsIGdmcCkpXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMjk3LVxcdFxcdGdvdG8gZmFpbF9pbml0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjo0OS42NDMzNjQ2ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2ODI5NTQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW5pdGlhbCBBc3NvY2lhdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJhY2tpbmcgdGhpcyBuZXcgU0NUUCBhc3NvY2lhdGlvbiBjcmVhdGlvbi4gVGhlIGBzY3RwX2Fzc29jaWF0aW9uX25ld2AgZnVuY3Rpb24gaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCdzIGNhbGxpbmcgYHNjdHBfYXNzb2NpYXRpb25faW5pdGAg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQncyB0aGUgc3RhbmRhcmQgcGF0dGVybjogbmV3IHJlc291cmNlLCBmb2xsb3dlZCBieSBpbml0aWFsaXphdGlvbi4gTm93LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgKnJlcXVpcmVkKiBmb3IgU0NUUCB0byBmdW5jdGlvbiBwcm9wZXJseT8gQW5kIHRoZW4sIHdpdGggYXV0aGVudGljYXRpb24gaW4gdGhlIG1peCwgd2hhdCBhcmUgdGhlIG1hbmRhdG9yeSBwYXJhbWV0ZXJzIGZvciBTQ1RQIEFVVEg/IFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvcHRpb25zIGlzIGNyaXRpY2FsIHRvIHByb3BlciBhc3NvY2lhdGlvbiBhbmQga2V5IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBzZXR1cCBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE2OjUzLjAxMTY2MjA1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzNTYyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL0tjb25maWctNS1cXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXFxubmV0L3NjdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NTMuMDY4MDIwOTI5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTcyODgxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU0NUUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGZpbGUg4oCTIGl0J3MgdGhlIGhlYXJ0IG9mIFNDVFAncyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgZ29hbCBoZXJlIGlzbid0IGEgc3VyZmFjZS1sZXZlbCBzY2FuOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBjaG9pY2VzLCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIFNDVFAncyBpbmNsdXNpb24uIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoaWNoIG1pZ2h0IGJlIGNvbnNpZGVyZWQgXCJiZXN0IHByYWN0aWNlXCIgYmFzZWQgb24gbXkgZXhwZXJpZW5jZS4gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBTQ1RQJ3Mgb3B0aW1hbCB1dGlsaXphdGlvbi4gSSBleHBlY3QgdG8gZmluZCBjcml0aWNhbCBmbGFncyBjb250cm9sbGluZyBmZWF0dXJlcyBsaWtlIG11bHRpLWhvbWluZywgYnVuZGxpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGNoZWNrc3VtIG9yIGZsb3cgY29udHJvbCBhbGdvcml0aG1zLiBJIGFtIGFsc28gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcmVjZW50IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTY6NTYuNTY1MzExMDIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU0NUUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBfU0NUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gIDExOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZyb20gUkZDIDI5NjAgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBcXFwiU0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcXG4gIDIwOlxcdFxcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXFxuICAyMTpcXHRcXHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXFxuICAyNDpcXHRcXHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcXG4gIDI1OlxcdFxcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXFxuICAyNjpcXHRcXHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxcbiAgMjc6XFx0XFx0ICBtZXNzYWdlcyxcXG4gIDI4OlxcdFxcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcXG4gIDI5OlxcdFxcdCAgcGFja2V0LCBhbmRcXG4gIDMwOlxcdFxcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxcbiAgMzE6XFx0XFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGtlcm5lbCdzIGR5bmFtaWMgZGVidWdnaW5nIGZyYW1ld29yay5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGlmIElQX1NDVFBcXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNjo1Ni41NjUzNzIzNjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTA5Mjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCB0YWlsb3JlZCBmb3Igc29tZW9uZSBpbiB0aGUgZmllbGQ6XG5cbioqU0NUUCBBdXRoZW50aWNhdGlvbiBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIFNDVFAgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgcmlnaHQsIGBJUF9TQ1RQYCBpcyB0aGUgbWFpbiBjb25maWcgb3B0aW9uIHRvIGNvbnNpZGVyLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBCdXQgSSdtIGFsc28gdGhpbmtpbmcsIGlzIHRoYXQgKmFsbCogdGhlcmUgaXM/IFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggU0NUUCBhdXRoZW50aWNhdGlvbi4gSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIHNldHRpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHNwZWNpZmljYWxseT8gT3IgbWF5YmUgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGFjdGl2ZT8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgbmVlZCB0byBmYWN0b3IgaW50byB0aGUgY29uZmlndXJhdGlvbiBwbGFuLiBOZWVkIHRvIGJlIHN1cmUgYWxsIGFzcGVjdHMgb2YgdGhlIHNldHVwIGFyZSBhY2NvdW50ZWQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MDAuMDc0NDY3NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTI0Nzg3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0NUUF9BVVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MDAuMTUwNTk2NDI3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTUyMTU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlNDVFAgQXV0aGVudGljYXRpb246IEEgUXVpY2sgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IFNDVFAgYW5kIHNwZWNpZmljYWxseSwgYXV0aGVudGljYXRpb24uIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSBpc24ndCBhIGRlZGljYXRlZCBgU0NUUF9BVVRIYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZywgd2hpY2ggaXMuLi4gaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuZXZlciBgSVBfU0NUUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZGVwYXJ0dXJlIGZyb20gaG93IHNvbWUgb3RoZXIgcHJvdG9jb2xzIGhhbmRsZSBzaW1pbGFyIGZlYXR1cmVzLCBhbmQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseS4gSSBjYW4ndCByZWx5IG9uIGFzc3VtcHRpb25zLCBldmVuIGlmIHRoZXkgc2VlbSBsb2dpY2FsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UuIEkgbmVlZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgc3RyYWlnaHQgZnJvbSB0aGUgc291cmNlIGNvZGUuIExldCdzIHNlZSB3aGF0IHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpY3RhdGUgYW5kIGNsYXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoYXQgYXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCBhcyBJJ20gcGVyY2VpdmluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzowMy43NjU4MTUxOTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MTpcXHRjb25maWcgU0NUUF9EQkdfT0JKQ05UXFxuICA0MjpcXHRcXHRib29sIFxcXCJTQ1RQOiBEZWJ1ZyBvYmplY3QgY291bnRzXFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICA0NDpcXHRcXHRoZWxwXFxuICA0NTpcXHRcXHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXFxuICA0NjpcXHRcXHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXFxuICA0NzpcXHRcXHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XFxuICA0ODpcXHRcXHQgICdjYXQgL3Byb2MvbmV0L3NjdHAvc2N0cF9kYmdfb2JqY250J1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE5cXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y2hvaWNlXFxuICA1MzpcXHRcXHRwcm9tcHQgXFxcIkRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kXFxcIlxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kLCBmb3JcXG4gIDU3OlxcdFxcdCAgd2hlbiBhIG1ldGhvZCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNlbGVjdGVkIHZpYSB0aGVcXG4gIDU4OlxcdFxcdCAgbmV0LnNjdHAuY29va2llX2htYWNfYWxnIHN5c2N0bC5cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0ICBJZiB1bnN1cmUsIGNob29zZSB0aGUgZGVmYXVsdCAoSE1BQy1TSEEyNTYpLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX1NIQTI1NlxcbiAgNjM6XFx0XFx0Ym9vbCBcXFwiSE1BQy1TSEEyNTZcXFwiXFxuICA2NDpcXHRcXG4gIDY1OlxcdGNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORVxcbiAgNjY6XFx0XFx0Ym9vbCBcXFwiTm9uZVxcXCJcXG4gIDY3OlxcdFxcbiAgNjg6XFx0ZW5kY2hvaWNlXFxuICA2OTpcXHRcXG4gIDcwOlxcdGNvbmZpZyBJTkVUX1NDVFBfRElBR1xcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDcyOlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRlbmRpZiAjIElQX1NDVFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MDMuNzY1ODg3OTU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODg5MzYwMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFNDVFAgSE1BQ3MqKlxuXG5Pa2F5LCBzbyB0aGUgYElQX1NDVFBgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgaGFyZCByZXF1aXJlbWVudCBoZXJlLCBnb29kLiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBoYW5kbGUgSE1BQ3MuIEkndmUgZ290IGEgbGlzdCBmb3JtaW5nIGluIG15IGhlYWQ6IGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgc2hvdWxkIGJlIHByb21pc2luZyBzaW5jZSBpdCdzIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIEhNQUNzLiBBbHNvLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCB3aGljaCBjb3BpZXMgSE1BQ3MsIGFuZCBgc2N0cF9tYWtlX2luaXRgLCBgc2N0cF9tYWtlX2luaXRfYWNrYCBhbmQgYHNjdHBfYXV0aF9tYWtlX2xvY2FsX3ZlY3RvcmAgYmVjYXVzZSB0aGV5ICp1c2UqIHRoZSBITUFDcy4gRmluYWxseSwgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYCwgd2hpY2ggaXMgYWxzbyBjcml0aWNhbCBmb3IgdmFsaWRhdGlvbi5cblxuQWxyaWdodCwgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0LCBhcmVuJ3Qgb3Zlcmx5IGdlbmVyaWMsIGFuZCBhcmUgYWNjZXNzaWJsZS4gUnVubmluZyB0aHJvdWdoIHRoZSBsaXN0IGFnYWluOiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgLCBgc2N0cF9hc3NvY2lhdGlvbl9pbml0YCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgLCBhbmQgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC5cblxuTm93LCBkaWdnaW5nIGludG8gdGhlIHNwZWNpZmljcy4gYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpcyBzdGF0aWMsIGJ1dCBpdCdzIGNhbGxlZCBmcm9tIGBzY3RwX3NldHNvY2tvcHRgLiBJbnRlcmVzdGluZy4gSG93IGFib3V0IGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYD8gVGhhdCdzIGV4cG9ydGVkLCBzbyB0aGF0J3MgZ29vZC4gYHNjdHBfYXNzb2NpYXRpb25faW5pdGAgaXMgc3RhdGljIGJ1dCBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgIGlzIG5vbi1zdGF0aWMuICBgc2N0cF9tYWtlX2luaXRgIGFuZCBgc2N0cF9tYWtlX2luaXRfYWNrYCBhcmUgYm90aCBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIGBzY3RwX2F1dGhfbWFrZV9sb2NhbF92ZWN0b3JgIGlzIHN0YXRpYywgYnV0IGBzY3RwX2F1dGhfYXNvY19nZXRfaG1hY2AgY2FsbHMgaXQuIEZpbmFsbHksIGBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZGAgaXMgbm9uLXN0YXRpYy5cblxuT2theSwgc28gdGFraW5nIGFsbCBvZiB0aGlzIGludG8gYWNjb3VudCwgdGhlIGtleSBzeW1ib2xzIGxvb2sgbGlrZSB0aGlzOlxuKiAgIGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAgKHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCBiZWNhdXNlIHN5emthbGxlciBjYW4gb2Z0ZW4gaGFuZGxlIGl0IGlmIGl0IGlzIGluIHRoZSBzeW1ib2wgdGFibGUsIGJ1dCBsZXQncyBjb25zaWRlciBub24tc3RhdGljIGZ1bmN0aW9ucywgb3IgYm90aClcbiogICBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2BcbiogICBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgXG4qICAgYHNjdHBfbWFrZV9pbml0YFxuKiAgIGBzY3RwX21ha2VfaW5pdF9hY2tgXG4qICAgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYFxuXG5Ob3csIGxldCdzIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgYW5kIHNlZSBpZiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIHRoZXJlLiBJdCdzIHN0YXRpYywgYnV0IFN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJ3QgaW5saW5lZCwgc28gdGhhdCdzIGEgcG9zaXRpdmUuIFRoaW5raW5nIGFib3V0IGBzY3RwX3NldHNvY2tvcHRgIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBpdCBpcyBhIGJpdCBnZW5lcmljLiBGb2N1c2luZyBvbiBzcGVjaWZpY2l0eSwgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpcyBtb3JlIHNwZWNpZmljLlxuXG5TbywgaGVyZSdzIHRoZSBuYXJyb3dlZC1kb3duIGxpc3QgSSdtIGdvaW5nIHRvIGZvY3VzIG9uOiBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgLCBgc2N0cF9hdXRoX2VwX3NldF9obWFjc2AsIGBzY3RwX21ha2VfaW5pdGAsIGBzY3RwX21ha2VfaW5pdF9hY2tgLCBhbmQgYHNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkYC4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpbiBgbmV0L3NjdHAvc29ja2V0LmNgIHRvIG1ha2Ugc3VyZSBpdCdzIHdoZXJlIEkgdGhpbmsgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjU5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MTQuNjU1MjUxMzU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMTgwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NvY2tldC5jPTM1Nzk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0zNjA4LSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjM2MDk6c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3NjdHAvc29ja2V0LmMtMzYxMC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqaG1hY3MsXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz00NTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ3MDItXFx0Y2FzZSBTQ1RQX0hNQUNfSURFTlQ6XFxubmV0L3NjdHAvc29ja2V0LmM6NDcwMzpcXHRcXHRyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzaywga29wdCwgb3B0bGVuKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy00NzA0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzoxNC43NjA1ODI2MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjEyNzQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzY3RwX3NldHNvY2tvcHRgIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBgc2N0cF9zZXRzb2Nrb3B0YC4gVGhhdCBzdWdnZXN0cyB3ZSdyZSBtb2RpZnlpbmcgc29ja2V0LWxldmVsIG9wdGlvbnMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYW4gU0NUUCBhc3NvY2lhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCB3aGF0J3MgYmVpbmcgY29uZmlndXJlZD8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGhvdyBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBjYWxsIGlzIGhhcHBlbmluZywgYW5kIHRoZSBmaXJzdCBwbGFjZSBJJ2QgY2hlY2sgaXMgdGhlIGBzY3RwX2Fzc29jaWF0aW9uX2luaXRgIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZXhwZWN0IHN1Y2ggYSBjYWxsIHRvIGJlIG1hZGUsIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYwNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE3OjE4LjU1MjcxMjQ3OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyMjg1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9hc3NvY2lhdGlvbl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hc3NvY2lvbGEuYz00Nj1zdGF0aWMgdm9pZCBzY3RwX2Fzc29jX2ZyZWVfYXNjb25mX3F1ZXVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcXG4tLVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTUwLS8qIEluaXRpYWxpemUgYSBuZXcgYXNzb2NpYXRpb24gZnJvbSBwcm92aWRlZCBtZW1vcnkuICovXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM6NTE6c3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpzY3RwX2Fzc29jaWF0aW9uX2luaXQoXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz0yODY9c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnNjdHBfYXNzb2NpYXRpb25fbmV3KGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTI5NS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoyOTY6XFx0aWYgKCFzY3RwX2Fzc29jaWF0aW9uX2luaXQoYXNvYywgZXAsIHNrLCBzY29wZSwgZ2ZwKSlcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy0yOTctXFx0XFx0Z290byBmYWlsX2luaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE3OjE4LjYxNTk0NTUxOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3ODUzNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqU3RhdGljIHZzLiBOb24tU3RhdGljLCBhbmQgYSBEZWVwIERpdmUqKlxuXG5IbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWU6IHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBzZWVtcyBmdW5kYW1lbnRhbGx5IHN0YXRpYywgYXQgbGVhc3QgaW4gaXRzIGN1cnJlbnQgc3RydWN0dXJlLiBCdXQgdGhlIGNvbnN0cnVjdG9yIG9yIGluaXRpYWxpemVyLCBgc2N0cF9hc3NvY2lhdGlvbl9uZXdgLCBpcyAqbm90KiBzdGF0aWMuIFRoYXQncyBhIGxpdHRsZeKApiBpbmNvbmdydW91cywgaXNuJ3QgaXQ/IE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBkZXNpZ24gc21lbGwgaGVyZS4gVGhlcmUgY291bGQgYmUgcmVhc29ucyBmb3IgdGhpcyBjaG9pY2UsIHBlcmhhcHMgYSBuZWVkIGZvciBsYXRlIGluaXRpYWxpemF0aW9uIG9yIHNvbWUgZXh0ZXJuYWwgZGVwZW5kZW5jeSB0aGF0IG5lY2Vzc2l0YXRlcyBkeW5hbWljIGFsbG9jYXRpb24gb3Igbm9uLXN0YXRpYyBiZWhhdmlvciwgYnV0IG15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlIG1vcmUgY29tcGxldGVseS5cblxuT2theSwgbGV0J3MgYmFjayB1cCBhIGxpdHRsZSBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGBzY3RwX21ha2VfaW5pdGAuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gZmlndXJlIG91dCBob3cgdGhlIGFzc29jaWF0aW9uIGlzIGNyZWF0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBvZiB0aGUga2V5IGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGBzY3RwX21ha2VfaW5pdGAg4oCTIGl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgwOTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzoyMS45MjM4MDEyNzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDA4OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfbWFrZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTM1PWludCBzY3RwX2luaXRfY2F1c2Uoc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCBfX2JlMTYgY2F1c2VfY29kZSxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xOTctICovXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjE5ODpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE5OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnAsXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzcwLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNzE6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9pbml0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzcyLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4tLVxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYz0xMjc1PXN0YXRpYyBpbnQgc2N0cF9jbWRfaW50ZXJwcmV0ZXIoZW51bSBzY3RwX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSxcXG4tLVxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy0xMzc3LVxcdFxcdFxcdC8qIEdlbmVyYXRlIGFuIElOSVQgQUNLIGNodW5rLiAgKi9cXG5uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmM6MTM3ODpcXHRcXHRcXHRuZXdfb2JqID0gc2N0cF9tYWtlX2luaXRfYWNrKGFzb2MsIGNodW5rLCBHRlBfQVRPTUlDLFxcbm5ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYy0xMzc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgMCk7XFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0zMTk9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQl9pbml0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0NC1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDU6XFx0cmVwbCA9IHNjdHBfbWFrZV9pbml0X2FjayhuZXdfYXNvYywgY2h1bmssIEdGUF9BVE9NSUMsIGxlbik7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQ2LVxcdGlmICghcmVwbClcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE1Mjk9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3VuZXhwZWN0ZWRfaW5pdChcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE2NjgtXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MTY2OTpcXHRyZXBsID0gc2N0cF9tYWtlX2luaXRfYWNrKG5ld19hc29jLCBjaHVuaywgR0ZQX0FUT01JQywgbGVuKTtcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNjcwLVxcdGlmICghcmVwbClcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI1Nzc9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl82X3N0YWxlKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjYyMi1cXHRicCA9IChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKikgXFx1MDAyNmFzb2MtXFx1MDAzZWJhc2UuYmluZF9hZGRyO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjI2MjM6XFx0cmVwbHkgPSBzY3RwX21ha2VfaW5pdChhc29jLCBicCwgR0ZQX0FUT01JQywgc2l6ZW9mKGJodCkpO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI2MjQtXFx0aWYgKCFyZXBseSlcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTUwMTg9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2Fzb2Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTA0Mi1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1MDQzOlxcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBcXHUwMDI2YXNvYy1cXHUwMDNlYmFzZS5iaW5kX2FkZHIsIEdGUF9BVE9NSUMsIDApO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUwNDQtXFx0aWYgKCFyZXBsKVxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTk1Mj1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl90MV9pbml0X3RpbWVyX2V4cGlyZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU5NjktXFx0XFx0YnAgPSAoc3RydWN0IHNjdHBfYmluZF9hZGRyICopIFxcdTAwMjZhc29jLVxcdTAwM2ViYXNlLmJpbmRfYWRkcjtcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1OTcwOlxcdFxcdHJlcGwgPSBzY3RwX21ha2VfaW5pdChhc29jLCBicCwgR0ZQX0FUT01JQywgMCk7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTk3MS1cXHRcXHRpZiAoIXJlcGwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE2OjE3OjIxLjk5MjgxNTgzMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYyMTA4MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBTY2FuIG9mIFNDVFAgSW5pdGlhbGl6YXRpb24qKlxuXG5SaWdodCwgYHNjdHBfbWFrZV9pbml0YCBhbmQgYHNjdHBfbWFrZV9pbml0X2Fja2Agc2VlbSBwZXJmZWN0bHkgcmVhc29uYWJsZSBjaG9pY2VzIGFzIGJ1aWxkaW5nIGJsb2Nrcy4gTm8gcmVkIGZsYWdzIGp1bXBpbmcgb3V0IHRoZXJlLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgdGhpbmsgaXQncyB3b3J0aCBhIHF1aWNrIHJldmlldyBvZiBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgLiBJJ2xsIHdhbnQgdG8gZW5zdXJlIHRob3NlIGF1dGhlbnRpY2F0aW9uIHN0ZXBzIGFyZSBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzoyNC44NTQ5MjcyNTFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDM2NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfYXV0aF9hc29jX3ZlcmlmeV9obWFjX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hdXRoLmM9NDg1PXN0YXRpYyBpbnQgX19zY3RwX2F1dGhfZmluZF9obWFjaWQoX19iZTE2ICpobWFjcywgaW50IG5fZWx0cywgX19iZTE2IGhtYWNfaWQpXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNTAwLS8qIFNlZSBpZiB0aGUgSE1BQ19JRCBpcyBvbmUgdGhhdCB3ZSBjbGFpbSBhcyBzdXBwb3J0ZWQgKi9cXG5uZXQvc2N0cC9hdXRoLmM6NTAxOmludCBzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9hdXRoLmMtNTAyLVxcdFxcdFxcdFxcdCAgICBfX2JlMTYgaG1hY19pZClcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQ0MDE9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDE5LVxcdCAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ0MjA6XFx0aWYgKCFzY3RwX2F1dGhfYXNvY192ZXJpZnlfaG1hY19pZChhc29jLCBhdXRoX2hkci1cXHUwMDNlaG1hY19pZCkpXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQyMS1cXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfQVVUSF9CQURfSE1BQztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTY6MTc6MjQuOTIzOTY1ODg5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTY1MDIwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQsIHRoZSBmb2N1cyBzeW1ib2xzLiBCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSdtIG5vdGluZyB0aGVzZSBmdW5jdGlvbnMgYXMgcG90ZW50aWFsIGFyZWFzIHRvIHNjcnV0aW5pemU6IGBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudGAsIGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYCwgYHNjdHBfYXNzb2NpYXRpb25fbmV3YCwgYHNjdHBfbWFrZV9pbml0YCwgYHNjdHBfbWFrZV9pbml0X2Fja2AsIGFuZCBgc2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRgLlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgc2N0cF9zZXRzb2Nrb3B0X2htYWNfaWRlbnRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBXaGlsZSBpdCdzIHdvcnRoIGtlZXBpbmcgaW4gbWluZCwgSSBzaG91bGQgZGVmaW5pdGVseSBwcmlvcml0aXplIGBzY3RwX2F1dGhfZXBfc2V0X2htYWNzYCBzaW5jZSB0aGF0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIGV4cG9zZWQgdG8gZXh0ZXJuYWwgaW5wdXRzLiBIb3dldmVyLCBvbiBzZWNvbmQgdGhvdWdodCwgYHNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50YCBpcyBzdGlsbCBhIGdvb2QgdGFyZ2V0LlxuXG5MZXQgbWUgc3VtbWFyaXplIG15IGZpbmRpbmdzLCBlbnN1cmluZyBJJ20gY2xlYXIgYW5kIGNvbmNpc2U6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBpcyBhIGJ1ZmZlciBvdmVyZmxvdyBmaXgsIGEgY2xhc3NpYyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG4qICAgKipFbmFibGVDb25maWdzOioqIFxcW+KAnElQXFxfU0NUUOKAnV0gLSBUaGF0J3MgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZS5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBcXFvigJxzY3RwXFxfc2V0c29ja29wdFxcX2htYWNcXF9pZGVudOKAnSwg4oCcc2N0cFxcX2F1dGhcXF9lcFxcX3NldFxcX2htYWNz4oCdLCDigJxzY3RwXFxfYXNzb2NpYXRpb25cXF9uZXfigJ0sIOKAnHNjdHBcXF9tYWtlXFxfaW5pdOKAnSwg4oCcc2N0cFxcX21ha2VcXF9pbml0XFxfYWNr4oCdLCDigJxzY3RwXFxfYXV0aFxcX2Fzb2NcXF92ZXJpZnlcXF9obWFjXFxfaWTigJ1dIC0gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiwgbGlzdGVkIGluIG9yZGVyIG9mIHBvdGVudGlhbCBleHBsb2l0YWJpbGl0eS5cbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlIGluIGBzdHJ1Y3Qgc2N0cF9jb29raWVgIGJ5IGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIGBhdXRoX2htYWNzYCBhcnJheS4gVGhpcyBjaGFuZ2UgaXMgdG8gcHJvcGVybHkgYWNjb3VudCBmb3IgdGhlIGBzdHJ1Y3Qgc2N0cF9obWFjX2FsZ29fcGFyYW1gIHdpdGggYFNDVFBfQVVUSF9OVU1fSE1BQ1NgIGVsZW1lbnRzLiBJbiBzaG9ydCwgaXQncyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDU5LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNjoxNzozMi4zMjA0NzEwNDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUzNDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2V0c29ja29wdF9obWFjX2lkZW50XCIsXG4gICAgXCJzY3RwX2F1dGhfZXBfc2V0X2htYWNzXCIsXG4gICAgXCJzY3RwX2Fzc29jaWF0aW9uX25ld1wiLFxuICAgIFwic2N0cF9tYWtlX2luaXRcIixcbiAgICBcInNjdHBfbWFrZV9pbml0X2Fja1wiLFxuICAgIFwic2N0cF9hdXRoX2Fzb2NfdmVyaWZ5X2htYWNfaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gYHN0cnVjdCBzY3RwX2Nvb2tpZWAgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBgYXV0aF9obWFjc2AgYXJyYXkgdG8gcHJvcGVybHkgYWNjb21tb2RhdGUgYHN0cnVjdCBzY3RwX2htYWNfYWxnb19wYXJhbWAgd2l0aCBgU0NUUF9BVVRIX05VTV9ITUFDU2AgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWZmZXIgb3ZlcmZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjw7p6[1] Phase: Succeeded StartedAt: 2026-07-11 16:17:44 +0000 UTC FinishedAt: 2026-07-11 16:17:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 16:17:44 +0000 UTC FinishedAt: 2026-07-11 16:17:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2] Phase: Succeeded StartedAt: 2026-07-11 16:17:44 +0000 UTC FinishedAt: 2026-07-11 21:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 16:17:44 +0000 UTC FinishedAt: 2026-07-11 21:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 16:17:44 +0000 UTC FinishedAt: 2026-07-11 16:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 16:17:44 +0000 UTC FinishedAt: 2026-07-11 16:18:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjw7p6/series-workflowjw7p6-convert-artifact-3901086323/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 16:19:02 +0000 UTC FinishedAt: 2026-07-11 16:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 16:19:02 +0000 UTC FinishedAt: 2026-07-11 16:55:13 +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:*7db9b496-0fa9-4ded-a9e4-73f1441b2ea4,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-workflowjw7p6/series-workflowjw7p6-convert-artifact-3901086323/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": "f4408d8e-8d99-4237-be35-ba311eb5fc54", "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-workflowjw7p6/series-workflowjw7p6-build-action-522206497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 16:19:02 +0000 UTC FinishedAt: 2026-07-11 16:55:03 +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:*7db9b496-0fa9-4ded-a9e4-73f1441b2ea4,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-workflowjw7p6/series-workflowjw7p6-convert-artifact-3901086323/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": "f4408d8e-8d99-4237-be35-ba311eb5fc54", "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-workflowjw7p6/series-workflowjw7p6-build-action-522206497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 16:55:13 +0000 UTC FinishedAt: 2026-07-11 16:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 16:55:13 +0000 UTC FinishedAt: 2026-07-11 16:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 16:55:13 +0000 UTC FinishedAt: 2026-07-11 16:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 16:55:13 +0000 UTC FinishedAt: 2026-07-11 16:55:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjw7p6/series-workflowjw7p6-convert-artifact-826604906/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 16:55:23 +0000 UTC FinishedAt: 2026-07-11 16:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 16:55:23 +0000 UTC FinishedAt: 2026-07-11 16:57:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4408d8e-8d99-4237-be35-ba311eb5fc54,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-workflowjw7p6/series-workflowjw7p6-build-action-522206497/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-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 16:57:44 +0000 UTC FinishedAt: 2026-07-11 16:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 16:57:44 +0000 UTC FinishedAt: 2026-07-11 16:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 16:57:44 +0000 UTC FinishedAt: 2026-07-11 18:06:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 16:57:44 +0000 UTC FinishedAt: 2026-07-11 18:06:59 +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:*7db9b496-0fa9-4ded-a9e4-73f1441b2ea4,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-workflowjw7p6/series-workflowjw7p6-convert-artifact-826604906/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": "e7ba6908-2ad7-48ef-9108-339cb8564d03", "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-workflowjw7p6/series-workflowjw7p6-build-action-2748131726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 16:57:44 +0000 UTC FinishedAt: 2026-07-11 18:06:49 +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:*7db9b496-0fa9-4ded-a9e4-73f1441b2ea4,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-workflowjw7p6/series-workflowjw7p6-convert-artifact-826604906/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": "e7ba6908-2ad7-48ef-9108-339cb8564d03", "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-workflowjw7p6/series-workflowjw7p6-build-action-2748131726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 18:06:59 +0000 UTC FinishedAt: 2026-07-11 18:06:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 18:06:59 +0000 UTC FinishedAt: 2026-07-11 18:06:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 18:06:59 +0000 UTC FinishedAt: 2026-07-11 18:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 18:06:59 +0000 UTC FinishedAt: 2026-07-11 18:08:51 +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:*e7ba6908-2ad7-48ef-9108-339cb8564d03,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-workflowjw7p6/series-workflowjw7p6-build-action-2748131726/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-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 21:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 21:11:40 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f4408d8e-8d99-4237-be35-ba311eb5fc54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7ba6908-2ad7-48ef-9108-339cb8564d03,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-workflowjw7p6/series-workflowjw7p6-build-action-522206497/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-workflowjw7p6/series-workflowjw7p6-build-action-2748131726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 18:09:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 18:09:06 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7p6/series-workflowjw7p6-convert-artifact-241414911/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 18:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 18:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 18:09:01 +0000 UTC FinishedAt: 2026-07-11 18:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 18:09:11 +0000 UTC FinishedAt: 2026-07-11 21:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7p6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_setsockopt_hmac_ident","sctp_auth_ep_set_hmacs","sctp_association_new","sctp_make_init","sctp_make_init_ack","sctp_auth_asoc_verify_hmac_id"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1cd23ca80784223fa2204e16203f754da4e821f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"0f73dc18-9bed-4707-89b1-1ba3ba9ea538","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 18:09:11 +0000 UTC FinishedAt: 2026-07-11 21:11:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4408d8e-8d99-4237-be35-ba311eb5fc54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7ba6908-2ad7-48ef-9108-339cb8564d03,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-workflowjw7p6/series-workflowjw7p6-build-action-522206497/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-workflowjw7p6/series-workflowjw7p6-build-action-2748131726/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-workflowjw7p6/series-workflowjw7p6-convert-artifact-241414911/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,}