Name: series-workflowpqqk9 Phase: Running StartedAt: 2026-08-16 20:17:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[0] Phase: Succeeded StartedAt: 2026-08-16 20:17:05 +0000 UTC FinishedAt: 2026-08-16 20:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 20:17:05 +0000 UTC FinishedAt: 2026-08-16 20:58:32 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ACT", "NET_ACT_BPF", "NET_ACT_CT", "NET_ACT_CTINFO", "NET_ACT_IFE", "NET_ACT_PEDIT", "NET_ACT_POLICE", "NET_ACT_SAMPLE", "NET_ACT_TUNNEL_KEY", "NF_CONNTRACK", "NF_CONNTRACK_MARK", "NF_CONNTRACK_LABELS", "NF_CONNTRACK_ZONES", "NF_FLOW_TABLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ACT", "NET_ACT_BPF", "NET_ACT_CT", "NET_ACT_CTINFO", "NET_ACT_IFE", "NET_ACT_PEDIT", "NET_ACT_POLICE", "NET_ACT_SAMPLE", "NET_ACT_TUNNEL_KEY", "NF_CONNTRACK", "NF_CONNTRACK_MARK", "NF_CONNTRACK_LABELS", "NF_CONNTRACK_ZONES", "NF_FLOW_TABLE" ], "series_id": "e72071c6-ec99-43f5-a9b9-3d196236fed4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcf_action_init", "tcf_action_init_1", "tcf_action_dump", "tcf_exts_validate_ex", "tcf_exts_dump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQlBGJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVElORk8mIzM0OywKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9QRURJVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1BPTElDRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1RVTk5FTF9LRVkmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19NQVJLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19MQUJFTFMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1pPTkVTJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9pbml0XzEmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9kdW1wJiMzNDssCiAgICAmIzM0O3RjZl9leHRzX3ZhbGlkYXRlX2V4JiMzNDssCiAgICAmIzM0O3RjZl9leHRzX2R1bXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGludm9sdmUgY2FsY3VsYXRpbmcgc2l6ZXMgKHJldHVybmluZyBgc2l6ZV90YCkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG8gbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgYWRkIGNvbXBsZXggY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGEgc2l6ZSBpcyBtaXNjYWxjdWxhdGVkLCBpdCB3b3VsZCBlaXRoZXIgcmVzdWx0IGluIGFuIGBFTVNHU0laRWAgZXJyb3IgZHVyaW5nIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gb3IgcG90ZW50aWFsbHkgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgdW5kZXJlc3RpbWF0ZWQgYW5kIGJvdW5kcyBjaGVja3MgYXJlIG1pc3NpbmcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTikuIE5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmxhX3B1dGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdoaWNoIHVwZGF0ZSB0aGUgYHNrYi1cdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyB0byB2YXJpb3VzIFRDIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgdG8gZHVtcCB0aGUgYWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBuZXRsaW5rIGR1bXAgb3BlcmF0aW9ucyBmb3IgVEMgYWN0aW9ucy4gSXQmIzM5O3Mgd29ydGggZnV6emluZyBiZWNhdXNlIGluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBjYW4gbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgYEVNU0dTSVpFYCBlcnJvcnMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDo1NTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuaW5kZXggNjAwYjc4MDRiZWZkMi4uYjQ0MTVkMzU4YzkxMSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcbkBAIC00NTIsNyAmIzQzOzQ1MiwxMCBAQCBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuIFx0XHQvKiBUQ0FfU1RBVFNfUVVFVUUgKi9cbiBcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKSlcbiBcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoMCkgLyogVENBX0FDVF9PUFRJT05TIG5lc3RlZCAqL1xuLVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjZl90KSk7IC8qIFRDQV9HQUNUX1RNICovXG4mIzQzO1x0XHQvKiBUQ0FfR0FDVF9UTTsgYWN0aW9ucyBkdW1wIHRoZWlyIHRjZl90IHdpdGggbmxhX3B1dF82NGJpdCgpLFxuJiM0MztcdFx0ICogd2hpY2ggbWF5IGVtaXQgYW4gZXh0cmEgTkxBX1BBRCBhdHRyaWJ1dGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZihzdHJ1Y3QgdGNmX3QpKTtcbiB9XG4gXG4gc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX2Z1bGxfYXR0cnNfc2l6ZShzaXplX3Qgc3opXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBmLmNcbmluZGV4IDA5ZDQ2ZTE5NWUzM2IuLjA2ZDhmNzhiNzM2ODMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2JwZi5jXG5AQCAtMzg5LDYgJiM0MzszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiBcdHRjZl9icGZfY2ZnX2NsZWFudXAoXHUwMDI2dG1wKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgdGNmX2JwZl9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7XG4mIzQzO1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2FjdF9icGYpKTtcbiYjNDM7XG4mIzQzO1x0LyogYnBmX29wcyBhbmQgYnBmX251bV9vcHMgYXJlIHB1Ymxpc2hlZCBhcyBzZXBhcmF0ZSBzdG9yZXMgdW5kZXJcbiYjNDM7XHQgKiB0Y2ZfbG9jaywgc28gdGFrZSBpdCBoZXJlIGFzIHRjZl9icGZfZHVtcCgpIGRvZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuJiM0MztcdGlmICh0Y2ZfYnBmX2lzX2VicGYocHJvZykpIHtcbiYjNDM7XHRcdC8qIFRDQV9BQ1RfQlBGX05BTUUgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKEFDVF9CUEZfTkFNRV9MRU4gJiM0MzsgMSk7XG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9BQ1RfQlBGX0lEICovXG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShCUEZfVEFHX1NJWkUpOyAvKiBUQ0FfQUNUX0JQRl9UQUcgKi9cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQUNUX0JQRl9PUFNfTEVOICovXG4mIzQzO1x0XHQvKiBUQ0FfQUNUX0JQRl9PUFMgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHByb2ctXHUwMDNlYnBmX251bV9vcHMgKlxuJiM0MztcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2tfZmlsdGVyKSk7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5raW5kXHRcdD1cdFwmIzM0O2JwZlwmIzM0OyxcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfQlBGLFxuQEAgLTM5Nyw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQuZHVtcFx0XHQ9XHR0Y2ZfYnBmX2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX2JwZl9jbGVhbnVwLFxuIFx0LmluaXRcdFx0PVx0dGNmX2JwZl9pbml0LFxuJiM0MztcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfYnBmX2dldF9maWxsX3NpemUsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9icGYpLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCYjMzQ7YnBmXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IGUyNTA5NjljODRhY2EuLjM3MDA4NWFiNmVhNDEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTE2NTcsNiAmIzQzOzE2NTcsNTEgQEAgc3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xuJiM0MztcdHNpemVfdCBzaXplO1xuJiM0MztcbiYjNDM7XHRzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdCkpIC8qIFRDQV9DVF9QQVJNUyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovXG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwID0gcmN1X2RlcmVmZXJlbmNlKHRvX2N0KGFjdCktXHUwMDNlcGFyYW1zKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHAtXHUwMDNlY3RfYWN0aW9uIFx1MDAyNiBUQ0FfQ1RfQUNUX0NMRUFSKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSlcbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZW1hcmspKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2VtYXJrX21hc2spKTtcbiYjNDM7XG4mIzQzO1x0LyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpKVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzKSlcbiYjNDM7XHRcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzX21hc2spKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykpXG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2V6b25lKSk7IC8qIFRDQV9DVF9aT05FICovXG4mIzQzO1xuJiM0MztcdGlmIChwLVx1MDAzZWN0X2FjdGlvbiBcdTAwMjYgVENBX0NUX0FDVF9OQVQpXG4mIzQzO1x0XHQvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzc1xuJiM0MztcdFx0ICogdmFyaWFudHMsIHBsdXMgVENBX0NUX05BVF9QT1JUX3tNSU4sTUFYfS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxuJiM0MztcdFx0XHQmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpO1xuJiM0MztcbiYjNDM7XHQvKiBUQ0FfQ1RfSEVMUEVSX3tOQU1FLEZBTUlMWSxQUk9UT30gKi9cbiYjNDM7XHRpZiAocC1cdTAwM2VoZWxwZXIpXG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShORl9DVF9IRUxQRVJfTkFNRV9MRU4pXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuIFx0LmtpbmRcdFx0PVx0XCYjMzQ7Y3RcJiMzNDssXG4gXHQuaWRcdFx0PVx0VENBX0lEX0NULFxuQEAgLTE2NjYsNiAmIzQzOzE3MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcbiBcdC5pbml0XHRcdD1cdHRjZl9jdF9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHRjZl9jdF9jbGVhbnVwLFxuIFx0LnN0YXRzX3VwZGF0ZVx0PVx0dGNmX3N0YXRzX3VwZGF0ZSxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2N0X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX2N0X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdGluZm8uYyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcbmluZGV4IDE4ODZmZmQyY2E5NTYuLmZjZWQ0YjEwOTRhZjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jXG5AQCAtMzU2LDYgJiM0MzszNTYsMTYgQEAgc3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4gXHRcdGtmcmVlX3JjdShjcCwgcmN1KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0aW5mbykpIC8qIFRDQV9DVElORk9fQUNUICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkgLyogVENBX0NUSU5GT19aT05FICovXG4mIzQzO1x0XHQvKiBUQ0FfQ1RJTkZPX1BBUk1TX3tEU0NQX01BU0ssRFNDUF9TVEFURU1BU0ssQ1BNQVJLX01BU0t9ICovXG4mIzQzO1x0XHQmIzQzOyAzICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpXG4mIzQzO1x0XHQvKiBUQ0FfQ1RJTkZPX1NUQVRTX3tEU0NQX1NFVCxEU0NQX0VSUk9SLENQTUFSS19TRVR9ICovXG4mIzQzO1x0XHQmIzQzOyAzICogbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHtcbiBcdC5raW5kXHQ9IFwmIzM0O2N0aW5mb1wmIzM0OyxcbiBcdC5pZFx0PSBUQ0FfSURfQ1RJTkZPLFxuQEAgLTM2NCw2ICYjNDM7Mzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuIFx0LmR1bXBcdD0gdGNmX2N0aW5mb19kdW1wLFxuIFx0LmluaXRcdD0gdGNmX2N0aW5mb19pbml0LFxuIFx0LmNsZWFudXA9IHRjZl9jdGluZm9fY2xlYW51cCxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXG4gfTtcbiBNT0RVTEVfQUxJQVNfTkVUX0FDVChcJiMzNDtjdGluZm9cJiMzNDspO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTg3OCw2ICYjNDM7ODc4LDI4IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHRjZl9pZmVfZGVjb2RlKHNrYiwgYSwgcmVzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y2ZfaWZlX2luZm8gKmlmZSA9IHRvX2lmZShhY3QpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiYjNDM7XHRzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfaWZlKSkgLyogVENBX0lGRV9QQVJNUyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfRE1BQyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoMikgLyogVENBX0lGRV9UWVBFICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZSgwKTsgLyogVENBX0lGRV9NRVRBTFNUICovXG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwID0gcmN1X2RlcmVmZXJlbmNlKGlmZS1cdTAwM2VwYXJhbXMpO1xuJiM0MztcdGlmIChwKSB7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcdTAwMjZwLVx1MDAzZW1ldGFsaXN0LCBtZXRhbGlzdClcbiYjNDM7XHRcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xuIFx0LmtpbmQgPSBcJiMzNDtpZmVcJiMzNDssXG4gXHQuaWQgPSBUQ0FfSURfSUZFLFxuQEAgLTg4Niw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xuIFx0LmR1bXAgPSB0Y2ZfaWZlX2R1bXAsXG4gXHQuY2xlYW51cCA9IHRjZl9pZmVfY2xlYW51cCxcbiBcdC5pbml0ID0gdGNmX2lmZV9pbml0LFxuJiM0MztcdC5nZXRfZmlsbF9zaXplID0gdGNmX2lmZV9nZXRfZmlsbF9zaXplLFxuIFx0LnNpemUgPVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfaWZlX2luZm8pLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCYjMzQ7aWZlXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcbmluZGV4IGQ0ZDQ3YTk5MjFmNDUuLjk5ZDdlMzY1MTBiZDAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuY1xuQEAgLTYyNiw2ICYjNDM7NjI2LDI5IEBAIHN0YXRpYyBpbnQgdGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtcztcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHBhcm1zID0gcmN1X2RlcmVmZXJlbmNlKHRvX3BlZGl0KGFjdCktXHUwMDNlcGFybXMpO1xuJiM0MztcdHNpemUgPSBubGFfdG90YWxfc2l6ZShzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCB0Y19wZWRpdCwga2V5cyxcbiYjNDM7XHRcdFx0XHRcdCAgICBwYXJtcy1cdTAwM2V0Y2ZwX25rZXlzKSk7XG4mIzQzO1x0aWYgKHBhcm1zLVx1MDAzZXRjZnBfa2V5c19leCkge1xuJiM0MztcdFx0LyogVENBX1BFRElUX0tFWVNfRVgsIGhvbGRpbmcgb25lIFRDQV9QRURJVF9LRVlfRVggbmVzdCB3aXRoIGFcbiYjNDM7XHRcdCAqIEhUWVBFIGFuZCBhIENNRCBhdHRyaWJ1dGUgcGVyIGtleS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMClcbiYjNDM7XHRcdFx0JiM0MzsgcGFybXMtXHUwMDNldGNmcF9ua2V5cyAqIChubGFfdG90YWxfc2l6ZSgwKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwmIzM0O3BlZGl0XCYjMzQ7LFxuIFx0LmlkXHRcdD1cdFRDQV9JRF9QRURJVCxcbkBAIC02MzUsNiAmIzQzOzY1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dGNmX3BlZGl0X2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX3BlZGl0X2NsZWFudXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfcGVkaXRfaW5pdCxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BlZGl0X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG5AQCAtNDkwLDYgJiM0Mzs0OTAsMTcgQEAgc3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfcG9saWNlKSkgLyogVENBX1BPTElDRV9UQkYgKi9cbiYjNDM7XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1JBVEU2NCAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEtUUkFURTY0ICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RCVVJTVDY0ICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi9cbiYjNDM7XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX1BPTElDRV9BVlJBVEUgKi9cbiYjNDM7fVxuJiM0MztcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0FsZXhleSBLdXpuZXRzb3ZcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtQb2xpY2luZyBhY3Rpb25zXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuQEAgLTUwMyw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wb2xpY2Vfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dGNmX3BvbGljZV9kdW1wLFxuIFx0LmluaXRcdFx0PVx0dGNmX3BvbGljZV9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHRjZl9wb2xpY2VfY2xlYW51cCxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9wb2xpY2UpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjQ0MzE5YTE1OWI1NWQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMzE1LDYgJiM0MzszMTUsMTQgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfUkFURSAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfVFJVTkNfU0laRSAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi9cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQua2luZFx0ICA9IFwmIzM0O3NhbXBsZVwmIzM0OyxcbiBcdC5pZFx0ICA9IFRDQV9JRF9TQU1QTEUsXG5AQCAtMzI0LDYgJiM0MzszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQuZHVtcFx0ICA9IHRjZl9zYW1wbGVfZHVtcCxcbiBcdC5pbml0XHQgID0gdGNmX3NhbXBsZV9pbml0LFxuIFx0LmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLFxuJiM0MztcdC5nZXRfZmlsbF9zaXplID0gdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplLFxuIFx0LmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgICAgPSB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdCAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbmluZGV4IGIxNDgwNzc2MWQ4MjkuLmZmNDAxYWNlNGYzZGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbkBAIC04MzUsNiAmIzQzOzgzNSw4NSBAQCBzdGF0aWMgaW50IHRjZl90dW5uZWxfa2V5X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdFxuJiM0Mzt0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbiYjNDM7XHRpbnQgbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSAoY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKilzcmM7XG4mIzQzO1xuJiM0MztcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9HRU5FVkVfe0NMQVNTLFRZUEUsREFUQX0gKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKDIpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKDEpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKG9wdC1cdTAwM2VsZW5ndGggKiA0KTtcbiYjNDM7XG4mIzQzO1x0XHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbiYjNDM7XHRcdHNyYyAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VvcHRpb25zX2xlbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUUyBhbmQgdGhlIHBlci1wcm90b2NvbCBuZXN0IGluc2lkZSBpdCAqL1xuJiM0MztcdHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKSAmIzQzOyBubGFfdG90YWxfc2l6ZSgwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoaW5mbyk7XG4mIzQzO1x0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuJiM0MztcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9WWExBTl9HQlAgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuJiM0MztcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9FUlNQQU5fe1ZFUixJTkRFWCxESVIsSFdJRH0gKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNmX3R1bm5lbF9rZXkgKnQgPSB0b190dW5uZWxfa2V5KGFjdCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHRjZl90dW5uZWxfa2V5X3BhcmFtcyAqcGFyYW1zO1xuJiM0MztcdC8qIFRDQV9UVU5ORUxfS0VZX1BBUk1TICovXG4mIzQzO1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3R1bm5lbF9rZXkpKTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZXBhcmFtcyk7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2V0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPVxuJiM0MztcdFx0XHRcdTAwMjZwYXJhbXMtXHUwMDNldGNmdF9lbmNfbWV0YWRhdGEtXHUwMDNldS50dW5faW5mbztcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbiBkdW1wIG9yZGVyOiBUQ0FfVFVOTkVMX0tFWV9FTkNfS0VZX0lELCB0aGUgSVB2NiBhZGRyZXNzXG4mIzQzO1x0XHQgKiBwYWlyIChsYXJnZXIgdGhhbiB0aGUgSVB2NCBvbmUpLCAuLi5fRU5DX0RTVF9QT1JULFxuJiM0MztcdFx0ICogLi4uX05PX0NTVU0sIC4uLl9OT19GUkFHLCB0aGUgb3B0aW9ucyBhbmQgLi4uX0VOQ197VE9TLFRUTH0uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuJiM0MztcdFx0XHQmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZSgwKVxuJiM0MztcdFx0XHQmIzQzOyB0dW5uZWxfa2V5X29wdHNfZmlsbF9zaXplKGluZm8pXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwmIzM0O3R1bm5lbF9rZXlcJiMzNDssXG4gXHQuaWRcdFx0PVx0VENBX0lEX1RVTk5FTF9LRVksXG5AQCAtODQzLDYgJiM0Mzs5MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dHVubmVsX2tleV9kdW1wLFxuIFx0LmluaXRcdFx0PVx0dHVubmVsX2tleV9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHR1bm5lbF9rZXlfcmVsZWFzZSxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dHVubmVsX2tleV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl90dW5uZWxfa2V5X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksXG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9CUEYmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUSU5GTyYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0lGRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1BFRElUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfUE9MSUNFJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfU0FNUExFJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfVFVOTkVMX0tFWSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX01BUksmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0xBQkVMUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfWk9ORVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25faW5pdCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2luaXRfMSYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2R1bXAmIzM0OywKICAgICYjMzQ7dGNmX2V4dHNfdmFsaWRhdGVfZXgmIzM0OywKICAgICYjMzQ7dGNmX2V4dHNfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgdG8gdmFyaW91cyBUQyBhY3Rpb25zIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgbmVlZGVkIHRvIGR1bXAgdGhlIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIEl0JiMzOTtzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNDMzMWI2NmQ5ZjM5ZWViMmM1ODdkY2I1OWQxZDFmM2M5MGEzZDMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMjA6NTU6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCA2MDBiNzgwNGJlZmQyLi5iNDQxNWQzNThjOTExIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTQ1Miw3ICYjNDM7NDUyLDEwIEBAIHN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiAJCS8qIFRDQV9TVEFUU19RVUVVRSAqLwogCQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IGduZXRfc3RhdHNfcXVldWUpKQogCQkmIzQzOyBubGFfdG90YWxfc2l6ZSgwKSAvKiBUQ0FfQUNUX09QVElPTlMgbmVzdGVkICovCi0JCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNmX3QpKTsgLyogVENBX0dBQ1RfVE0gKi8KJiM0MzsJCS8qIFRDQV9HQUNUX1RNOyBhY3Rpb25zIGR1bXAgdGhlaXIgdGNmX3Qgd2l0aCBubGFfcHV0XzY0Yml0KCksCiYjNDM7CQkgKiB3aGljaCBtYXkgZW1pdCBhbiBleHRyYSBOTEFfUEFEIGF0dHJpYnV0ZS4KJiM0MzsJCSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOwogfQogCiBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeikKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYnBmLmMgYi9uZXQvc2NoZWQvYWN0X2JwZi5jCmluZGV4IDA5ZDQ2ZTE5NWUzM2IuLjA2ZDhmNzhiNzM2ODMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9icGYuYwpAQCAtMzg5LDYgJiM0MzszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKIAl0Y2ZfYnBmX2NmZ19jbGVhbnVwKCZhbXA7dG1wKTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2JwZl9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7CiYjNDM7CXNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19hY3RfYnBmKSk7CiYjNDM7CiYjNDM7CS8qIGJwZl9vcHMgYW5kIGJwZl9udW1fb3BzIGFyZSBwdWJsaXNoZWQgYXMgc2VwYXJhdGUgc3RvcmVzIHVuZGVyCiYjNDM7CSAqIHRjZl9sb2NrLCBzbyB0YWtlIGl0IGhlcmUgYXMgdGNmX2JwZl9kdW1wKCkgZG9lcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3Byb2ctJmd0O3RjZl9sb2NrKTsKJiM0MzsJaWYgKHRjZl9icGZfaXNfZWJwZihwcm9nKSkgewomIzQzOwkJLyogVENBX0FDVF9CUEZfTkFNRSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoQUNUX0JQRl9OQU1FX0xFTiAmIzQzOyAxKTsKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX0FDVF9CUEZfSUQgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKEJQRl9UQUdfU0laRSk7IC8qIFRDQV9BQ1RfQlBGX1RBRyAqLwomIzQzOwl9IGVsc2UgewomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQUNUX0JQRl9PUFNfTEVOICovCiYjNDM7CQkvKiBUQ0FfQUNUX0JQRl9PUFMgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHByb2ctJmd0O2JwZl9udW1fb3BzICoKJiM0MzsJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3Byb2ctJmd0O3RjZl9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmtpbmQJCT0JJiMzNDticGYmIzM0OywKIAkuaWQJCT0JVENBX0lEX0JQRiwKQEAgLTM5Nyw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmR1bXAJCT0JdGNmX2JwZl9kdW1wLAogCS5jbGVhbnVwCT0JdGNmX2JwZl9jbGVhbnVwLAogCS5pbml0CQk9CXRjZl9icGZfaW5pdCwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0Y2ZfYnBmX2dldF9maWxsX3NpemUsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfYnBmKSwKIH07CiBNT0RVTEVfQUxJQVNfTkVUX0FDVCgmIzM0O2JwZiYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuYwppbmRleCBlMjUwOTY5Yzg0YWNhLi4zNzAwODVhYjZlYTQxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9jdC5jCkBAIC0xNjU3LDYgJiM0MzsxNjU3LDUxIEBAIHN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwomIzQzOwlzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdCkpIC8qIFRDQV9DVF9QQVJNUyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovCiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcCA9IHJjdV9kZXJlZmVyZW5jZSh0b19jdChhY3QpLSZndDtwYXJhbXMpOwomIzQzOwomIzQzOwlpZiAocC0mZ3Q7Y3RfYWN0aW9uICZhbXA7IFRDQV9DVF9BQ1RfQ0xFQVIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogVENBX0NUX01BUkssIFRDQV9DVF9NQVJLX01BU0sgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSkKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDttYXJrKSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7bWFya19tYXNrKSk7CiYjNDM7CiYjNDM7CS8qIFRDQV9DVF9MQUJFTFMsIFRDQV9DVF9MQUJFTFNfTUFTSyAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7bGFiZWxzKSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7bGFiZWxzX21hc2spKTsKJiM0MzsKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykpCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7em9uZSkpOyAvKiBUQ0FfQ1RfWk9ORSAqLwomIzQzOwomIzQzOwlpZiAocC0mZ3Q7Y3RfYWN0aW9uICZhbXA7IFRDQV9DVF9BQ1RfTkFUKQomIzQzOwkJLyogVENBX0NUX05BVF9JUFY2X3tNSU4sTUFYfSwgdGhlIGxhcmdlciBvZiB0aGUgdHdvIGFkZHJlc3MKJiM0MzsJCSAqIHZhcmlhbnRzLCBwbHVzIFRDQV9DVF9OQVRfUE9SVF97TUlOLE1BWH0uCiYjNDM7CQkgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkKJiM0MzsJCQkmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpOwomIzQzOwomIzQzOwkvKiBUQ0FfQ1RfSEVMUEVSX3tOQU1FLEZBTUlMWSxQUk9UT30gKi8KJiM0MzsJaWYgKHAtJmd0O2hlbHBlcikKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKE5GX0NUX0hFTFBFUl9OQU1FX0xFTikKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpOwomIzQzO291dDoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0gewogCS5raW5kCQk9CSYjMzQ7Y3QmIzM0OywKIAkuaWQJCT0JVENBX0lEX0NULApAQCAtMTY2Niw2ICYjNDM7MTcxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0gewogCS5pbml0CQk9CXRjZl9jdF9pbml0LAogCS5jbGVhbnVwCT0JdGNmX2N0X2NsZWFudXAsCiAJLnN0YXRzX3VwZGF0ZQk9CXRjZl9zdGF0c191cGRhdGUsCiYjNDM7CS5nZXRfZmlsbF9zaXplCT0JdGNmX2N0X2dldF9maWxsX3NpemUsCiAJLm9mZmxvYWRfYWN0X3NldHVwID0JdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwLAogCS5zaXplCQk9CXNpemVvZihzdHJ1Y3QgdGNmX2N0KSwKIH07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uYwppbmRleCAxODg2ZmZkMmNhOTU2Li5mY2VkNGIxMDk0YWY4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMKQEAgLTM1Niw2ICYjNDM7MzU2LDE2IEBAIHN0YXRpYyB2b2lkIHRjZl9jdGluZm9fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKQogCQlrZnJlZV9yY3UoY3AsIHJjdSk7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdGluZm8pKSAvKiBUQ0FfQ1RJTkZPX0FDVCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpIC8qIFRDQV9DVElORk9fWk9ORSAqLwomIzQzOwkJLyogVENBX0NUSU5GT19QQVJNU197RFNDUF9NQVNLLERTQ1BfU1RBVEVNQVNLLENQTUFSS19NQVNLfSAqLwomIzQzOwkJJiM0MzsgMyAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKQomIzQzOwkJLyogVENBX0NUSU5GT19TVEFUU197RFNDUF9TRVQsRFNDUF9FUlJPUixDUE1BUktfU0VUfSAqLwomIzQzOwkJJiM0MzsgMyAqIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7CiAJLmtpbmQJPSAmIzM0O2N0aW5mbyYjMzQ7LAogCS5pZAk9IFRDQV9JRF9DVElORk8sCkBAIC0zNjQsNiAmIzQzOzM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHsKIAkuZHVtcAk9IHRjZl9jdGluZm9fZHVtcCwKIAkuaW5pdAk9IHRjZl9jdGluZm9faW5pdCwKIAkuY2xlYW51cD0gdGNmX2N0aW5mb19jbGVhbnVwLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZSwKIAkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksCiB9OwogTU9EVUxFX0FMSUFTX05FVF9BQ1QoJiMzNDtjdGluZm8mIzM0Oyk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lmZS5jIGIvbmV0L3NjaGVkL2FjdF9pZmUuYwppbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKQEAgLTg3OCw2ICYjNDM7ODc4LDI4IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYWN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IHRjZl9pZmVfcGFyYW1zICpwOwomIzQzOwlzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTsKJiM0MzsJc2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2lmZSkpIC8qIFRDQV9JRkVfUEFSTVMgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBUQ0FfSUZFX0RNQUMgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBUQ0FfSUZFX1NNQUMgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKDIpIC8qIFRDQV9JRkVfVFlQRSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoMCk7IC8qIFRDQV9JRkVfTUVUQUxTVCAqLwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXAgPSByY3VfZGVyZWZlcmVuY2UoaWZlLSZndDtwYXJhbXMpOwomIzQzOwlpZiAocCkgewomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmFtcDtwLSZndDttZXRhbGlzdCwgbWV0YWxpc3QpCiYjNDM7CQkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7CiAJLmtpbmQgPSAmIzM0O2lmZSYjMzQ7LAogCS5pZCA9IFRDQV9JRF9JRkUsCkBAIC04ODYsNiAmIzQzOzkwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHsKIAkuZHVtcCA9IHRjZl9pZmVfZHVtcCwKIAkuY2xlYW51cCA9IHRjZl9pZmVfY2xlYW51cCwKIAkuaW5pdCA9IHRjZl9pZmVfaW5pdCwKJiM0MzsJLmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsCiAJLnNpemUgPQlzaXplb2Yoc3RydWN0IHRjZl9pZmVfaW5mbyksCiB9OwogTU9EVUxFX0FMSUFTX05FVF9BQ1QoJiMzNDtpZmUmIzM0Oyk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKaW5kZXggZDRkNDdhOTkyMWY0NS4uOTlkN2UzNjUxMGJkMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwpAQCAtNjI2LDYgJiM0Mzs2MjYsMjkgQEAgc3RhdGljIGludCB0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtczsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcGFybXMgPSByY3VfZGVyZWZlcmVuY2UodG9fcGVkaXQoYWN0KS0mZ3Q7cGFybXMpOwomIzQzOwlzaXplID0gbmxhX3RvdGFsX3NpemUoc3RydWN0X3NpemVfdChzdHJ1Y3QgdGNfcGVkaXQsIGtleXMsCiYjNDM7CQkJCQkgICAgcGFybXMtJmd0O3RjZnBfbmtleXMpKTsKJiM0MzsJaWYgKHBhcm1zLSZndDt0Y2ZwX2tleXNfZXgpIHsKJiM0MzsJCS8qIFRDQV9QRURJVF9LRVlTX0VYLCBob2xkaW5nIG9uZSBUQ0FfUEVESVRfS0VZX0VYIG5lc3Qgd2l0aCBhCiYjNDM7CQkgKiBIVFlQRSBhbmQgYSBDTUQgYXR0cmlidXRlIHBlciBrZXkuCiYjNDM7CQkgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApCiYjNDM7CQkJJiM0MzsgcGFybXMtJmd0O3RjZnBfbmtleXMgKiAobmxhX3RvdGFsX3NpemUoMCkKJiM0MzsJCQkJCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkKJiM0MzsJCQkJCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHsKIAkua2luZAkJPQkmIzM0O3BlZGl0JiMzNDssCiAJLmlkCQk9CVRDQV9JRF9QRURJVCwKQEAgLTYzNSw2ICYjNDM7NjU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wZWRpdF9vcHMgPSB7CiAJLmR1bXAJCT0JdGNmX3BlZGl0X2R1bXAsCiAJLmNsZWFudXAJPQl0Y2ZfcGVkaXRfY2xlYW51cCwKIAkuaW5pdAkJPQl0Y2ZfcGVkaXRfaW5pdCwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpAQCAtNDkwLDYgJiM0Mzs0OTAsMTcgQEAgc3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3BvbGljZSkpIC8qIFRDQV9QT0xJQ0VfVEJGICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9SQVRFNjQgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BFQUtSQVRFNjQgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVFJBVEU2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEtUQlVSU1Q2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9QT0xJQ0VfUkVTVUxUICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9QT0xJQ0VfQVZSQVRFICovCiYjNDM7fQomIzQzOwogTU9EVUxFX0FVVEhPUigmIzM0O0FsZXhleSBLdXpuZXRzb3YmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtQb2xpY2luZyBhY3Rpb25zJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CkBAIC01MDMsNiAmIzQzOzUxNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHsKIAkuZHVtcAkJPQl0Y2ZfcG9saWNlX2R1bXAsCiAJLmluaXQJCT0JdGNmX3BvbGljZV9pbml0LAogCS5jbGVhbnVwCT0JdGNmX3BvbGljZV9jbGVhbnVwLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwLAogCS5zaXplCQk9CXNpemVvZihzdHJ1Y3QgdGNmX3BvbGljZSksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKaW5kZXggMmNlYjRkMTQxYjcxMy4uNDQzMTlhMTU5YjU1ZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCkBAIC0zMTUsNiAmIzQzOzMxNSwxNCBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfUkFURSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfVFJVTkNfU0laRSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi8KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7CiAJLmtpbmQJICA9ICYjMzQ7c2FtcGxlJiMzNDssCiAJLmlkCSAgPSBUQ0FfSURfU0FNUExFLApAQCAtMzI0LDYgJiM0MzszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7CiAJLmR1bXAJICA9IHRjZl9zYW1wbGVfZHVtcCwKIAkuaW5pdAkgID0gdGNmX3NhbXBsZV9pbml0LAogCS5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCwKJiM0MzsJLmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsCiAJLmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsCiAJLm9mZmxvYWRfYWN0X3NldHVwICAgID0gdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cCwKIAkuc2l6ZQkgID0gc2l6ZW9mKHN0cnVjdCB0Y2Zfc2FtcGxlKSwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMKaW5kZXggYjE0ODA3NzYxZDgyOS4uZmY0MDFhY2U0ZjNkYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMKQEAgLTgzNSw2ICYjNDM7ODM1LDg1IEBAIHN0YXRpYyBpbnQgdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdAomIzQzO3R1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pOwomIzQzOwlpbnQgbGVuID0gaW5mby0mZ3Q7b3B0aW9uc19sZW47CiYjNDM7CXNpemVfdCBzaXplID0gMDsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbiAmZ3Q7IDApIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSAoY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKilzcmM7CiYjNDM7CiYjNDM7CQkvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX0dFTkVWRV97Q0xBU1MsVFlQRSxEQVRBfSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMikKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZSgxKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKG9wdC0mZ3Q7bGVuZ3RoICogNCk7CiYjNDM7CiYjNDM7CQlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtJmd0O2xlbmd0aCAqIDQ7CiYjNDM7CQlzcmMgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgJiM0Mzsgb3B0LSZndDtsZW5ndGggKiA0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7b3B0aW9uc19sZW4pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVENBX1RVTk5FTF9LRVlfRU5DX09QVFMgYW5kIHRoZSBwZXItcHJvdG9jb2wgbmVzdCBpbnNpZGUgaXQgKi8KJiM0MzsJc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApICYjNDM7IG5sYV90b3RhbF9zaXplKDApOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKSkgewomIzQzOwkJc2l6ZSAmIzQzOz0gdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoaW5mbyk7CiYjNDM7CX0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tJmd0O2tleS50dW5fZmxhZ3MpKSB7CiYjNDM7CQkvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUCAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwl9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby0mZ3Q7a2V5LnR1bl9mbGFncykpIHsKJiM0MzsJCS8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfRVJTUEFOX3tWRVIsSU5ERVgsRElSLEhXSUR9ICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y2ZfdHVubmVsX2tleSAqdCA9IHRvX3R1bm5lbF9rZXkoYWN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IHRjZl90dW5uZWxfa2V5X3BhcmFtcyAqcGFyYW1zOwomIzQzOwkvKiBUQ0FfVFVOTkVMX0tFWV9QQVJNUyAqLwomIzQzOwlzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfdHVubmVsX2tleSkpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LSZndDtwYXJhbXMpOwomIzQzOwlpZiAocGFyYW1zLSZndDt0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPQomIzQzOwkJCSZhbXA7cGFyYW1zLSZndDt0Y2Z0X2VuY19tZXRhZGF0YS0mZ3Q7dS50dW5faW5mbzsKJiM0MzsKJiM0MzsJCS8qIEluIGR1bXAgb3JkZXI6IFRDQV9UVU5ORUxfS0VZX0VOQ19LRVlfSUQsIHRoZSBJUHY2IGFkZHJlc3MKJiM0MzsJCSAqIHBhaXIgKGxhcmdlciB0aGFuIHRoZSBJUHY0IG9uZSksIC4uLl9FTkNfRFNUX1BPUlQsCiYjNDM7CQkgKiAuLi5fTk9fQ1NVTSwgLi4uX05PX0ZSQUcsIHRoZSBvcHRpb25zIGFuZCAuLi5fRU5DX3tUT1MsVFRMfS4KJiM0MzsJCSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpCiYjNDM7CQkJJiM0MzsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoMCkKJiM0MzsJCQkmIzQzOyB0dW5uZWxfa2V5X29wdHNfZmlsbF9zaXplKGluZm8pCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHsKIAkua2luZAkJPQkmIzM0O3R1bm5lbF9rZXkmIzM0OywKIAkuaWQJCT0JVENBX0lEX1RVTk5FTF9LRVksCkBAIC04NDMsNiAmIzQzOzkyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7CiAJLmR1bXAJCT0JdHVubmVsX2tleV9kdW1wLAogCS5pbml0CQk9CXR1bm5lbF9rZXlfaW5pdCwKIAkuY2xlYW51cAk9CXR1bm5lbF9rZXlfcmVsZWFzZSwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsCiAJLm9mZmxvYWRfYWN0X3NldHVwID0JdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksCiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzgwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBEdW1wIFNpemUgQ2FsY3VsYXRpb24gZm9yIFRDIEFjdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGFjcm9zcyBhIGJ1bmNoIG9mIFRyYWZmaWMgQ29udHJvbCAoVEMpIGFjdGlvbnM6IGBhY3RfYnBmYCwgYGFjdF9jdGAsIGBhY3RfY3RpbmZvYCwgYGFjdF9pZmVgLCBgYWN0X3BlZGl0YCwgYGFjdF9wb2xpY2VgLCBgYWN0X3NhbXBsZWAsIGFuZCBgYWN0X3R1bm5lbF9rZXlgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHNvbWV0aGluZyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBuZXRsaW5rIGR1bXAgc2l6ZSBjYWxjdWxhdGlvbnMgZm9yIHRoZXNlIGFjdGlvbnMuIFRoZSBjb3JlIGlkZWEgaXMgdG8gbW92ZSBhd2F5IGZyb20gcG90ZW50aWFsbHkgd2FzdGVmdWwgZml4ZWQtc2l6ZSBhbGxvY2F0aW9ucyBhbmQgaW5zdGVhZCBkZXRlcm1pbmUgdGhlICpleGFjdCogc2l6ZSBuZWVkZWQgZm9yIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBkdW1waW5nIHRoZSBhY3Rpb24uIFRoaXMgc2hvdWxkIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFRDIGFjdGlvbnMgb3IgY29tcGxleCBjb25maWd1cmF0aW9ucy4KCkkgc2VlIHRoYXQgYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBpcyBhbHNvIGJlaW5nIHR3ZWFrZWQuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBhcmVhLCBzbyBJJiMzOTtsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBob3cgaXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG5ldyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2sgaXMgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uLiBBdm9pZGluZyBgTkxNU0dfR09PRFNJWkVgIG9yIG90aGVyIGdlbmVyaWMgYWxsb2NhdGlvbnMgaW4gZmF2b3Igb2YgYSBwcmVjaXNlIGNhbGN1bGF0aW9uIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfZmlsbF9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTQ2OT1zdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ3Mi1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDczOlx0aWYgKGFjdC1cdTAwM2VvcHMtXHUwMDNlZ2V0X2ZpbGxfc2l6ZSlcbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDc0Olx0XHRyZXR1cm4gYWN0LVx1MDAzZW9wcy1cdTAwM2VnZXRfZmlsbF9zaXplKGFjdCkgJiM0Mzsgc3o7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ3NS1cdHJldHVybiBzejtcbi0tXG5uZXQvc2NoZWQvYWN0X2JwZi5jPTM4ND1zdGF0aWMgdm9pZCB0Y2ZfYnBmX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuLS1cbm5ldC9zY2hlZC9hY3RfYnBmLmMtMzkxLVxubmV0L3NjaGVkL2FjdF9icGYuYzozOTI6c3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9icGYuYy0zOTMte1xuLS1cbm5ldC9zY2hlZC9hY3RfYnBmLmM9NDE3PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfYnBmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfYnBmLmMtNDI0LVx0LmluaXRcdFx0PVx0dGNmX2JwZl9pbml0LFxubmV0L3NjaGVkL2FjdF9icGYuYzo0MjU6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2JwZl9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9icGYuYy00MjYtXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9icGYpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3N1bS5jPTY3ND1zdGF0aWMgdm9pZCB0Y2ZfY3N1bV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9jc3VtLmMtNjgzLVxubmV0L3NjaGVkL2FjdF9jc3VtLmM6Njg0OnN0YXRpYyBzaXplX3QgdGNmX2NzdW1fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy02ODUte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3N1bS5jPTcwOD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2NzdW1fb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTcxNS1cdC5jbGVhbnVwXHQ9IHRjZl9jc3VtX2NsZWFudXAsXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo3MTY6XHQuZ2V0X2ZpbGxfc2l6ZSAgPSB0Y2ZfY3N1bV9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9jc3VtLmMtNzE3LVx0Lm9mZmxvYWRfYWN0X3NldHVwID0gdGNmX2NzdW1fb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE2MzY9c3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjU5LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE2NjA6c3RhdGljIHNpemVfdCB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2MS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE3MDU9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MTMtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfc3RhdHNfdXBkYXRlLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTQ6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2N0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxNS1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zNDk9c3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNTgtXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM1OTpzdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM2MC17XG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zNjk9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzc2LVx0LmNsZWFudXA9IHRjZl9jdGluZm9fY2xlYW51cCxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6Mzc3Olx0LmdldF9maWxsX3NpemUgPSB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM3OC1cdC5zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXG4tLVxubmV0L3NjaGVkL2FjdF9nYWN0LmM9MTkwPXN0YXRpYyBpbnQgdGNmX2dhY3RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTIzMC1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjIzMTpzdGF0aWMgc2l6ZV90IHRjZl9nYWN0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjMyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhY3QuYz0yOTI9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0yOTktXHQuaW5pdFx0XHQ9XHR0Y2ZfZ2FjdF9pbml0LFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MzAwOlx0LmdldF9maWxsX3NpemVcdD1cdHRjZl9nYWN0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0zMDEtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX2dhY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NjcyPXN0YXRpYyB2b2lkIHRjZl9nYXRlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY4MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY4MjpzdGF0aWMgc2l6ZV90IHRjZl9nYXRlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjgzLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03MzY9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDQtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NDU6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2dhdGVfZ2V0X2ZpbGxfc2l6ZSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0Ni1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cCxcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTg2ND1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg4MC1cbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODgxOnN0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODgyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTkwMz1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTAtXHQuaW5pdCA9IHRjZl9pZmVfaW5pdCxcbm5ldC9zY2hlZC9hY3RfaWZlLmM6OTExOlx0LmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkxMi1cdC5zaXplID1cdHNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSxcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTU5MT10Y2ZfbWlycmVkX2dldF9kZXYoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTYwNy1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6NjA4OnN0YXRpYyBzaXplX3QgdGNmX21pcnJlZF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtNjA5LXtcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTY2ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X21pcnJlZF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy02NzItXHQuaW5pdFx0XHQ9XHR0Y2ZfbWlycmVkX2luaXQsXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjY3MzpcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfbWlycmVkX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTY3NC1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfbWlycmVkX29mZmxvYWRfYWN0X3NldHVwLFxuLS1cbm5ldC9zY2hlZC9hY3RfcGVkaXQuYz01NjQ9c3RhdGljIGludCB0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuLS1cbm5ldC9zY2hlZC9hY3RfcGVkaXQuYy02MjgtXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM6NjI5OnN0YXRpYyBzaXplX3QgdGNmX3BlZGl0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTYzMC17XG4tLVxubmV0L3NjaGVkL2FjdF9wZWRpdC5jPTY1Mj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmMtNjYwLVx0LmluaXRcdFx0PVx0dGNmX3BlZGl0X2luaXQsXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM6NjYxOlx0LmdldF9maWxsX3NpemVcdD1cdHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTY2Mi1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYz00NDI9c3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTQ5Mi1cbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6NDkzOnN0YXRpYyBzaXplX3QgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDk0LXtcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jPTUwOD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BvbGljZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy01MTYtXHQuY2xlYW51cFx0PVx0dGNmX3BvbGljZV9jbGVhbnVwLFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYzo1MTc6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy01MTgtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3BvbGljZV9vZmZsb2FkX2FjdF9zZXR1cCxcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTI5Nj1zdGF0aWMgaW50IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzE3LVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMTg6c3RhdGljIHNpemVfdCB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMTkte1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM9MzI2PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMzNC1cdC5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzM1Olx0LmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMzNi1cdC5nZXRfcHNhbXBsZV9ncm91cCA9IHRjZl9zYW1wbGVfZ2V0X2dyb3VwLFxuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jPTM0OD1zdGF0aWMgdm9pZCB0Y2Zfc2tiZWRpdF9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtMzU3LVxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM6MzU4OnN0YXRpYyBzaXplX3QgdGNmX3NrYmVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zNTkte1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jPTQxOD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYmVkaXRfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQyNi1cdC5jbGVhbnVwXHQ9XHR0Y2Zfc2tiZWRpdF9jbGVhbnVwLFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM6NDI3Olx0LmdldF9maWxsX3NpemVcdD1cdHRjZl9za2JlZGl0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy00MjgtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3NrYmVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9ODYwPXN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtODg1LVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODg2OnN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg4Ny17XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9OTE3PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtOTI0LVx0LmNsZWFudXBcdD1cdHR1bm5lbF9rZXlfcmVsZWFzZSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjkyNTpcdC5nZXRfZmlsbF9zaXplXHQ9XHR0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy05MjYtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF92bGFuLmM9MzM2PXN0YXRpYyB2b2lkIHRjZl92bGFuX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuLS1cbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTM0NS1cbm5ldC9zY2hlZC9hY3Rfdmxhbi5jOjM0NjpzdGF0aWMgc2l6ZV90IHRjZl92bGFuX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF92bGFuLmMtMzQ3LXtcbi0tXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYz00MTY9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF92bGFuX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYy00MjQtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfdmxhbl9zdGF0c191cGRhdGUsXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYzo0MjU6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3ZsYW5fZ2V0X2ZpbGxfc2l6ZSxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQyNi1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2Zfdmxhbl9vZmZsb2FkX2FjdF9zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRsaW5rIE1lc3NhZ2UgU2l6ZSBDYWxjdWxhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlc2UgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBhcmUgdGhlIG5ldyBwbGF5ZXJzIGluIHRoZSBnYW1lIGZvciBkZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiBvdXIgbmV0bGluayBtZXNzYWdlcyB3aGVuIGR1bXBpbmcgVEMgYWN0aW9ucy4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyBhIGNoYW5nZSwgYnV0IHNlZW1zIHByZXR0eSBpc29sYXRlZCB0byB0aGUgbmV0bGluayBkdW1wIHByb2NlZHVyZXMsIGFzIEkgdW5kZXJzdGFuZCBpdC4gQnV0IHN0aWxsLCB0aGUgcXVlc3Rpb24gaXM6IHNob3VsZCB3ZSBmdXp6IHRoZXNlPyBBYnNvbHV0ZWx5LiBBIG1pc2NhbGN1bGF0aW9uIGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIHNpemUgY2FsY3VsYXRpb24gaXMgd3JvbmcsIHdlIGNvdWxkIGhhdmUgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aGVuIHdlIGNvbnN0cnVjdCB0aGUgbmV0bGluayBtZXNzYWdlLCBvciBldmVuIGp1c3QgZ2V0IGBFTVNHU0laRWAgZXJyb3JzIGlmIHdlIHVuZGVyc2hvb3QgdGhlIHNpemUuIFRoYXQmIzM5O3Mgbm90IGlkZWFsLgoKU28sIGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBpdDogYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgLCBgdGNmX2lmZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgLCBhbmQgYHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZWAuCgpUaGV5IGFsbCBhcHBlYXIgdG8gYmUgY2FsbGVkIGZyb20gYHRjZl9hY3Rpb25fZmlsbF9zaXplYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZ1bmN0aW9uIG5leHQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBlbnN1cmUgdGhhdCBteSBhbmFseXNpcyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9hY3Rpb25fZmlsbF9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTQ2MT1zdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeilcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ2OC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDY5OnN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9hcGkuYy00NzAte1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2OT1pbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTYtXHRcdH1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTUxNzpcdFx0c3ogJiM0Mzs9IHRjZl9hY3Rpb25fZmlsbF9zaXplKGFjdCk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTgtXHRcdC8qIFN0YXJ0IGZyb20gaW5kZXggMCAqL1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTg1OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRjZl9yZW9mZmxvYWRfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2MC17XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE4NjE6XHRzaXplX3QgYXR0cl9zaXplID0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0aW9uKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2Mi1cdHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbVENBX0FDVF9NQVhfUFJJT10gPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDEyPXRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMzktXHRcdH1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjA0MDpcdFx0YXR0cl9zaXplICYjNDM7PSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDQxLVx0XHRhY3Rpb25zW2kgLSAxXSA9IGFjdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUQyBBY3Rpb24gU2l6ZSBDYWxjdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciBuZXRsaW5rIG1lc3NhZ2VzIHVzZWQgYnkgVHJhZmZpYyBDb250cm9sIChUQykgYWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gYHRjZl9hY3Rpb25fZmlsbF9zaXplYC4gSWYgdGhhdCBzaXplIGNhbGN1bGF0aW9uIGlzIG9mZiwgd2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgYSBiYWQgZGF5IHdpdGggYHNrYl9vdmVyX3BhbmljYCBvciBzb21ldGhpbmcgc2ltaWxhciB3aGVuIHdlIHRyeSB0byBkdW1wIHRoZSBhY3Rpb25zLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGRpZyBpbnRvIHRoaXMuCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHJlY2FsbCB0aGF0IGBDT05GSUdfTkVUX0NMU19BQ1RgIGlzIHRoZSBvdmVyYXJjaGluZyBzZXR0aW5nIGZvciBUQyBhY3Rpb25zLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBmb3IgZWFjaCBhY3Rpb24uIEZvciBleGFtcGxlOgoKKiAgIGBhY3RfYnBmYCB3aWxsIG5lZWQgYENPTkZJR19ORVRfQUNUX0JQRmAgZW5hYmxlZC4KKiAgIGBhY3RfY3RgIG5lZWRzIGBDT05GSUdfTkVUX0FDVF9DVGAuCiogICBgYWN0X2N0aW5mb2AgcmVxdWlyZXMgYENPTkZJR19ORVRfQUNUX0NUSU5GT2AuCiogICBgYWN0X2lmZWA6IGBDT05GSUdfTkVUX0FDVF9JRkVgLgoqICAgYGFjdF9wZWRpdGA6IGBDT05GSUdfTkVUX0FDVF9QRURJVGAuCiogICBgYWN0X3BvbGljZWA6IGBDT05GSUdfTkVUX0FDVF9QT0xJQ0VgLgoqICAgYGFjdF9zYW1wbGVgOiBgQ09ORklHX05FVF9BQ1RfU0FNUExFYC4KKiAgIGBhY3RfdHVubmVsX2tleWA6IGBDT05GSUdfTkVUX0FDVF9UVU5ORUxfS0VZYC4KCkkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGRvdWJsZS1jaGVjayB0aG9zZSBvcHRpb25zIHdvdWxkIGJlIHRvIGdvIHN0cmFpZ2h0IGludG8gYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NzAyPWNvbmZpZyBORVRfQ0xTX0FDVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcxNC1cbm5ldC9zY2hlZC9LY29uZmlnOjcxNTpjb25maWcgTkVUX0FDVF9QT0xJQ0Vcbm5ldC9zY2hlZC9LY29uZmlnLTcxNi1cdHRyaXN0YXRlIFwmIzM0O1RyYWZmaWMgUG9saWNpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03MjUtXG5uZXQvc2NoZWQvS2NvbmZpZzo3MjY6Y29uZmlnIE5FVF9BQ1RfR0FDVFxubmV0L3NjaGVkL0tjb25maWctNzI3LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBhY3Rpb25zXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9NzM2PWNvbmZpZyBHQUNUX1BST0Jcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03NDEtXG5uZXQvc2NoZWQvS2NvbmZpZzo3NDI6Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXG5uZXQvc2NoZWQvS2NvbmZpZy03NDMtXHR0cmlzdGF0ZSBcJiMzNDtSZWRpcmVjdGluZyBhbmQgTWlycm9yaW5nXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNzUxLVxubmV0L3NjaGVkL0tjb25maWc6NzUyOmNvbmZpZyBORVRfQUNUX1NBTVBMRVxubmV0L3NjaGVkL0tjb25maWctNzUzLVx0dHJpc3RhdGUgXCYjMzQ7VHJhZmZpYyBTYW1wbGluZ1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTc2My1cbm5ldC9zY2hlZC9LY29uZmlnOjc2NDpjb25maWcgTkVUX0FDVF9OQVRcbm5ldC9zY2hlZC9LY29uZmlnLTc2NS1cdHRyaXN0YXRlIFwmIzM0O1N0YXRlbGVzcyBOQVRcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03NzMtXG5uZXQvc2NoZWQvS2NvbmZpZzo3NzQ6Y29uZmlnIE5FVF9BQ1RfUEVESVRcbm5ldC9zY2hlZC9LY29uZmlnLTc3NS1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBFZGl0aW5nXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNzgyLVxubmV0L3NjaGVkL0tjb25maWc6NzgzOmNvbmZpZyBORVRfQUNUX1NJTVBcbm5ldC9zY2hlZC9LY29uZmlnLTc4NC1cdHRyaXN0YXRlIFwmIzM0O1NpbXBsZSBFeGFtcGxlIChEZWJ1ZylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03OTYtXG5uZXQvc2NoZWQvS2NvbmZpZzo3OTc6Y29uZmlnIE5FVF9BQ1RfU0tCRURJVFxubmV0L3NjaGVkL0tjb25maWctNzk4LVx0dHJpc3RhdGUgXCYjMzQ7U0tCIEVkaXRpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MDctXG5uZXQvc2NoZWQvS2NvbmZpZzo4MDg6Y29uZmlnIE5FVF9BQ1RfQ1NVTVxubmV0L3NjaGVkL0tjb25maWctODA5LVx0dHJpc3RhdGUgXCYjMzQ7Q2hlY2tzdW0gVXBkYXRpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXG5uZXQvc2NoZWQvS2NvbmZpZzo4MTk6Y29uZmlnIE5FVF9BQ1RfTVBMU1xubmV0L3NjaGVkL0tjb25maWctODIwLVx0dHJpc3RhdGUgXCYjMzQ7TVBMUyBtYW5pcHVsYXRpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo4MzA6Y29uZmlnIE5FVF9BQ1RfVkxBTlxubmV0L3NjaGVkL0tjb25maWctODMxLVx0dHJpc3RhdGUgXCYjMzQ7VmxhbiBtYW5pcHVsYXRpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NDAtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy04NDItXHR0cmlzdGF0ZSBcJiMzNDtCUEYgYmFzZWQgYWN0aW9uXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctODUyLVxubmV0L3NjaGVkL0tjb25maWc6ODUzOmNvbmZpZyBORVRfQUNUX0NPTk5NQVJLXG5uZXQvc2NoZWQvS2NvbmZpZy04NTQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIFJldHJpZXZlclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cbm5ldC9zY2hlZC9LY29uZmlnOjg2NTpjb25maWcgTkVUX0FDVF9DVElORk9cbm5ldC9zY2hlZC9LY29uZmlnLTg2Ni1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9uc1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cbm5ldC9zY2hlZC9LY29uZmlnOjg4Mjpjb25maWcgTkVUX0FDVF9TS0JNT0Rcbm5ldC9zY2hlZC9LY29uZmlnLTg4My1cdHRyaXN0YXRlIFwmIzM0O3NrYiBkYXRhIG1vZGlmaWNhdGlvbiBhY3Rpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTM6Y29uZmlnIE5FVF9BQ1RfSUZFXG5uZXQvc2NoZWQvS2NvbmZpZy04OTQtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MDUtXG5uZXQvc2NoZWQvS2NvbmZpZzo5MDY6Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxubmV0L3NjaGVkL0tjb25maWctOTA3LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdHVubmVsIG1ldGFkYXRhIG1hbmlwdWxhdGlvblwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTkxNi1cbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxubmV0L3NjaGVkL0tjb25maWctOTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo5MzA6Y29uZmlnIE5FVF9BQ1RfR0FURVxubmV0L3NjaGVkL0tjb25maWctOTMxLVx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ2xhc3NpZmllciBBY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNsYXNzaWZpZXIgYWN0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSBjb25maWd1cmVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0JQRmAsIGBORVRfQUNUX0NUYCwgYE5FVF9BQ1RfQ1RJTkZPYCwgYE5FVF9BQ1RfSUZFYCwgYE5FVF9BQ1RfUEVESVRgLCBgTkVUX0FDVF9QT0xJQ0VgLCBgTkVUX0FDVF9TQU1QTEVgLCBhbmQgYE5FVF9BQ1RfVFVOTkVMX0tFWWAuIFRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0cmFmZmljIGlzIGNsYXNzaWZpZWQgYW5kIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBvZiBlYWNoLCBlc3BlY2lhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggY29ubmVjdGlvbiB0cmFja2luZy4KCk5vdywgSSByZW1lbWJlciBzZWVpbmcgc29tZSBjb25kaXRpb25hbHMgaW4gYGFjdF9jdC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gbG9naWMgcmVzaWRlcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIEkgc2VlIHRob3NlIGNoZWNrczogYENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS2AsIGBDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGFuZCBgQ09ORklHX05GX0NPTk5UUkFDS19aT05FU2AuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBkYXRhIGlzIG1hbmFnZWQgYW5kIHV0aWxpemVkLiBJdCBsb29rcyBsaWtlIHRob3NlIGFyZSB1c2VkIHdoZW4gdGhlIGBORVRfQUNUX0NUYCBpcyBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvc2NoZWQvYWN0X2N0LmNgIGRpcmVjdGx5IHRvIHNlZSBob3cgdGhlc2UgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCB3aGF0IGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZfQ09OTlRSQUNLXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2N0LmM9MTc4PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbWV0YShzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE4OC1cdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fQ1RfTUVUQURBVEE7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSylcbm5ldC9zY2hlZC9hY3RfY3QuYy0xOTAtXHRlbnRyeS1cdTAwM2VjdF9tZXRhZGF0YS5tYXJrID0gUkVBRF9PTkNFKGN0LVx1MDAzZW1hcmspO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05MTY9c3RhdGljIHZvaWQgdGNmX2N0X2FjdF9zZXRfbWFyayhzdHJ1Y3QgbmZfY29ubiAqY3QsIHUzMiBtYXJrLCB1MzIgbWFzaylcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTcte1xubmV0L3NjaGVkL2FjdF9jdC5jOjkxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTE5LVx0dTMyIG5ld19tYXJrO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05MzM9c3RhdGljIHZvaWQgdGNmX2N0X2FjdF9zZXRfbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTM2LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzo5Mzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTM4LVx0c2l6ZV90IGxhYmVsc19zeiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTI1OT1zdGF0aWMgaW50IHRjZl9jdF9maWxsX3BhcmFtcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyODUtXHRpZiAodGJbVENBX0NUX01BUktdKSB7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI4NjpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg3LVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0Nvbm50cmFjayBtYXJrIGlzbiYjMzk7dCBlbmFibGVkLlwmIzM0Oyk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyOTgtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5OTpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSkge1xubmV0L3NjaGVkL2FjdF9jdC5jLTEzMDAtXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29ubnRyYWNrIGxhYmVscyBpc24mIzM5O3QgZW5hYmxlZC5cJiMzNDspO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzE3LVx0aWYgKHRiW1RDQV9DVF9aT05FXSkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjEzMTg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSkge1xubmV0L3NjaGVkL2FjdF9jdC5jLTEzMTktXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29ubnRyYWNrIHpvbmVzIGlzbiYjMzk7dCBlbmFibGVkLlwmIzM0Oyk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE1NTg9c3RhdGljIGlubGluZSBpbnQgdGNmX2N0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU4My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTg0Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSBcdTAwMjZcdTAwMjZcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTg1LVx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTkwLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgXHUwMDI2XHUwMDI2XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Mi1cdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Ny1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTk4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykgXHUwMDI2XHUwMDI2XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5OS1cdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTY2MD1zdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY3NC1cdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY3NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY3Ni1cdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbWFyaykpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NzktXHQvKiBUQ0FfQ1RfTEFCRUxTLCBUQ0FfQ1RfTEFCRUxTX01BU0sgKi9cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjgwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2ODEtXHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZWxhYmVscykpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2ODMtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY4NDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2ODUtXHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZXpvbmUpKTsgLyogVENBX0NUX1pPTkUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY292ZXJpbmcgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGFuZCBgTkZfQ09OTlRSQUNLX1pPTkVTYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVycyBvZiBpbnRlcmVzdC4KCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IGJpdCBmbGFncyBpbiBgYWN0X3R1bm5lbF9rZXkuY2AgKGBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVRgLCBldGMuKSDigJMgdGhlc2UgYXJlIGp1c3QgYml0IGRlZmluaXRpb25zLCBzbyB0aGV5IGFyZSBub3QgY29uZmlndXJhdGlvbnMuIFRoZW4sIEkgc2VlIGBDT05GSUdfTkVUX0FDVF9CUEZgIGluIGBhY3RfYnBmLmNgLCBgQ09ORklHX05FVF9BQ1RfQ1RJTkZPYCBpbiBgYWN0X2N0aW5mby5jYCwgYENPTkZJR19ORVRfQUNUX0lGRWAgaW4gYGFjdF9pZmUuY2AsIGBDT05GSUdfTkVUX0FDVF9QRURJVGAgaW4gYGFjdF9wZWRpdC5jYCwgYENPTkZJR19ORVRfQUNUX1BPTElDRWAgaW4gYGFjdF9wb2xpY2UuY2AsIGBDT05GSUdfTkVUX0FDVF9TQU1QTEVgIGluIGBhY3Rfc2FtcGxlLmNgLCBhbmQgZmluYWxseSwgYENPTkZJR19ORVRfQUNUX1RVTk5FTF9LRVlgIGluIGBhY3RfdHVubmVsX2tleS5jYC4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBtYWtlIGEgbGlzdCBvZiBjYW5kaWRhdGUgZnVuY3Rpb25zOiBgdGNmX2FjdGlvbl9maWxsX3NpemVgLCBgdGNmX2JwZl9nZXRfZmlsbF9zaXplYCwgYHRjZl9jdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfaWZlX2dldF9maWxsX3NpemVgLCBgdGNmX3BlZGl0X2dldF9maWxsX3NpemVgLCBgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZWAsIGB0dW5uZWxfa2V5X2dldF9maWxsX3NpemVgLCBgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZWAsIGFuZCBgdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemVgLgoKQWhhLCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoYXQgYHRjZl9hY3Rpb25fZmlsbF9zaXplYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIEdpdmVuIHRoZSBndWlkZWxpbmVzLCB0aGlzIG5lZWRzIHRvIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBub3QgaW5saW5lZC4gVGhlIGluc3RydWN0aW9ucyAqcHJlZmVyKiBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gRXZlbiB0aG91Z2ggdGhlc2UgYGdldF9maWxsX3NpemVgIGZ1bmN0aW9ucyAqYXJlKiBzdGF0aWMsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgc3RydWN0IHRjX2FjdGlvbl9vcHNgLiBUaGlzIG1lYW5zIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgdGFrZW4sIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBwcm9iYWJseSB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5IGFyZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIHN0YXRpYy4gT2theSwgbGV0JiMzOTtzIHNlZS4gWWVzLCB0aGV5IGFyZSBzdGF0aWMhIEJ1dCBzaW5jZSB3ZSBhcmUgYXNzaWduaW5nIHRoZWlyIGFkZHJlc3NlcywgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4KCkhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIHN0YXRlIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uc2lkZXIgQVBJIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlc2Ugb3BlcmF0aW9uczogYHRjYV9hY3Rpb25fZ2RgLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnYC4gTGV0IG1lIGdvIGFoZWFkIGFuZCBjaGVjayBgdGNhX2FjdGlvbl9nZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjYV9hY3Rpb25fZ2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MjAxMT1zdGF0aWMgaW50XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwMTI6dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDEzLVx0ICAgICAgdTMyIHBvcnRpZCwgaW50IGV2ZW50LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMTMyPXN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTY5LVx0Y2FzZSBSVE1fREVMQUNUSU9OOlxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTcwOlx0XHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3MS1cdFx0XHRcdCAgICBwb3J0aWQsIFJUTV9ERUxBQ1RJT04sIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTczLVx0Y2FzZSBSVE1fR0VUQUNUSU9OOlxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTc0Olx0XHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3NS1cdFx0XHRcdCAgICBwb3J0aWQsIFJUTV9HRVRBQ1RJT04sIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzkwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBBY3Rpb24gQ29udHJvbCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBvZiBob3cgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIG5ldGxpbmsuIGB0Y19jdGxfYWN0aW9uYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgaGVyZTsgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGBSVE1fTkVXQUNUSU9OYCwgYFJUTV9ERUxBQ1RJT05gLCBhbmQgYFJUTV9HRVRBQ1RJT05gIG5ldGxpbmsgbWVzc2FnZXMuIFRoYXQgbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byB6ZXJvIGluIG9uLiBXaGVuIHdlJiMzOTtyZSBhZGRpbmcgYSBuZXcgYWN0aW9uIHdpdGggYFJUTV9ORVdBQ1RJT05gLCB0aGUgc3lzdGVtIGNhbGxzIGB0Y2ZfYWN0aW9uX2luaXRgLiBBbmQgZm9yIGRlbGV0aW5nIG9yIGdldHRpbmcgYW4gYWN0aW9uIOKAkyBgUlRNX0RFTEFDVElPTmAgYW5kIGBSVE1fR0VUQUNUSU9OYCDigJMgdGhlIGZ1bmN0aW9uIGB0Y2FfYWN0aW9uX2dkYCBjb21lcyBpbnRvIHBsYXkuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRjX2N0bF9hY3Rpb25gLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2FfYWN0aW9uX2dkYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHRjX2N0bF9hY3Rpb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGJpdCBtb3JlIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY3RsX2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0yMTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0Y2FhX3BvbGljeVtUQ0FfUk9PVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTMxLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTMyOnN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMzMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIyOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2FjdGlvbl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk1Olx0ey5tc2d0eXBlID0gUlRNX05FV0FDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjI5NjpcdHsubXNndHlwZSA9IFJUTV9ERUxBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIyOTc6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUQUNUSU9OLCAuZG9pdCA9IHRjX2N0bF9hY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIyOTgtXHQgLmR1bXBpdCA9IHRjX2R1bXBfYWN0aW9ufSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgKHRjKSBBY3Rpb24gTWVjaGFuaXNtKioKCkhtbSwgc28gYHRjX2N0bF9hY3Rpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGluaXRpYWxseSBzdWdnZXN0cyBhIGxpbWl0ZWQgc2NvcGUsIHJpZ2h0PyBPbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIG5vIGRpcmVjdCBleHRlcm5hbCBjYWxscy4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gSSByZW1lbWJlciBzZWVpbmcgYHJ0bmxfbXNnX2hhbmRsZXJzYCByZWdpc3RlcmVkIHNvbWV3aGVyZS4gVGhhdCBtZWFucyB0aGUgYHRjX2N0bF9hY3Rpb25gIGZ1bmN0aW9uICppcyogbGlrZWx5IGJlaW5nIGNhbGxlZCwgbm90IGRpcmVjdGx5LCBidXQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgc3RvcmVkIHdpdGhpbiB0aGF0IHJlZ2lzdHJhdGlvbi4gTGlrZWx5IHRoaXMgaXMgaG93IGl0IHJlY2VpdmVzIHJlcXVlc3RzIHZpYSBuZXRsaW5rLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgaG93IHRob3NlIGhhbmRsZXJzIGFyZSBzZXQgdXAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGNvcmUgcGF0aC4gTm93LCB3aGF0JiMzOTtzIHRoZSByb2xlIG9mIGB0Y2ZfYWN0aW9uX2luaXRgIGluIGFsbCBvZiB0aGlzPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYHRjX2N0bF9hY3Rpb25gLiBJcyBpdCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgaXQ/IE9yIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyIGFjdGlvbiBpbml0aWFsaXphdGlvbiBzY2hlbWU/IFRoZSBpbnRlcmFjdGlvbiBoZXJlIGlzIGtleSB0byBob3cgdGMgYWN0aW9ucyBhcmUgbWFuYWdlZCBhdCBydW50aW1lLiBJIG5lZWQgdG8gcmV2aWV3IHRoZSBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTAxOD1pbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYWN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyNy1cdC8qIFdlIGhhdmUgdG8gcmVnaXN0ZXIgcGVybmV0IG9wcyBiZWZvcmUgbWFraW5nIHRoZSBhY3Rpb24gb3BzIHZpc2libGUsXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEwMjg6XHQgKiBvdGhlcndpc2UgdGNmX2FjdGlvbl9pbml0XzEoKSBjb3VsZCBnZXQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWRcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyOS1cdCAqIG5ldG5zLlxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTMzNz1zdHJ1Y3QgdGNfYWN0aW9uX29wcyAqdGNfYWN0aW9uX2xvYWRfb3BzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIGZsYWdzLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTM5OS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQwMDpzdHJ1Y3QgdGNfYWN0aW9uICp0Y2ZfYWN0aW9uX2luaXRfMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDAxLVx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2Mj1zdGF0aWMgYm9vbCB0Y19hY3RfYmluZCh1MzIgZmxhZ3MpXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDY4LVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNDY5OmludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDcwLVx0XHQgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEwLVx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IFRDQV9BQ1RfTUFYX1BSSU8gXHUwMDI2XHUwMDI2IHRiW2ldOyBpJiM0MzsmIzQzOykge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoxNTExOlx0XHRhY3QgPSB0Y2ZfYWN0aW9uX2luaXRfMShuZXQsIHRwLCB0YltpXSwgZXN0LCBvcHNbaSAtIDFdLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEyLVx0XHRcdFx0XHRcdTAwMjZpbml0X3Jlc1tpIC0gMV0sIGZsYWdzLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjA5OT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjEwOC1cdGZvciAobG9vcCA9IDA7IGxvb3AgXHUwMDNjIDEwOyBsb29wJiM0MzsmIzQzOykge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTA5Olx0XHRyZXQgPSB0Y2ZfYWN0aW9uX2luaXQobmV0LCBOVUxMLCBubGEsIE5VTEwsIGFjdGlvbnMsIGluaXRfcmVzLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTEwLVx0XHRcdFx0ICAgICAgXHUwMDI2YXR0cl9zaXplLCBmbGFncywgMCwgZXh0YWNrKTtcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0MDc9aW50IHRjZl9leHRzX3ZhbGlkYXRlX2V4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjQtXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihhX28pO1xubmV0L3NjaGVkL2Nsc19hcGkuYzozNDI1Olx0XHRcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2V4dHMtXHUwMDNlcG9saWNlXSxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzQyNi1cdFx0XHRcdFx0XHRyYXRlX3RsdiwgYV9vLCBpbml0X3JlcywgZmxhZ3MsXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDM5LVx0XHRcdGZsYWdzIHw9IFRDQV9BQ1RfRkxBR1NfQklORDtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQ0MDpcdFx0XHRlcnIgPSB0Y2ZfYWN0aW9uX2luaXQobmV0LCB0cCwgdGJbZXh0cy1cdTAwM2VhY3Rpb25dLFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDQxLVx0XHRcdFx0XHQgICAgICByYXRlX3RsdiwgZXh0cy1cdTAwM2VhY3Rpb25zLCBpbml0X3JlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTeW1ib2wgRXhwb3J0KioKCk9rYXksIHNvIGB0Y2ZfYWN0aW9uX2luaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIEFsc28sIEkgc2VlIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgaXMgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4KClRoZSBuZXh0IHN0ZXAgaXMgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgdG8gdmVyaWZ5LCBkZWZpbml0aXZlbHksIHdoZXRoZXIgYHRjZl9hY3Rpb25faW5pdGAgaXMgaW5kZWVkIGV4cG9ydGVkIGFzIGludGVuZGVkLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBNb2R1bGUgRXhwb3J0IGFuZCBTdGF0aWMgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIHN0YXRpYyBlaXRoZXIuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYW4gb2RkIGNvbWJpbmF0aW9uLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCBpdHMgdmlzaWJpbGl0eSBvciB1c2FnZS4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSBpcyB0ZWxsaW5nIG1lIHRvIGludmVzdGlnYXRlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAoYHRjZl9hY3Rpb25faW5pdGApIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9hY3RfYXBpLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGNhbiBpbmxpbmUgaXQgd2hlbiBJIGJ1aWxkIHRoZSBtb2R1bGUgdG8gZXhwbGFpbiB0aGlzLiBJJiMzOTtsbCBjaGVjayBpdHMgZGVjbGFyYXRpb24gYW5kIGxvb2sgZm9yIGNsdWVzIHRoZXJlLCBtYXliZSB0aGVyZSYjMzk7cyBhIG1hY3JvIG9yIHNvbWUgdW51c3VhbCBsaW5rZXIgdHJpY2sgSSYjMzk7bSBtaXNzaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGNmX2FjdGlvbl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTE0NjI9c3RhdGljIGJvb2wgdGNfYWN0X2JpbmQodTMyIGZsYWdzKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQ2OC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQ2OTppbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQ3MC1cdFx0ICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTm9uLVN0YXRpYyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBub24tc3RhdGljIGNvbnRleHQsIHdoaWNoLCBvZiBjb3Vyc2UsIGNoYW5nZXMgZXZlcnl0aGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNoaWZ0IGluIHBhcmFkaWdtLiBUaGVuLCB0aGUgbmV4dCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCB3aGF0IGFib3V0IGB0Y2ZfYWN0aW9uX2luaXRfMWA/IFRoYXQgcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBvZnRlbiBhIGNyaXRpY2FsIHBvaW50IG9mIGluc3RhbnRpYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gd2l0aGluIHN1Y2ggYSBkeW5hbWljIHNldHVwLCBzbyB0aGF0IG5vdyBiZWNvbWVzIGEga2V5IGZvY3VzLiBXaGF0IGRlcGVuZGVuY2llcyBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmUgYW5kIHdoYXQgc3RhdGUgaXMgdGhhdCBpbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2FjdGlvbl9pbml0XzEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTAxOD1pbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYWN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyNy1cdC8qIFdlIGhhdmUgdG8gcmVnaXN0ZXIgcGVybmV0IG9wcyBiZWZvcmUgbWFraW5nIHRoZSBhY3Rpb24gb3BzIHZpc2libGUsXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEwMjg6XHQgKiBvdGhlcndpc2UgdGNmX2FjdGlvbl9pbml0XzEoKSBjb3VsZCBnZXQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWRcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyOS1cdCAqIG5ldG5zLlxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTMzNz1zdHJ1Y3QgdGNfYWN0aW9uX29wcyAqdGNfYWN0aW9uX2xvYWRfb3BzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIGZsYWdzLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTM5OS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQwMDpzdHJ1Y3QgdGNfYWN0aW9uICp0Y2ZfYWN0aW9uX2luaXRfMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDAxLVx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2OT1pbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTAtXHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgdGJbaV07IGkmIzQzOyYjNDM7KSB7XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE1MTE6XHRcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2ldLCBlc3QsIG9wc1tpIC0gMV0sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTItXHRcdFx0XHRcdFx1MDAyNmluaXRfcmVzW2kgLSAxXSwgZmxhZ3MsIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNDA3PWludCB0Y2ZfZXh0c192YWxpZGF0ZV9leChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDI0LVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYV9vKTtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQyNTpcdFx0XHRhY3QgPSB0Y2ZfYWN0aW9uX2luaXRfMShuZXQsIHRwLCB0YltleHRzLVx1MDAzZXBvbGljZV0sXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjYtXHRcdFx0XHRcdFx0cmF0ZV90bHYsIGFfbywgaW5pdF9yZXMsIGZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJlZmxlY3Rpbmcgb24gVENGIEFjdGlvbiBJbml0aWFsaXphdGlvbiBhbmQgRHVtcGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTt2ZSBqdXN0IGNvbmZpcm1lZCB0aGF0IHRoZSBgdGNmX2FjdGlvbl9pbml0XzFgIGZ1bmN0aW9uIGlzbiYjMzk7dCBzdGF0aWMgZWl0aGVyLCBqdXN0IGxpa2UgdGhlIG90aGVycy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGtlZXBzIHRoZSBkZXNpZ24gZmxleGlibGUuIE5vdywgSSYjMzk7bSBwaXZvdGluZyBteSBmb2N1cyB0byB0aGUgZHVtcCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjZl9hY3Rpb25fZHVtcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGR1bXBpbmcgbWVjaGFuaXNtcyBhcmUgY29uc2lzdGVudCwgZWZmaWNpZW50LCBhbmQgcHJvdmlkZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIG5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy4gQXJlIHdlIHVzaW5nIHRoZSBzYW1lIGFwcHJvYWNoIGFjcm9zcyB0aGUgYm9hcmQ/IFNob3VsZCB3ZSBjb25zb2xpZGF0ZSB0aGVtPyBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGFuc3dlcnMgbWF5IGhhdmUgZGVzaWduIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2FjdGlvbl9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTQ3OD1zdGF0aWMgaW50XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjQ3OTp0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgYm9vbCBmcm9tX2FjdClcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNDgwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTUwOD1zdGF0aWMgaW50XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjUwOTp0Y2ZfYWN0aW9uX2R1bXBfMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBpbnQgYmluZCwgaW50IHJlZilcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTEwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTUxNS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6NTE2Olx0aWYgKHRjZl9hY3Rpb25fZHVtcF90ZXJzZShza2IsIGEsIGZhbHNlKSlcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTE3LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTU0MC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjU0MTpcdGVyciA9IHRjZl9hY3Rpb25fZHVtcF9vbGQoc2tiLCBhLCBiaW5kLCByZWYpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy01NDItXHRpZiAoZXJyIFx1MDAzZSAwKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz01NTI9c3RhdGljIGludCB0Y2ZfZHVtcF93YWxrZXIoc3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTg3LVx0XHRlcnIgPSAoYWN0X2ZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdfVEVSU0VfRFVNUCkgP1xubmV0L3NjaGVkL2FjdF9hcGkuYzo1ODg6XHRcdFx0dGNmX2FjdGlvbl9kdW1wX3RlcnNlKHNrYiwgcCwgdHJ1ZSkgOlxubmV0L3NjaGVkL2FjdF9hcGkuYzo1ODk6XHRcdFx0dGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBwLCAwLCAwKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTkwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMjQzPWludFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ0OnRjZl9hY3Rpb25fZHVtcF9vbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IGJpbmQsIGludCByZWYpXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDUte1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI0OC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI0OTppbnQgdGNmX2FjdGlvbl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI1MC1cdFx0ICAgIGludCBiaW5kLCBpbnQgcmVmLCBib29sIHRlcnNlKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI1OS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI2MDpcdFx0ZXJyID0gdGVyc2UgPyB0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc2tiLCBhLCBmYWxzZSkgOlxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjYxOlx0XHRcdHRjZl9hY3Rpb25fZHVtcF8xKHNrYiwgYSwgYmluZCwgcmVmKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2Mi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTE2NTA9c3RhdGljIGludCB0Y2FfZ2V0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTY3NC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTY3NTpcdGlmICh0Y2ZfYWN0aW9uX2R1bXAoc2tiLCBhY3Rpb25zLCBiaW5kLCByZWYsIGZhbHNlKSBcdTAwM2MgMClcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTY3Ni1cdFx0Z290byBvdXRfbmxtc2dfdHJpbTtcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0OTE9aW50IHRjZl9leHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzUwNi1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzUwNzpcdFx0XHRpZiAodGNmX2FjdGlvbl9kdW1wKHNrYiwgZXh0cy1cdTAwM2VhY3Rpb25zLCAwLCAwLCBmYWxzZSlcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzUwOC1cdFx0XHQgICAgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTE1LVx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1MTY6XHRcdFx0aWYgKHRjZl9hY3Rpb25fZHVtcF9vbGQoc2tiLCBhY3QsIDAsIDApIFx1MDAzYyAwKVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTE3LVx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNTMyPWludCB0Y2ZfZXh0c190ZXJzZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1NDMtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1NDQ6XHRpZiAodGNmX2FjdGlvbl9kdW1wKHNrYiwgZXh0cy1cdTAwM2VhY3Rpb25zLCAwLCAwLCB0cnVlKSBcdTAwM2MgMClcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzU0NS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIGB0Y2ZfYWN0aW9uX2R1bXBgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmb2N1cywgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBIbW0sIGB0Y2FfYWN0aW9uX2dkYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGxlc3MgdXNlZnVsIGZvciBleHRlcm5hbCBpbnNwZWN0aW9uLCBhbmQgYHRjX2N0bF9hY3Rpb25gIGlzIHN0YXRpYyB0b28uIFdhaXQsIHdoYXQgYWJvdXQgYHRjYV9nZXRfZmlsbGAsIHRoYXQmIzM5O3Mgc3RhdGljIGFzIHdlbGwuIE9rYXksIHNvIGJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIHRoZSBiZXN0IGJldHMgZm9yIGltbWVkaWF0ZSBmb2N1cyBhcmU6CgoqICAgYHRjZl9hY3Rpb25faW5pdGAKKiAgIGB0Y2ZfYWN0aW9uX2luaXRfMWAKKiAgIGB0Y2ZfYWN0aW9uX2R1bXBgCiogICBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgCiogICBgdGNmX2V4dHNfZHVtcGAKCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gQWgsIHRoZXJlJiMzOTtzIGB0Y2ZfYWN0aW9uX2R1bXBfb2xkYCAtIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gd29ydGggbm90aW5nLCBhbmQgYHRjZl9hY3Rpb25fZHVtcF8xYCBpcyBzdGF0aWMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBmb2xsb3dpbmcgYXJlIG9uZXMgb2YgaW50ZXJlc3Q6CgoqICAgYE5FVF9DTFNfQUNUYAoqICAgYE5FVF9BQ1RfQlBGYAoqICAgYE5FVF9BQ1RfQ1RgCiogICBgTkVUX0FDVF9DVElORk9gCiogICBgTkVUX0FDVF9JRkVgCiogICBgTkVUX0FDVF9QRURJVGAKKiAgIGBORVRfQUNUX1BPTElDRWAKKiAgIGBORVRfQUNUX1NBTVBMRWAKKiAgIGBORVRfQUNUX1RVTk5FTF9LRVlgCiogICBgTkZfQ09OTlRSQUNLX01BUktgCiogICBgTkZfQ09OTlRSQUNLX0xBQkVMU2AKKiAgIGBORl9DT05OVFJBQ0tfWk9ORVNgCgpJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLCBzbyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfTkVUX0FDVF9DVGAgZGVwZW5kcyBvbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTg1Mz1jb25maWcgTkVUX0FDVF9DT05OTUFSS1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cbm5ldC9zY2hlZC9LY29uZmlnOjg2NTpjb25maWcgTkVUX0FDVF9DVElORk9cbm5ldC9zY2hlZC9LY29uZmlnLTg2Ni1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9uc1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTkwNj1jb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXG4tLVxubmV0L3NjaGVkL0tjb25maWctOTE2LVxubmV0L3NjaGVkL0tjb25maWc6OTE3OmNvbmZpZyBORVRfQUNUX0NUXG5uZXQvc2NoZWQvS2NvbmZpZy05MTgtXHR0cmlzdGF0ZSBcJiMzNDtjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTkVUX0FDVF9DVCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0NUYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgYSAqdGhvcm91Z2gqIHVuZGVyc3RhbmRpbmcuIFdoYXQgYXJlIHRoZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIG9yIGFyZSB3ZSBjb25zaWRlcmluZyB0cmFuc2l0aXZlIG9uZXM/IFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyBsaWJyYXJpZXM7IEkgbmVlZCB0byBhc3Nlc3MgcG90ZW50aWFsIHZlcnNpb24gY29uZmxpY3RzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHN0ZW1taW5nIGZyb20gaXRzIGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGlzIG1vZHVsZSBleGlzdHMgYW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIFdoYXQgaXMgdGhpcyBgTkVUX0FDVF9DVGAgYW5kIHdoYXQgaXMgaXRzIHJvbGU/IElzIGl0IGEgY3JpdGljYWwgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBwZXJpcGhlcmFsPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IGNoYW5nZXMgdG8gYE5FVF9BQ1RfQ1RgIHdvdWxkIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0gYW5kIHdoYXQgdGhlIGltcGFjdCB3b3VsZCBiZSBvbiB0aGUgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5IG9mIHRoZSBuZXR3b3JrLiBUaGlzIHNob3VsZCBhbHNvIGZhY3RvciBpbiB0aGUgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUgYW5kIGFsbCBvZiB0aGUgaW50ZXJmYWNlcyB0aGlzIG1vZHVsZSBtYXkgdG91Y2guIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzLCBsaWtlIGRlcHJlY2F0ZWQgZmVhdHVyZXMgb3Iga25vd24gbGltaXRhdGlvbnM/IE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfQ1QkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9OTA2PWNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVlcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MTYtXG5uZXQvc2NoZWQvS2NvbmZpZzo5MTc6Y29uZmlnIE5FVF9BQ1RfQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cdHRyaXN0YXRlIFwmIzM0O2Nvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbGluZXMgYXJvdW5kIDkxNyBpbiBgbmV0L3NjaGVkL0tjb25maWdgLgoKKipEaWdnaW5nIGludG8gdGhlIE5ldCBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTE3LiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBjcnVjaWFsIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmZWF0dXJlIHNlbGVjdGlvbiwgYSBkZWZhdWx0IHNldHRpbmcsIG9yIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcXVldWVpbmcgZGlzY2lwbGluZSAocWRpc2MpLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gZW5jb3VudGVyIGNvbmRpdGlvbmFsIGxvZ2lj4oCUYGNvbmZpZ2Agc3RhdGVtZW50cywgYGlmYCBzdGF0ZW1lbnRzLCBwb3NzaWJseSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLiBJIGFudGljaXBhdGUgc2VlaW5nIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCBiZXR3ZWVuIGRpZmZlcmVudCBzY2hlZHVsaW5nIGFsZ29yaXRobXMgb3IgZmVhdHVyZXMuIFRoZSBjb250ZXh0IHdpbGwgcHJvYmFibHkgc2hlZCBsaWdodCBvbiB3aGljaCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbnZpcm9ubWVudHMgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3QgYXBwbGljYWJsZS4KClRoZSBjb2RlIG1pZ2h0IGJlIGRlZmluaW5nIGEgbmV3IHRyYWZmaWMgc2hhcGluZyBtZWNoYW5pc20sIG9yIGFsbG93aW5nIGNvbnRyb2wgb2YgdGhlIHJhdGUgbGltaXRpbmcgb2YgcGFja2V0cyBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2UuCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBncmFudWxhciBsZXZlbCBvZiBjb250cm9sIHRoZSBkZXZlbG9wZXJzIGhhdmUgb2ZmZXJlZCB1cy4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTA6XHRcdCAgU2F5IFkgaGVyZSB0byBzZXQvcmVsZWFzZSBpcCB0dW5uZWwgbWV0YWRhdGEuXG4gOTExOlx0XG4gOTEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTEzOlx0XG4gOTE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA5MTU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxuIDkxNjpcdFxuIDkxNzpcdGNvbmZpZyBORVRfQUNUX0NUXG4gOTE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblwmIzM0O1xuIDkxOTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4gOTIwOlx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xuIDkyMTpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gOTIyOlx0XHRoZWxwXG4gOTIzOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxuIDkyNDpcdFxuIDkyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkyNjpcdFxuIDkyNzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTI4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuXG4gOTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlZXAgRGl2ZSBpbnRvIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBORVRfQUNUX0NUYCDigJMgdGhhdCYjMzk7cyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gbW9kdWxlLCByaWdodD8gSG1tLCBuYXR1cmFsbHksIGl0IHJlbGllcyBvbiBib3RoIGBORl9DT05OVFJBQ0tgIChOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBjb3JlKSBhbmQgYE5GX0ZMT1dfVEFCTEVgIChmbG93IG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUpIGJlaW5nIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgeW91IGNhbiYjMzk7dCAqYWN0KiBvbiBjb25uZWN0aW9uIHRyYWNraW5nIGlmIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgYXJlbiYjMzk7dCBpbiBwbGFjZS4gSSB3b3VsZG4mIzM5O3QgZXhwZWN0IGFueXRoaW5nIGxlc3MsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBleHBsaWNpdGx5IGNvbnNpZGVyIHRoZSBkZXBlbmRlbmNpZXMuIE5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIGBORVRfQUNUX0NUSU5GT2AuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBzb3J0IG9mIGluZm9ybWF0aW9uIGFuZCBvcHRpb25zIGFyZSBvZmZlcmVkIGJ5IHRoZSBtb2R1bGUgSSBqdXN0IGNvbmZpcm1lZCBkZXBlbmRzIG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDg2MTpcdFxuIDg2MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODYzOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY29ubm1hcmsuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG4gODY2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcJiMzNDtcbiA4Njc6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1QgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuIDg2ODpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDS19NQVJLXG4gODY5Olx0XHRoZWxwXG4gODcwOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHJhbnNmZXIgb2YgYSBjb25ubWFyayBzdG9yZWQgaW5mb3JtYXRpb24uXG4gODcxOlx0XHQgIEN1cnJlbnQgYWN0aW9ucyB0cmFuc2ZlciBjb25ubWFyayBzdG9yZWQgRFNDUCBpbnRvXG4gODcyOlx0XHQgIGlwdjQvdjYgZGlmZnNlcnYgYW5kL29yIHRvIHRyYW5zZmVyIGNvbm5tYXJrIHRvIHBhY2tldFxuIDg3MzpcdFx0ICBtYXJrLiAgQm90aCBhcmUgdXNlZnVsIGZvciByZXN0b3JpbmcgZWdyZXNzIGJhc2VkIG1hcmtzXG4gODc0Olx0XHQgIGJhY2sgb250byBpbmdyZXNzIGNvbm5lY3Rpb25zIGZvciBxZGlzYyBwcmlvcml0eSBtYXBwaW5nXG4gODc1Olx0XHQgIHB1cnBvc2VzLlxuIDg3NjpcdFxuIDg3NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDg3ODpcdFxuIDg3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYE5FVF9BQ1RfQ1RJTkZPYCBmdW5jdGlvbmFsaXR5IGlzIGJ1aWx0IHVwIGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgcmVseWluZyBvbiBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgdGhlIG1vZHVsZXMgZm9yIGl0LCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5UUkFDS19NQVJLYC4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gbGV2ZXJhZ2UgdGhlIHN0YXRlZnVsIGluc3BlY3Rpb24gY2FwYWJpbGl0aWVzIHRoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciBwcm92aWRlcy4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYnkgbG9va2luZyBhdCBgTkVUX0FDVF9TQU1QTEVgLiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBzYW1wbGluZyBpcyBpbXBsZW1lbnRlZCBpbiByZWxhdGlvbiB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBkYXRhIHdlIGp1c3QgaWRlbnRpZmllZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgYW5kIHV0aWxpemVzIGNvbm5lY3Rpb24gdHJhY2tpbmcgZGF0YSB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWxhdGlvbnNoaXAgYW5kIHRvIGJldHRlciBjb250ZXh0dWFsaXplIHdoZXJlIHRoaXMgcGFydGljdWxhciBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDU6XHRcdGhlbHBcbiA3NDY6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBwYWNrZXRzIHRvIGJlIG1pcnJvcmVkIG9yIHJlZGlyZWN0ZWQgdG9cbiA3NDc6XHRcdCAgb3RoZXIgZGV2aWNlcy5cbiA3NDg6XHRcbiA3NDk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDc1MDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21pcnJlZC5cbiA3NTE6XHRcbiA3NTI6XHRjb25maWcgTkVUX0FDVF9TQU1QTEVcbiA3NTM6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYWZmaWMgU2FtcGxpbmdcJiMzNDtcbiA3NTQ6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3NTU6XHRcdHNlbGVjdCBQU0FNUExFXG4gNzU2Olx0XHRoZWxwXG4gNzU3Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0IHNhbXBsaW5nIHRjIGFjdGlvbi4gVGhlIHBhY2tldCBzYW1wbGVcbiA3NTg6XHRcdCAgYWN0aW9uIGNvbnNpc3RzIG9mIHN0YXRpc3RpY2FsbHkgY2hvb3NpbmcgcGFja2V0cyBhbmQgc2FtcGxpbmdcbiA3NTk6XHRcdCAgdGhlbSB1c2luZyB0aGUgcHNhbXBsZSBtb2R1bGUuXG4gNzYwOlx0XG4gNzYxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3NjI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zYW1wbGUuXG4gNzYzOlx0XG4gNzY0Olx0Y29uZmlnIE5FVF9BQ1RfTkFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQ3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5ldHdvcmsgQWN0aXZhdGlvbiBTYW1wbGluZyoqCgpPa2F5LCBzbyBgTkVUX0FDVF9TQU1QTEVgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBgTkVUX0NMU19BQ1RgIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIGFjdGl2YXRpb24gY2xhc3NpZmljYXRpb24uIEFuZCBpdCYjMzk7cyBnb2luZyB0byB1c2UgYFBTQU1QTEVgIGZvciBpdHMgc2FtcGxpbmcgbWVjaGFuaXNtLCB3aGljaCBJJiMzOTtsbCBrZWVwIGluIG1pbmQuIE5vdywgZ2l2ZW4gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgc2VlIGhvdyBgTkVUX0FDVF9CUEZgIGZpdHMgaW50byB0aGlzIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYWN0aXZhdGlvbiBzYW1wbGluZyBwcm9jZXNzLiBXaGF0JiMzOTtzIHRoZSBjb25uZWN0aW9uPyBJcyBpdCBhbiBhbHRlcm5hdGl2ZSwgb3IgYSBjb21wbGVtZW50PyBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdFxuIDgzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDgzNzpcdFxuIDgzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODM5Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfdmxhbi5cbiA4NDA6XHRcbiA4NDE6XHRjb25maWcgTkVUX0FDVF9CUEZcbiA4NDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JQRiBiYXNlZCBhY3Rpb25cJiMzNDtcbiA4NDM6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4NDQ6XHRcdGhlbHBcbiA4NDU6XHRcdCAgU2F5IFkgaGVyZSB0byBleGVjdXRlIEJQRiBjb2RlIG9uIHBhY2tldHMuIFRoZSBCUEYgY29kZSB3aWxsIGRlY2lkZVxuIDg0NjpcdFx0ICBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkIG9yIG5vdC5cbiA4NDc6XHRcbiA4NDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4NDk6XHRcbiA4NTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDg1MTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2JwZi5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgTkVUX0FDVF9DT05OTUFSS1xuIDg1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBSZXRyaWV2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBJbnRlcmNvbm5lY3RlZCBXZWIgb2YgTmV0d29yayBBY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgTkVUX0FDVF9CUEZgIG1vZHVsZS4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkVUX0NMU19BQ1RgLiBDYW4mIzM5O3QgZG8gb25lIHdpdGhvdXQgdGhlIG90aGVyLCB0aGF0JiMzOTtzIGp1c3QgaG93IHRoZSBhcmNoaXRlY3R1cmUgaXMgc2V0IHVwLiBUaGV5JiMzOTtyZSBpbnRlcnR3aW5lZCwgYW5kIHlvdSBuZWVkIHRoYXQgYmFzZSB0byBidWlsZCB1cG9uLgoKTm93LCBteSBtaW5kIG5hdHVyYWxseSBqdW1wcyB0byBhbm90aGVyIHJlbGF0ZWQgYWN0aW9uLCBgTkVUX0FDVF9JRkVgLiBJdCYjMzk7cyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBvbmUgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGRlcGVuZGVuY3kuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIHdob2xlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODg1Olx0XHRoZWxwXG4gODg2Olx0XHQgU2F5IFkgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2Ygc2tiIGRhdGFcbiA4ODc6XHRcbiA4ODg6XHRcdCBJZiB1bnN1cmUsIHNheSBOLlxuIDg4OTpcdFxuIDg5MDpcdFx0IFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4OTE6XHRcdCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NrYm1vZC5cbiA4OTI6XHRcbiA4OTM6XHRjb25maWcgTkVUX0FDVF9JRkVcbiA4OTQ6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuIDg5NTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDg5NjpcdFx0c2VsZWN0IE5FVF9JRkVcbiA4OTc6XHRcdGhlbHBcbiA4OTg6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBmb3Igc291cmNpbmcgYW5kIHRlcm1pbmF0aW5nIG1ldGFkYXRhXG4gODk5Olx0XHQgIEZvciBkZXRhaWxzIHJlZmVyIHRvIG5ldGRldjAxIHBhcGVyOlxuIDkwMDpcdFx0ICBcJiMzNDtEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVwmIzM0O1xuIDkwMTpcdFx0ICAgQXV0aG9yczogSmFtYWwgSGFkaSBTYWxpbSBhbmQgRGFtYXNjZW5lIE0uIEpvYWNoaW1waWxsYWlcbiA5MDI6XHRcbiA5MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDkwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgTmV0d29yayBBY3RpdmF0aW9uIExvZ2ljKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBORVRfQUNUX0lGRWAuLi4gdGhhdCYjMzk7cyB0aGUgSW5kZXBlbmRlbnQgRnVuY3Rpb24gRXZhbHVhdGlvbiwgcmlnaHQ/IFNvLCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jeSwgaXQgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZSBjbGFzcyBhY3RpdmF0aW9uLiBTbywgaW4gb3RoZXIgd29yZHMsIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBpbmRlcGVuZGVudCBmdW5jdGlvbiBvZiB0aGUgbmV0d29yayBpcyBkZXBlbmRlbnQgb24gaXQgYmVpbmcgYWN0aXZhdGVkLiBJdCB1c2VzIHRoYXQgaW5mb3JtYXRpb24gdG8gc2VsZWN0IGBORVRfSUZFYC4gR290IGl0LiBOb3csIGl0JiMzOTtzIHNlbGVjdGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlLCB3aGljaCBpcyBhIGtleSBzdGVwLCBidXQgaXQgbXVzdCBiZSBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIGFjdGl2YXRlZC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYnVpbGQuIE5vdywgYmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYE5FVF9BQ1RfUEVESVRgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgZGVhbHMgd2l0aCBwYXJhbWV0ZXIgZWRpdGluZywgd2hpY2ggY291bGQgYWZmZWN0IGFsbCB0aGUgc3RlcHMgSSBqdXN0IHRob3VnaHQgYWJvdXQuIExldCBtZSBzZWUgd2hlcmUgdGhhdCBsaWVzIGluIHRoaXMgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFdlIHNob3VsZCBjaGVjayB0aGF0IGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBleHBlY3RlZCByZWxhdGlvbnNoaXBzLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3RhdGVsZXNzIE5BVFwmIzM0O1xuIDc2NjpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDc2NzpcdFx0aGVscFxuIDc2ODpcdFx0ICBTYXkgWSBoZXJlIHRvIGRvIHN0YXRlbGVzcyBOQVQgb24gSVB2NCBwYWNrZXRzLiAgWW91IHNob3VsZCB1c2VcbiA3Njk6XHRcdCAgbmV0ZmlsdGVyIGZvciBOQVQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiA3NzA6XHRcbiA3NzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDc3MjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X25hdC5cbiA3NzM6XHRcbiA3NzQ6XHRjb25maWcgTkVUX0FDVF9QRURJVFxuIDc3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEVkaXRpbmdcJiMzNDtcbiA3NzY6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3Nzc6XHRcdGhlbHBcbiA3Nzg6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBtYW5nbGUgdGhlIGNvbnRlbnQgb2YgcGFja2V0cy5cbiA3Nzk6XHRcbiA3ODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDc4MTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BlZGl0LlxuIDc4MjpcdFxuIDc4MzpcdGNvbmZpZyBORVRfQUNUX1NJTVBcbiA3ODQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXBsZSBFeGFtcGxlIChEZWJ1ZylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOZXR3b3JrIEFjdGl2aXR5IERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXR3b3JrIGFjdGl2aXR5IGRhdGEuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYE5FVF9BQ1RfUEVESVRgIOKAkyB0aGF0JiMzOTtzIHBhY2tldCBlZGl0aW5nIGFjdGl2aXR5LCByaWdodD8g4oCTIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgTkVUX0NMU19BQ1RgLiBUaGF0IG1ha2VzIHNlbnNlOyB5b3UgY2FuJiMzOTt0IHJlYWxseSBlZGl0IHNvbWV0aGluZyB5b3UgaGF2ZW4mIzM5O3QgY2xhc3NpZmllZCBmaXJzdC4gTm93LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIExldCYjMzk7cyBtb3ZlIG9udG8gYE5FVF9BQ1RfUE9MSUNFYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZmFjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzEwOlx0XHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxuIDcxMTpcdFxuIDcxMjpcdFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxuIDcxMzpcdFx0ICBleHRlbmRlZCBtYXRjaGVzLlxuIDcxNDpcdFxuIDcxNTpcdGNvbmZpZyBORVRfQUNUX1BPTElDRVxuIDcxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhZmZpYyBQb2xpY2luZ1wmIzM0O1xuIDcxNzpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDcxODpcdFx0aGVscFxuIDcxOTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIHRyYWZmaWMgcG9saWNpbmcsIGkuZS4gc3RyaWN0XG4gNzIwOlx0XHQgIGJhbmR3aWR0aCBsaW1pdGluZy4gVGhpcyBhY3Rpb24gcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHBvbGljaW5nXG4gNzIxOlx0XHQgIG1vZHVsZS5cbiA3MjI6XHRcbiA3MjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDcyNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BvbGljZS5cbiA3MjU6XHRcbiA3MjY6XHRjb25maWcgTkVUX0FDVF9HQUNUXG4gNzI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGFjdGlvbnNcJiMzNDtcbiA3Mjg6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3Mjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIE5ldHdvcmsgQWN0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRfQUNUX1BPTElDRWAgaXMgZGVwZW5kZW50IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQmIzM5O3Mgbm90IHVuZXhwZWN0ZWQsIGdpdmVuIHRoZSB3YXkgcG9saWNpbmcgb2Z0ZW4gd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIEl0IG5lZWRzIGNsYXNzaWZpY2F0aW9uIHRvIGZ1bmN0aW9uLCByaWdodD8gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgb3Igb3Zlcmxvb2tlZCBhIHN1YnRsZSBpbnRlcnBsYXkgaGVyZS4gU2luY2UgSSYjMzk7bSB0aGlua2luZyBhYm91dCBuZXR3b3JrIGFjdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGdsYW5jZSBhdCBgTkVUX0FDVF9UVU5ORUxfS0VZYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHJlbGV2YW50IGNvcnJlbGF0aW9uLiBHb3R0YSBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUsIGV2ZW4gaWYgaXQgc2VlbXMgYSBsaXR0bGUgdGFuZ2VudGlhbCBhdCBmaXJzdC4gQWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGludGVyZGVwZW5kZW5jaWVzIGluIHRoaXMgYXJlYS4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGxlc3Mgb2J2aW91cyByZWxhdGlvbnNoaXBzIHRoYXQgdHJpcCBtZSB1cCwgc28gaXQmIzM5O3MgYmVzdCB0byBiZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHQgIFwmIzM0O0Rpc3RyaWJ1dGluZyBMaW51eCBUcmFmZmljIENvbnRyb2wgQ2xhc3NpZmllci1BY3Rpb24gU3Vic3lzdGVtXCYjMzQ7XG4gOTAxOlx0XHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxuIDkwMjpcdFxuIDkwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfaWZlLlxuIDkwNTpcdFxuIDkwNjpcdGNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVlcbiA5MDc6XHRcdHRyaXN0YXRlIFwmIzM0O0lQIHR1bm5lbCBtZXRhZGF0YSBtYW5pcHVsYXRpb25cJiMzNDtcbiA5MDg6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA5MDk6XHRcdGhlbHBcbiA5MTA6XHRcdCAgU2F5IFkgaGVyZSB0byBzZXQvcmVsZWFzZSBpcCB0dW5uZWwgbWV0YWRhdGEuXG4gOTExOlx0XG4gOTEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTEzOlx0XG4gOTE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA5MTU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxuIDkxNjpcdFxuIDkxNzpcdGNvbmZpZyBORVRfQUNUX0NUXG4gOTE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblwmIzM0O1xuIDkxOTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBgTkVUX0FDVF9UVU5ORUxfS0VZYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKR2l2ZW4gdGhhdCwgbXkgY3VycmVudCBzZXR1cCBpbnZvbHZlczoKCiogICBgTkVUX0NMU19BQ1RgCiogICBgTkVUX0FDVF9CUEZgCiogICBgTkVUX0FDVF9DVGAKKiAgIGBORVRfQUNUX0NUSU5GT2AKKiAgIGBORVRfQUNUX0lGRWAKKiAgIGBORVRfQUNUX1BFRElUYAoqICAgYE5FVF9BQ1RfUE9MSUNFYAoqICAgYE5FVF9BQ1RfU0FNUExFYAoqICAgYE5FVF9BQ1RfVFVOTkVMX0tFWWAgKHdoaWNoIHdlIGtub3cgaXMgaW5mbHVlbmNlZCBieSBgTkVUX0NMU19BQ1RgKQoqICAgYE5GX0NPTk5UUkFDS2AKKiAgIGBORl9DT05OVFJBQ0tfTUFSS2AKKiAgIGBORl9DT05OVFJBQ0tfTEFCRUxTYAoqICAgYE5GX0NPTk5UUkFDS19aT05FU2AKKiAgIGBORl9GTE9XX1RBQkxFYAoKUmlnaHQsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYE5GX0NPTk5UUkFDS19aT05FU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTIzPWNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIGBORl9DT05OVFJBQ0tfTEFCRUxTYCoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYE5GX0NPTk5UUkFDS19MQUJFTFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBtb2R1bGUgaXMgZW5hYmxlZCBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgc28gSSB3YW50IHRvIHJ1biBhIHF1aWNrIGRpYWdub3N0aWMgY2hlY2sgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGRvaW5nIGl0cyBqb2IuIEkgd2FudCB0byBydWxlIG91dCBhbnkgY29ubmVjdGlvbiB0cmFja2luZyBpc3N1ZXMgYmVmb3JlIEkgbW92ZSBvbiB0byBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIHN0ZXBzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTE3Nz1jb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipORl9DT05OVFJBQ0tfTUFSSyBFeGFtaW5hdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgTkZfQ09OTlRSQUNLX01BUktgLiBJJiMzOTttIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBmaWVsZCBvcGVyYXRlcyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBMZXQgbWUgcmVjYWxsOiBpcyBpdCB1c2VkIGZvciBtYXJraW5nIGNvbm5lY3Rpb25zIGZvciBzcGVjaWZpYyBwb2xpY3kgZW5mb3JjZW1lbnQsIHJvdXRpbmcgZGVjaXNpb25zLCBvciBwZXJoYXBzIGZvciB0cmFmZmljIHNoYXBpbmc/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBjb250ZXh0IHdpbGwgZGV0ZXJtaW5lIHdoYXQgSSBuZWVkIHRvIGxvb2sgZm9yLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIG1hcmsgaW50ZXJhY3RzIHdpdGggdGhlIHZhcmlvdXMgbmV0ZmlsdGVyIGhvb2tzLCBhbmQgd2hldGhlciBpdCYjMzk7cyBwcm9wYWdhdGluZyBjb3JyZWN0bHkgdGhyb3VnaCB0aGUgY29ubnRyYWNrIHRhYmxlIGVudHJpZXMuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIGFueSByZWxldmFudCBpcHRhYmxlcyBtb2R1bGVzIGFyZSBjb25maWd1cmVkIHRvIGFjdCBvbiB0aGlzIG1hcmsuIFRpbWUgdG8gY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLCBvZiBjb3Vyc2UsIGFuZCB0aGVuIHF1aWNrbHkgZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0cyB3aXRoaW4gdGhlIG5ldGZpbHRlciBzb3VyY2UgdG8gY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgc2NlbmFyaW9zIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIHBvdGVudGlhbCBwcm9ibGVtcy4gUmlnaHQsIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipORl9GTE9XX1RBQkxFIENoZWNrLUluKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYE5GX0ZMT1dfVEFCTEVgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgdHJhZmZpYyBmbG93LCBsaWtlbHkgYXQgdGhlIGtlcm5lbCBsZXZlbCBnaXZlbiB0aGUgYE5GX2AgcHJlZml4LiBLbm93aW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIHRhYmxlIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dDogYXJlIHdlIHRyb3VibGVzaG9vdGluZyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgY29ubmVjdGl2aXR5IGlzc3VlLCBvciBwZXJoYXBzIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGZsb3cgbWFuYWdlbWVudD8gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHdpdGhpbi4gQSBkZWVwIGRpdmUgaW50byB0aGlzIHRhYmxlJiMzOTtzIHN0YXR1cyBjb3VsZCBwcm92aWRlIHRoZSBjbGFyaXR5IG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIG5leHQgc3RlcHMgcmVxdWlyZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHN0YXR1cyBvZiB0aGUgZmxvdyB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9CUEZgLCBgTkVUX0FDVF9DVGAsIGBORVRfQUNUX0NUSU5GT2AsIGBORVRfQUNUX0lGRWAsIGBORVRfQUNUX1BFRElUYCwgYE5FVF9BQ1RfUE9MSUNFYCwgYE5FVF9BQ1RfU0FNUExFYCwgYE5FVF9BQ1RfVFVOTkVMX0tFWWAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGBORl9DT05OVFJBQ0tfWk9ORVNgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcyB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgY29uZmlndXJhdGlvbi4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYE5FVF9BQ1RfQ1RgIGFuZCBgTkZfTkFUYC4gVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgYE5FVF9BQ1RfQ1RgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUICZhbXA7JmFtcDsgTkZfQ09OTlRSQUNLICZhbXA7JmFtcDsgKCFORl9OQVQgfHwgTkZfTkFUKSAmYW1wOyZhbXA7IE5GX0ZMT1dfVEFCTEVgLiBUaGlzIGRlcGVuZGVuY3kgY29uZGl0aW9uIG1lYW5zIHRoYXQgYE5FVF9BQ1RfQ1RgIGRvZXNuJiMzOTt0IHN0cmljdGx5ICpyZXF1aXJlKiBgTkZfTkFUYC4gSWYgYE5GX05BVGAgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoZW4gYE5FVF9BQ1RfQ1RgIGFsc28gbmVlZHMgdG8gYmUgYSBtb2R1bGUsIGJ1dCBpZiBgTkZfTkFUYCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZW4gYE5FVF9BQ1RfQ1RgIGNhbiBiZSBidWlsdCBlaXRoZXIgd2F5LiBUaGF0JiMzOTtzIGdvb2QsIGl0IGdpdmVzIHVzIG1vcmUgZmxleGliaWxpdHkgaW4gdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYE5FVF9JRkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JRkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaWZlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lmZS9LY29uZmlnLTUtXG5uZXQvaWZlL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9JRkVcbm5ldC9pZmUvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZXItRkUgYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRyYWZmaWMgQ29udHJvbCBBY3Rpb24gSW5pdGlhbGl6YXRpb24gYW5kIER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIGFjdGlvbiBtb2R1bGVzIGFyZSBzZXQgdXAuIEkgc2VlIGBORVRfSUZFYCBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkIGJ5IGBORVRfQUNUX0lGRWAsIHdoaWNoIGlzIGdvb2QuIE5vIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuIFNhbWUgd2l0aCBgUFNBTVBMRWAgYW5kIGBORVRfQUNUX1NBTVBMRWAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgdGNmX2FjdGlvbl9pbml0YCBhbmQgYHRjZl9hY3Rpb25fZHVtcGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEFyZSB0aGVzZSB0aGUgb25seSBlbnRyeSBwb2ludHM/IFJpZ2h0LCBgdGNmX2FjdGlvbl9pbml0XzFgIGlzIGNhbGxlZCBieSBib3RoIGB0Y2ZfYWN0aW9uX2luaXRgIGFuZCBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgLiBHb29kIHRvIHJlbWVtYmVyLiBgdGNmX2FjdGlvbl9kdW1wYCBpcyB1c2VkIGluIGB0Y2FfZ2V0X2ZpbGxgLCBgdGNmX2V4dHNfZHVtcGAsIGFuZCBgdGNmX2V4dHNfdGVyc2VfZHVtcGAuCgpTbywgaXQgc2VlbXMgdGhlIGtleSBzeW1ib2xzLCB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLCBzaG91bGQgYmU6IGB0Y2ZfYWN0aW9uX2luaXRgLCBgdGNmX2FjdGlvbl9pbml0XzFgLCBgdGNmX2FjdGlvbl9kdW1wYCwgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YCwgYW5kIGB0Y2ZfZXh0c19kdW1wYC4gVGhhdCBzZWVtcyBjb21wcmVoZW5zaXZlLgoKTm93IEkgbmVlZCB0byBjaGVjayBpZiBgdGNmX2FjdGlvbl9pbml0XzFgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25faW5pdF8xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZpc2liaWxpdHkgSXNzdWVzKioKCkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpc24mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoeSB3b3VsZG4mIzM5O3QgaXQgYmUgc3RhdGljIGlmIGl0JiMzOTtzIG1lYW50IHRvIGJlIGludGVybmFsPyBUaGVuLCBJIGFsc28gbm90aWNlZCBgdGNmX2FjdGlvbl9pbml0YCBzaGFyZXMgdGhlIHNhbWUgY2hhcmFjdGVyaXN0aWMsIGl0IGlzIG5vdCBleHBvcnRlZC4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGJvdGggZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZC4gVGhpcyBjb21iaW5hdGlvbiB1c3VhbGx5IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgcG9zc2liaWxpdHkgb2YgZXh0ZXJuYWwgbGlua2FnZSwgZXZlbiBpZiB1bmludGVudGlvbmFsLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3IgaW5jbHVkZSBzdHJ1Y3R1cmUuIE9yIG1heWJlIHRoZXJlJiMzOTtzIGEgc3VidGxlIG1hY3JvIGRlZmluaXRpb24gYXQgcGxheS4gV2UgbmVlZCB0byBmb2xsb3cgdGhpcyBkb3duIHRoZSByYWJiaXQgaG9sZSB0byBzZWUgaWYgdGhleSBhcmUgdW5pbnRlbnRpb25hbGx5IGV4cG9zZWQgdG8gb3RoZXIgY29kZSBtb2R1bGVzLCBvciBpZiB0aGVyZSBpcyBhbm90aGVyIG1vZHVsZSB3aXRoIHNpbWlsYXIgaW50ZXJuYWwgcmVxdWlyZW1lbnRzLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbiB1bmV4cGVjdGVkIGV4dGVybmFsIGRlcGVuZGVuY3ksIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgYW5kIHNlZSBpZiB0aGUgcHJvYmxlbSBleGlzdHMgdGhlcmUgdG9vLCBvciBpZiB0aGlzIGlzc3VlIGlzIGxpbWl0ZWQgdG8gb25lIHNwZWNpZmljIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjZl9leHRzX3ZhbGlkYXRlX2V4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jPTM0MDc9aW50IHRjZl9leHRzX3ZhbGlkYXRlX2V4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0NTgtfVxubmV0L3NjaGVkL2Nsc19hcGkuYzozNDU5OkVYUE9SVF9TWU1CT0wodGNmX2V4dHNfdmFsaWRhdGVfZXgpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipWYWxpZGF0aW5nIHRoZSBFeHRlbnNpb24gTW9kdWxlIEludGVyZmFjZSoqCgpPa2F5LCBzbyBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciBkb3duIHRoaXMgcGF0aCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IHRoZSByZWxhdGVkIGB0Y2ZfZXh0c19kdW1wYCBmdW5jdGlvbiBleGlzdHMgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbW9kdWxlIGhhbmRsZXMgaW50ZXJuYWwgaW5mb3JtYXRpb24gYW5kIGhvdyBJIGNhbiBhbmFseXplIGl0LiBJdCYjMzk7cyBhbHdheXMgdXNlZnVsIHRvIGhhdmUgdGhhdCBleHRyYSBkZWJ1Z2dpbmcgdXRpbGl0eSByZWFkaWx5IGF2YWlsYWJsZSBhcyBJIGRpZyBkZWVwZXIgaW50byB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjZl9leHRzX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MzQ5MT1pbnQgdGNmX2V4dHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTI5LX1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzUzMDpFWFBPUlRfU1lNQk9MKHRjZl9leHRzX2R1bXApO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTMxLVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM9MzU1OD1pbnQgdGNmX2V4dHNfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTY2LX1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzU2NzpFWFBPUlRfU1lNQk9MKHRjZl9leHRzX2R1bXBfc3RhdHMpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjYzOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgVGltZTogRXhwbG9yaW5nIFRDRiBEdW1wcyoqCgpPa2F5LCBzbyBgdGNmX2V4dHNfZHVtcGAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggYHRjZl9hY3Rpb25fZHVtcGAuIEl0IGZlZWxzIGxpa2UgdGhlcmUmIzM5O3MgYSBjb25uZWN0aW9uIHRoZXJlLCBhIHJlbGF0ZWQgc2V0IG9mIGR1bXBzIHRoYXQgbGlrZWx5IHByb3ZpZGUgY29tcGxlbWVudGFyeSBpbmZvcm1hdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIGluc2lnaHRzIGludG8gdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0Y2ZfYWN0aW9uX2R1bXBgIGlzIHRlbGxpbmcgdXMgdG9vLiBJdCB3aWxsIGJlIGhlbHBmdWwgaW4gZGV0ZXJtaW5pbmcgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhbmQgaWYgdGhlcmUmIzM5O3MgYW4gb3Bwb3J0dW5pdHkgdG8gZ2xlYW4gbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBvdXRwdXRzIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y2ZfYWN0aW9uX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4NzgKCQkJCQkJCW91dHB1dDogMjg3CgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQyBBY3Rpb24gTmV0bGluayBEdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCB0aGF0JiMzOTtzIGZpbmUuIFRoZSBrZXkgZnVuY3Rpb25zLCBgdGNmX2FjdGlvbl9pbml0YCwgYHRjZl9hY3Rpb25faW5pdF8xYCwgYW5kIGB0Y2ZfYWN0aW9uX2R1bXBgLCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gcGVyZmVjdCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKTGV0JiMzOTtzIHF1aWNrbHkgZ28gb3ZlciB0aGUgY2hhbmdlcyBhZ2Fpbi4gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgVEMgYWN0aW9ucy4gVGhlIGFpbSBpcyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIE5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgd2hlbiBkdW1waW5nIGFuIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyB3ZSBoYW5kbGUgTmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSByZWQgZmxhZyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpbmFjY3VyYXRlIHNpemUgY2FsY3VsYXRpb25zIGhlcmUgY291bGQgb3BlbiB0aGUgZG9vciB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IsIGF0IGEgbWluaW11bSwgYEVNU0dTSVpFYCBlcnJvcnMuCgpJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBORVRfQ0xTX0FDVGAsIGFuZCB0aGUgVEMgYWN0aW9uIG1vZHVsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGBORl9DT05OVFJBQ0tfWk9ORVNgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGFyZSBlbmFibGVkLgoKTXkgbWFpbiBmb2N1cyBzeW1ib2xzLCBhcyBzdGF0ZWQgYmVmb3JlLCBhcmUgYHRjZl9hY3Rpb25faW5pdGAsIGB0Y2ZfYWN0aW9uX2luaXRfMWAsIGB0Y2ZfYWN0aW9uX2R1bXBgLCBhcyB3ZWxsIGFzIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgYW5kIGB0Y2ZfZXh0c19kdW1wYC4uCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYW55IG90aGVyIGFjdGlvbnMgaGF2ZSBiZWVuIGFmZmVjdGVkLiBBaCwgeWVzOiBgYWN0X2FwaS5jYCwgYGFjdF9icGYuY2AsIGBhY3RfY3QuY2AsIGBhY3RfY3RpbmZvLmNgLCBgYWN0X2lmZS5jYCwgYGFjdF9wZWRpdC5jYCwgYGFjdF9wb2xpY2UuY2AsIGBhY3Rfc2FtcGxlLmNgLCBhbmQgYGFjdF90dW5uZWxfa2V5LmNgLiBPa2F5LCBzbyB0aG9zZSBhcmUgYWxsIHRoZSBhY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCYjMzk7cyBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgdGhvc2UgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgTmV0bGluayBhdHRyaWJ1dGUgc2l6ZXMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBkaXJlY3RseSBhZmZlY3RzIFRDIGFjdGlvbiBOZXRsaW5rIGR1bXAgb3BlcmF0aW9ucywgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBpbiB0aGVzZSBzY2VuYXJpb3MgY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzIGFuZCBvdGhlciBuYXN0eSBwcm9ibGVtcyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgTmV0bGluayBtZXNzYWdlLiBUaW1lIHRvIGdldCB0aGlzIGZvcm1hdHRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQlBGJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVElORk8mIzM0OywKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9QRURJVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1BPTElDRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1RVTk5FTF9LRVkmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19NQVJLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19MQUJFTFMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1pPTkVTJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9pbml0XzEmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9kdW1wJiMzNDssCiAgICAmIzM0O3RjZl9leHRzX3ZhbGlkYXRlX2V4JiMzNDssCiAgICAmIzM0O3RjZl9leHRzX2R1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCYjMzk7cyB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgaW5jb3JyZWN0IHNpemUgY2FsY3VsYXRpb25zIGNhbiBsZWFkIHRvIGJ1ZmZlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgd3JpdGVzLCBvciBgRU1TR1NJWkVgIGVycm9ycyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgbmV0bGluayBtZXNzYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0JQRiYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1RJTkZPJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfUEVESVQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9QT0xJQ0UmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9TQU1QTEUmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9UVU5ORUxfS0VZJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTUFSSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTEFCRUxTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19aT05FUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2FjdGlvbl9pbml0JiMzNDssCiAgICAmIzM0O3RjZl9hY3Rpb25faW5pdF8xJiMzNDssCiAgICAmIzM0O3RjZl9hY3Rpb25fZHVtcCYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c192YWxpZGF0ZV9leCYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c19kdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyB0byB2YXJpb3VzIFRDIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgdG8gZHVtcCB0aGUgYWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBuZXRsaW5rIGR1bXAgb3BlcmF0aW9ucyBmb3IgVEMgYWN0aW9ucy4gSXQmIzM5O3Mgd29ydGggZnV6emluZyBiZWNhdXNlIGluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBjYW4gbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgYEVNU0dTSVpFYCBlcnJvcnMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGludm9sdmUgY2FsY3VsYXRpbmcgc2l6ZXMgKHJldHVybmluZyBgc2l6ZV90YCkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG8gbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgYWRkIGNvbXBsZXggY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGEgc2l6ZSBpcyBtaXNjYWxjdWxhdGVkLCBpdCB3b3VsZCBlaXRoZXIgcmVzdWx0IGluIGFuIGBFTVNHU0laRWAgZXJyb3IgZHVyaW5nIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gb3IgcG90ZW50aWFsbHkgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgdW5kZXJlc3RpbWF0ZWQgYW5kIGJvdW5kcyBjaGVja3MgYXJlIG1pc3NpbmcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTikuIE5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmxhX3B1dGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdoaWNoIHVwZGF0ZSB0aGUgYHNrYi1cdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDo1NTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDYwMGI3ODA0YmVmZDIuLmI0NDE1ZDM1OGM5MTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtNDUyLDcgJiM0Mzs0NTIsMTAgQEAgc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKIAkJLyogVENBX1NUQVRTX1FVRVVFICovCiAJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZihzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZSkpCiAJCSYjNDM7IG5sYV90b3RhbF9zaXplKDApIC8qIFRDQV9BQ1RfT1BUSU9OUyBuZXN0ZWQgKi8KLQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOyAvKiBUQ0FfR0FDVF9UTSAqLwomIzQzOwkJLyogVENBX0dBQ1RfVE07IGFjdGlvbnMgZHVtcCB0aGVpciB0Y2ZfdCB3aXRoIG5sYV9wdXRfNjRiaXQoKSwKJiM0MzsJCSAqIHdoaWNoIG1heSBlbWl0IGFuIGV4dHJhIE5MQV9QQUQgYXR0cmlidXRlLgomIzQzOwkJICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IHRjZl90KSk7CiB9CiAKIHN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9mdWxsX2F0dHJzX3NpemUoc2l6ZV90IHN6KQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBmLmMKaW5kZXggMDlkNDZlMTk1ZTMzYi4uMDZkOGY3OGI3MzY4MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2JwZi5jCkBAIC0zODksNiAmIzQzOzM4OSwzMSBAQCBzdGF0aWMgdm9pZCB0Y2ZfYnBmX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0KQogCXRjZl9icGZfY2ZnX2NsZWFudXAoJmFtcDt0bXApOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRjZl9icGYgKnByb2cgPSB0b19icGYoYWN0KTsKJiM0MzsJc2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2FjdF9icGYpKTsKJiM0MzsKJiM0MzsJLyogYnBmX29wcyBhbmQgYnBmX251bV9vcHMgYXJlIHB1Ymxpc2hlZCBhcyBzZXBhcmF0ZSBzdG9yZXMgdW5kZXIKJiM0MzsJICogdGNmX2xvY2ssIHNvIHRha2UgaXQgaGVyZSBhcyB0Y2ZfYnBmX2R1bXAoKSBkb2VzLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cHJvZy0mZ3Q7dGNmX2xvY2spOwomIzQzOwlpZiAodGNmX2JwZl9pc19lYnBmKHByb2cpKSB7CiYjNDM7CQkvKiBUQ0FfQUNUX0JQRl9OQU1FICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShBQ1RfQlBGX05BTUVfTEVOICYjNDM7IDEpOwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfQUNUX0JQRl9JRCAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoQlBGX1RBR19TSVpFKTsgLyogVENBX0FDVF9CUEZfVEFHICovCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9BQ1RfQlBGX09QU19MRU4gKi8KJiM0MzsJCS8qIFRDQV9BQ1RfQlBGX09QUyAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUocHJvZy0mZ3Q7YnBmX251bV9vcHMgKgomIzQzOwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7cHJvZy0mZ3Q7dGNmX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkua2luZAkJPQkmIzM0O2JwZiYjMzQ7LAogCS5pZAkJPQlUQ0FfSURfQlBGLApAQCAtMzk3LDYgJiM0Mzs0MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZHVtcAkJPQl0Y2ZfYnBmX2R1bXAsCiAJLmNsZWFudXAJPQl0Y2ZfYnBmX2NsZWFudXAsCiAJLmluaXQJCT0JdGNmX2JwZl9pbml0LAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXRjZl9icGZfZ2V0X2ZpbGxfc2l6ZSwKIAkuc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHRjZl9icGYpLAogfTsKIE1PRFVMRV9BTElBU19ORVRfQUNUKCYjMzQ7YnBmJiMzNDspOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jCmluZGV4IGUyNTA5NjljODRhY2EuLjM3MDA4NWFiNmVhNDEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0LmMKQEAgLTE2NTcsNiAmIzQzOzE2NTcsNTEgQEAgc3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CiYjNDM7CXNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0KSkgLyogVENBX0NUX1BBUk1TICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9DVF9BQ1RJT04gKi8KJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwID0gcmN1X2RlcmVmZXJlbmNlKHRvX2N0KGFjdCktJmd0O3BhcmFtcyk7CiYjNDM7CiYjNDM7CWlmIChwLSZndDtjdF9hY3Rpb24gJmFtcDsgVENBX0NUX0FDVF9DTEVBUikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBUQ0FfQ1RfTUFSSywgVENBX0NUX01BUktfTUFTSyAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspKQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtJmd0O21hcmspKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDttYXJrX21hc2spKTsKJiM0MzsKJiM0MzsJLyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSkKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDtsYWJlbHMpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDtsYWJlbHNfbWFzaykpOwomIzQzOwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSkKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDt6b25lKSk7IC8qIFRDQV9DVF9aT05FICovCiYjNDM7CiYjNDM7CWlmIChwLSZndDtjdF9hY3Rpb24gJmFtcDsgVENBX0NUX0FDVF9OQVQpCiYjNDM7CQkvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzcwomIzQzOwkJICogdmFyaWFudHMsIHBsdXMgVENBX0NUX05BVF9QT1JUX3tNSU4sTUFYfS4KJiM0MzsJCSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKQomIzQzOwkJCSYjNDM7IDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSk7CiYjNDM7CiYjNDM7CS8qIFRDQV9DVF9IRUxQRVJfe05BTUUsRkFNSUxZLFBST1RPfSAqLwomIzQzOwlpZiAocC0mZ3Q7aGVscGVyKQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoTkZfQ1RfSEVMUEVSX05BTUVfTEVOKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7CiYjNDM7b3V0OgomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7CiAJLmtpbmQJCT0JJiMzNDtjdCYjMzQ7LAogCS5pZAkJPQlUQ0FfSURfQ1QsCkBAIC0xNjY2LDYgJiM0MzsxNzExLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7CiAJLmluaXQJCT0JdGNmX2N0X2luaXQsCiAJLmNsZWFudXAJPQl0Y2ZfY3RfY2xlYW51cCwKIAkuc3RhdHNfdXBkYXRlCT0JdGNmX3N0YXRzX3VwZGF0ZSwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jCmluZGV4IDE4ODZmZmQyY2E5NTYuLmZjZWQ0YjEwOTRhZjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uYwpAQCAtMzU2LDYgJiM0MzszNTYsMTYgQEAgc3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpCiAJCWtmcmVlX3JjdShjcCwgcmN1KTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0aW5mbykpIC8qIFRDQV9DVElORk9fQUNUICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkgLyogVENBX0NUSU5GT19aT05FICovCiYjNDM7CQkvKiBUQ0FfQ1RJTkZPX1BBUk1TX3tEU0NQX01BU0ssRFNDUF9TVEFURU1BU0ssQ1BNQVJLX01BU0t9ICovCiYjNDM7CQkmIzQzOyAzICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpCiYjNDM7CQkvKiBUQ0FfQ1RJTkZPX1NUQVRTX3tEU0NQX1NFVCxEU0NQX0VSUk9SLENQTUFSS19TRVR9ICovCiYjNDM7CQkmIzQzOyAzICogbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHsKIAkua2luZAk9ICYjMzQ7Y3RpbmZvJiMzNDssCiAJLmlkCT0gVENBX0lEX0NUSU5GTywKQEAgLTM2NCw2ICYjNDM7Mzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0gewogCS5kdW1wCT0gdGNmX2N0aW5mb19kdW1wLAogCS5pbml0CT0gdGNmX2N0aW5mb19pbml0LAogCS5jbGVhbnVwPSB0Y2ZfY3RpbmZvX2NsZWFudXAsCiYjNDM7CS5nZXRfZmlsbF9zaXplID0gdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplLAogCS5zaXplCT0gc2l6ZW9mKHN0cnVjdCB0Y2ZfY3RpbmZvKSwKIH07CiBNT0RVTEVfQUxJQVNfTkVUX0FDVCgmIzM0O2N0aW5mbyYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4IDA2NTIyODAyNmM1OGUuLmZmMmIxNmUzNWI5YjAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuYwpAQCAtODc4LDYgJiM0Mzs4NzgsMjggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIHRjZl9pZmVfZGVjb2RlKHNrYiwgYSwgcmVzKTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y2ZfaWZlX2luZm8gKmlmZSA9IHRvX2lmZShhY3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7CiYjNDM7CXN0cnVjdCB0Y2ZfbWV0YV9pbmZvICplOwomIzQzOwlzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfaWZlKSkgLyogVENBX0lGRV9QQVJNUyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfRE1BQyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoMikgLyogVENBX0lGRV9UWVBFICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZSgwKTsgLyogVENBX0lGRV9NRVRBTFNUICovCiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcCA9IHJjdV9kZXJlZmVyZW5jZShpZmUtJmd0O3BhcmFtcyk7CiYjNDM7CWlmIChwKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCAmYW1wO3AtJmd0O21ldGFsaXN0LCBtZXRhbGlzdCkKJiM0MzsJCQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHsKIAkua2luZCA9ICYjMzQ7aWZlJiMzNDssCiAJLmlkID0gVENBX0lEX0lGRSwKQEAgLTg4Niw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0gewogCS5kdW1wID0gdGNmX2lmZV9kdW1wLAogCS5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLAogCS5pbml0ID0gdGNmX2lmZV9pbml0LAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZSwKIAkuc2l6ZSA9CXNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSwKIH07CiBNT0RVTEVfQUxJQVNfTkVUX0FDVCgmIzM0O2lmZSYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwppbmRleCBkNGQ0N2E5OTIxZjQ1Li45OWQ3ZTM2NTEwYmQwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC02MjYsNiAmIzQzOzYyNiwyOSBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y2ZfcGVkaXRfcGFybXMgKnBhcm1zOwomIzQzOwlzaXplX3Qgc2l6ZTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwYXJtcyA9IHJjdV9kZXJlZmVyZW5jZSh0b19wZWRpdChhY3QpLSZndDtwYXJtcyk7CiYjNDM7CXNpemUgPSBubGFfdG90YWxfc2l6ZShzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCB0Y19wZWRpdCwga2V5cywKJiM0MzsJCQkJCSAgICBwYXJtcy0mZ3Q7dGNmcF9ua2V5cykpOwomIzQzOwlpZiAocGFybXMtJmd0O3RjZnBfa2V5c19leCkgewomIzQzOwkJLyogVENBX1BFRElUX0tFWVNfRVgsIGhvbGRpbmcgb25lIFRDQV9QRURJVF9LRVlfRVggbmVzdCB3aXRoIGEKJiM0MzsJCSAqIEhUWVBFIGFuZCBhIENNRCBhdHRyaWJ1dGUgcGVyIGtleS4KJiM0MzsJCSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCkKJiM0MzsJCQkmIzQzOyBwYXJtcy0mZ3Q7dGNmcF9ua2V5cyAqIChubGFfdG90YWxfc2l6ZSgwKQomIzQzOwkJCQkJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKQomIzQzOwkJCQkJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0gewogCS5raW5kCQk9CSYjMzQ7cGVkaXQmIzM0OywKIAkuaWQJCT0JVENBX0lEX1BFRElULApAQCAtNjM1LDYgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHsKIAkuZHVtcAkJPQl0Y2ZfcGVkaXRfZHVtcCwKIAkuY2xlYW51cAk9CXRjZl9wZWRpdF9jbGVhbnVwLAogCS5pbml0CQk9CXRjZl9wZWRpdF9pbml0LAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLAogCS5vZmZsb2FkX2FjdF9zZXR1cCA9CXRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cCwKIAkuc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHRjZl9wZWRpdCksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggY2UwOGY2ODQwZWY3Yy4uM2Y4MTQ3ZjM3NTQ5MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC00OTAsNiAmIzQzOzQ5MCwxNyBAQCBzdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfcG9saWNlKSkgLyogVENBX1BPTElDRV9UQkYgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1JBVEU2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEtUUkFURTY0ICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RCVVJTVDY0ICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX1BPTElDRV9BVlJBVEUgKi8KJiM0Mzt9CiYjNDM7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7QWxleGV5IEt1em5ldHNvdiYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1BvbGljaW5nIGFjdGlvbnMmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKQEAgLTUwMyw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wb2xpY2Vfb3BzID0gewogCS5kdW1wCQk9CXRjZl9wb2xpY2VfZHVtcCwKIAkuaW5pdAkJPQl0Y2ZfcG9saWNlX2luaXQsCiAJLmNsZWFudXAJPQl0Y2ZfcG9saWNlX2NsZWFudXAsCiYjNDM7CS5nZXRfZmlsbF9zaXplCT0JdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLAogCS5vZmZsb2FkX2FjdF9zZXR1cCA9CXRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfcG9saWNlKSwKIH07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwppbmRleCAyY2ViNGQxNDFiNzEzLi40NDMxOWExNTliNTVkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKQEAgLTMxNSw2ICYjNDM7MzE1LDE0IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19zYW1wbGUpKSAvKiBUQ0FfU0FNUExFX1BBUk1TICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9SQVRFICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9UUlVOQ19TSVpFICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUCAqLwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHsKIAkua2luZAkgID0gJiMzNDtzYW1wbGUmIzM0OywKIAkuaWQJICA9IFRDQV9JRF9TQU1QTEUsCkBAIC0zMjQsNiAmIzQzOzMzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHsKIAkuZHVtcAkgID0gdGNmX3NhbXBsZV9kdW1wLAogCS5pbml0CSAgPSB0Y2Zfc2FtcGxlX2luaXQsCiAJLmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZSwKIAkuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgICAgPSB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwLAogCS5zaXplCSAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYwppbmRleCBiMTQ4MDc3NjFkODI5Li5mZjQwMWFjZTRmM2RhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYwpAQCAtODM1LDYgJiM0Mzs4MzUsODUgQEAgc3RhdGljIGludCB0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90CiYjNDM7dHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7CiYjNDM7CWludCBsZW4gPSBpbmZvLSZndDtvcHRpb25zX2xlbjsKJiM0MzsJc2l6ZV90IHNpemUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAobGVuICZndDsgMCkgewomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IChjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqKXNyYzsKJiM0MzsKJiM0MzsJCS8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfR0VORVZFX3tDTEFTUyxUWVBFLERBVEF9ICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZSgyKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKDEpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUob3B0LSZndDtsZW5ndGggKiA0KTsKJiM0MzsKJiM0MzsJCWxlbiAtPSBzaXplb2Yoc3RydWN0IGdlbmV2ZV9vcHQpICYjNDM7IG9wdC0mZ3Q7bGVuZ3RoICogNDsKJiM0MzsJCXNyYyAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtJmd0O2xlbmd0aCAqIDQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzaXplX3Qgc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDtvcHRpb25zX2xlbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUUyBhbmQgdGhlIHBlci1wcm90b2NvbCBuZXN0IGluc2lkZSBpdCAqLwomIzQzOwlzaXplID0gbmxhX3RvdGFsX3NpemUoMCkgJiM0MzsgbmxhX3RvdGFsX3NpemUoMCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tJmd0O2tleS50dW5fZmxhZ3MpKSB7CiYjNDM7CQlzaXplICYjNDM7PSB0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShpbmZvKTsKJiM0MzsJfSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby0mZ3Q7a2V5LnR1bl9mbGFncykpIHsKJiM0MzsJCS8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfVlhMQU5fR0JQICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CX0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKSkgewomIzQzOwkJLyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9FUlNQQU5fe1ZFUixJTkRFWCxESVIsSFdJRH0gKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNpemVfdCB0dW5uZWxfa2V5X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRjZl90dW5uZWxfa2V5ICp0ID0gdG9fdHVubmVsX2tleShhY3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX3R1bm5lbF9rZXlfcGFyYW1zICpwYXJhbXM7CiYjNDM7CS8qIFRDQV9UVU5ORUxfS0VZX1BBUk1TICovCiYjNDM7CXNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y190dW5uZWxfa2V5KSk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcGFyYW1zID0gcmN1X2RlcmVmZXJlbmNlKHQtJmd0O3BhcmFtcyk7CiYjNDM7CWlmIChwYXJhbXMtJmd0O3RjZnRfYWN0aW9uID09IFRDQV9UVU5ORUxfS0VZX0FDVF9TRVQpIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwYXJhbXMtJmd0O3RjZnRfZW5jX21ldGFkYXRhLSZndDt1LnR1bl9pbmZvOwomIzQzOwomIzQzOwkJLyogSW4gZHVtcCBvcmRlcjogVENBX1RVTk5FTF9LRVlfRU5DX0tFWV9JRCwgdGhlIElQdjYgYWRkcmVzcwomIzQzOwkJICogcGFpciAobGFyZ2VyIHRoYW4gdGhlIElQdjQgb25lKSwgLi4uX0VOQ19EU1RfUE9SVCwKJiM0MzsJCSAqIC4uLl9OT19DU1VNLCAuLi5fTk9fRlJBRywgdGhlIG9wdGlvbnMgYW5kIC4uLl9FTkNfe1RPUyxUVEx9LgomIzQzOwkJICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSkKJiM0MzsJCQkmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZSgwKQomIzQzOwkJCSYjNDM7IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoaW5mbykKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0gewogCS5raW5kCQk9CSYjMzQ7dHVubmVsX2tleSYjMzQ7LAogCS5pZAkJPQlUQ0FfSURfVFVOTkVMX0tFWSwKQEAgLTg0Myw2ICYjNDM7OTIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHsKIAkuZHVtcAkJPQl0dW5uZWxfa2V5X2R1bXAsCiAJLmluaXQJCT0JdHVubmVsX2tleV9pbml0LAogCS5jbGVhbnVwCT0JdHVubmVsX2tleV9yZWxlYXNlLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cCwKIAkuc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHRjZl90dW5uZWxfa2V5KSwKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzc3CgkJCQkJCQlvdXRwdXQ6IDI3NwoJCQkJCQkJdGhvdWdodHM6IDEzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFRyYWZmaWMgQ29udHJvbCBQYXRjaCBTZXJpZXM6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhZGRpbmcgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBmb3IgdmFyaW91cyB0YyBhY3Rpb25zIGluIHRoZSBrZXJuZWwsIHRoaW5ncyBsaWtlIGB0Y2ZfYnBmX2dldF9maWxsX3NpemVgLCBgdGNmX2N0X2dldF9maWxsX3NpemVgLCBhbmQgdGhlIG90aGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGFjY3VyYXRlIHNpemUgZXN0aW1hdGVzIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgZHVtcGVkIHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3MgYWxzbyBhIGNoYW5nZSBpbiBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgdG8gaGFuZGxlIDY0LWJpdCBwYWRkaW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDb3VsZCB0aGlzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcz8mIzM0OyBBZnRlciBhbGwsIGNhbGN1bGF0aW5nIHNpemVzIGFuZCB0aGVuIGFsbG9jYXRpbmcgYSBidWZmZXIgYmFzZWQgb24gdGhvc2Ugc2l6ZXMgKmNvdWxkKiBiZSByaXNreS4gQSBtaXNjYWxjdWxhdGlvbiwgZWl0aGVyIG92ZXJlc3RpbWF0aW5nIG9yIHVuZGVyZXN0aW1hdGluZywgY291bGQgbGVhZCB0byBwcm9ibGVtcy4gQnV0IGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpGaXJzdGx5LCB0aGVzZSBgZ2V0X2ZpbGxfc2l6ZWAgZnVuY3Rpb25zICpyZXR1cm4qIGEgYHNpemVfdGAuIFRoZXkgZG9uJiMzOTt0ICphbGxvY2F0ZSogbWVtb3J5LCBvciBjb3B5IGFueSBkYXRhIHRoZW1zZWx2ZXMuIFRoZXkmIzM5O3JlIGp1c3Qgc2l6ZSBjYWxjdWxhdGlvbnMuIE5ldGxpbmsmIzM5O3MgYG5sYV9wdXRgIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBidWlsZCB0aGUgbWVzc2FnZXMsIGFuZCB0aGV5IGNvcHkgdGhlIGNvcnJlY3QgYW1vdW50IG9mIGRhdGEuIElmIHRoZSBzaXplIGlzIG92ZXJlc3RpbWF0ZWQsIGl0IGp1c3QgbWVhbnMgc29tZSB0YWlscm9vbSBpcyB1bnVzZWQgaW4gdGhlIHNrYiwgd2hpY2ggaXMgZmluZS4gVGhlIGBza2ItJmd0O2xlbmAgaXMgdXBkYXRlZCBieSBgbmxhX3B1dGAsIHNvIGl0IGNvcnJlY3RseSBvbmx5IHNlbmRzIHRoZSBhY3R1YWxseSB3cml0dGVuIGJ5dGVzIHRvIHVzZXJzcGFjZS4gVW5kZXJlc3RpbWF0aW5nIHRoZSBzaXplIHRyaWdnZXJzIGFuIGBFTVNHU0laRWAgZXJyb3Igb3IgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGlmIHRoZSBgbmxhX3B1dGAgaW1wbGVtZW50YXRpb24sIHdoaWNoIGRvZXMgdGhlIGNoZWNrcywgaXMgYnlwYXNzZWQgKGJ1dCB0aGlzIGlzIGFscmVhZHkgY2hlY2tlZCkuCgpUaGVuLCBsb29raW5nIGF0IHRoZSBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgY2hhbmdlLCBpdCYjMzk7cyBzaW1wbHkgZml4aW5nIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciBgc3RydWN0IHRjZl90YCB0byBhY2NvdW50IGZvciB0aGUgZXh0cmEgcGFkZGluZyBpbnRyb2R1Y2VkIGJ5IGBubGFfcHV0XzY0Yml0YC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIGFsbG9jYXRlZCwgbm90aGluZyBtb3JlLgoKVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBpbnRyb2R1Y2VzIHNpemUgY2FsY3VsYXRpb25zLiBJdCBkb2VzbiYjMzk7dCBhZGQgYW55ICpuZXcqIGBubGFfcHV0YCBjYWxscywgbm9yIGRvZXMgaXQgY3JlYXRlIG1lbW9yeSwgdGhlcmVmb3JlIGl0IGNhbm5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhlIHBhdGNoZXMgZG8gKm5vdCogaW50cm9kdWNlIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIHRoZXkgZG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LgoKT2theSwgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzaXplIGNhbGN1bGF0aW9ucyB0aGVtc2VsdmVzIGRvbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0cy4gSSBjaGVja2VkIGVhY2ggYGdldF9maWxsX3NpemVgIGNhbGxiYWNrOgoKKiAgIGB0Y2ZfYnBmX2dldF9maWxsX3NpemVgOiBMb29rcyBnb29kLCByZWFkcyBpbml0aWFsaXplZCBkYXRhLgoqICAgYHRjZl9jdF9nZXRfZmlsbF9zaXplYDogSW5pdGlhbGl6ZWQgZGF0YS4KKiAgIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy4KKiAgIGB0Y2ZfaWZlX2dldF9maWxsX3NpemVgOiBSZWFkcyBpbml0aWFsaXplZCBgcC0mZ3Q7bWV0YWxpc3RgLgoqICAgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYDogUmVhZHMgaW5pdGlhbGl6ZWQgZGF0YS4KKiAgIGB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy4KKiAgIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy4KKiAgIGB0dW5uZWxfa2V5X2dldF9maWxsX3NpemVgOiBSZWFkcyBpbml0aWFsaXplZCBkYXRhLCBsaWtlIGBvcHRpb25zX2xlbmAsIGBsZW5ndGhgLCBgdHVuX2ZsYWdzYC4KCk5vdGhpbmcgaGVyZSBzZWVtcyB0byBpbnRyb2R1Y2Ugcmlza3Mgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgY29yZSBvZiBteSBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIHNlcmllcyBpcyBzb2xlbHkgYWJvdXQgYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgbmV0bGluayBkdW1wcy4gQSBtaXNjYWxjdWxhdGlvbiB3aWxsIGVpdGhlciBiZSBhIGZ1bmN0aW9uYWwgYnVnIChgRU1TR1NJWkVgIGVycm9yKSwgb3IgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGUgc2l6ZSBpcyB1c2VkIGluY29ycmVjdGx5LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGNyZWF0ZSBuZXcgcmlza3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBJJiMzOTttIHByZXR0eSBzdXJlIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkmIzM5O20gc2F0aXNmaWVkLiBOb3csIHRpbWUgdG8gdXNlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcGF5bG9hZCBzaXplIHJlcXVpcmVkIHdoZW4gZHVtcGluZyB0aGVzZSBhY3Rpb25zIHRvIHVzZXJzcGFjZS4gSXQgYWxzbyBmaXhlcyBhIHNpemUgY2FsY3VsYXRpb24gaW4gYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIHRvIGFjY291bnQgZm9yIDY0LWJpdCBwYWRkaW5nLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVx1MDAzZWxlbmAgYXBwcm9wcmlhdGVseSwgc28gb3ZlcmVzdGltYXRpbmcgdGhlIHNpemUgc2ltcGx5IGxlYXZlcyB1bnVzZWQgdGFpbHJvb20gaW4gdGhlIHNvY2tldCBidWZmZXIgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcGF5bG9hZCBzaXplIHJlcXVpcmVkIHdoZW4gZHVtcGluZyB0aGVzZSBhY3Rpb25zIHRvIHVzZXJzcGFjZS4gSXQgYWxzbyBmaXhlcyBhIHNpemUgY2FsY3VsYXRpb24gaW4gYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIHRvIGFjY291bnQgZm9yIDY0LWJpdCBwYWRkaW5nLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVx1MDAzZWxlbmAgYXBwcm9wcmlhdGVseSwgc28gb3ZlcmVzdGltYXRpbmcgdGhlIHNpemUgc2ltcGx5IGxlYXZlcyB1bnVzZWQgdGFpbHJvb20gaW4gdGhlIHNvY2tldCBidWZmZXIgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTU6NTEuNzEwMDY4NjUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTgxODE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORVRfQUNUX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9DVFwiLFxuICAgIFwiTkVUX0FDVF9DVElORk9cIixcbiAgICBcIk5FVF9BQ1RfSUZFXCIsXG4gICAgXCJORVRfQUNUX1BFRElUXCIsXG4gICAgXCJORVRfQUNUX1BPTElDRVwiLFxuICAgIFwiTkVUX0FDVF9TQU1QTEVcIixcbiAgICBcIk5FVF9BQ1RfVFVOTkVMX0tFWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTUFSS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0xBQkVMU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1pPTkVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2FjdGlvbl9pbml0XCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2luaXRfMVwiLFxuICAgIFwidGNmX2FjdGlvbl9kdW1wXCIsXG4gICAgXCJ0Y2ZfZXh0c192YWxpZGF0ZV9leFwiLFxuICAgIFwidGNmX2V4dHNfZHVtcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBmb3IgdmFyaW91cyB0cmFmZmljIGNvbnRyb2wgKHRjKSBhY3Rpb25zIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBwYXlsb2FkIHNpemUgcmVxdWlyZWQgd2hlbiBkdW1waW5nIHRoZXNlIGFjdGlvbnMgdG8gdXNlcnNwYWNlLiBJdCBhbHNvIGZpeGVzIGEgc2l6ZSBjYWxjdWxhdGlvbiBpbiBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgdG8gYWNjb3VudCBmb3IgNjQtYml0IHBhZGRpbmcuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IGludm9sdmUgY2FsY3VsYXRpbmcgc2l6ZXMgKHJldHVybmluZyBgc2l6ZV90YCkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG8gbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgYWRkIGNvbXBsZXggY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGEgc2l6ZSBpcyBtaXNjYWxjdWxhdGVkLCBpdCB3b3VsZCBlaXRoZXIgcmVzdWx0IGluIGFuIGBFTVNHU0laRWAgZXJyb3IgZHVyaW5nIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gb3IgcG90ZW50aWFsbHkgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgdW5kZXJlc3RpbWF0ZWQgYW5kIGJvdW5kcyBjaGVja3MgYXJlIG1pc3NpbmcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTikuIE5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmxhX3B1dGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdoaWNoIHVwZGF0ZSB0aGUgYHNrYi1cXHUwMDNlbGVuYCBhcHByb3ByaWF0ZWx5LCBzbyBvdmVyZXN0aW1hdGluZyB0aGUgc2l6ZSBzaW1wbHkgbGVhdmVzIHVudXNlZCB0YWlscm9vbSBpbiB0aGUgc29ja2V0IGJ1ZmZlciBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCdzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU1OjUxLjcxMDA3NDc2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTY0NzY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMTYgMjA6NTU6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcXG5pbmRleCA2MDBiNzgwNGJlZmQyLi5iNDQxNWQzNThjOTExIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXFxuQEAgLTQ1Miw3ICs0NTIsMTAgQEAgc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4gXFx0XFx0LyogVENBX1NUQVRTX1FVRVVFICovXFxuIFxcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKSlcXG4gXFx0XFx0KyBubGFfdG90YWxfc2l6ZSgwKSAvKiBUQ0FfQUNUX09QVElPTlMgbmVzdGVkICovXFxuLVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOyAvKiBUQ0FfR0FDVF9UTSAqL1xcbitcXHRcXHQvKiBUQ0FfR0FDVF9UTTsgYWN0aW9ucyBkdW1wIHRoZWlyIHRjZl90IHdpdGggbmxhX3B1dF82NGJpdCgpLFxcbitcXHRcXHQgKiB3aGljaCBtYXkgZW1pdCBhbiBleHRyYSBOTEFfUEFEIGF0dHJpYnV0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeilcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBmLmNcXG5pbmRleCAwOWQ0NmUxOTVlMzNiLi4wNmQ4Zjc4YjczNjgzIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfYnBmLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2JwZi5jXFxuQEAgLTM4OSw2ICszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4gXFx0dGNmX2JwZl9jZmdfY2xlYW51cChcXHUwMDI2dG1wKTtcXG4gfVxcbiBcXG4rc3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbit7XFxuK1xcdHN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7XFxuK1xcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19hY3RfYnBmKSk7XFxuK1xcbitcXHQvKiBicGZfb3BzIGFuZCBicGZfbnVtX29wcyBhcmUgcHVibGlzaGVkIGFzIHNlcGFyYXRlIHN0b3JlcyB1bmRlclxcbitcXHQgKiB0Y2ZfbG9jaywgc28gdGFrZSBpdCBoZXJlIGFzIHRjZl9icGZfZHVtcCgpIGRvZXMuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByb2ctXFx1MDAzZXRjZl9sb2NrKTtcXG4rXFx0aWYgKHRjZl9icGZfaXNfZWJwZihwcm9nKSkge1xcbitcXHRcXHQvKiBUQ0FfQUNUX0JQRl9OQU1FICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoQUNUX0JQRl9OQU1FX0xFTiArIDEpO1xcbitcXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX0FDVF9CUEZfSUQgKi9cXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShCUEZfVEFHX1NJWkUpOyAvKiBUQ0FfQUNUX0JQRl9UQUcgKi9cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9BQ1RfQlBGX09QU19MRU4gKi9cXG4rXFx0XFx0LyogVENBX0FDVF9CUEZfT1BTICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUocHJvZy1cXHUwMDNlYnBmX251bV9vcHMgKlxcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwcm9nLVxcdTAwM2V0Y2ZfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdC5raW5kXFx0XFx0PVxcdFxcXCJicGZcXFwiLFxcbiBcXHQuaWRcXHRcXHQ9XFx0VENBX0lEX0JQRixcXG5AQCAtMzk3LDYgKzQyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfYnBmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbiBcXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfYnBmX2R1bXAsXFxuIFxcdC5jbGVhbnVwXFx0PVxcdHRjZl9icGZfY2xlYW51cCxcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dGNmX2JwZl9pbml0LFxcbitcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfYnBmX2dldF9maWxsX3NpemUsXFxuIFxcdC5zaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgdGNmX2JwZiksXFxuIH07XFxuIE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJicGZcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jXFxuaW5kZXggZTI1MDk2OWM4NGFjYS4uMzcwMDg1YWI2ZWE0MSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2N0LmNcXG5AQCAtMTY1Nyw2ICsxNjU3LDUxIEBAIHN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xcbitcXHRzaXplX3Qgc2l6ZTtcXG4rXFxuK1xcdHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0KSkgLyogVENBX0NUX1BBUk1TICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovXFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHAgPSByY3VfZGVyZWZlcmVuY2UodG9fY3QoYWN0KS1cXHUwMDNlcGFyYW1zKTtcXG4rXFxuK1xcdGlmIChwLVxcdTAwM2VjdF9hY3Rpb24gXFx1MDAyNiBUQ0FfQ1RfQUNUX0NMRUFSKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZW1hcmspKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihwLVxcdTAwM2VtYXJrX21hc2spKTtcXG4rXFxuK1xcdC8qIFRDQV9DVF9MQUJFTFMsIFRDQV9DVF9MQUJFTFNfTUFTSyAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZWxhYmVscykpXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZWxhYmVsc19tYXNrKSk7XFxuK1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSlcXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cXHUwMDNlem9uZSkpOyAvKiBUQ0FfQ1RfWk9ORSAqL1xcbitcXG4rXFx0aWYgKHAtXFx1MDAzZWN0X2FjdGlvbiBcXHUwMDI2IFRDQV9DVF9BQ1RfTkFUKVxcbitcXHRcXHQvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzc1xcbitcXHRcXHQgKiB2YXJpYW50cywgcGx1cyBUQ0FfQ1RfTkFUX1BPUlRfe01JTixNQVh9LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2l6ZSArPSAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXFxuK1xcdFxcdFxcdCsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKTtcXG4rXFxuK1xcdC8qIFRDQV9DVF9IRUxQRVJfe05BTUUsRkFNSUxZLFBST1RPfSAqL1xcbitcXHRpZiAocC1cXHUwMDNlaGVscGVyKVxcbitcXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKE5GX0NUX0hFTFBFUl9OQU1FX0xFTilcXG4rXFx0XFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xcbitvdXQ6XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xcbiBcXHQua2luZFxcdFxcdD1cXHRcXFwiY3RcXFwiLFxcbiBcXHQuaWRcXHRcXHQ9XFx0VENBX0lEX0NULFxcbkBAIC0xNjY2LDYgKzE3MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dGNmX2N0X2luaXQsXFxuIFxcdC5jbGVhbnVwXFx0PVxcdHRjZl9jdF9jbGVhbnVwLFxcbiBcXHQuc3RhdHNfdXBkYXRlXFx0PVxcdHRjZl9zdGF0c191cGRhdGUsXFxuK1xcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9jdF9nZXRfZmlsbF9zaXplLFxcbiBcXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xcbmluZGV4IDE4ODZmZmQyY2E5NTYuLmZjZWQ0YjEwOTRhZjggMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcXG5AQCAtMzU2LDYgKzM1NiwxNiBAQCBzdGF0aWMgdm9pZCB0Y2ZfY3RpbmZvX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG4gXFx0XFx0a2ZyZWVfcmN1KGNwLCByY3UpO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuK3tcXG4rXFx0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfY3RpbmZvKSkgLyogVENBX0NUSU5GT19BQ1QgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkgLyogVENBX0NUSU5GT19aT05FICovXFxuK1xcdFxcdC8qIFRDQV9DVElORk9fUEFSTVNfe0RTQ1BfTUFTSyxEU0NQX1NUQVRFTUFTSyxDUE1BUktfTUFTS30gKi9cXG4rXFx0XFx0KyAzICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpXFxuK1xcdFxcdC8qIFRDQV9DVElORk9fU1RBVFNfe0RTQ1BfU0VULERTQ1BfRVJST1IsQ1BNQVJLX1NFVH0gKi9cXG4rXFx0XFx0KyAzICogbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7XFxuIFxcdC5raW5kXFx0PSBcXFwiY3RpbmZvXFxcIixcXG4gXFx0LmlkXFx0PSBUQ0FfSURfQ1RJTkZPLFxcbkBAIC0zNjQsNiArMzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xcbiBcXHQuZHVtcFxcdD0gdGNmX2N0aW5mb19kdW1wLFxcbiBcXHQuaW5pdFxcdD0gdGNmX2N0aW5mb19pbml0LFxcbiBcXHQuY2xlYW51cD0gdGNmX2N0aW5mb19jbGVhbnVwLFxcbitcXHQuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZSxcXG4gXFx0LnNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXFxuIH07XFxuIE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJjdGluZm9cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcXG5pbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXFxuQEAgLTg3OCw2ICs4NzgsMjggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4re1xcbitcXHRzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYWN0KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHRjZl9pZmVfcGFyYW1zICpwO1xcbitcXHRzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTtcXG4rXFx0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2lmZSkpIC8qIFRDQV9JRkVfUEFSTVMgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShFVEhfQUxFTikgLyogVENBX0lGRV9ETUFDICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplKDIpIC8qIFRDQV9JRkVfVFlQRSAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplKDApOyAvKiBUQ0FfSUZFX01FVEFMU1QgKi9cXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cCA9IHJjdV9kZXJlZmVyZW5jZShpZmUtXFx1MDAzZXBhcmFtcyk7XFxuK1xcdGlmIChwKSB7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFxcdTAwMjZwLVxcdTAwM2VtZXRhbGlzdCwgbWV0YWxpc3QpXFxuK1xcdFxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG4gXFx0LmtpbmQgPSBcXFwiaWZlXFxcIixcXG4gXFx0LmlkID0gVENBX0lEX0lGRSxcXG5AQCAtODg2LDYgKzkwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG4gXFx0LmR1bXAgPSB0Y2ZfaWZlX2R1bXAsXFxuIFxcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxcbiBcXHQuaW5pdCA9IHRjZl9pZmVfaW5pdCxcXG4rXFx0LmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsXFxuIFxcdC5zaXplID1cXHRzaXplb2Yoc3RydWN0IHRjZl9pZmVfaW5mbyksXFxuIH07XFxuIE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJpZmVcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXFxuaW5kZXggZDRkNDdhOTkyMWY0NS4uOTlkN2UzNjUxMGJkMCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcXG5AQCAtNjI2LDYgKzYyNiwyOSBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtcztcXG4rXFx0c2l6ZV90IHNpemU7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHBhcm1zID0gcmN1X2RlcmVmZXJlbmNlKHRvX3BlZGl0KGFjdCktXFx1MDAzZXBhcm1zKTtcXG4rXFx0c2l6ZSA9IG5sYV90b3RhbF9zaXplKHN0cnVjdF9zaXplX3Qoc3RydWN0IHRjX3BlZGl0LCBrZXlzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGFybXMtXFx1MDAzZXRjZnBfbmtleXMpKTtcXG4rXFx0aWYgKHBhcm1zLVxcdTAwM2V0Y2ZwX2tleXNfZXgpIHtcXG4rXFx0XFx0LyogVENBX1BFRElUX0tFWVNfRVgsIGhvbGRpbmcgb25lIFRDQV9QRURJVF9LRVlfRVggbmVzdCB3aXRoIGFcXG4rXFx0XFx0ICogSFRZUEUgYW5kIGEgQ01EIGF0dHJpYnV0ZSBwZXIga2V5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZSgwKVxcbitcXHRcXHRcXHQrIHBhcm1zLVxcdTAwM2V0Y2ZwX25rZXlzICogKG5sYV90b3RhbF9zaXplKDApXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKVxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xcbiBcXHQua2luZFxcdFxcdD1cXHRcXFwicGVkaXRcXFwiLFxcbiBcXHQuaWRcXHRcXHQ9XFx0VENBX0lEX1BFRElULFxcbkBAIC02MzUsNiArNjU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wZWRpdF9vcHMgPSB7XFxuIFxcdC5kdW1wXFx0XFx0PVxcdHRjZl9wZWRpdF9kdW1wLFxcbiBcXHQuY2xlYW51cFxcdD1cXHR0Y2ZfcGVkaXRfY2xlYW51cCxcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dGNmX3BlZGl0X2luaXQsXFxuK1xcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLFxcbiBcXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuY1xcbmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcXG5AQCAtNDkwLDYgKzQ5MCwxNyBAQCBzdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbit7XFxuK1xcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3BvbGljZSkpIC8qIFRDQV9QT0xJQ0VfVEJGICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUkFURTY0ICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVFJBVEU2NCAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVEJVUlNUNjQgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9QT0xJQ0VfQVZSQVRFICovXFxuK31cXG4rXFxuIE1PRFVMRV9BVVRIT1IoXFxcIkFsZXhleSBLdXpuZXRzb3ZcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQb2xpY2luZyBhY3Rpb25zXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5AQCAtNTAzLDYgKzUxNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHtcXG4gXFx0LmR1bXBcXHRcXHQ9XFx0dGNmX3BvbGljZV9kdW1wLFxcbiBcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfcG9saWNlX2luaXQsXFxuIFxcdC5jbGVhbnVwXFx0PVxcdHRjZl9wb2xpY2VfY2xlYW51cCxcXG4rXFx0LmdldF9maWxsX3NpemVcXHQ9XFx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxcbiBcXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuIFxcdC5zaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgdGNmX3BvbGljZSksXFxuIH07XFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuaW5kZXggMmNlYjRkMTQxYjcxMy4uNDQzMTlhMTU5YjU1ZCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xcbkBAIC0zMTUsNiArMzE1LDE0IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuK3tcXG4rXFx0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAvKiBUQ0FfU0FNUExFX1JBVEUgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9UUlVOQ19TSVpFICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi9cXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xcbiBcXHQua2luZFxcdCAgPSBcXFwic2FtcGxlXFxcIixcXG4gXFx0LmlkXFx0ICA9IFRDQV9JRF9TQU1QTEUsXFxuQEAgLTMyNCw2ICszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XFxuIFxcdC5kdW1wXFx0ICA9IHRjZl9zYW1wbGVfZHVtcCxcXG4gXFx0LmluaXRcXHQgID0gdGNmX3NhbXBsZV9pbml0LFxcbiBcXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxuK1xcdC5nZXRfZmlsbF9zaXplID0gdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplLFxcbiBcXHQuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCxcXG4gXFx0Lm9mZmxvYWRfYWN0X3NldHVwICAgID0gdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHQgID0gc2l6ZW9mKHN0cnVjdCB0Y2Zfc2FtcGxlKSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xcbmluZGV4IGIxNDgwNzc2MWQ4MjkuLmZmNDAxYWNlNGYzZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xcbkBAIC04MzUsNiArODM1LDg1IEBAIHN0YXRpYyBpbnQgdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHNpemVfdFxcbit0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxuK1xcdGludCBsZW4gPSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbjtcXG4rXFx0c2l6ZV90IHNpemUgPSAwO1xcbitcXG4rXFx0d2hpbGUgKGxlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IChjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqKXNyYztcXG4rXFxuK1xcdFxcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfR0VORVZFX3tDTEFTUyxUWVBFLERBVEF9ICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoMilcXG4rXFx0XFx0XFx0KyBubGFfdG90YWxfc2l6ZSgxKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKG9wdC1cXHUwMDNlbGVuZ3RoICogNCk7XFxuK1xcbitcXHRcXHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIG9wdC1cXHUwMDNlbGVuZ3RoICogNDtcXG4rXFx0XFx0c3JjICs9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgKyBvcHQtXFx1MDAzZWxlbmd0aCAqIDQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbit7XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VvcHRpb25zX2xlbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUUyBhbmQgdGhlIHBlci1wcm90b2NvbCBuZXN0IGluc2lkZSBpdCAqL1xcbitcXHRzaXplID0gbmxhX3RvdGFsX3NpemUoMCkgKyBubGFfdG90YWxfc2l6ZSgwKTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxuK1xcdFxcdHNpemUgKz0gdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoaW5mbyk7XFxuK1xcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxuK1xcdFxcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfVlhMQU5fR0JQICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbitcXHR9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncykpIHtcXG4rXFx0XFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9FUlNQQU5fe1ZFUixJTkRFWCxESVIsSFdJRH0gKi9cXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuK3tcXG4rXFx0c3RydWN0IHRjZl90dW5uZWxfa2V5ICp0ID0gdG9fdHVubmVsX2tleShhY3QpO1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNmX3R1bm5lbF9rZXlfcGFyYW1zICpwYXJhbXM7XFxuK1xcdC8qIFRDQV9UVU5ORUxfS0VZX1BBUk1TICovXFxuK1xcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y190dW5uZWxfa2V5KSk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LVxcdTAwM2VwYXJhbXMpO1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2V0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9XFxuK1xcdFxcdFxcdFxcdTAwMjZwYXJhbXMtXFx1MDAzZXRjZnRfZW5jX21ldGFkYXRhLVxcdTAwM2V1LnR1bl9pbmZvO1xcbitcXG4rXFx0XFx0LyogSW4gZHVtcCBvcmRlcjogVENBX1RVTk5FTF9LRVlfRU5DX0tFWV9JRCwgdGhlIElQdjYgYWRkcmVzc1xcbitcXHRcXHQgKiBwYWlyIChsYXJnZXIgdGhhbiB0aGUgSVB2NCBvbmUpLCAuLi5fRU5DX0RTVF9QT1JULFxcbitcXHRcXHQgKiAuLi5fTk9fQ1NVTSwgLi4uX05PX0ZSQUcsIHRoZSBvcHRpb25zIGFuZCAuLi5fRU5DX3tUT1MsVFRMfS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpXFxuK1xcdFxcdFxcdCsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoMClcXG4rXFx0XFx0XFx0KyB0dW5uZWxfa2V5X29wdHNfZmlsbF9zaXplKGluZm8pXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcXG4rXFx0XFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0ge1xcbiBcXHQua2luZFxcdFxcdD1cXHRcXFwidHVubmVsX2tleVxcXCIsXFxuIFxcdC5pZFxcdFxcdD1cXHRUQ0FfSURfVFVOTkVMX0tFWSxcXG5AQCAtODQzLDYgKzkyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XFxuIFxcdC5kdW1wXFx0XFx0PVxcdHR1bm5lbF9rZXlfZHVtcCxcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dHVubmVsX2tleV9pbml0LFxcbiBcXHQuY2xlYW51cFxcdD1cXHR0dW5uZWxfa2V5X3JlbGVhc2UsXFxuK1xcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZSxcXG4gXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksXFxuIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU1OjUzLjA4MDUzNzIxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMDYxMTE5NTU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9BQ1RfQ1RJTkZPXCIsXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0FDVF9QRURJVFwiLFxuICAgIFwiTkVUX0FDVF9QT0xJQ0VcIixcbiAgICBcIk5FVF9BQ1RfU0FNUExFXCIsXG4gICAgXCJORVRfQUNUX1RVTk5FTF9LRVlcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX01BUktcIixcbiAgICBcIk5GX0NPTk5UUkFDS19MQUJFTFNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19aT05FU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9hY3Rpb25faW5pdFwiLFxuICAgIFwidGNmX2FjdGlvbl9pbml0XzFcIixcbiAgICBcInRjZl9hY3Rpb25fZHVtcFwiLFxuICAgIFwidGNmX2V4dHNfdmFsaWRhdGVfZXhcIixcbiAgICBcInRjZl9leHRzX2R1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgdG8gdmFyaW91cyBUQyBhY3Rpb25zIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgbmVlZGVkIHRvIGR1bXAgdGhlIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIEl0J3Mgd29ydGggZnV6emluZyBiZWNhdXNlIGluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBjYW4gbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgYEVNU0dTSVpFYCBlcnJvcnMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDQzMzFiNjZkOWYzOWVlYjJjNTg3ZGNiNTlkMWQxZjNjOTBhM2QzMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDIwOjU1OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcbmluZGV4IDYwMGI3ODA0YmVmZDIuLmI0NDE1ZDM1OGM5MTEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5AQCAtNDUyLDcgKzQ1MiwxMCBAQCBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuIFx0XHQvKiBUQ0FfU1RBVFNfUVVFVUUgKi9cbiBcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IGduZXRfc3RhdHNfcXVldWUpKVxuIFx0XHQrIG5sYV90b3RhbF9zaXplKDApIC8qIFRDQV9BQ1RfT1BUSU9OUyBuZXN0ZWQgKi9cbi1cdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjZl90KSk7IC8qIFRDQV9HQUNUX1RNICovXG4rXHRcdC8qIFRDQV9HQUNUX1RNOyBhY3Rpb25zIGR1bXAgdGhlaXIgdGNmX3Qgd2l0aCBubGFfcHV0XzY0Yml0KCksXG4rXHRcdCAqIHdoaWNoIG1heSBlbWl0IGFuIGV4dHJhIE5MQV9QQUQgYXR0cmlidXRlLlxuK1x0XHQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IHRjZl90KSk7XG4gfVxuIFxuIHN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9mdWxsX2F0dHJzX3NpemUoc2l6ZV90IHN6KVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYnBmLmMgYi9uZXQvc2NoZWQvYWN0X2JwZi5jXG5pbmRleCAwOWQ0NmUxOTVlMzNiLi4wNmQ4Zjc4YjczNjgzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9icGYuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9icGYuY1xuQEAgLTM4OSw2ICszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiBcdHRjZl9icGZfY2ZnX2NsZWFudXAoXHUwMDI2dG1wKTtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuK3tcbitcdHN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7XG4rXHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfYWN0X2JwZikpO1xuK1xuK1x0LyogYnBmX29wcyBhbmQgYnBmX251bV9vcHMgYXJlIHB1Ymxpc2hlZCBhcyBzZXBhcmF0ZSBzdG9yZXMgdW5kZXJcbitcdCAqIHRjZl9sb2NrLCBzbyB0YWtlIGl0IGhlcmUgYXMgdGNmX2JwZl9kdW1wKCkgZG9lcy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuK1x0aWYgKHRjZl9icGZfaXNfZWJwZihwcm9nKSkge1xuK1x0XHQvKiBUQ0FfQUNUX0JQRl9OQU1FICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoQUNUX0JQRl9OQU1FX0xFTiArIDEpO1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX0FDVF9CUEZfSUQgKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShCUEZfVEFHX1NJWkUpOyAvKiBUQ0FfQUNUX0JQRl9UQUcgKi9cbitcdH0gZWxzZSB7XG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQUNUX0JQRl9PUFNfTEVOICovXG4rXHRcdC8qIFRDQV9BQ1RfQlBGX09QUyAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHByb2ctXHUwMDNlYnBmX251bV9vcHMgKlxuK1x0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfYnBmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0LmtpbmRcdFx0PVx0XCJicGZcIixcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfQlBGLFxuQEAgLTM5Nyw2ICs0MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5kdW1wXHRcdD1cdHRjZl9icGZfZHVtcCxcbiBcdC5jbGVhbnVwXHQ9XHR0Y2ZfYnBmX2NsZWFudXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfYnBmX2luaXQsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2JwZl9nZXRfZmlsbF9zaXplLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfYnBmKSxcbiB9O1xuIE1PRFVMRV9BTElBU19ORVRfQUNUKFwiYnBmXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuaW5kZXggZTI1MDk2OWM4NGFjYS4uMzcwMDg1YWI2ZWE0MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMTY1Nyw2ICsxNjU3LDUxIEBAIHN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDtcbitcdHNpemVfdCBzaXplO1xuK1xuK1x0c2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfY3QpKSAvKiBUQ0FfQ1RfUEFSTVMgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9DVF9BQ1RJT04gKi9cbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHAgPSByY3VfZGVyZWZlcmVuY2UodG9fY3QoYWN0KS1cdTAwM2VwYXJhbXMpO1xuK1xuK1x0aWYgKHAtXHUwMDNlY3RfYWN0aW9uIFx1MDAyNiBUQ0FfQ1RfQUNUX0NMRUFSKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspKVxuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZW1hcmspKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbWFya19tYXNrKSk7XG4rXG4rXHQvKiBUQ0FfQ1RfTEFCRUxTLCBUQ0FfQ1RfTEFCRUxTX01BU0sgKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSlcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2VsYWJlbHMpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzX21hc2spKTtcbitcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpKVxuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZXpvbmUpKTsgLyogVENBX0NUX1pPTkUgKi9cbitcbitcdGlmIChwLVx1MDAzZWN0X2FjdGlvbiBcdTAwMjYgVENBX0NUX0FDVF9OQVQpXG4rXHRcdC8qIFRDQV9DVF9OQVRfSVBWNl97TUlOLE1BWH0sIHRoZSBsYXJnZXIgb2YgdGhlIHR3byBhZGRyZXNzXG4rXHRcdCAqIHZhcmlhbnRzLCBwbHVzIFRDQV9DVF9OQVRfUE9SVF97TUlOLE1BWH0uXG4rXHRcdCAqL1xuK1x0XHRzaXplICs9IDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGluNl9hZGRyKSlcbitcdFx0XHQrIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSk7XG4rXG4rXHQvKiBUQ0FfQ1RfSEVMUEVSX3tOQU1FLEZBTUlMWSxQUk9UT30gKi9cbitcdGlmIChwLVx1MDAzZWhlbHBlcilcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShORl9DVF9IRUxQRVJfTkFNRV9MRU4pXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XG4rb3V0OlxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7XG4gXHQua2luZFx0XHQ9XHRcImN0XCIsXG4gXHQuaWRcdFx0PVx0VENBX0lEX0NULFxuQEAgLTE2NjYsNiArMTcxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuIFx0LmluaXRcdFx0PVx0dGNmX2N0X2luaXQsXG4gXHQuY2xlYW51cFx0PVx0dGNmX2N0X2NsZWFudXAsXG4gXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfc3RhdHNfdXBkYXRlLFxuK1x0LmdldF9maWxsX3NpemVcdD1cdHRjZl9jdF9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cCxcbiBcdC5zaXplXHRcdD1cdHNpemVvZihzdHJ1Y3QgdGNmX2N0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jXG5pbmRleCAxODg2ZmZkMmNhOTU2Li5mY2VkNGIxMDk0YWY4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xuQEAgLTM1Niw2ICszNTYsMTYgQEAgc3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4gXHRcdGtmcmVlX3JjdShjcCwgcmN1KTtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuK3tcbitcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0aW5mbykpIC8qIFRDQV9DVElORk9fQUNUICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpIC8qIFRDQV9DVElORk9fWk9ORSAqL1xuK1x0XHQvKiBUQ0FfQ1RJTkZPX1BBUk1TX3tEU0NQX01BU0ssRFNDUF9TVEFURU1BU0ssQ1BNQVJLX01BU0t9ICovXG4rXHRcdCsgMyAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKVxuK1x0XHQvKiBUQ0FfQ1RJTkZPX1NUQVRTX3tEU0NQX1NFVCxEU0NQX0VSUk9SLENQTUFSS19TRVR9ICovXG4rXHRcdCsgMyAqIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuIFx0LmtpbmRcdD0gXCJjdGluZm9cIixcbiBcdC5pZFx0PSBUQ0FfSURfQ1RJTkZPLFxuQEAgLTM2NCw2ICszNzQsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7XG4gXHQuZHVtcFx0PSB0Y2ZfY3RpbmZvX2R1bXAsXG4gXHQuaW5pdFx0PSB0Y2ZfY3RpbmZvX2luaXQsXG4gXHQuY2xlYW51cD0gdGNmX2N0aW5mb19jbGVhbnVwLFxuK1x0LmdldF9maWxsX3NpemUgPSB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUsXG4gXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHRjZl9jdGluZm8pLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCJjdGluZm9cIik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IDA2NTIyODAyNmM1OGUuLmZmMmIxNmUzNWI5YjAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtODc4LDYgKzg3OCwyOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYWN0KTtcbitcdGNvbnN0IHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbitcdHN0cnVjdCB0Y2ZfbWV0YV9pbmZvICplO1xuK1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2lmZSkpIC8qIFRDQV9JRkVfUEFSTVMgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShFVEhfQUxFTikgLyogVENBX0lGRV9ETUFDICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKDIpIC8qIFRDQV9JRkVfVFlQRSAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKDApOyAvKiBUQ0FfSUZFX01FVEFMU1QgKi9cbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHAgPSByY3VfZGVyZWZlcmVuY2UoaWZlLVx1MDAzZXBhcmFtcyk7XG4rXHRpZiAocCkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcdTAwMjZwLVx1MDAzZW1ldGFsaXN0LCBtZXRhbGlzdClcbitcdFx0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcbiBcdC5raW5kID0gXCJpZmVcIixcbiBcdC5pZCA9IFRDQV9JRF9JRkUsXG5AQCAtODg2LDYgKzkwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcbiBcdC5kdW1wID0gdGNmX2lmZV9kdW1wLFxuIFx0LmNsZWFudXAgPSB0Y2ZfaWZlX2NsZWFudXAsXG4gXHQuaW5pdCA9IHRjZl9pZmVfaW5pdCxcbitcdC5nZXRfZmlsbF9zaXplID0gdGNmX2lmZV9nZXRfZmlsbF9zaXplLFxuIFx0LnNpemUgPVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfaWZlX2luZm8pLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCJpZmVcIik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXG5pbmRleCBkNGQ0N2E5OTIxZjQ1Li45OWQ3ZTM2NTEwYmQwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcbkBAIC02MjYsNiArNjI2LDI5IEBAIHN0YXRpYyBpbnQgdGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtcztcbitcdHNpemVfdCBzaXplO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cGFybXMgPSByY3VfZGVyZWZlcmVuY2UodG9fcGVkaXQoYWN0KS1cdTAwM2VwYXJtcyk7XG4rXHRzaXplID0gbmxhX3RvdGFsX3NpemUoc3RydWN0X3NpemVfdChzdHJ1Y3QgdGNfcGVkaXQsIGtleXMsXG4rXHRcdFx0XHRcdCAgICBwYXJtcy1cdTAwM2V0Y2ZwX25rZXlzKSk7XG4rXHRpZiAocGFybXMtXHUwMDNldGNmcF9rZXlzX2V4KSB7XG4rXHRcdC8qIFRDQV9QRURJVF9LRVlTX0VYLCBob2xkaW5nIG9uZSBUQ0FfUEVESVRfS0VZX0VYIG5lc3Qgd2l0aCBhXG4rXHRcdCAqIEhUWVBFIGFuZCBhIENNRCBhdHRyaWJ1dGUgcGVyIGtleS5cbitcdFx0ICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoMClcbitcdFx0XHQrIHBhcm1zLVx1MDAzZXRjZnBfbmtleXMgKiAobmxhX3RvdGFsX3NpemUoMClcbitcdFx0XHRcdFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpXG4rXHRcdFx0XHRcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwicGVkaXRcIixcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfUEVESVQsXG5AQCAtNjM1LDYgKzY1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dGNmX3BlZGl0X2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX3BlZGl0X2NsZWFudXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfcGVkaXRfaW5pdCxcbitcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9wZWRpdCksXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuY1xuaW5kZXggY2UwOGY2ODQwZWY3Yy4uM2Y4MTQ3ZjM3NTQ5MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbkBAIC00OTAsNiArNDkwLDE3IEBAIHN0YXRpYyBpbnQgdGNmX3BvbGljZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuK3tcbitcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3BvbGljZSkpIC8qIFRDQV9QT0xJQ0VfVEJGICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUkFURTY0ICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVFJBVEU2NCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVEJVUlNUNjQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9QT0xJQ0VfQVZSQVRFICovXG4rfVxuK1xuIE1PRFVMRV9BVVRIT1IoXCJBbGV4ZXkgS3V6bmV0c292XCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlBvbGljaW5nIGFjdGlvbnNcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5AQCAtNTAzLDYgKzUxNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHtcbiBcdC5kdW1wXHRcdD1cdHRjZl9wb2xpY2VfZHVtcCxcbiBcdC5pbml0XHRcdD1cdHRjZl9wb2xpY2VfaW5pdCxcbiBcdC5jbGVhbnVwXHQ9XHR0Y2ZfcG9saWNlX2NsZWFudXAsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9wb2xpY2UpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjQ0MzE5YTE1OWI1NWQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMzE1LDYgKzMxNSwxNCBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19zYW1wbGUpKSAvKiBUQ0FfU0FNUExFX1BBUk1TICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfUkFURSAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAvKiBUQ0FfU0FNUExFX1RSVU5DX1NJWkUgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUCAqL1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQua2luZFx0ICA9IFwic2FtcGxlXCIsXG4gXHQuaWRcdCAgPSBUQ0FfSURfU0FNUExFLFxuQEAgLTMyNCw2ICszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQuZHVtcFx0ICA9IHRjZl9zYW1wbGVfZHVtcCxcbiBcdC5pbml0XHQgID0gdGNmX3NhbXBsZV9pbml0LFxuIFx0LmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLFxuK1x0LmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsXG4gXHQuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCAgICA9IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0ICA9IHNpemVvZihzdHJ1Y3QgdGNmX3NhbXBsZSksXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuaW5kZXggYjE0ODA3NzYxZDgyOS4uZmY0MDFhY2U0ZjNkYSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuQEAgLTgzNSw2ICs4MzUsODUgQEAgc3RhdGljIGludCB0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdFxuK3R1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbit7XG4rXHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbitcdGludCBsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xuK1x0c2l6ZV90IHNpemUgPSAwO1xuK1xuK1x0d2hpbGUgKGxlbiBcdTAwM2UgMCkge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gKGNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICopc3JjO1xuK1xuK1x0XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX0dFTkVWRV97Q0xBU1MsVFlQRSxEQVRBfSAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKDIpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZSgxKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUob3B0LVx1MDAzZWxlbmd0aCAqIDQpO1xuK1xuK1x0XHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIG9wdC1cdTAwM2VsZW5ndGggKiA0O1xuK1x0XHRzcmMgKz0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIG9wdC1cdTAwM2VsZW5ndGggKiA0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuK3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4re1xuK1x0c2l6ZV90IHNpemU7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlb3B0aW9uc19sZW4pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVFMgYW5kIHRoZSBwZXItcHJvdG9jb2wgbmVzdCBpbnNpZGUgaXQgKi9cbitcdHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKSArIG5sYV90b3RhbF9zaXplKDApO1xuK1xuK1x0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuK1x0XHRzaXplICs9IHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGluZm8pO1xuK1x0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuK1x0XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUCAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XG4rXHRcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfRVJTUEFOX3tWRVIsSU5ERVgsRElSLEhXSUR9ICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuK3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRzdHJ1Y3QgdGNmX3R1bm5lbF9rZXkgKnQgPSB0b190dW5uZWxfa2V5KGFjdCk7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX3R1bm5lbF9rZXlfcGFyYW1zICpwYXJhbXM7XG4rXHQvKiBUQ0FfVFVOTkVMX0tFWV9QQVJNUyAqL1xuK1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3R1bm5lbF9rZXkpKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZXBhcmFtcyk7XG4rXHRpZiAocGFyYW1zLVx1MDAzZXRjZnRfYWN0aW9uID09IFRDQV9UVU5ORUxfS0VZX0FDVF9TRVQpIHtcbitcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwYXJhbXMtXHUwMDNldGNmdF9lbmNfbWV0YWRhdGEtXHUwMDNldS50dW5faW5mbztcbitcbitcdFx0LyogSW4gZHVtcCBvcmRlcjogVENBX1RVTk5FTF9LRVlfRU5DX0tFWV9JRCwgdGhlIElQdjYgYWRkcmVzc1xuK1x0XHQgKiBwYWlyIChsYXJnZXIgdGhhbiB0aGUgSVB2NCBvbmUpLCAuLi5fRU5DX0RTVF9QT1JULFxuK1x0XHQgKiAuLi5fTk9fQ1NVTSwgLi4uX05PX0ZSQUcsIHRoZSBvcHRpb25zIGFuZCAuLi5fRU5DX3tUT1MsVFRMfS5cbitcdFx0ICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpXG4rXHRcdFx0KyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZSgwKVxuK1x0XHRcdCsgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShpbmZvKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwidHVubmVsX2tleVwiLFxuIFx0LmlkXHRcdD1cdFRDQV9JRF9UVU5ORUxfS0VZLFxuQEAgLTg0Myw2ICs5MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dHVubmVsX2tleV9kdW1wLFxuIFx0LmluaXRcdFx0PVx0dHVubmVsX2tleV9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHR1bm5lbF9rZXlfcmVsZWFzZSxcbitcdC5nZXRfZmlsbF9zaXplXHQ9XHR0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl90dW5uZWxfa2V5KSxcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTU6NTMuMDgwNTM4NTg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NzUwODU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgRHVtcCBTaXplIENhbGN1bGF0aW9uIGZvciBUQyBBY3Rpb25zKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGFjcm9zcyBhIGJ1bmNoIG9mIFRyYWZmaWMgQ29udHJvbCAoVEMpIGFjdGlvbnM6IGBhY3RfYnBmYCwgYGFjdF9jdGAsIGBhY3RfY3RpbmZvYCwgYGFjdF9pZmVgLCBgYWN0X3BlZGl0YCwgYGFjdF9wb2xpY2VgLCBgYWN0X3NhbXBsZWAsIGFuZCBgYWN0X3R1bm5lbF9rZXlgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHNvbWV0aGluZyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBuZXRsaW5rIGR1bXAgc2l6ZSBjYWxjdWxhdGlvbnMgZm9yIHRoZXNlIGFjdGlvbnMuIFRoZSBjb3JlIGlkZWEgaXMgdG8gbW92ZSBhd2F5IGZyb20gcG90ZW50aWFsbHkgd2FzdGVmdWwgZml4ZWQtc2l6ZSBhbGxvY2F0aW9ucyBhbmQgaW5zdGVhZCBkZXRlcm1pbmUgdGhlICpleGFjdCogc2l6ZSBuZWVkZWQgZm9yIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBkdW1waW5nIHRoZSBhY3Rpb24uIFRoaXMgc2hvdWxkIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFRDIGFjdGlvbnMgb3IgY29tcGxleCBjb25maWd1cmF0aW9ucy5cblxuSSBzZWUgdGhhdCBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgIGlzIGFsc28gYmVpbmcgdHdlYWtlZC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgYXJlYSwgc28gSSdsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBob3cgaXQncyBiZWluZyBtb2RpZmllZCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgbmV3IGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MuIEknbGwgbmVlZCB0byBnbyB0byBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbi4gQXZvaWRpbmcgYE5MTVNHX0dPT0RTSVpFYCBvciBvdGhlciBnZW5lcmljIGFsbG9jYXRpb25zIGluIGZhdm9yIG9mIGEgcHJlY2lzZSBjYWxjdWxhdGlvbiBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBhcHByb2FjaC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzgwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTU6NTcuMjM4MDUwMDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjE1ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9maWxsX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTQ2OT1zdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNDcyLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDczOlxcdGlmIChhY3QtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X2ZpbGxfc2l6ZSlcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjQ3NDpcXHRcXHRyZXR1cm4gYWN0LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9maWxsX3NpemUoYWN0KSArIHN6O1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNDc1LVxcdHJldHVybiBzejtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYnBmLmM9Mzg0PXN0YXRpYyB2b2lkIHRjZl9icGZfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2JwZi5jLTM5MS1cXG5uZXQvc2NoZWQvYWN0X2JwZi5jOjM5MjpzdGF0aWMgc2l6ZV90IHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9icGYuYy0zOTMte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9icGYuYz00MTc9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2JwZi5jLTQyNC1cXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfYnBmX2luaXQsXFxubmV0L3NjaGVkL2FjdF9icGYuYzo0MjU6XFx0LmdldF9maWxsX3NpemVcXHQ9XFx0dGNmX2JwZl9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3RfYnBmLmMtNDI2LVxcdC5zaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgdGNmX2JwZiksXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2NzdW0uYz02NzQ9c3RhdGljIHZvaWQgdGNmX2NzdW1fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jc3VtLmMtNjgzLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jOjY4NDpzdGF0aWMgc2l6ZV90IHRjZl9jc3VtX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTY4NS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2NzdW0uYz03MDg9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jc3VtX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTcxNS1cXHQuY2xlYW51cFxcdD0gdGNmX2NzdW1fY2xlYW51cCxcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo3MTY6XFx0LmdldF9maWxsX3NpemUgID0gdGNmX2NzdW1fZ2V0X2ZpbGxfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy03MTctXFx0Lm9mZmxvYWRfYWN0X3NldHVwID0gdGNmX2NzdW1fb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTYzNj1zdGF0aWMgaW50IHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY1OS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY2MDpzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2MS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTcwNT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzEzLVxcdC5zdGF0c191cGRhdGVcXHQ9XFx0dGNmX3N0YXRzX3VwZGF0ZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxNDpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxNS1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9MzQ5PXN0YXRpYyB2b2lkIHRjZl9jdGluZm9fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNTgtXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozNTk6c3RhdGljIHNpemVfdCB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzYwLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9MzY5PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzc2LVxcdC5jbGVhbnVwPSB0Y2ZfY3RpbmZvX2NsZWFudXAsXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozNzc6XFx0LmdldF9maWxsX3NpemUgPSB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNzgtXFx0LnNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYz0xOTA9c3RhdGljIGludCB0Y2ZfZ2FjdF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0yMzAtXFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MjMxOnN0YXRpYyBzaXplX3QgdGNmX2dhY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjMyLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jPTI5Mj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhY3Rfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjk5LVxcdC5pbml0XFx0XFx0PVxcdHRjZl9nYWN0X2luaXQsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MzAwOlxcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9nYWN0X2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMzAxLVxcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XFx0dGNmX2dhY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz02NzI9c3RhdGljIHZvaWQgdGNmX2dhdGVfc3RhdHNfdXBkYXRlKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHU2NCBieXRlcywgdTY0IHBhY2tldHMsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02ODEtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NjgyOnN0YXRpYyBzaXplX3QgdGNmX2dhdGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjgzLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTczNj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ0LVxcdC5zdGF0c191cGRhdGVcXHQ9XFx0dGNmX2dhdGVfc3RhdHNfdXBkYXRlLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0NTpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfZ2F0ZV9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0Ni1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9nYXRlX29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz04NjQ9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg4MC1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg4MTpzdGF0aWMgc2l6ZV90IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9pZmUuYy04ODIte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz05MDM9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTAtXFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXFxubmV0L3NjaGVkL2FjdF9pZmUuYzo5MTE6XFx0LmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTItXFx0LnNpemUgPVxcdHNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM9NTkxPXRjZl9taXJyZWRfZ2V0X2Rldihjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy02MDctXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYzo2MDg6c3RhdGljIHNpemVfdCB0Y2ZfbWlycmVkX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtNjA5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM9NjY0PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfbWlycmVkX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtNjcyLVxcdC5pbml0XFx0XFx0PVxcdHRjZl9taXJyZWRfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjY3MzpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfbWlycmVkX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy02NzQtXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfbWlycmVkX29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jPTU2ND1zdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmMtNjI4LVxcbm5ldC9zY2hlZC9hY3RfcGVkaXQuYzo2Mjk6c3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTYzMC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM9NjUyPXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTY2MC1cXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfcGVkaXRfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM6NjYxOlxcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3RfcGVkaXQuYy02NjItXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jPTQ0Mj1zdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy00OTItXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYzo0OTM6c3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDk0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM9NTA4PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNTE2LVxcdC5jbGVhbnVwXFx0PVxcdHRjZl9wb2xpY2VfY2xlYW51cCxcXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jOjUxNzpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy01MTgtXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYz0yOTY9c3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzE3LVxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzE4OnN0YXRpYyBzaXplX3QgdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMxOS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTMyNj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMzNC1cXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMzU6XFx0LmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMzYtXFx0LmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYz0zNDg9c3RhdGljIHZvaWQgdGNmX3NrYmVkaXRfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtMzU3LVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjM1ODpzdGF0aWMgc2l6ZV90IHRjZl9za2JlZGl0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTM1OS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYz00MTg9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9za2JlZGl0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQyNi1cXHQuY2xlYW51cFxcdD1cXHR0Y2Zfc2tiZWRpdF9jbGVhbnVwLFxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjQyNzpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2Zfc2tiZWRpdF9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQyOC1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9za2JlZGl0X29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9ODYwPXN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04ODUtXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODg2OnN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04ODcte1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9OTE3PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy05MjQtXFx0LmNsZWFudXBcXHQ9XFx0dHVubmVsX2tleV9yZWxlYXNlLFxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjkyNTpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtOTI2LVxcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XFx0dGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYz0zMzY9c3RhdGljIHZvaWQgdGNmX3ZsYW5fc3RhdHNfdXBkYXRlKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHU2NCBieXRlcywgdTY0IHBhY2tldHMsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYy0zNDUtXFxubmV0L3NjaGVkL2FjdF92bGFuLmM6MzQ2OnN0YXRpYyBzaXplX3QgdGNmX3ZsYW5fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF92bGFuLmMtMzQ3LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jPTQxNj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3ZsYW5fb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF92bGFuLmMtNDI0LVxcdC5zdGF0c191cGRhdGVcXHQ9XFx0dGNmX3ZsYW5fc3RhdHNfdXBkYXRlLFxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jOjQyNTpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2Zfdmxhbl9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQyNi1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl92bGFuX29mZmxvYWRfYWN0X3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NTo1Ny4zMTcyNjk5MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQyMDI4MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGxpbmsgTWVzc2FnZSBTaXplIENhbGN1bGF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZXNlIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgYXJlIHRoZSBuZXcgcGxheWVycyBpbiB0aGUgZ2FtZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2Ygb3VyIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiBkdW1waW5nIFRDIGFjdGlvbnMuIEZ1bmN0aW9uYWxseSwgaXQncyBhIGNoYW5nZSwgYnV0IHNlZW1zIHByZXR0eSBpc29sYXRlZCB0byB0aGUgbmV0bGluayBkdW1wIHByb2NlZHVyZXMsIGFzIEkgdW5kZXJzdGFuZCBpdC4gQnV0IHN0aWxsLCB0aGUgcXVlc3Rpb24gaXM6IHNob3VsZCB3ZSBmdXp6IHRoZXNlPyBBYnNvbHV0ZWx5LiBBIG1pc2NhbGN1bGF0aW9uIGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIHNpemUgY2FsY3VsYXRpb24gaXMgd3JvbmcsIHdlIGNvdWxkIGhhdmUgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aGVuIHdlIGNvbnN0cnVjdCB0aGUgbmV0bGluayBtZXNzYWdlLCBvciBldmVuIGp1c3QgZ2V0IGBFTVNHU0laRWAgZXJyb3JzIGlmIHdlIHVuZGVyc2hvb3QgdGhlIHNpemUuIFRoYXQncyBub3QgaWRlYWwuXG5cblNvLCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBpdDogYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgLCBgdGNmX2lmZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgLCBhbmQgYHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZWAuXG5cblRoZXkgYWxsIGFwcGVhciB0byBiZSBjYWxsZWQgZnJvbSBgdGNmX2FjdGlvbl9maWxsX3NpemVgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCwgc28gSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24gbmV4dCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIGVuc3VyZSB0aGF0IG15IGFuYWx5c2lzIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjAyLjE1OTMwMjUzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk3ODIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9NDYxPXN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9mdWxsX2F0dHJzX3NpemUoc2l6ZV90IHN6KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy00NjgtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzo0Njk6c3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9hcGkuYy00NzAte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xNDY5PWludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTE2LVxcdFxcdH1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE1MTc6XFx0XFx0c3ogKz0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0KTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTgtXFx0XFx0LyogU3RhcnQgZnJvbSBpbmRleCAwICovXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTE4NTg9c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2MC17XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxODYxOlxcdHNpemVfdCBhdHRyX3NpemUgPSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3Rpb24pO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2Mi1cXHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDEyPXRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAzOS1cXHRcXHR9XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMDQwOlxcdFxcdGF0dHJfc2l6ZSArPSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA0MS1cXHRcXHRhY3Rpb25zW2kgLSAxXSA9IGFjdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MDIuMjM1Mjg2ODQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4ODY3ODkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUQyBBY3Rpb24gU2l6ZSBDYWxjdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgbmV0bGluayBtZXNzYWdlcyB1c2VkIGJ5IFRyYWZmaWMgQ29udHJvbCAoVEMpIGFjdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZWAuIElmIHRoYXQgc2l6ZSBjYWxjdWxhdGlvbiBpcyBvZmYsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgYSBiYWQgZGF5IHdpdGggYHNrYl9vdmVyX3BhbmljYCBvciBzb21ldGhpbmcgc2ltaWxhciB3aGVuIHdlIHRyeSB0byBkdW1wIHRoZSBhY3Rpb25zLiBJdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQgdG8gZGlnIGludG8gdGhpcy5cblxuRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSByZWNhbGwgdGhhdCBgQ09ORklHX05FVF9DTFNfQUNUYCBpcyB0aGUgb3ZlcmFyY2hpbmcgc2V0dGluZyBmb3IgVEMgYWN0aW9ucy4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBmb3IgZWFjaCBhY3Rpb24uIEZvciBleGFtcGxlOlxuXG4qICAgYGFjdF9icGZgIHdpbGwgbmVlZCBgQ09ORklHX05FVF9BQ1RfQlBGYCBlbmFibGVkLlxuKiAgIGBhY3RfY3RgIG5lZWRzIGBDT05GSUdfTkVUX0FDVF9DVGAuXG4qICAgYGFjdF9jdGluZm9gIHJlcXVpcmVzIGBDT05GSUdfTkVUX0FDVF9DVElORk9gLlxuKiAgIGBhY3RfaWZlYDogYENPTkZJR19ORVRfQUNUX0lGRWAuXG4qICAgYGFjdF9wZWRpdGA6IGBDT05GSUdfTkVUX0FDVF9QRURJVGAuXG4qICAgYGFjdF9wb2xpY2VgOiBgQ09ORklHX05FVF9BQ1RfUE9MSUNFYC5cbiogICBgYWN0X3NhbXBsZWA6IGBDT05GSUdfTkVUX0FDVF9TQU1QTEVgLlxuKiAgIGBhY3RfdHVubmVsX2tleWA6IGBDT05GSUdfTkVUX0FDVF9UVU5ORUxfS0VZYC5cblxuSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gZG91YmxlLWNoZWNrIHRob3NlIG9wdGlvbnMgd291bGQgYmUgdG8gZ28gc3RyYWlnaHQgaW50byBgbmV0L3NjaGVkL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MDcuNTIzOTY4NjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTg2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz03MDI9Y29uZmlnIE5FVF9DTFNfQUNUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MTQtXFxubmV0L3NjaGVkL0tjb25maWc6NzE1OmNvbmZpZyBORVRfQUNUX1BPTElDRVxcbm5ldC9zY2hlZC9LY29uZmlnLTcxNi1cXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBQb2xpY2luZ1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcyNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MjY6Y29uZmlnIE5FVF9BQ1RfR0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcyNy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBhY3Rpb25zXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NzM2PWNvbmZpZyBHQUNUX1BST0JcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTc0MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3NDI6Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXFxubmV0L3NjaGVkL0tjb25maWctNzQzLVxcdHRyaXN0YXRlIFxcXCJSZWRpcmVjdGluZyBhbmQgTWlycm9yaW5nXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzUxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjc1Mjpjb25maWcgTkVUX0FDVF9TQU1QTEVcXG5uZXQvc2NoZWQvS2NvbmZpZy03NTMtXFx0dHJpc3RhdGUgXFxcIlRyYWZmaWMgU2FtcGxpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03NjMtXFxubmV0L3NjaGVkL0tjb25maWc6NzY0OmNvbmZpZyBORVRfQUNUX05BVFxcbm5ldC9zY2hlZC9LY29uZmlnLTc2NS1cXHR0cmlzdGF0ZSBcXFwiU3RhdGVsZXNzIE5BVFxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTc3My1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3NzQ6Y29uZmlnIE5FVF9BQ1RfUEVESVRcXG5uZXQvc2NoZWQvS2NvbmZpZy03NzUtXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBFZGl0aW5nXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzgyLVxcbm5ldC9zY2hlZC9LY29uZmlnOjc4Mzpjb25maWcgTkVUX0FDVF9TSU1QXFxubmV0L3NjaGVkL0tjb25maWctNzg0LVxcdHRyaXN0YXRlIFxcXCJTaW1wbGUgRXhhbXBsZSAoRGVidWcpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzk2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjc5Nzpjb25maWcgTkVUX0FDVF9TS0JFRElUXFxubmV0L3NjaGVkL0tjb25maWctNzk4LVxcdHRyaXN0YXRlIFxcXCJTS0IgRWRpdGluZ1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTgwNy1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4MDg6Y29uZmlnIE5FVF9BQ1RfQ1NVTVxcbm5ldC9zY2hlZC9LY29uZmlnLTgwOS1cXHR0cmlzdGF0ZSBcXFwiQ2hlY2tzdW0gVXBkYXRpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXFxubmV0L3NjaGVkL0tjb25maWc6ODE5OmNvbmZpZyBORVRfQUNUX01QTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy04MjAtXFx0dHJpc3RhdGUgXFxcIk1QTFMgbWFuaXB1bGF0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODI5LVxcbm5ldC9zY2hlZC9LY29uZmlnOjgzMDpjb25maWcgTkVUX0FDVF9WTEFOXFxubmV0L3NjaGVkL0tjb25maWctODMxLVxcdHRyaXN0YXRlIFxcXCJWbGFuIG1hbmlwdWxhdGlvblxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg0MC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXFxubmV0L3NjaGVkL0tjb25maWctODQyLVxcdHRyaXN0YXRlIFxcXCJCUEYgYmFzZWQgYWN0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODUyLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg1Mzpjb25maWcgTkVUX0FDVF9DT05OTUFSS1xcbm5ldC9zY2hlZC9LY29uZmlnLTg1NC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBSZXRyaWV2ZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04NjQtXFxubmV0L3NjaGVkL0tjb25maWc6ODY1OmNvbmZpZyBORVRfQUNUX0NUSU5GT1xcbm5ldC9zY2hlZC9LY29uZmlnLTg2Ni1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBBY3Rpb25zXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODgxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg4Mjpjb25maWcgTkVUX0FDVF9TS0JNT0RcXG5uZXQvc2NoZWQvS2NvbmZpZy04ODMtXFx0dHJpc3RhdGUgXFxcInNrYiBkYXRhIG1vZGlmaWNhdGlvbiBhY3Rpb25cXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXFxubmV0L3NjaGVkL0tjb25maWc6ODkzOmNvbmZpZyBORVRfQUNUX0lGRVxcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cXHR0cmlzdGF0ZSBcXFwiSW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTA1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkwNjpjb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXFxubmV0L3NjaGVkL0tjb25maWctOTA3LVxcdHRyaXN0YXRlIFxcXCJJUCB0dW5uZWwgbWV0YWRhdGEgbWFuaXB1bGF0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXFxubmV0L3NjaGVkL0tjb25maWc6OTMwOmNvbmZpZyBORVRfQUNUX0dBVEVcXG5uZXQvc2NoZWQvS2NvbmZpZy05MzEtXFx0dHJpc3RhdGUgXFxcIkZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MDcuNTg0MTU5NjA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MDA2MDQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVyIEFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNsYXNzaWZpZXIgYWN0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5J3JlIGNvbmZpZ3VyZWQuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9CUEZgLCBgTkVUX0FDVF9DVGAsIGBORVRfQUNUX0NUSU5GT2AsIGBORVRfQUNUX0lGRWAsIGBORVRfQUNUX1BFRElUYCwgYE5FVF9BQ1RfUE9MSUNFYCwgYE5FVF9BQ1RfU0FNUExFYCwgYW5kIGBORVRfQUNUX1RVTk5FTF9LRVlgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdHJhZmZpYyBpcyBjbGFzc2lmaWVkIGFuZCBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgZWFjaCwgZXNwZWNpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcuXG5cbk5vdywgSSByZW1lbWJlciBzZWVpbmcgc29tZSBjb25kaXRpb25hbHMgaW4gYGFjdF9jdC5jYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiBsb2dpYyByZXNpZGVzLiBMZXQgbWUgc2VlLi4uIHllcywgSSBzZWUgdGhvc2UgY2hlY2tzOiBgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLYCwgYENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTYCwgYW5kIGBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgaXMgbWFuYWdlZCBhbmQgdXRpbGl6ZWQuIEl0IGxvb2tzIGxpa2UgdGhvc2UgYXJlIHVzZWQgd2hlbiB0aGUgYE5FVF9BQ1RfQ1RgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9zY2hlZC9hY3RfY3QuY2AgZGlyZWN0bHkgdG8gc2VlIGhvdyB0aGVzZSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgaXMgYXZhaWxhYmxlIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjEyLjI1NDIyMzM2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1ODU4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05GX0NPTk5UUkFDS19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuYz0xNzg9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xODgtXFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fQ1RfTUVUQURBVEE7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE5MC1cXHRlbnRyeS1cXHUwMDNlY3RfbWV0YWRhdGEubWFyayA9IFJFQURfT05DRShjdC1cXHUwMDNlbWFyayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTE2PXN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X21hcmsoc3RydWN0IG5mX2Nvbm4gKmN0LCB1MzIgbWFyaywgdTMyIG1hc2spXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkxNy17XFxubmV0L3NjaGVkL2FjdF9jdC5jOjkxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkxOS1cXHR1MzIgbmV3X21hcms7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTMzPXN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTM2LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MzgtXFx0c2l6ZV90IGxhYmVsc19zeiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xMjU5PXN0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg1LVxcdGlmICh0YltUQ0FfQ1RfTUFSS10pIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI4NjpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg3LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb25udHJhY2sgbWFyayBpc24ndCBlbmFibGVkLlxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyOTgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyOTk6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzAwLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb25udHJhY2sgbGFiZWxzIGlzbid0IGVuYWJsZWQuXFxcIik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxNy1cXHRpZiAodGJbVENBX0NUX1pPTkVdKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjEzMTg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMTktXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNvbm50cmFjayB6b25lcyBpc24ndCBlbmFibGVkLlxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE1NTg9c3RhdGljIGlubGluZSBpbnQgdGNmX2N0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTgzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTg0OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU4NS1cXHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5MC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU5MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Mi1cXHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU5ODpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTk5LVxcdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNjYwPXN0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NzQtXFx0LyogVENBX0NUX01BUkssIFRDQV9DVF9NQVJLX01BU0sgKi9cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY3NTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjc2LVxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZW1hcmspKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NzktXFx0LyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE2ODA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjgxLVxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZWxhYmVscykpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY4My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY4NDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY4NS1cXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVxcdTAwM2V6b25lKSk7IC8qIFRDQV9DVF9aT05FICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjEyLjMwMjgxNDg4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg0NTU4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb3ZlcmluZyByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBORl9DT05OVFJBQ0tfTUFSS2AsIGBORl9DT05OVFJBQ0tfTEFCRUxTYCwgYW5kIGBORl9DT05OVFJBQ0tfWk9ORVNgLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlcnMgb2YgaW50ZXJlc3QuXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IGJpdCBmbGFncyBpbiBgYWN0X3R1bm5lbF9rZXkuY2AgKGBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVRgLCBldGMuKSDigJMgdGhlc2UgYXJlIGp1c3QgYml0IGRlZmluaXRpb25zLCBzbyB0aGV5IGFyZSBub3QgY29uZmlndXJhdGlvbnMuIFRoZW4sIEkgc2VlIGBDT05GSUdfTkVUX0FDVF9CUEZgIGluIGBhY3RfYnBmLmNgLCBgQ09ORklHX05FVF9BQ1RfQ1RJTkZPYCBpbiBgYWN0X2N0aW5mby5jYCwgYENPTkZJR19ORVRfQUNUX0lGRWAgaW4gYGFjdF9pZmUuY2AsIGBDT05GSUdfTkVUX0FDVF9QRURJVGAgaW4gYGFjdF9wZWRpdC5jYCwgYENPTkZJR19ORVRfQUNUX1BPTElDRWAgaW4gYGFjdF9wb2xpY2UuY2AsIGBDT05GSUdfTkVUX0FDVF9TQU1QTEVgIGluIGBhY3Rfc2FtcGxlLmNgLCBhbmQgZmluYWxseSwgYENPTkZJR19ORVRfQUNUX1RVTk5FTF9LRVlgIGluIGBhY3RfdHVubmVsX2tleS5jYC5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEknbGwgbWFrZSBhIGxpc3Qgb2YgY2FuZGlkYXRlIGZ1bmN0aW9uczogYHRjZl9hY3Rpb25fZmlsbF9zaXplYCwgYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgLCBgdGNmX2lmZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgLCBgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplYCwgYHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemVgLCBhbmQgYHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplYC5cblxuQWhhLCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoYXQgYHRjZl9hY3Rpb25fZmlsbF9zaXplYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIEdpdmVuIHRoZSBndWlkZWxpbmVzLCB0aGlzIG5lZWRzIHRvIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3Mgbm90IGlubGluZWQuIFRoZSBpbnN0cnVjdGlvbnMgKnByZWZlciogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIEV2ZW4gdGhvdWdoIHRoZXNlIGBnZXRfZmlsbF9zaXplYCBmdW5jdGlvbnMgKmFyZSogc3RhdGljLCB0aGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHN0cnVjdCB0Y19hY3Rpb25fb3BzYC4gVGhpcyBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgcHJvYmFibHkgd29uJ3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5IGFyZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIHN0YXRpYy4gT2theSwgbGV0J3Mgc2VlLiBZZXMsIHRoZXkgYXJlIHN0YXRpYyEgQnV0IHNpbmNlIHdlIGFyZSBhc3NpZ25pbmcgdGhlaXIgYWRkcmVzc2VzLCB0aGV5IHdvbid0IGJlIGlubGluZWQuXG5cbkhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIHN0YXRlIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uc2lkZXIgQVBJIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlc2Ugb3BlcmF0aW9uczogYHRjYV9hY3Rpb25fZ2RgLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnYC4gTGV0IG1lIGdvIGFoZWFkIGFuZCBjaGVjayBgdGNhX2FjdGlvbl9nZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjIxLjM4NzM3NjY4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwNzI1NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjYV9hY3Rpb25fZ2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTIwMTE9c3RhdGljIGludFxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxMjp0Y2FfYWN0aW9uX2dkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDEzLVxcdCAgICAgIHUzMiBwb3J0aWQsIGludCBldmVudCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMTMyPXN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxNjktXFx0Y2FzZSBSVE1fREVMQUNUSU9OOlxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjE3MDpcXHRcXHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxNzEtXFx0XFx0XFx0XFx0ICAgIHBvcnRpZCwgUlRNX0RFTEFDVElPTiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3My1cXHRjYXNlIFJUTV9HRVRBQ1RJT046XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTc0OlxcdFxcdHJldCA9IHRjYV9hY3Rpb25fZ2QobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3NS1cXHRcXHRcXHRcXHQgICAgcG9ydGlkLCBSVE1fR0VUQUNUSU9OLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjoyMi4wNjgxMDcyOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NzE0ODIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgQWN0aW9uIENvbnRyb2wgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIG9mIGhvdyB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucyBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gYHRjX2N0bF9hY3Rpb25gIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBoZXJlOyB0aGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBgUlRNX05FV0FDVElPTmAsIGBSVE1fREVMQUNUSU9OYCwgYW5kIGBSVE1fR0VUQUNUSU9OYCBuZXRsaW5rIG1lc3NhZ2VzLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gemVybyBpbiBvbi4gV2hlbiB3ZSdyZSBhZGRpbmcgYSBuZXcgYWN0aW9uIHdpdGggYFJUTV9ORVdBQ1RJT05gLCB0aGUgc3lzdGVtIGNhbGxzIGB0Y2ZfYWN0aW9uX2luaXRgLiBBbmQgZm9yIGRlbGV0aW5nIG9yIGdldHRpbmcgYW4gYWN0aW9uIOKAkyBgUlRNX0RFTEFDVElPTmAgYW5kIGBSVE1fR0VUQUNUSU9OYCDigJMgdGhlIGZ1bmN0aW9uIGB0Y2FfYWN0aW9uX2dkYCBjb21lcyBpbnRvIHBsYXkuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRjX2N0bF9hY3Rpb25gLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2FfYWN0aW9uX2dkYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHRjX2N0bF9hY3Rpb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGJpdCBtb3JlIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MjYuMDY1MjU4NTIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY4Mzk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jdGxfYWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuYz0yMTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0Y2FhX3BvbGljeVtUQ0FfUk9PVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjEzMS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIxMzI6c3RhdGljIGludCB0Y19jdGxfYWN0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMzMtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjI5ND1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdGNfYWN0aW9uX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk1OlxcdHsubXNndHlwZSA9IFJUTV9ORVdBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk2OlxcdHsubXNndHlwZSA9IFJUTV9ERUxBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk3OlxcdHsubXNndHlwZSA9IFJUTV9HRVRBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbixcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIyOTgtXFx0IC5kdW1waXQgPSB0Y19kdW1wX2FjdGlvbn0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjI2LjExMTk0NTk0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUzNzU0NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgVHJhZmZpYyBDb250cm9sICh0YykgQWN0aW9uIE1lY2hhbmlzbSoqXG5cbkhtbSwgc28gYHRjX2N0bF9hY3Rpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGluaXRpYWxseSBzdWdnZXN0cyBhIGxpbWl0ZWQgc2NvcGUsIHJpZ2h0PyBPbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIG5vIGRpcmVjdCBleHRlcm5hbCBjYWxscy4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gSSByZW1lbWJlciBzZWVpbmcgYHJ0bmxfbXNnX2hhbmRsZXJzYCByZWdpc3RlcmVkIHNvbWV3aGVyZS4gVGhhdCBtZWFucyB0aGUgYHRjX2N0bF9hY3Rpb25gIGZ1bmN0aW9uICppcyogbGlrZWx5IGJlaW5nIGNhbGxlZCwgbm90IGRpcmVjdGx5LCBidXQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgc3RvcmVkIHdpdGhpbiB0aGF0IHJlZ2lzdHJhdGlvbi4gTGlrZWx5IHRoaXMgaXMgaG93IGl0IHJlY2VpdmVzIHJlcXVlc3RzIHZpYSBuZXRsaW5rLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgaG93IHRob3NlIGhhbmRsZXJzIGFyZSBzZXQgdXAuIE9rYXksIHRoYXQncyB0aGUgY29yZSBwYXRoLiBOb3csIHdoYXQncyB0aGUgcm9sZSBvZiBgdGNmX2FjdGlvbl9pbml0YCBpbiBhbGwgb2YgdGhpcz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGB0Y19jdGxfYWN0aW9uYC4gSXMgaXQgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGl0PyBPciBpcyBpdCBwYXJ0IG9mIGEgYnJvYWRlciBhY3Rpb24gaW5pdGlhbGl6YXRpb24gc2NoZW1lPyBUaGUgaW50ZXJhY3Rpb24gaGVyZSBpcyBrZXkgdG8gaG93IHRjIGFjdGlvbnMgYXJlIG1hbmFnZWQgYXQgcnVudGltZS4gSSBuZWVkIHRvIHJldmlldyB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjoyOS4yNjU3MDM0NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzU3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9hY3Rpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTAxOD1pbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYWN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMDI3LVxcdC8qIFdlIGhhdmUgdG8gcmVnaXN0ZXIgcGVybmV0IG9wcyBiZWZvcmUgbWFraW5nIHRoZSBhY3Rpb24gb3BzIHZpc2libGUsXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMDI4OlxcdCAqIG90aGVyd2lzZSB0Y2ZfYWN0aW9uX2luaXRfMSgpIGNvdWxkIGdldCBhIHBhcnRpYWxseSBpbml0aWFsaXplZFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyOS1cXHQgKiBuZXRucy5cXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTMzNz1zdHJ1Y3QgdGNfYWN0aW9uX29wcyAqdGNfYWN0aW9uX2xvYWRfb3BzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIGZsYWdzLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMzk5LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQwMDpzdHJ1Y3QgdGNfYWN0aW9uICp0Y2ZfYWN0aW9uX2luaXRfMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQwMS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3QgbmxhdHRyICplc3QsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTE0NjI9c3RhdGljIGJvb2wgdGNfYWN0X2JpbmQodTMyIGZsYWdzKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDY4LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQ2OTppbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE0NzAtXFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEwLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiB0YltpXTsgaSsrKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNTExOlxcdFxcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2ldLCBlc3QsIG9wc1tpIC0gMV0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpbml0X3Jlc1tpIC0gMV0sIGZsYWdzLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDk5PXN0YXRpYyBpbnQgdGNmX2FjdGlvbl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMDgtXFx0Zm9yIChsb29wID0gMDsgbG9vcCBcXHUwMDNjIDEwOyBsb29wKyspIHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIxMDk6XFx0XFx0cmV0ID0gdGNmX2FjdGlvbl9pbml0KG5ldCwgTlVMTCwgbmxhLCBOVUxMLCBhY3Rpb25zLCBpbml0X3JlcyxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMTAtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmF0dHJfc2l6ZSwgZmxhZ3MsIDAsIGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0MDc9aW50IHRjZl9leHRzX3ZhbGlkYXRlX2V4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzQyNC1cXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihhX28pO1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQyNTpcXHRcXHRcXHRhY3QgPSB0Y2ZfYWN0aW9uX2luaXRfMShuZXQsIHRwLCB0YltleHRzLVxcdTAwM2Vwb2xpY2VdLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzQyNi1cXHRcXHRcXHRcXHRcXHRcXHRyYXRlX3RsdiwgYV9vLCBpbml0X3JlcywgZmxhZ3MsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MzktXFx0XFx0XFx0ZmxhZ3MgfD0gVENBX0FDVF9GTEFHU19CSU5EO1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQ0MDpcXHRcXHRcXHRlcnIgPSB0Y2ZfYWN0aW9uX2luaXQobmV0LCB0cCwgdGJbZXh0cy1cXHUwMDNlYWN0aW9uXSxcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0NDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgcmF0ZV90bHYsIGV4dHMtXFx1MDAzZWFjdGlvbnMsIGluaXRfcmVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjoyOS4zMzkwNjU1NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NDIyOTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU3ltYm9sIEV4cG9ydCoqXG5cbk9rYXksIHNvIGB0Y2ZfYWN0aW9uX2luaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBUaGF0J3MgZ29vZDsgaXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuIEFsc28sIEkgc2VlIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgaXMgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC5cblxuVGhlIG5leHQgc3RlcCBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byB2ZXJpZnksIGRlZmluaXRpdmVseSwgd2hldGhlciBgdGNmX2FjdGlvbl9pbml0YCBpcyBpbmRlZWQgZXhwb3J0ZWQgYXMgaW50ZW5kZWQuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjMzLjIxMzI5NzU0OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNjc5OTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjozMy4yNzIzNzM2NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMTQ0NDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIE1vZHVsZSBFeHBvcnQgYW5kIFN0YXRpYyBEZWNsYXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgc29tZXRoaW5nIGlzbid0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQncyBub3QgZGVjbGFyZWQgYXMgc3RhdGljIGVpdGhlci4gVGhhdCdzIGEgYml0IG9mIGFuIG9kZCBjb21iaW5hdGlvbiwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGdvaW5nIG9uIHdpdGggaXRzIHZpc2liaWxpdHkgb3IgdXNhZ2UuIE15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEgaXMgdGVsbGluZyBtZSB0byBpbnZlc3RpZ2F0ZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGB0Y2ZfYWN0aW9uX2luaXRgKSB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGNhbiBpbmxpbmUgaXQgd2hlbiBJIGJ1aWxkIHRoZSBtb2R1bGUgdG8gZXhwbGFpbiB0aGlzLiBJJ2xsIGNoZWNrIGl0cyBkZWNsYXJhdGlvbiBhbmQgbG9vayBmb3IgY2x1ZXMgdGhlcmUsIG1heWJlIHRoZXJlJ3MgYSBtYWNybyBvciBzb21lIHVudXN1YWwgbGlua2VyIHRyaWNrIEknbSBtaXNzaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU1MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjM2Ljg4MzgyMTIzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMTgyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjZl9hY3Rpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2Mj1zdGF0aWMgYm9vbCB0Y19hY3RfYmluZCh1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE0NjgtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNDY5OmludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQ3MC1cXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjM2LjkzMzE0MzU4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkwMjAyMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5vbi1TdGF0aWMgTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5vbi1zdGF0aWMgY29udGV4dCwgd2hpY2gsIG9mIGNvdXJzZSwgY2hhbmdlcyBldmVyeXRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc2hpZnQgaW4gcGFyYWRpZ20uIFRoZW4sIHRoZSBuZXh0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYHRjZl9hY3Rpb25faW5pdF8xYD8gVGhhdCBwYXJ0aWN1bGFyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIG9mdGVuIGEgY3JpdGljYWwgcG9pbnQgb2YgaW5zdGFudGlhdGlvbiBhbmQgY29uZmlndXJhdGlvbiB3aXRoaW4gc3VjaCBhIGR5bmFtaWMgc2V0dXAsIHNvIHRoYXQgbm93IGJlY29tZXMgYSBrZXkgZm9jdXMuIFdoYXQgZGVwZW5kZW5jaWVzIGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZSBhbmQgd2hhdCBzdGF0ZSBpcyB0aGF0IGluP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjQwLjEyMzM0ODMxNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzEyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdGlvbl9pbml0XzFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTEwMTg9aW50IHRjZl9yZWdpc3Rlcl9hY3Rpb24oc3RydWN0IHRjX2FjdGlvbl9vcHMgKmFjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyNy1cXHQvKiBXZSBoYXZlIHRvIHJlZ2lzdGVyIHBlcm5ldCBvcHMgYmVmb3JlIG1ha2luZyB0aGUgYWN0aW9uIG9wcyB2aXNpYmxlLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTAyODpcXHQgKiBvdGhlcndpc2UgdGNmX2FjdGlvbl9pbml0XzEoKSBjb3VsZCBnZXQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWRcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEwMjktXFx0ICogbmV0bnMuXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTEzMzc9c3RydWN0IHRjX2FjdGlvbl9vcHMgKnRjX2FjdGlvbl9sb2FkX29wcyhzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBmbGFncyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTM5OS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE0MDA6c3RydWN0IHRjX2FjdGlvbiAqdGNmX2FjdGlvbl9pbml0XzEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE0MDEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xNDY5PWludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEwLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiB0YltpXTsgaSsrKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNTExOlxcdFxcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2ldLCBlc3QsIG9wc1tpIC0gMV0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpbml0X3Jlc1tpIC0gMV0sIGZsYWdzLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNDA3PWludCB0Y2ZfZXh0c192YWxpZGF0ZV9leChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjQtXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYV9vKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM0MjU6XFx0XFx0XFx0YWN0ID0gdGNmX2FjdGlvbl9pbml0XzEobmV0LCB0cCwgdGJbZXh0cy1cXHUwMDNlcG9saWNlXSxcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjYtXFx0XFx0XFx0XFx0XFx0XFx0cmF0ZV90bHYsIGFfbywgaW5pdF9yZXMsIGZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo0MC4xNzE3ODQwMDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MTg0NzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmVmbGVjdGluZyBvbiBUQ0YgQWN0aW9uIEluaXRpYWxpemF0aW9uIGFuZCBEdW1waW5nKipcblxuQWxyaWdodCwgc28gSSd2ZSBqdXN0IGNvbmZpcm1lZCB0aGF0IHRoZSBgdGNmX2FjdGlvbl9pbml0XzFgIGZ1bmN0aW9uIGlzbid0IHN0YXRpYyBlaXRoZXIsIGp1c3QgbGlrZSB0aGUgb3RoZXJzLiBUaGF0J3MgZ29vZCB0byBrbm93LCBrZWVwcyB0aGUgZGVzaWduIGZsZXhpYmxlLiBOb3csIEknbSBwaXZvdGluZyBteSBmb2N1cyB0byB0aGUgZHVtcCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjZl9hY3Rpb25fZHVtcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGR1bXBpbmcgbWVjaGFuaXNtcyBhcmUgY29uc2lzdGVudCwgZWZmaWNpZW50LCBhbmQgcHJvdmlkZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIG5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy4gQXJlIHdlIHVzaW5nIHRoZSBzYW1lIGFwcHJvYWNoIGFjcm9zcyB0aGUgYm9hcmQ/IFNob3VsZCB3ZSBjb25zb2xpZGF0ZSB0aGVtPyBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGFuc3dlcnMgbWF5IGhhdmUgZGVzaWduIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo0My40MjM2MzM5ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDc3MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9hY3Rpb25fZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9NDc4PXN0YXRpYyBpbnRcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjQ3OTp0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgYm9vbCBmcm9tX2FjdClcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ4MC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTUwOD1zdGF0aWMgaW50XFxubmV0L3NjaGVkL2FjdF9hcGkuYzo1MDk6dGNmX2FjdGlvbl9kdW1wXzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IGJpbmQsIGludCByZWYpXFxubmV0L3NjaGVkL2FjdF9hcGkuYy01MTAte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy01MTUtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzo1MTY6XFx0aWYgKHRjZl9hY3Rpb25fZHVtcF90ZXJzZShza2IsIGEsIGZhbHNlKSlcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTUxNy1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTQwLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6NTQxOlxcdGVyciA9IHRjZl9hY3Rpb25fZHVtcF9vbGQoc2tiLCBhLCBiaW5kLCByZWYpO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTQyLVxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTU1Mj1zdGF0aWMgaW50IHRjZl9kdW1wX3dhbGtlcihzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTU4Ny1cXHRcXHRlcnIgPSAoYWN0X2ZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHX1RFUlNFX0RVTVApID9cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjU4ODpcXHRcXHRcXHR0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc2tiLCBwLCB0cnVlKSA6XFxubmV0L3NjaGVkL2FjdF9hcGkuYzo1ODk6XFx0XFx0XFx0dGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBwLCAwLCAwKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTU5MC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMjQzPWludFxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI0NDp0Y2ZfYWN0aW9uX2R1bXBfb2xkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kLCBpbnQgcmVmKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI0NS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDgtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ5OmludCB0Y2ZfYWN0aW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI1MC1cXHRcXHQgICAgaW50IGJpbmQsIGludCByZWYsIGJvb2wgdGVyc2UpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNTktXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjYwOlxcdFxcdGVyciA9IHRlcnNlID8gdGNmX2FjdGlvbl9kdW1wX3RlcnNlKHNrYiwgYSwgZmFsc2UpIDpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEyNjE6XFx0XFx0XFx0dGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBhLCBiaW5kLCByZWYpO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2Mi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTY1MD1zdGF0aWMgaW50IHRjYV9nZXRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE2NzQtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNjc1OlxcdGlmICh0Y2ZfYWN0aW9uX2R1bXAoc2tiLCBhY3Rpb25zLCBiaW5kLCByZWYsIGZhbHNlKSBcXHUwMDNjIDApXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNjc2LVxcdFxcdGdvdG8gb3V0X25sbXNnX3RyaW07XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0OTE9aW50IHRjZl9leHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTA2LVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzUwNzpcXHRcXHRcXHRpZiAodGNmX2FjdGlvbl9kdW1wKHNrYiwgZXh0cy1cXHUwMDNlYWN0aW9ucywgMCwgMCwgZmFsc2UpXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTA4LVxcdFxcdFxcdCAgICBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1MTUtXFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L3NjaGVkL2Nsc19hcGkuYzozNTE2OlxcdFxcdFxcdGlmICh0Y2ZfYWN0aW9uX2R1bXBfb2xkKHNrYiwgYWN0LCAwLCAwKSBcXHUwMDNjIDApXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTE3LVxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNTMyPWludCB0Y2ZfZXh0c190ZXJzZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzU0My1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1NDQ6XFx0aWYgKHRjZl9hY3Rpb25fZHVtcChza2IsIGV4dHMtXFx1MDAzZWFjdGlvbnMsIDAsIDAsIHRydWUpIFxcdTAwM2MgMClcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1NDUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjQzLjQ3NTcxNDMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTI0NTgyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIGB0Y2ZfYWN0aW9uX2R1bXBgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmb2N1cywgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBIbW0sIGB0Y2FfYWN0aW9uX2dkYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGxlc3MgdXNlZnVsIGZvciBleHRlcm5hbCBpbnNwZWN0aW9uLCBhbmQgYHRjX2N0bF9hY3Rpb25gIGlzIHN0YXRpYyB0b28uIFdhaXQsIHdoYXQgYWJvdXQgYHRjYV9nZXRfZmlsbGAsIHRoYXQncyBzdGF0aWMgYXMgd2VsbC4gT2theSwgc28gYmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4gc28gZmFyLCB0aGUgYmVzdCBiZXRzIGZvciBpbW1lZGlhdGUgZm9jdXMgYXJlOlxuXG4qICAgYHRjZl9hY3Rpb25faW5pdGBcbiogICBgdGNmX2FjdGlvbl9pbml0XzFgXG4qICAgYHRjZl9hY3Rpb25fZHVtcGBcbiogICBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgXG4qICAgYHRjZl9leHRzX2R1bXBgXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gQWgsIHRoZXJlJ3MgYHRjZl9hY3Rpb25fZHVtcF9vbGRgIC0gdGhhdCdzIG5vbi1zdGF0aWMsIHNvIHdvcnRoIG5vdGluZywgYW5kIGB0Y2ZfYWN0aW9uX2R1bXBfMWAgaXMgc3RhdGljLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGZvbGxvd2luZyBhcmUgb25lcyBvZiBpbnRlcmVzdDpcblxuKiAgIGBORVRfQ0xTX0FDVGBcbiogICBgTkVUX0FDVF9CUEZgXG4qICAgYE5FVF9BQ1RfQ1RgXG4qICAgYE5FVF9BQ1RfQ1RJTkZPYFxuKiAgIGBORVRfQUNUX0lGRWBcbiogICBgTkVUX0FDVF9QRURJVGBcbiogICBgTkVUX0FDVF9QT0xJQ0VgXG4qICAgYE5FVF9BQ1RfU0FNUExFYFxuKiAgIGBORVRfQUNUX1RVTk5FTF9LRVlgXG4qICAgYE5GX0NPTk5UUkFDS19NQVJLYFxuKiAgIGBORl9DT05OVFJBQ0tfTEFCRUxTYFxuKiAgIGBORl9DT05OVFJBQ0tfWk9ORVNgXG5cbkl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaGVyZSwgc28gSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfTkVUX0FDVF9DVGAgZGVwZW5kcyBvbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo0OS4xNjgxNzU5OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MzQxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0NUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg1Mz1jb25maWcgTkVUX0FDVF9DT05OTUFSS1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODY0LVxcbm5ldC9zY2hlZC9LY29uZmlnOjg2NTpjb25maWcgTkVUX0FDVF9DVElORk9cXG5uZXQvc2NoZWQvS2NvbmZpZy04NjYtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9uc1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTkwNj1jb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05MTYtXFxubmV0L3NjaGVkL0tjb25maWc6OTE3OmNvbmZpZyBORVRfQUNUX0NUXFxubmV0L3NjaGVkL0tjb25maWctOTE4LVxcdHRyaXN0YXRlIFxcXCJjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6NDkuNzAzNTI2NTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODA1NDEwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTkVUX0FDVF9DVCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9BQ1RfQ1RgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJ20gdGhpbmtpbmcsIHRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCBhICp0aG9yb3VnaCogdW5kZXJzdGFuZGluZy4gV2hhdCBhcmUgdGhlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGltcGxpY2F0aW9ucz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGRlcGVuZGVuY2llcywgb3IgYXJlIHdlIGNvbnNpZGVyaW5nIHRyYW5zaXRpdmUgb25lcz8gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3RpbmcgbGlicmFyaWVzOyBJIG5lZWQgdG8gYXNzZXNzIHBvdGVudGlhbCB2ZXJzaW9uIGNvbmZsaWN0cywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCwgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBzdGVtbWluZyBmcm9tIGl0cyBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIGtub3cgKndoeSogdGhpcyBtb2R1bGUgZXhpc3RzIGFuZCB3aGF0IGl0cyBwdXJwb3NlIGlzLiBXaGF0IGlzIHRoaXMgYE5FVF9BQ1RfQ1RgIGFuZCB3aGF0IGlzIGl0cyByb2xlPyBJcyBpdCBhIGNyaXRpY2FsIGNvbXBvbmVudCwgb3Igc29tZXRoaW5nIG1vcmUgcGVyaXBoZXJhbD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBjaGFuZ2VzIHRvIGBORVRfQUNUX0NUYCB3b3VsZCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtIGFuZCB3aGF0IHRoZSBpbXBhY3Qgd291bGQgYmUgb24gdGhlIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eSBvZiB0aGUgbmV0d29yay4gVGhpcyBzaG91bGQgYWxzbyBmYWN0b3IgaW4gdGhlIGRlc2lnbiBhbmQgYXJjaGl0ZWN0dXJlIGFuZCBhbGwgb2YgdGhlIGludGVyZmFjZXMgdGhpcyBtb2R1bGUgbWF5IHRvdWNoLiBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcywgbGlrZSBkZXByZWNhdGVkIGZlYXR1cmVzIG9yIGtub3duIGxpbWl0YXRpb25zPyBPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo1My40ODQwNzA3MjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzM1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0NUJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjUzLjU0NjQxMTc4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ0MjA5NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgbGluZXMgYXJvdW5kIDkxNyBpbiBgbmV0L3NjaGVkL0tjb25maWdgLlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTmV0IFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTE3LiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBjcnVjaWFsIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIGZlYXR1cmUgc2VsZWN0aW9uLCBhIGRlZmF1bHQgc2V0dGluZywgb3IgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBxdWV1ZWluZyBkaXNjaXBsaW5lIChxZGlzYykuXG5cbkknbSBleHBlY3RpbmcgdG8gZW5jb3VudGVyIGNvbmRpdGlvbmFsIGxvZ2lj4oCUYGNvbmZpZ2Agc3RhdGVtZW50cywgYGlmYCBzdGF0ZW1lbnRzLCBwb3NzaWJseSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLiBJIGFudGljaXBhdGUgc2VlaW5nIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCBiZXR3ZWVuIGRpZmZlcmVudCBzY2hlZHVsaW5nIGFsZ29yaXRobXMgb3IgZmVhdHVyZXMuIFRoZSBjb250ZXh0IHdpbGwgcHJvYmFibHkgc2hlZCBsaWdodCBvbiB3aGljaCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbnZpcm9ubWVudHMgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3QgYXBwbGljYWJsZS5cblxuVGhlIGNvZGUgbWlnaHQgYmUgZGVmaW5pbmcgYSBuZXcgdHJhZmZpYyBzaGFwaW5nIG1lY2hhbmlzbSwgb3IgYWxsb3dpbmcgY29udHJvbCBvZiB0aGUgcmF0ZSBsaW1pdGluZyBvZiBwYWNrZXRzIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZS5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGdyYW51bGFyIGxldmVsIG9mIGNvbnRyb2wgdGhlIGRldmVsb3BlcnMgaGF2ZSBvZmZlcmVkIHVzLiBJdCdzIHRpbWUgdG8gc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjU3LjM5MDYyMzkwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHNldC9yZWxlYXNlIGlwIHR1bm5lbCBtZXRhZGF0YS5cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA5MTM6XFx0XFxuIDkxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxcbiA5MTY6XFx0XFxuIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDkyMDpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xcbiA5MjE6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuIDkyMjpcXHRcXHRoZWxwXFxuIDkyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxcbiA5MjQ6XFx0XFxuIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxcbiA5Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjU3LjM5MDcxNDE2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ1NTIxNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZWVwIERpdmUgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYE5FVF9BQ1RfQ1RgIOKAkyB0aGF0J3MgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0aW9uIG1vZHVsZSwgcmlnaHQ/IEhtbSwgbmF0dXJhbGx5LCBpdCByZWxpZXMgb24gYm90aCBgTkZfQ09OTlRSQUNLYCAoTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29yZSkgYW5kIGBORl9GTE9XX1RBQkxFYCAoZmxvdyBvZmZsb2FkIGluZnJhc3RydWN0dXJlKSBiZWluZyBlbmFibGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHlvdSBjYW4ndCAqYWN0KiBvbiBjb25uZWN0aW9uIHRyYWNraW5nIGlmIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgYXJlbid0IGluIHBsYWNlLiBJIHdvdWxkbid0IGV4cGVjdCBhbnl0aGluZyBsZXNzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBleHBsaWNpdGx5IGNvbnNpZGVyIHRoZSBkZXBlbmRlbmNpZXMuIE5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYE5FVF9BQ1RfQ1RJTkZPYC4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQgc29ydCBvZiBpbmZvcm1hdGlvbiBhbmQgb3B0aW9ucyBhcmUgb2ZmZXJlZCBieSB0aGUgbW9kdWxlIEkganVzdCBjb25maXJtZWQgZGVwZW5kcyBvbiBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmbG93IHRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDEuMDM2MjM4NDMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDg2MTpcXHRcXG4gODYyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4NjM6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2Nvbm5tYXJrLlxcbiA4NjQ6XFx0XFxuIDg2NTpcXHRjb25maWcgTkVUX0FDVF9DVElORk9cXG4gODY2OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcXFwiXFxuIDg2NzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiA4Njg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX01BUktcXG4gODY5OlxcdFxcdGhlbHBcXG4gODcwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyB0cmFuc2ZlciBvZiBhIGNvbm5tYXJrIHN0b3JlZCBpbmZvcm1hdGlvbi5cXG4gODcxOlxcdFxcdCAgQ3VycmVudCBhY3Rpb25zIHRyYW5zZmVyIGNvbm5tYXJrIHN0b3JlZCBEU0NQIGludG9cXG4gODcyOlxcdFxcdCAgaXB2NC92NiBkaWZmc2VydiBhbmQvb3IgdG8gdHJhbnNmZXIgY29ubm1hcmsgdG8gcGFja2V0XFxuIDg3MzpcXHRcXHQgIG1hcmsuICBCb3RoIGFyZSB1c2VmdWwgZm9yIHJlc3RvcmluZyBlZ3Jlc3MgYmFzZWQgbWFya3NcXG4gODc0OlxcdFxcdCAgYmFjayBvbnRvIGluZ3Jlc3MgY29ubmVjdGlvbnMgZm9yIHFkaXNjIHByaW9yaXR5IG1hcHBpbmdcXG4gODc1OlxcdFxcdCAgcHVycG9zZXMuXFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjAxLjAzNjMyNjUzMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1Nzg2OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYE5FVF9BQ1RfQ1RJTkZPYCBmdW5jdGlvbmFsaXR5IGlzIGJ1aWx0IHVwIGluIHRoZSBrZXJuZWwuIEl0J3MgY2xlYXIgdGhhdCBpdCdzIHJlbHlpbmcgb24gY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHRoZSBtb2R1bGVzIGZvciBpdCwgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DT05OVFJBQ0tfTUFSS2AuIEknZCBleHBlY3QgaXQgdG8gbGV2ZXJhZ2UgdGhlIHN0YXRlZnVsIGluc3BlY3Rpb24gY2FwYWJpbGl0aWVzIHRoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciBwcm92aWRlcy4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHNlZSB3aGF0IHdlIGNhbiBsZWFybiBieSBsb29raW5nIGF0IGBORVRfQUNUX1NBTVBMRWAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgc2FtcGxpbmcgaXMgaW1wbGVtZW50ZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZGF0YSB3ZSBqdXN0IGlkZW50aWZpZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCB1dGlsaXplcyBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWxhdGlvbnNoaXAgYW5kIHRvIGJldHRlciBjb250ZXh0dWFsaXplIHdoZXJlIHRoaXMgcGFydGljdWxhciBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDQuMTEyMTE2MTI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0XFx0aGVscFxcbiA3NDY6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHBhY2tldHMgdG8gYmUgbWlycm9yZWQgb3IgcmVkaXJlY3RlZCB0b1xcbiA3NDc6XFx0XFx0ICBvdGhlciBkZXZpY2VzLlxcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzUwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9taXJyZWQuXFxuIDc1MTpcXHRcXG4gNzUyOlxcdGNvbmZpZyBORVRfQUNUX1NBTVBMRVxcbiA3NTM6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYWZmaWMgU2FtcGxpbmdcXFwiXFxuIDc1NDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDc1NTpcXHRcXHRzZWxlY3QgUFNBTVBMRVxcbiA3NTY6XFx0XFx0aGVscFxcbiA3NTc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHBhY2tldCBzYW1wbGluZyB0YyBhY3Rpb24uIFRoZSBwYWNrZXQgc2FtcGxlXFxuIDc1ODpcXHRcXHQgIGFjdGlvbiBjb25zaXN0cyBvZiBzdGF0aXN0aWNhbGx5IGNob29zaW5nIHBhY2tldHMgYW5kIHNhbXBsaW5nXFxuIDc1OTpcXHRcXHQgIHRoZW0gdXNpbmcgdGhlIHBzYW1wbGUgbW9kdWxlLlxcbiA3NjA6XFx0XFxuIDc2MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzYyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zYW1wbGUuXFxuIDc2MzpcXHRcXG4gNzY0OlxcdGNvbmZpZyBORVRfQUNUX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzowNC4xMTIyMjg2MzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MTczODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTmV0d29yayBBY3RpdmF0aW9uIFNhbXBsaW5nKipcblxuT2theSwgc28gYE5FVF9BQ1RfU0FNUExFYCBpcyBjbGVhcmx5IHJlbGlhbnQgb24gYE5FVF9DTFNfQUNUYCDigJMgdGhhdCdzIHRoZSBjb3JlIGFjdGl2YXRpb24gY2xhc3NpZmljYXRpb24uIEFuZCBpdCdzIGdvaW5nIHRvIHVzZSBgUFNBTVBMRWAgZm9yIGl0cyBzYW1wbGluZyBtZWNoYW5pc20sIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kLiBOb3csIGdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgc2VlIGhvdyBgTkVUX0FDVF9CUEZgIGZpdHMgaW50byB0aGlzIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYWN0aXZhdGlvbiBzYW1wbGluZyBwcm9jZXNzLiBXaGF0J3MgdGhlIGNvbm5lY3Rpb24/IElzIGl0IGFuIGFsdGVybmF0aXZlLCBvciBhIGNvbXBsZW1lbnQ/IExldCdzIGRpZyBpbiBhbmQgZmlndXJlIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDYuODYzOTY5NDA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzNTpcXHRcXG4gODM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODM3OlxcdFxcbiA4Mzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgzOTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfdmxhbi5cXG4gODQwOlxcdFxcbiA4NDE6XFx0Y29uZmlnIE5FVF9BQ1RfQlBGXFxuIDg0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiQlBGIGJhc2VkIGFjdGlvblxcXCJcXG4gODQzOlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gODQ0OlxcdFxcdGhlbHBcXG4gODQ1OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBleGVjdXRlIEJQRiBjb2RlIG9uIHBhY2tldHMuIFRoZSBCUEYgY29kZSB3aWxsIGRlY2lkZVxcbiA4NDY6XFx0XFx0ICBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkIG9yIG5vdC5cXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA4NDk6XFx0XFxuIDg1MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODUxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9icGYuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBORVRfQUNUX0NPTk5NQVJLXFxuIDg1NDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBSZXRyaWV2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjA2Ljg2NDA2MzM1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc5MjE4MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBJbnRlcmNvbm5lY3RlZCBXZWIgb2YgTmV0d29yayBBY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYE5FVF9BQ1RfQlBGYCBtb2R1bGUuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkVUX0NMU19BQ1RgLiBDYW4ndCBkbyBvbmUgd2l0aG91dCB0aGUgb3RoZXIsIHRoYXQncyBqdXN0IGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGlzIHNldCB1cC4gVGhleSdyZSBpbnRlcnR3aW5lZCwgYW5kIHlvdSBuZWVkIHRoYXQgYmFzZSB0byBidWlsZCB1cG9uLlxuXG5Ob3csIG15IG1pbmQgbmF0dXJhbGx5IGp1bXBzIHRvIGFub3RoZXIgcmVsYXRlZCBhY3Rpb24sIGBORVRfQUNUX0lGRWAuIEl0J3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGRlcGVuZGVuY3kuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIHdob2xlIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjA5Ljc0MzI4NTIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4ODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4ODU6XFx0XFx0aGVscFxcbiA4ODY6XFx0XFx0IFNheSBZIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHNrYiBkYXRhXFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdCBJZiB1bnN1cmUsIHNheSBOLlxcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4OTE6XFx0XFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxcbiA4OTI6XFx0XFxuIDg5MzpcXHRjb25maWcgTkVUX0FDVF9JRkVcXG4gODk0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuIDg5NTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDg5NjpcXHRcXHRzZWxlY3QgTkVUX0lGRVxcbiA4OTc6XFx0XFx0aGVscFxcbiA4OTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcXG4gODk5OlxcdFxcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XFxuIDkwMDpcXHRcXHQgIFxcXCJEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVxcXCJcXG4gOTAxOlxcdFxcdCAgIEF1dGhvcnM6IEphbWFsIEhhZGkgU2FsaW0gYW5kIERhbWFzY2VuZSBNLiBKb2FjaGltcGlsbGFpXFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5MDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDkuNzQzMzg5MzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NTYxMDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIE5ldHdvcmsgQWN0aXZhdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYE5FVF9BQ1RfSUZFYC4uLiB0aGF0J3MgdGhlIEluZGVwZW5kZW50IEZ1bmN0aW9uIEV2YWx1YXRpb24sIHJpZ2h0PyBTbywgYmFzZWQgb24gdGhlIGRlcGVuZGVuY3ksIGl0IHJlbGllcyBvbiBgTkVUX0NMU19BQ1RgIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xhc3MgYWN0aXZhdGlvbi4gU28sIGluIG90aGVyIHdvcmRzLCB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgaW5kZXBlbmRlbnQgZnVuY3Rpb24gb2YgdGhlIG5ldHdvcmsgaXMgZGVwZW5kZW50IG9uIGl0IGJlaW5nIGFjdGl2YXRlZC4gSXQgdXNlcyB0aGF0IGluZm9ybWF0aW9uIHRvIHNlbGVjdCBgTkVUX0lGRWAuIEdvdCBpdC4gTm93LCBpdCdzIHNlbGVjdGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlLCB3aGljaCBpcyBhIGtleSBzdGVwLCBidXQgaXQgbXVzdCBiZSBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIGFjdGl2YXRlZC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYnVpbGQuIE5vdywgYmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBgTkVUX0FDVF9QRURJVGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBkZWFscyB3aXRoIHBhcmFtZXRlciBlZGl0aW5nLCB3aGljaCBjb3VsZCBhZmZlY3QgYWxsIHRoZSBzdGVwcyBJIGp1c3QgdGhvdWdodCBhYm91dC4gTGV0IG1lIHNlZSB3aGVyZSB0aGF0IGxpZXMgaW4gdGhpcyBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gV2Ugc2hvdWxkIGNoZWNrIHRoYXQgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIGV4cGVjdGVkIHJlbGF0aW9uc2hpcHMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MTMuMDA5MDAyNzM0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3RhdGVsZXNzIE5BVFxcXCJcXG4gNzY2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzY3OlxcdFxcdGhlbHBcXG4gNzY4OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBkbyBzdGF0ZWxlc3MgTkFUIG9uIElQdjQgcGFja2V0cy4gIFlvdSBzaG91bGQgdXNlXFxuIDc2OTpcXHRcXHQgIG5ldGZpbHRlciBmb3IgTkFUIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3NzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X25hdC5cXG4gNzczOlxcdFxcbiA3NzQ6XFx0Y29uZmlnIE5FVF9BQ1RfUEVESVRcXG4gNzc1OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgRWRpdGluZ1xcXCJcXG4gNzc2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzc3OlxcdFxcdGhlbHBcXG4gNzc4OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBtYW5nbGUgdGhlIGNvbnRlbnQgb2YgcGFja2V0cy5cXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDc4MTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcGVkaXQuXFxuIDc4MjpcXHRcXG4gNzgzOlxcdGNvbmZpZyBORVRfQUNUX1NJTVBcXG4gNzg0OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW1wbGUgRXhhbXBsZSAoRGVidWcpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzoxMy4wMDkwOTY3MTRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3NjU2MDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHRoZSBzdW1tYXJ5LCBmcmFtZWQgYXMgeW91ciB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBBY3Rpdml0eSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldHdvcmsgYWN0aXZpdHkgZGF0YS4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBORVRfQUNUX1BFRElUYCDigJMgdGhhdCdzIHBhY2tldCBlZGl0aW5nIGFjdGl2aXR5LCByaWdodD8g4oCTIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgTkVUX0NMU19BQ1RgLiBUaGF0IG1ha2VzIHNlbnNlOyB5b3UgY2FuJ3QgcmVhbGx5IGVkaXQgc29tZXRoaW5nIHlvdSBoYXZlbid0IGNsYXNzaWZpZWQgZmlyc3QuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQncyBtb3ZlIG9udG8gYE5FVF9BQ1RfUE9MSUNFYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZmFjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjE1LjU4NTY1OTQyNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTA6XFx0XFx0ICByZXN1bHQsIGluc3RhbnRseSBkcm9wIG9yIHJlZGlyZWN0IHBhY2tldHMsIGV0Yy5cXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxcbiA3MTM6XFx0XFx0ICBleHRlbmRlZCBtYXRjaGVzLlxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRjb25maWcgTkVUX0FDVF9QT0xJQ0VcXG4gNzE2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFmZmljIFBvbGljaW5nXFxcIlxcbiA3MTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA3MTg6XFx0XFx0aGVscFxcbiA3MTk6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIHRyYWZmaWMgcG9saWNpbmcsIGkuZS4gc3RyaWN0XFxuIDcyMDpcXHRcXHQgIGJhbmR3aWR0aCBsaW1pdGluZy4gVGhpcyBhY3Rpb24gcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHBvbGljaW5nXFxuIDcyMTpcXHRcXHQgIG1vZHVsZS5cXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDcyNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcG9saWNlLlxcbiA3MjU6XFx0XFxuIDcyNjpcXHRjb25maWcgTkVUX0FDVF9HQUNUXFxuIDcyNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBhY3Rpb25zXFxcIlxcbiA3Mjg6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA3Mjk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzoxNS41ODU3NDk2OTZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDYxNzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBOZXR3b3JrIEFjdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRfQUNUX1BPTElDRWAgaXMgZGVwZW5kZW50IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQncyBub3QgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIHdheSBwb2xpY2luZyBvZnRlbiB3b3JrcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgbmVlZHMgY2xhc3NpZmljYXRpb24gdG8gZnVuY3Rpb24sIHJpZ2h0PyBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgb3Igb3Zlcmxvb2tlZCBhIHN1YnRsZSBpbnRlcnBsYXkgaGVyZS4gU2luY2UgSSdtIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgYWN0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgZ2xhbmNlIGF0IGBORVRfQUNUX1RVTk5FTF9LRVlgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxldmFudCBjb3JyZWxhdGlvbi4gR290dGEgY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLCBldmVuIGlmIGl0IHNlZW1zIGEgbGl0dGxlIHRhbmdlbnRpYWwgYXQgZmlyc3QuIEFsd2F5cyBnb29kIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBpbiB0aGlzIGFyZWEuIEl0J3Mgb2Z0ZW4gdGhlIGxlc3Mgb2J2aW91cyByZWxhdGlvbnNoaXBzIHRoYXQgdHJpcCBtZSB1cCwgc28gaXQncyBiZXN0IHRvIGJlIGFzIHRob3JvdWdoIGFzIHBvc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MTguNzkwMzcxODI0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0ICBcXFwiRGlzdHJpYnV0aW5nIExpbnV4IFRyYWZmaWMgQ29udHJvbCBDbGFzc2lmaWVyLUFjdGlvbiBTdWJzeXN0ZW1cXFwiXFxuIDkwMTpcXHRcXHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9pZmUuXFxuIDkwNTpcXHRcXG4gOTA2OlxcdGNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVlcXG4gOTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJJUCB0dW5uZWwgbWV0YWRhdGEgbWFuaXB1bGF0aW9uXFxcIlxcbiA5MDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA5MDk6XFx0XFx0aGVscFxcbiA5MTA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHNldC9yZWxlYXNlIGlwIHR1bm5lbCBtZXRhZGF0YS5cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA5MTM6XFx0XFxuIDkxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxcbiA5MTY6XFx0XFxuIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjE4Ljc5MDYyNTYwNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQyMDcwNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlc2UgbmV0d29yayBjb25maWd1cmF0aW9ucywgYW5kIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBgTkVUX0FDVF9UVU5ORUxfS0VZYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbkdpdmVuIHRoYXQsIG15IGN1cnJlbnQgc2V0dXAgaW52b2x2ZXM6XG5cbiogICBgTkVUX0NMU19BQ1RgXG4qICAgYE5FVF9BQ1RfQlBGYFxuKiAgIGBORVRfQUNUX0NUYFxuKiAgIGBORVRfQUNUX0NUSU5GT2BcbiogICBgTkVUX0FDVF9JRkVgXG4qICAgYE5FVF9BQ1RfUEVESVRgXG4qICAgYE5FVF9BQ1RfUE9MSUNFYFxuKiAgIGBORVRfQUNUX1NBTVBMRWBcbiogICBgTkVUX0FDVF9UVU5ORUxfS0VZYCAod2hpY2ggd2Uga25vdyBpcyBpbmZsdWVuY2VkIGJ5IGBORVRfQ0xTX0FDVGApXG4qICAgYE5GX0NPTk5UUkFDS2BcbiogICBgTkZfQ09OTlRSQUNLX01BUktgXG4qICAgYE5GX0NPTk5UUkFDS19MQUJFTFNgXG4qICAgYE5GX0NPTk5UUkFDS19aT05FU2BcbiogICBgTkZfRkxPV19UQUJMRWBcblxuUmlnaHQsIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgTkZfQ09OTlRSQUNLX1pPTkVTYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0J3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjMuMjMyNjk5MTEyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ3OTYzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTEyMz1jb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjQuMDM3NTAyMDg4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTUxMTgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGBORl9DT05OVFJBQ0tfTEFCRUxTYCoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiBgTkZfQ09OTlRSQUNLX0xBQkVMU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIG1vZHVsZSBpcyBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIHNvIEkgd2FudCB0byBydW4gYSBxdWljayBkaWFnbm9zdGljIGNoZWNrIHRvIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIGl0cyBqb2IuIEkgd2FudCB0byBydWxlIG91dCBhbnkgY29ubmVjdGlvbiB0cmFja2luZyBpc3N1ZXMgYmVmb3JlIEkgbW92ZSBvbiB0byBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIHN0ZXBzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjcuNzMyNjIzNTU3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxMzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTE3Nz1jb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjcuNzc5NDQxMzEyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTg3NTYyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipORl9DT05OVFJBQ0tfTUFSSyBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBORl9DT05OVFJBQ0tfTUFSS2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UgSSBoYXZlIGEgaHVuY2ggaXQncyByZWxldmFudCB0byB0aGUgY3VycmVudCBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBmaWVsZCBvcGVyYXRlcyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBMZXQgbWUgcmVjYWxsOiBpcyBpdCB1c2VkIGZvciBtYXJraW5nIGNvbm5lY3Rpb25zIGZvciBzcGVjaWZpYyBwb2xpY3kgZW5mb3JjZW1lbnQsIHJvdXRpbmcgZGVjaXNpb25zLCBvciBwZXJoYXBzIGZvciB0cmFmZmljIHNoYXBpbmc/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBjb250ZXh0IHdpbGwgZGV0ZXJtaW5lIHdoYXQgSSBuZWVkIHRvIGxvb2sgZm9yLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgbWFyayBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBuZXRmaWx0ZXIgaG9va3MsIGFuZCB3aGV0aGVyIGl0J3MgcHJvcGFnYXRpbmcgY29ycmVjdGx5IHRocm91Z2ggdGhlIGNvbm50cmFjayB0YWJsZSBlbnRyaWVzLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBhbnkgcmVsZXZhbnQgaXB0YWJsZXMgbW9kdWxlcyBhcmUgY29uZmlndXJlZCB0byBhY3Qgb24gdGhpcyBtYXJrLiBUaW1lIHRvIGNoZWNrIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgb2YgY291cnNlLCBhbmQgdGhlbiBxdWlja2x5IGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldHMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgc291cmNlIHRvIGNvbmZpcm0gdGhhdCBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIHVuZGVyIGRpZmZlcmVudCBuZXR3b3JrIHNjZW5hcmlvcyBhbmQgY29uc2lkZXIgaG93IHRoaXMgcmVsYXRlcyB0byBwb3RlbnRpYWwgcHJvYmxlbXMuIFJpZ2h0LCBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzozMC45NzgyMDE4M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwNDEzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjMxLjA1MDI0NzI2OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUwNDg3Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipORl9GTE9XX1RBQkxFIENoZWNrLUluKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBORl9GTE9XX1RBQkxFYC4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgdHJhZmZpYyBmbG93LCBsaWtlbHkgYXQgdGhlIGtlcm5lbCBsZXZlbCBnaXZlbiB0aGUgYE5GX2AgcHJlZml4LiBLbm93aW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIHRhYmxlIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dDogYXJlIHdlIHRyb3VibGVzaG9vdGluZyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgY29ubmVjdGl2aXR5IGlzc3VlLCBvciBwZXJoYXBzIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGZsb3cgbWFuYWdlbWVudD8gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHdpdGhpbi4gQSBkZWVwIGRpdmUgaW50byB0aGlzIHRhYmxlJ3Mgc3RhdHVzIGNvdWxkIHByb3ZpZGUgdGhlIGNsYXJpdHkgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgbmV4dCBzdGVwcyByZXF1aXJlZCB0byByZXNvbHZlIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc3RhdHVzIG9mIHRoZSBmbG93IHRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjM0LjUwMDczNzk4MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1OTc0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MzQuNTYwMzM4NDY4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzg4MDAxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE5FVF9DTFNfQUNUYCwgYE5FVF9BQ1RfQlBGYCwgYE5FVF9BQ1RfQ1RgLCBgTkVUX0FDVF9DVElORk9gLCBgTkVUX0FDVF9JRkVgLCBgTkVUX0FDVF9QRURJVGAsIGBORVRfQUNUX1BPTElDRWAsIGBORVRfQUNUX1NBTVBMRWAsIGBORVRfQUNUX1RVTk5FTF9LRVlgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19NQVJLYCwgYE5GX0NPTk5UUkFDS19MQUJFTFNgLCBgTkZfQ09OTlRSQUNLX1pPTkVTYCwgYW5kIGBORl9GTE9XX1RBQkxFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwZXJmb3JtYW50IGNvbmZpZ3VyYXRpb24uXG5cblNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVUX0FDVF9DVGAgYW5kIGBORl9OQVRgLiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBgTkVUX0FDVF9DVGAgZGVwZW5kcyBvbiBgTkVUX0NMU19BQ1QgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRWAuIFRoaXMgZGVwZW5kZW5jeSBjb25kaXRpb24gbWVhbnMgdGhhdCBgTkVUX0FDVF9DVGAgZG9lc24ndCBzdHJpY3RseSAqcmVxdWlyZSogYE5GX05BVGAuIElmIGBORl9OQVRgIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGVuIGBORVRfQUNUX0NUYCBhbHNvIG5lZWRzIHRvIGJlIGEgbW9kdWxlLCBidXQgaWYgYE5GX05BVGAgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGVuIGBORVRfQUNUX0NUYCBjYW4gYmUgYnVpbHQgZWl0aGVyIHdheS4gVGhhdCdzIGdvb2QsIGl0IGdpdmVzIHVzIG1vcmUgZmxleGliaWxpdHkgaW4gdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBORVRfSUZFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTEwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjM5LjEzOTE0MjA3MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDI0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JRkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lmZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvS2NvbmZpZy01LVxcbm5ldC9pZmUvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX0lGRVxcbm5ldC9pZmUvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MzkuMTg3NjkzMjI3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzQwMzE5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRyYWZmaWMgQ29udHJvbCBBY3Rpb24gSW5pdGlhbGl6YXRpb24gYW5kIER1bXBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBhY3Rpb24gbW9kdWxlcyBhcmUgc2V0IHVwLiBJIHNlZSBgTkVUX0lGRWAgaXMgaW1wbGljaXRseSBpbmNsdWRlZCBieSBgTkVUX0FDVF9JRkVgLCB3aGljaCBpcyBnb29kLiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBTYW1lIHdpdGggYFBTQU1QTEVgIGFuZCBgTkVUX0FDVF9TQU1QTEVgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIGB0Y2ZfYWN0aW9uX2luaXRgIGFuZCBgdGNmX2FjdGlvbl9kdW1wYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBBcmUgdGhlc2UgdGhlIG9ubHkgZW50cnkgcG9pbnRzPyBSaWdodCwgYHRjZl9hY3Rpb25faW5pdF8xYCBpcyBjYWxsZWQgYnkgYm90aCBgdGNmX2FjdGlvbl9pbml0YCBhbmQgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YC4gR29vZCB0byByZW1lbWJlci4gYHRjZl9hY3Rpb25fZHVtcGAgaXMgdXNlZCBpbiBgdGNhX2dldF9maWxsYCwgYHRjZl9leHRzX2R1bXBgLCBhbmQgYHRjZl9leHRzX3RlcnNlX2R1bXBgLlxuXG5TbywgaXQgc2VlbXMgdGhlIGtleSBzeW1ib2xzLCB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLCBzaG91bGQgYmU6IGB0Y2ZfYWN0aW9uX2luaXRgLCBgdGNmX2FjdGlvbl9pbml0XzFgLCBgdGNmX2FjdGlvbl9kdW1wYCwgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YCwgYW5kIGB0Y2ZfZXh0c19kdW1wYC4gVGhhdCBzZWVtcyBjb21wcmVoZW5zaXZlLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIGlmIGB0Y2ZfYWN0aW9uX2luaXRfMWAgaXMgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjQ0LjAyMTcyNzY2N1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MjUxMTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25faW5pdF8xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjQ0LjA3NzU1Nzk1M1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAzMzcyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVmlzaWJpbGl0eSBJc3N1ZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3MgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gV2h5IHdvdWxkbid0IGl0IGJlIHN0YXRpYyBpZiBpdCdzIG1lYW50IHRvIGJlIGludGVybmFsPyBUaGVuLCBJIGFsc28gbm90aWNlZCBgdGNmX2FjdGlvbl9pbml0YCBzaGFyZXMgdGhlIHNhbWUgY2hhcmFjdGVyaXN0aWMsIGl0IGlzIG5vdCBleHBvcnRlZC4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGJvdGggZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZC4gVGhpcyBjb21iaW5hdGlvbiB1c3VhbGx5IG1lYW5zIHRoZXJlJ3Mgc29tZSBwb3NzaWJpbGl0eSBvZiBleHRlcm5hbCBsaW5rYWdlLCBldmVuIGlmIHVuaW50ZW50aW9uYWwuIFBlcmhhcHMgdGhlcmUncyBhbiBpc3N1ZSB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIGluY2x1ZGUgc3RydWN0dXJlLiBPciBtYXliZSB0aGVyZSdzIGEgc3VidGxlIG1hY3JvIGRlZmluaXRpb24gYXQgcGxheS4gV2UgbmVlZCB0byBmb2xsb3cgdGhpcyBkb3duIHRoZSByYWJiaXQgaG9sZSB0byBzZWUgaWYgdGhleSBhcmUgdW5pbnRlbnRpb25hbGx5IGV4cG9zZWQgdG8gb3RoZXIgY29kZSBtb2R1bGVzLCBvciBpZiB0aGVyZSBpcyBhbm90aGVyIG1vZHVsZSB3aXRoIHNpbWlsYXIgaW50ZXJuYWwgcmVxdWlyZW1lbnRzLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbiB1bmV4cGVjdGVkIGV4dGVybmFsIGRlcGVuZGVuY3ksIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgYW5kIHNlZSBpZiB0aGUgcHJvYmxlbSBleGlzdHMgdGhlcmUgdG9vLCBvciBpZiB0aGlzIGlzc3VlIGlzIGxpbWl0ZWQgdG8gb25lIHNwZWNpZmljIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6NDcuNzgwOTM0NDQ0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2NDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0Y2ZfZXh0c192YWxpZGF0ZV9leFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MzQwNz1pbnQgdGNmX2V4dHNfdmFsaWRhdGVfZXgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDU4LX1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM0NTk6RVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c192YWxpZGF0ZV9leCk7XFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Nzo0Ny44MjcyMDUyMzlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MzM0NDk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVmFsaWRhdGluZyB0aGUgRXh0ZW5zaW9uIE1vZHVsZSBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciBkb3duIHRoaXMgcGF0aCwgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIHRoYXQgdGhlIHJlbGF0ZWQgYHRjZl9leHRzX2R1bXBgIGZ1bmN0aW9uIGV4aXN0cyBhcyB3ZWxsLiBUaGlzIHdpbGwgaGVscCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtb2R1bGUgaGFuZGxlcyBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhbmQgaG93IEkgY2FuIGFuYWx5emUgaXQuIEl0J3MgYWx3YXlzIHVzZWZ1bCB0byBoYXZlIHRoYXQgZXh0cmEgZGVidWdnaW5nIHV0aWxpdHkgcmVhZGlseSBhdmFpbGFibGUgYXMgSSBkaWcgZGVlcGVyIGludG8gdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjUwLjYwMDU1MzQ1MloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDM4NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9leHRzX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTM0OTE9aW50IHRjZl9leHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTI5LX1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1MzA6RVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c19kdW1wKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1MzEtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM1NTg9aW50IHRjZl9leHRzX2R1bXBfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTY2LX1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1Njc6RVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c19kdW1wX3N0YXRzKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjUxLjEyNDk5NzgxN1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQzOTAzNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgVGltZTogRXhwbG9yaW5nIFRDRiBEdW1wcyoqXG5cbk9rYXksIHNvIGB0Y2ZfZXh0c19kdW1wYCBpcyBleHBvcnRlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIGB0Y2ZfYWN0aW9uX2R1bXBgLiBJdCBmZWVscyBsaWtlIHRoZXJlJ3MgYSBjb25uZWN0aW9uIHRoZXJlLCBhIHJlbGF0ZWQgc2V0IG9mIGR1bXBzIHRoYXQgbGlrZWx5IHByb3ZpZGUgY29tcGxlbWVudGFyeSBpbmZvcm1hdGlvbi4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgaW5zaWdodHMgaW50byB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRjZl9hY3Rpb25fZHVtcGAgaXMgdGVsbGluZyB1cyB0b28uIEl0IHdpbGwgYmUgaGVscGZ1bCBpbiBkZXRlcm1pbmluZyB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYW5kIGlmIHRoZXJlJ3MgYW4gb3Bwb3J0dW5pdHkgdG8gZ2xlYW4gbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIG91dHB1dHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjU0LjY2ODkwNjM0MloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1NDM4ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25fZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Nzo1NC43MzI0NjAxOThaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg3OTA0NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEMgQWN0aW9uIE5ldGxpbmsgRHVtcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIEknbSBsb29raW5nIGF0IGlzbid0IGV4cG9ydGVkLCBidXQgdGhhdCdzIGZpbmUuIFRoZSBrZXkgZnVuY3Rpb25zLCBgdGNmX2FjdGlvbl9pbml0YCwgYHRjZl9hY3Rpb25faW5pdF8xYCwgYW5kIGB0Y2ZfYWN0aW9uX2R1bXBgLCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gcGVyZmVjdCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5MZXQncyBxdWlja2x5IGdvIG92ZXIgdGhlIGNoYW5nZXMgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIFRDIGFjdGlvbnMuIFRoZSBhaW0gaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIE5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgd2hlbiBkdW1waW5nIGFuIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyB3ZSBoYW5kbGUgTmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIFRoYXQncyBhIGRlZmluaXRlIHJlZCBmbGFnIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGluYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbnMgaGVyZSBjb3VsZCBvcGVuIHRoZSBkb29yIHRvIGJ1ZmZlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgd3JpdGVzLCBvciwgYXQgYSBtaW5pbXVtLCBgRU1TR1NJWkVgIGVycm9ycy5cblxuSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBORVRfQ0xTX0FDVGAsIGFuZCB0aGUgVEMgYWN0aW9uIG1vZHVsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGBORl9DT05OVFJBQ0tfWk9ORVNgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGFyZSBlbmFibGVkLlxuXG5NeSBtYWluIGZvY3VzIHN5bWJvbHMsIGFzIHN0YXRlZCBiZWZvcmUsIGFyZSBgdGNmX2FjdGlvbl9pbml0YCwgYHRjZl9hY3Rpb25faW5pdF8xYCwgYHRjZl9hY3Rpb25fZHVtcGAsIGFzIHdlbGwgYXMgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YCBhbmQgYHRjZl9leHRzX2R1bXBgLi5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiBhZmZlY3RlZC4gQWgsIHllczogYGFjdF9hcGkuY2AsIGBhY3RfYnBmLmNgLCBgYWN0X2N0LmNgLCBgYWN0X2N0aW5mby5jYCwgYGFjdF9pZmUuY2AsIGBhY3RfcGVkaXQuY2AsIGBhY3RfcG9saWNlLmNgLCBgYWN0X3NhbXBsZS5jYCwgYW5kIGBhY3RfdHVubmVsX2tleS5jYC4gT2theSwgc28gdGhvc2UgYXJlIGFsbCB0aGUgYWN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGlzIGFkZGluZyB0aG9zZSBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZSBzaXplcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBUQyBhY3Rpb24gTmV0bGluayBkdW1wIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgaW4gdGhlc2Ugc2NlbmFyaW9zIGNvdWxkIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgbmFzdHkgcHJvYmxlbXMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIE5ldGxpbmsgbWVzc2FnZS4gVGltZSB0byBnZXQgdGhpcyBmb3JtYXR0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODc4LCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1ODowMy42MTE1MDg1NDZaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIyMTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfQlBGXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJORVRfQUNUX0NUSU5GT1wiLFxuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9BQ1RfUEVESVRcIixcbiAgICBcIk5FVF9BQ1RfUE9MSUNFXCIsXG4gICAgXCJORVRfQUNUX1NBTVBMRVwiLFxuICAgIFwiTkVUX0FDVF9UVU5ORUxfS0VZXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19NQVJLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTEFCRUxTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfWk9ORVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX2luaXRcIixcbiAgICBcInRjZl9hY3Rpb25faW5pdF8xXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2R1bXBcIixcbiAgICBcInRjZl9leHRzX3ZhbGlkYXRlX2V4XCIsXG4gICAgXCJ0Y2ZfZXh0c19kdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCdzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfQlBGXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJORVRfQUNUX0NUSU5GT1wiLFxuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9BQ1RfUEVESVRcIixcbiAgICBcIk5FVF9BQ1RfUE9MSUNFXCIsXG4gICAgXCJORVRfQUNUX1NBTVBMRVwiLFxuICAgIFwiTkVUX0FDVF9UVU5ORUxfS0VZXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19NQVJLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTEFCRUxTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfWk9ORVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX2luaXRcIixcbiAgICBcInRjZl9hY3Rpb25faW5pdF8xXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2R1bXBcIixcbiAgICBcInRjZl9leHRzX3ZhbGlkYXRlX2V4XCIsXG4gICAgXCJ0Y2ZfZXh0c19kdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCdzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU4OjAzLjY5MTczNzQ0NFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDAxMzgxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1ODowMy42OTIyNDcyOTVaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTcxOTk2MjQxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcGF5bG9hZCBzaXplIHJlcXVpcmVkIHdoZW4gZHVtcGluZyB0aGVzZSBhY3Rpb25zIHRvIHVzZXJzcGFjZS4gSXQgYWxzbyBmaXhlcyBhIHNpemUgY2FsY3VsYXRpb24gaW4gYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIHRvIGFjY291bnQgZm9yIDY0LWJpdCBwYWRkaW5nLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBpbnZvbHZlIGNhbGN1bGF0aW5nIHNpemVzIChyZXR1cm5pbmcgYHNpemVfdGApIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvIG5vdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG8gbm90IGFkZCBjb21wbGV4IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBhIHNpemUgaXMgbWlzY2FsY3VsYXRlZCwgaXQgd291bGQgZWl0aGVyIHJlc3VsdCBpbiBhbiBgRU1TR1NJWkVgIGVycm9yIGR1cmluZyBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIG9yIHBvdGVudGlhbGx5IGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgdGhlIGJ1ZmZlciBzaXplIGlzIHVuZGVyZXN0aW1hdGVkIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBtaXNzaW5nICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4pLiBOZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIHVzZXMgYG5sYV9wdXRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyB3aGljaCB1cGRhdGUgdGhlIGBza2ItXFx1MDAzZWxlbmAgYXBwcm9wcmlhdGVseSwgc28gb3ZlcmVzdGltYXRpbmcgdGhlIHNpemUgc2ltcGx5IGxlYXZlcyB1bnVzZWQgdGFpbHJvb20gaW4gdGhlIHNvY2tldCBidWZmZXIgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDo1NTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5pbmRleCA2MDBiNzgwNGJlZmQyLi5iNDQxNWQzNThjOTExIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuQEAgLTQ1Miw3ICs0NTIsMTAgQEAgc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiBcdFx0LyogVENBX1NUQVRTX1FVRVVFICovXG4gXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKSlcbiBcdFx0KyBubGFfdG90YWxfc2l6ZSgwKSAvKiBUQ0FfQUNUX09QVElPTlMgbmVzdGVkICovXG4tXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOyAvKiBUQ0FfR0FDVF9UTSAqL1xuK1x0XHQvKiBUQ0FfR0FDVF9UTTsgYWN0aW9ucyBkdW1wIHRoZWlyIHRjZl90IHdpdGggbmxhX3B1dF82NGJpdCgpLFxuK1x0XHQgKiB3aGljaCBtYXkgZW1pdCBhbiBleHRyYSBOTEFfUEFEIGF0dHJpYnV0ZS5cbitcdFx0ICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpO1xuIH1cbiBcbiBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeilcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2JwZi5jIGIvbmV0L3NjaGVkL2FjdF9icGYuY1xuaW5kZXggMDlkNDZlMTk1ZTMzYi4uMDZkOGY3OGI3MzY4MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfYnBmLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfYnBmLmNcbkBAIC0zODksNiArMzg5LDMxIEBAIHN0YXRpYyB2b2lkIHRjZl9icGZfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4gXHR0Y2ZfYnBmX2NmZ19jbGVhbnVwKFx1MDAyNnRtcCk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX2JwZl9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRzdHJ1Y3QgdGNmX2JwZiAqcHJvZyA9IHRvX2JwZihhY3QpO1xuK1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2FjdF9icGYpKTtcbitcbitcdC8qIGJwZl9vcHMgYW5kIGJwZl9udW1fb3BzIGFyZSBwdWJsaXNoZWQgYXMgc2VwYXJhdGUgc3RvcmVzIHVuZGVyXG4rXHQgKiB0Y2ZfbG9jaywgc28gdGFrZSBpdCBoZXJlIGFzIHRjZl9icGZfZHVtcCgpIGRvZXMuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZwcm9nLVx1MDAzZXRjZl9sb2NrKTtcbitcdGlmICh0Y2ZfYnBmX2lzX2VicGYocHJvZykpIHtcbitcdFx0LyogVENBX0FDVF9CUEZfTkFNRSAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKEFDVF9CUEZfTkFNRV9MRU4gKyAxKTtcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9BQ1RfQlBGX0lEICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoQlBGX1RBR19TSVpFKTsgLyogVENBX0FDVF9CUEZfVEFHICovXG4rXHR9IGVsc2Uge1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTsgLyogVENBX0FDVF9CUEZfT1BTX0xFTiAqL1xuK1x0XHQvKiBUQ0FfQUNUX0JQRl9PUFMgKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShwcm9nLVx1MDAzZWJwZl9udW1fb3BzICpcbitcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2tfZmlsdGVyKSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZwcm9nLVx1MDAzZXRjZl9sb2NrKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5raW5kXHRcdD1cdFwiYnBmXCIsXG4gXHQuaWRcdFx0PVx0VENBX0lEX0JQRixcbkBAIC0zOTcsNiArNDIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQuZHVtcFx0XHQ9XHR0Y2ZfYnBmX2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX2JwZl9jbGVhbnVwLFxuIFx0LmluaXRcdFx0PVx0dGNmX2JwZl9pbml0LFxuK1x0LmdldF9maWxsX3NpemVcdD1cdHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5zaXplXHRcdD1cdHNpemVvZihzdHJ1Y3QgdGNmX2JwZiksXG4gfTtcbiBNT0RVTEVfQUxJQVNfTkVUX0FDVChcImJwZlwiKTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IGUyNTA5NjljODRhY2EuLjM3MDA4NWFiNmVhNDEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbisrKyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTE2NTcsNiArMTY1Nyw1MSBAQCBzdGF0aWMgaW50IHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7XG4rXHRzaXplX3Qgc2l6ZTtcbitcbitcdHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0KSkgLyogVENBX0NUX1BBUk1TICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovXG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwID0gcmN1X2RlcmVmZXJlbmNlKHRvX2N0KGFjdCktXHUwMDNlcGFyYW1zKTtcbitcbitcdGlmIChwLVx1MDAzZWN0X2FjdGlvbiBcdTAwMjYgVENBX0NUX0FDVF9DTEVBUilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBUQ0FfQ1RfTUFSSywgVENBX0NUX01BUktfTUFTSyAqL1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSlcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2VtYXJrKSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZW1hcmtfbWFzaykpO1xuK1xuK1x0LyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzKSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZWxhYmVsc19tYXNrKSk7XG4rXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSlcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2V6b25lKSk7IC8qIFRDQV9DVF9aT05FICovXG4rXG4rXHRpZiAocC1cdTAwM2VjdF9hY3Rpb24gXHUwMDI2IFRDQV9DVF9BQ1RfTkFUKVxuK1x0XHQvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzc1xuK1x0XHQgKiB2YXJpYW50cywgcGx1cyBUQ0FfQ1RfTkFUX1BPUlRfe01JTixNQVh9LlxuK1x0XHQgKi9cbitcdFx0c2l6ZSArPSAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG4rXHRcdFx0KyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpO1xuK1xuK1x0LyogVENBX0NUX0hFTFBFUl97TkFNRSxGQU1JTFksUFJPVE99ICovXG4rXHRpZiAocC1cdTAwM2VoZWxwZXIpXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoTkZfQ1RfSEVMUEVSX05BTUVfTEVOKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuIFx0LmtpbmRcdFx0PVx0XCJjdFwiLFxuIFx0LmlkXHRcdD1cdFRDQV9JRF9DVCxcbkBAIC0xNjY2LDYgKzE3MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcbiBcdC5pbml0XHRcdD1cdHRjZl9jdF9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHRjZl9jdF9jbGVhbnVwLFxuIFx0LnN0YXRzX3VwZGF0ZVx0PVx0dGNmX3N0YXRzX3VwZGF0ZSxcbitcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9jdCksXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xuaW5kZXggMTg4NmZmZDJjYTk1Ni4uZmNlZDRiMTA5NGFmOCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcbkBAIC0zNTYsNiArMzU2LDE2IEBAIHN0YXRpYyB2b2lkIHRjZl9jdGluZm9fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxuIFx0XHRrZnJlZV9yY3UoY3AsIHJjdSk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdGluZm8pKSAvKiBUQ0FfQ1RJTkZPX0FDVCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSAvKiBUQ0FfQ1RJTkZPX1pPTkUgKi9cbitcdFx0LyogVENBX0NUSU5GT19QQVJNU197RFNDUF9NQVNLLERTQ1BfU1RBVEVNQVNLLENQTUFSS19NQVNLfSAqL1xuK1x0XHQrIDMgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSlcbitcdFx0LyogVENBX0NUSU5GT19TVEFUU197RFNDUF9TRVQsRFNDUF9FUlJPUixDUE1BUktfU0VUfSAqL1xuK1x0XHQrIDMgKiBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHtcbiBcdC5raW5kXHQ9IFwiY3RpbmZvXCIsXG4gXHQuaWRcdD0gVENBX0lEX0NUSU5GTyxcbkBAIC0zNjQsNiArMzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuIFx0LmR1bXBcdD0gdGNmX2N0aW5mb19kdW1wLFxuIFx0LmluaXRcdD0gdGNmX2N0aW5mb19pbml0LFxuIFx0LmNsZWFudXA9IHRjZl9jdGluZm9fY2xlYW51cCxcbitcdC5nZXRfZmlsbF9zaXplID0gdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplLFxuIFx0LnNpemVcdD0gc2l6ZW9mKHN0cnVjdCB0Y2ZfY3RpbmZvKSxcbiB9O1xuIE1PRFVMRV9BTElBU19ORVRfQUNUKFwiY3RpbmZvXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTg3OCw2ICs4NzgsMjggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gdGNmX2lmZV9kZWNvZGUoc2tiLCBhLCByZXMpO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0c3RydWN0IHRjZl9pZmVfaW5mbyAqaWZlID0gdG9faWZlKGFjdCk7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7XG4rXHRzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTtcbitcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19pZmUpKSAvKiBUQ0FfSUZFX1BBUk1TICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfRE1BQyAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBUQ0FfSUZFX1NNQUMgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZSgyKSAvKiBUQ0FfSUZFX1RZUEUgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZSgwKTsgLyogVENBX0lGRV9NRVRBTFNUICovXG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwID0gcmN1X2RlcmVmZXJlbmNlKGlmZS1cdTAwM2VwYXJhbXMpO1xuK1x0aWYgKHApIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgXHUwMDI2cC1cdTAwM2VtZXRhbGlzdCwgbWV0YWxpc3QpXG4rXHRcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7XG4gXHQua2luZCA9IFwiaWZlXCIsXG4gXHQuaWQgPSBUQ0FfSURfSUZFLFxuQEAgLTg4Niw2ICs5MDgsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7XG4gXHQuZHVtcCA9IHRjZl9pZmVfZHVtcCxcbiBcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxuIFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXG4rXHQuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5zaXplID1cdHNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSxcbiB9O1xuIE1PRFVMRV9BTElBU19ORVRfQUNUKFwiaWZlXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuY1xuaW5kZXggZDRkNDdhOTkyMWY0NS4uOTlkN2UzNjUxMGJkMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXG5AQCAtNjI2LDYgKzYyNiwyOSBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjZl9wZWRpdF9wYXJtcyAqcGFybXM7XG4rXHRzaXplX3Qgc2l6ZTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHBhcm1zID0gcmN1X2RlcmVmZXJlbmNlKHRvX3BlZGl0KGFjdCktXHUwMDNlcGFybXMpO1xuK1x0c2l6ZSA9IG5sYV90b3RhbF9zaXplKHN0cnVjdF9zaXplX3Qoc3RydWN0IHRjX3BlZGl0LCBrZXlzLFxuK1x0XHRcdFx0XHQgICAgcGFybXMtXHUwMDNldGNmcF9ua2V5cykpO1xuK1x0aWYgKHBhcm1zLVx1MDAzZXRjZnBfa2V5c19leCkge1xuK1x0XHQvKiBUQ0FfUEVESVRfS0VZU19FWCwgaG9sZGluZyBvbmUgVENBX1BFRElUX0tFWV9FWCBuZXN0IHdpdGggYVxuK1x0XHQgKiBIVFlQRSBhbmQgYSBDTUQgYXR0cmlidXRlIHBlciBrZXkuXG4rXHRcdCAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKDApXG4rXHRcdFx0KyBwYXJtcy1cdTAwM2V0Y2ZwX25rZXlzICogKG5sYV90b3RhbF9zaXplKDApXG4rXHRcdFx0XHRcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKVxuK1x0XHRcdFx0XHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wZWRpdF9vcHMgPSB7XG4gXHQua2luZFx0XHQ9XHRcInBlZGl0XCIsXG4gXHQuaWRcdFx0PVx0VENBX0lEX1BFRElULFxuQEAgLTYzNSw2ICs2NTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbiBcdC5kdW1wXHRcdD1cdHRjZl9wZWRpdF9kdW1wLFxuIFx0LmNsZWFudXBcdD1cdHRjZl9wZWRpdF9jbGVhbnVwLFxuIFx0LmluaXRcdFx0PVx0dGNmX3BlZGl0X2luaXQsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BlZGl0X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG5AQCAtNDkwLDYgKzQ5MCwxNyBAQCBzdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19wb2xpY2UpKSAvKiBUQ0FfUE9MSUNFX1RCRiAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1JBVEU2NCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BFQUtSQVRFNjQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RSQVRFNjQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RCVVJTVDY0ICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9QT0xJQ0VfUkVTVUxUICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfUE9MSUNFX0FWUkFURSAqL1xuK31cbitcbiBNT0RVTEVfQVVUSE9SKFwiQWxleGV5IEt1em5ldHNvdlwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJQb2xpY2luZyBhY3Rpb25zXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuQEAgLTUwMyw2ICs1MTQsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BvbGljZV9vcHMgPSB7XG4gXHQuZHVtcFx0XHQ9XHR0Y2ZfcG9saWNlX2R1bXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfcG9saWNlX2luaXQsXG4gXHQuY2xlYW51cFx0PVx0dGNmX3BvbGljZV9jbGVhbnVwLFxuK1x0LmdldF9maWxsX3NpemVcdD1cdHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcG9saWNlKSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5pbmRleCAyY2ViNGQxNDFiNzEzLi40NDMxOWExNTliNTVkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xuQEAgLTMxNSw2ICszMTUsMTQgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAvKiBUQ0FfU0FNUExFX1JBVEUgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9UUlVOQ19TSVpFICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi9cbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xuIFx0LmtpbmRcdCAgPSBcInNhbXBsZVwiLFxuIFx0LmlkXHQgID0gVENBX0lEX1NBTVBMRSxcbkBAIC0zMjQsNiArMzMyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xuIFx0LmR1bXBcdCAgPSB0Y2Zfc2FtcGxlX2R1bXAsXG4gXHQuaW5pdFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcbiBcdC5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCxcbitcdC5nZXRfZmlsbF9zaXplID0gdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplLFxuIFx0LmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgICAgPSB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdCAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbmluZGV4IGIxNDgwNzc2MWQ4MjkuLmZmNDAxYWNlNGYzZGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbkBAIC04MzUsNiArODM1LDg1IEBAIHN0YXRpYyBpbnQgdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3Rcbit0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4re1xuK1x0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG4rXHRpbnQgbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbitcdHNpemVfdCBzaXplID0gMDtcbitcbitcdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbitcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IChjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqKXNyYztcbitcbitcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9HRU5FVkVfe0NMQVNTLFRZUEUsREFUQX0gKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZSgyKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoMSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKG9wdC1cdTAwM2VsZW5ndGggKiA0KTtcbitcbitcdFx0bGVuIC09IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgKyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbitcdFx0c3JjICs9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgKyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbitcdH1cbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuK3tcbitcdHNpemVfdCBzaXplO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZW9wdGlvbnNfbGVuKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRTIGFuZCB0aGUgcGVyLXByb3RvY29sIG5lc3QgaW5zaWRlIGl0ICovXG4rXHRzaXplID0gbmxhX3RvdGFsX3NpemUoMCkgKyBubGFfdG90YWxfc2l6ZSgwKTtcbitcbitcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbitcdFx0c2l6ZSArPSB0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShpbmZvKTtcbitcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbitcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9WWExBTl9HQlAgKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXHR9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuK1x0XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX0VSU1BBTl97VkVSLElOREVYLERJUixIV0lEfSAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcbitcdH1cbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0c3RydWN0IHRjZl90dW5uZWxfa2V5ICp0ID0gdG9fdHVubmVsX2tleShhY3QpO1xuK1x0Y29uc3Qgc3RydWN0IHRjZl90dW5uZWxfa2V5X3BhcmFtcyAqcGFyYW1zO1xuK1x0LyogVENBX1RVTk5FTF9LRVlfUEFSTVMgKi9cbitcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y190dW5uZWxfa2V5KSk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwYXJhbXMgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VwYXJhbXMpO1xuK1x0aWYgKHBhcmFtcy1cdTAwM2V0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9XG4rXHRcdFx0XHUwMDI2cGFyYW1zLVx1MDAzZXRjZnRfZW5jX21ldGFkYXRhLVx1MDAzZXUudHVuX2luZm87XG4rXG4rXHRcdC8qIEluIGR1bXAgb3JkZXI6IFRDQV9UVU5ORUxfS0VZX0VOQ19LRVlfSUQsIHRoZSBJUHY2IGFkZHJlc3NcbitcdFx0ICogcGFpciAobGFyZ2VyIHRoYW4gdGhlIElQdjQgb25lKSwgLi4uX0VOQ19EU1RfUE9SVCxcbitcdFx0ICogLi4uX05PX0NTVU0sIC4uLl9OT19GUkFHLCB0aGUgb3B0aW9ucyBhbmQgLi4uX0VOQ197VE9TLFRUTH0uXG4rXHRcdCAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuK1x0XHRcdCsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoMClcbitcdFx0XHQrIHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoaW5mbylcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XG4gXHQua2luZFx0XHQ9XHRcInR1bm5lbF9rZXlcIixcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfVFVOTkVMX0tFWSxcbkBAIC04NDMsNiArOTIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHtcbiBcdC5kdW1wXHRcdD1cdHR1bm5lbF9rZXlfZHVtcCxcbiBcdC5pbml0XHRcdD1cdHR1bm5lbF9rZXlfaW5pdCxcbiBcdC5jbGVhbnVwXHQ9XHR0dW5uZWxfa2V5X3JlbGVhc2UsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dHVubmVsX2tleV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl90dW5uZWxfa2V5X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU4OjAzLjY5MjI0ODMyNFoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzE5OTYwMDMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVHJhZmZpYyBDb250cm9sIFBhdGNoIFNlcmllczogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhZGRpbmcgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBmb3IgdmFyaW91cyB0YyBhY3Rpb25zIGluIHRoZSBrZXJuZWwsIHRoaW5ncyBsaWtlIGB0Y2ZfYnBmX2dldF9maWxsX3NpemVgLCBgdGNmX2N0X2dldF9maWxsX3NpemVgLCBhbmQgdGhlIG90aGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGFjY3VyYXRlIHNpemUgZXN0aW1hdGVzIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgZHVtcGVkIHRvIHVzZXJzcGFjZS4gVGhlcmUncyBhbHNvIGEgY2hhbmdlIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBoYW5kbGUgNjQtYml0IHBhZGRpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ291bGQgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3M/XCIgQWZ0ZXIgYWxsLCBjYWxjdWxhdGluZyBzaXplcyBhbmQgdGhlbiBhbGxvY2F0aW5nIGEgYnVmZmVyIGJhc2VkIG9uIHRob3NlIHNpemVzICpjb3VsZCogYmUgcmlza3kuIEEgbWlzY2FsY3VsYXRpb24sIGVpdGhlciBvdmVyZXN0aW1hdGluZyBvciB1bmRlcmVzdGltYXRpbmcsIGNvdWxkIGxlYWQgdG8gcHJvYmxlbXMuIEJ1dCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbkZpcnN0bHksIHRoZXNlIGBnZXRfZmlsbF9zaXplYCBmdW5jdGlvbnMgKnJldHVybiogYSBgc2l6ZV90YC4gVGhleSBkb24ndCAqYWxsb2NhdGUqIG1lbW9yeSwgb3IgY29weSBhbnkgZGF0YSB0aGVtc2VsdmVzLiBUaGV5J3JlIGp1c3Qgc2l6ZSBjYWxjdWxhdGlvbnMuIE5ldGxpbmsncyBgbmxhX3B1dGAgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBtZXNzYWdlcywgYW5kIHRoZXkgY29weSB0aGUgY29ycmVjdCBhbW91bnQgb2YgZGF0YS4gSWYgdGhlIHNpemUgaXMgb3ZlcmVzdGltYXRlZCwgaXQganVzdCBtZWFucyBzb21lIHRhaWxyb29tIGlzIHVudXNlZCBpbiB0aGUgc2tiLCB3aGljaCBpcyBmaW5lLiBUaGUgYHNrYi1cdTAwM2VsZW5gIGlzIHVwZGF0ZWQgYnkgYG5sYV9wdXRgLCBzbyBpdCBjb3JyZWN0bHkgb25seSBzZW5kcyB0aGUgYWN0dWFsbHkgd3JpdHRlbiBieXRlcyB0byB1c2Vyc3BhY2UuIFVuZGVyZXN0aW1hdGluZyB0aGUgc2l6ZSB0cmlnZ2VycyBhbiBgRU1TR1NJWkVgIGVycm9yIG9yIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpZiB0aGUgYG5sYV9wdXRgIGltcGxlbWVudGF0aW9uLCB3aGljaCBkb2VzIHRoZSBjaGVja3MsIGlzIGJ5cGFzc2VkIChidXQgdGhpcyBpcyBhbHJlYWR5IGNoZWNrZWQpLlxuXG5UaGVuLCBsb29raW5nIGF0IHRoZSBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgY2hhbmdlLCBpdCdzIHNpbXBseSBmaXhpbmcgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIGBzdHJ1Y3QgdGNmX3RgIHRvIGFjY291bnQgZm9yIHRoZSBleHRyYSBwYWRkaW5nIGludHJvZHVjZWQgYnkgYG5sYV9wdXRfNjRiaXRgLiBUaGlzIG1ha2VzIHN1cmUgdGhlIGNvcnJlY3QgYnVmZmVyIHNpemUgaXMgYWxsb2NhdGVkLCBub3RoaW5nIG1vcmUuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqb25seSogaW50cm9kdWNlcyBzaXplIGNhbGN1bGF0aW9ucy4gSXQgZG9lc24ndCBhZGQgYW55ICpuZXcqIGBubGFfcHV0YCBjYWxscywgbm9yIGRvZXMgaXQgY3JlYXRlIG1lbW9yeSwgdGhlcmVmb3JlIGl0IGNhbm5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhlIHBhdGNoZXMgZG8gKm5vdCogaW50cm9kdWNlIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIHRoZXkgZG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LlxuXG5Pa2F5LCBsZXQncyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgdGhlbXNlbHZlcyBkb24ndCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0cy4gSSBjaGVja2VkIGVhY2ggYGdldF9maWxsX3NpemVgIGNhbGxiYWNrOlxuXG4qICAgYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWA6IExvb2tzIGdvb2QsIHJlYWRzIGluaXRpYWxpemVkIGRhdGEuXG4qICAgYHRjZl9jdF9nZXRfZmlsbF9zaXplYDogSW5pdGlhbGl6ZWQgZGF0YS5cbiogICBgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplYDogUmV0dXJucyBjb25zdGFudHMuXG4qICAgYHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZWA6IFJlYWRzIGluaXRpYWxpemVkIGBwLVx1MDAzZW1ldGFsaXN0YC5cbiogICBgdGNmX3BlZGl0X2dldF9maWxsX3NpemVgOiBSZWFkcyBpbml0aWFsaXplZCBkYXRhLlxuKiAgIGB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy5cbiogICBgdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplYDogUmV0dXJucyBjb25zdGFudHMuXG4qICAgYHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZWA6IFJlYWRzIGluaXRpYWxpemVkIGRhdGEsIGxpa2UgYG9wdGlvbnNfbGVuYCwgYGxlbmd0aGAsIGB0dW5fZmxhZ3NgLlxuXG5Ob3RoaW5nIGhlcmUgc2VlbXMgdG8gaW50cm9kdWNlIHJpc2tzIG9mIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgY29yZSBvZiBteSBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIHNlcmllcyBpcyBzb2xlbHkgYWJvdXQgYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgbmV0bGluayBkdW1wcy4gQSBtaXNjYWxjdWxhdGlvbiB3aWxsIGVpdGhlciBiZSBhIGZ1bmN0aW9uYWwgYnVnIChgRU1TR1NJWkVgIGVycm9yKSwgb3IgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGUgc2l6ZSBpcyB1c2VkIGluY29ycmVjdGx5LiBUaGlzIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIG5ldyByaXNrcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIEknbSBwcmV0dHkgc3VyZSBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEknbSBzYXRpc2ZpZWQuIE5vdywgdGltZSB0byB1c2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc3NywiT3V0cHV0VG9rZW5zIjoyNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTg6MjAuODkxODUxNzkzWiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVxcdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVxcdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowpqqk9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 20:17:05 +0000 UTC FinishedAt: 2026-08-16 20:58:22 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ACT", "NET_ACT_BPF", "NET_ACT_CT", "NET_ACT_CTINFO", "NET_ACT_IFE", "NET_ACT_PEDIT", "NET_ACT_POLICE", "NET_ACT_SAMPLE", "NET_ACT_TUNNEL_KEY", "NF_CONNTRACK", "NF_CONNTRACK_MARK", "NF_CONNTRACK_LABELS", "NF_CONNTRACK_ZONES", "NF_FLOW_TABLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ACT", "NET_ACT_BPF", "NET_ACT_CT", "NET_ACT_CTINFO", "NET_ACT_IFE", "NET_ACT_PEDIT", "NET_ACT_POLICE", "NET_ACT_SAMPLE", "NET_ACT_TUNNEL_KEY", "NF_CONNTRACK", "NF_CONNTRACK_MARK", "NF_CONNTRACK_LABELS", "NF_CONNTRACK_ZONES", "NF_FLOW_TABLE" ], "series_id": "e72071c6-ec99-43f5-a9b9-3d196236fed4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcf_action_init", "tcf_action_init_1", "tcf_action_dump", "tcf_exts_validate_ex", "tcf_exts_dump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQlBGJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVElORk8mIzM0OywKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9QRURJVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1BPTElDRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1RVTk5FTF9LRVkmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19NQVJLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19MQUJFTFMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1pPTkVTJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9pbml0XzEmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9kdW1wJiMzNDssCiAgICAmIzM0O3RjZl9leHRzX3ZhbGlkYXRlX2V4JiMzNDssCiAgICAmIzM0O3RjZl9leHRzX2R1bXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGludm9sdmUgY2FsY3VsYXRpbmcgc2l6ZXMgKHJldHVybmluZyBgc2l6ZV90YCkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG8gbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgYWRkIGNvbXBsZXggY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGEgc2l6ZSBpcyBtaXNjYWxjdWxhdGVkLCBpdCB3b3VsZCBlaXRoZXIgcmVzdWx0IGluIGFuIGBFTVNHU0laRWAgZXJyb3IgZHVyaW5nIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gb3IgcG90ZW50aWFsbHkgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgdW5kZXJlc3RpbWF0ZWQgYW5kIGJvdW5kcyBjaGVja3MgYXJlIG1pc3NpbmcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTikuIE5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmxhX3B1dGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdoaWNoIHVwZGF0ZSB0aGUgYHNrYi1cdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyB0byB2YXJpb3VzIFRDIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgdG8gZHVtcCB0aGUgYWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBuZXRsaW5rIGR1bXAgb3BlcmF0aW9ucyBmb3IgVEMgYWN0aW9ucy4gSXQmIzM5O3Mgd29ydGggZnV6emluZyBiZWNhdXNlIGluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBjYW4gbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgYEVNU0dTSVpFYCBlcnJvcnMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDo1NTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuaW5kZXggNjAwYjc4MDRiZWZkMi4uYjQ0MTVkMzU4YzkxMSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcbkBAIC00NTIsNyAmIzQzOzQ1MiwxMCBAQCBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuIFx0XHQvKiBUQ0FfU1RBVFNfUVVFVUUgKi9cbiBcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKSlcbiBcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoMCkgLyogVENBX0FDVF9PUFRJT05TIG5lc3RlZCAqL1xuLVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjZl90KSk7IC8qIFRDQV9HQUNUX1RNICovXG4mIzQzO1x0XHQvKiBUQ0FfR0FDVF9UTTsgYWN0aW9ucyBkdW1wIHRoZWlyIHRjZl90IHdpdGggbmxhX3B1dF82NGJpdCgpLFxuJiM0MztcdFx0ICogd2hpY2ggbWF5IGVtaXQgYW4gZXh0cmEgTkxBX1BBRCBhdHRyaWJ1dGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZihzdHJ1Y3QgdGNmX3QpKTtcbiB9XG4gXG4gc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX2Z1bGxfYXR0cnNfc2l6ZShzaXplX3Qgc3opXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBmLmNcbmluZGV4IDA5ZDQ2ZTE5NWUzM2IuLjA2ZDhmNzhiNzM2ODMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2JwZi5jXG5AQCAtMzg5LDYgJiM0MzszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiBcdHRjZl9icGZfY2ZnX2NsZWFudXAoXHUwMDI2dG1wKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgdGNmX2JwZl9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7XG4mIzQzO1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2FjdF9icGYpKTtcbiYjNDM7XG4mIzQzO1x0LyogYnBmX29wcyBhbmQgYnBmX251bV9vcHMgYXJlIHB1Ymxpc2hlZCBhcyBzZXBhcmF0ZSBzdG9yZXMgdW5kZXJcbiYjNDM7XHQgKiB0Y2ZfbG9jaywgc28gdGFrZSBpdCBoZXJlIGFzIHRjZl9icGZfZHVtcCgpIGRvZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuJiM0MztcdGlmICh0Y2ZfYnBmX2lzX2VicGYocHJvZykpIHtcbiYjNDM7XHRcdC8qIFRDQV9BQ1RfQlBGX05BTUUgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKEFDVF9CUEZfTkFNRV9MRU4gJiM0MzsgMSk7XG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9BQ1RfQlBGX0lEICovXG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShCUEZfVEFHX1NJWkUpOyAvKiBUQ0FfQUNUX0JQRl9UQUcgKi9cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQUNUX0JQRl9PUFNfTEVOICovXG4mIzQzO1x0XHQvKiBUQ0FfQUNUX0JQRl9PUFMgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHByb2ctXHUwMDNlYnBmX251bV9vcHMgKlxuJiM0MztcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2tfZmlsdGVyKSk7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5raW5kXHRcdD1cdFwmIzM0O2JwZlwmIzM0OyxcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfQlBGLFxuQEAgLTM5Nyw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQuZHVtcFx0XHQ9XHR0Y2ZfYnBmX2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX2JwZl9jbGVhbnVwLFxuIFx0LmluaXRcdFx0PVx0dGNmX2JwZl9pbml0LFxuJiM0MztcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfYnBmX2dldF9maWxsX3NpemUsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9icGYpLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCYjMzQ7YnBmXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IGUyNTA5NjljODRhY2EuLjM3MDA4NWFiNmVhNDEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTE2NTcsNiAmIzQzOzE2NTcsNTEgQEAgc3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xuJiM0MztcdHNpemVfdCBzaXplO1xuJiM0MztcbiYjNDM7XHRzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdCkpIC8qIFRDQV9DVF9QQVJNUyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovXG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwID0gcmN1X2RlcmVmZXJlbmNlKHRvX2N0KGFjdCktXHUwMDNlcGFyYW1zKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHAtXHUwMDNlY3RfYWN0aW9uIFx1MDAyNiBUQ0FfQ1RfQUNUX0NMRUFSKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSlcbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZW1hcmspKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2VtYXJrX21hc2spKTtcbiYjNDM7XG4mIzQzO1x0LyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpKVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzKSlcbiYjNDM7XHRcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzX21hc2spKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykpXG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2V6b25lKSk7IC8qIFRDQV9DVF9aT05FICovXG4mIzQzO1xuJiM0MztcdGlmIChwLVx1MDAzZWN0X2FjdGlvbiBcdTAwMjYgVENBX0NUX0FDVF9OQVQpXG4mIzQzO1x0XHQvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzc1xuJiM0MztcdFx0ICogdmFyaWFudHMsIHBsdXMgVENBX0NUX05BVF9QT1JUX3tNSU4sTUFYfS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxuJiM0MztcdFx0XHQmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpO1xuJiM0MztcbiYjNDM7XHQvKiBUQ0FfQ1RfSEVMUEVSX3tOQU1FLEZBTUlMWSxQUk9UT30gKi9cbiYjNDM7XHRpZiAocC1cdTAwM2VoZWxwZXIpXG4mIzQzO1x0XHRzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShORl9DVF9IRUxQRVJfTkFNRV9MRU4pXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuIFx0LmtpbmRcdFx0PVx0XCYjMzQ7Y3RcJiMzNDssXG4gXHQuaWRcdFx0PVx0VENBX0lEX0NULFxuQEAgLTE2NjYsNiAmIzQzOzE3MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcbiBcdC5pbml0XHRcdD1cdHRjZl9jdF9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHRjZl9jdF9jbGVhbnVwLFxuIFx0LnN0YXRzX3VwZGF0ZVx0PVx0dGNmX3N0YXRzX3VwZGF0ZSxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2N0X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX2N0X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdGluZm8uYyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcbmluZGV4IDE4ODZmZmQyY2E5NTYuLmZjZWQ0YjEwOTRhZjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jXG5AQCAtMzU2LDYgJiM0MzszNTYsMTYgQEAgc3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4gXHRcdGtmcmVlX3JjdShjcCwgcmN1KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0aW5mbykpIC8qIFRDQV9DVElORk9fQUNUICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkgLyogVENBX0NUSU5GT19aT05FICovXG4mIzQzO1x0XHQvKiBUQ0FfQ1RJTkZPX1BBUk1TX3tEU0NQX01BU0ssRFNDUF9TVEFURU1BU0ssQ1BNQVJLX01BU0t9ICovXG4mIzQzO1x0XHQmIzQzOyAzICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpXG4mIzQzO1x0XHQvKiBUQ0FfQ1RJTkZPX1NUQVRTX3tEU0NQX1NFVCxEU0NQX0VSUk9SLENQTUFSS19TRVR9ICovXG4mIzQzO1x0XHQmIzQzOyAzICogbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHtcbiBcdC5raW5kXHQ9IFwmIzM0O2N0aW5mb1wmIzM0OyxcbiBcdC5pZFx0PSBUQ0FfSURfQ1RJTkZPLFxuQEAgLTM2NCw2ICYjNDM7Mzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuIFx0LmR1bXBcdD0gdGNmX2N0aW5mb19kdW1wLFxuIFx0LmluaXRcdD0gdGNmX2N0aW5mb19pbml0LFxuIFx0LmNsZWFudXA9IHRjZl9jdGluZm9fY2xlYW51cCxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXG4gfTtcbiBNT0RVTEVfQUxJQVNfTkVUX0FDVChcJiMzNDtjdGluZm9cJiMzNDspO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTg3OCw2ICYjNDM7ODc4LDI4IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHRjZl9pZmVfZGVjb2RlKHNrYiwgYSwgcmVzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y2ZfaWZlX2luZm8gKmlmZSA9IHRvX2lmZShhY3QpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiYjNDM7XHRzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfaWZlKSkgLyogVENBX0lGRV9QQVJNUyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfRE1BQyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoMikgLyogVENBX0lGRV9UWVBFICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZSgwKTsgLyogVENBX0lGRV9NRVRBTFNUICovXG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwID0gcmN1X2RlcmVmZXJlbmNlKGlmZS1cdTAwM2VwYXJhbXMpO1xuJiM0MztcdGlmIChwKSB7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcdTAwMjZwLVx1MDAzZW1ldGFsaXN0LCBtZXRhbGlzdClcbiYjNDM7XHRcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xuIFx0LmtpbmQgPSBcJiMzNDtpZmVcJiMzNDssXG4gXHQuaWQgPSBUQ0FfSURfSUZFLFxuQEAgLTg4Niw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xuIFx0LmR1bXAgPSB0Y2ZfaWZlX2R1bXAsXG4gXHQuY2xlYW51cCA9IHRjZl9pZmVfY2xlYW51cCxcbiBcdC5pbml0ID0gdGNmX2lmZV9pbml0LFxuJiM0MztcdC5nZXRfZmlsbF9zaXplID0gdGNmX2lmZV9nZXRfZmlsbF9zaXplLFxuIFx0LnNpemUgPVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfaWZlX2luZm8pLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCYjMzQ7aWZlXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcbmluZGV4IGQ0ZDQ3YTk5MjFmNDUuLjk5ZDdlMzY1MTBiZDAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuY1xuQEAgLTYyNiw2ICYjNDM7NjI2LDI5IEBAIHN0YXRpYyBpbnQgdGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtcztcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHBhcm1zID0gcmN1X2RlcmVmZXJlbmNlKHRvX3BlZGl0KGFjdCktXHUwMDNlcGFybXMpO1xuJiM0MztcdHNpemUgPSBubGFfdG90YWxfc2l6ZShzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCB0Y19wZWRpdCwga2V5cyxcbiYjNDM7XHRcdFx0XHRcdCAgICBwYXJtcy1cdTAwM2V0Y2ZwX25rZXlzKSk7XG4mIzQzO1x0aWYgKHBhcm1zLVx1MDAzZXRjZnBfa2V5c19leCkge1xuJiM0MztcdFx0LyogVENBX1BFRElUX0tFWVNfRVgsIGhvbGRpbmcgb25lIFRDQV9QRURJVF9LRVlfRVggbmVzdCB3aXRoIGFcbiYjNDM7XHRcdCAqIEhUWVBFIGFuZCBhIENNRCBhdHRyaWJ1dGUgcGVyIGtleS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMClcbiYjNDM7XHRcdFx0JiM0MzsgcGFybXMtXHUwMDNldGNmcF9ua2V5cyAqIChubGFfdG90YWxfc2l6ZSgwKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwmIzM0O3BlZGl0XCYjMzQ7LFxuIFx0LmlkXHRcdD1cdFRDQV9JRF9QRURJVCxcbkBAIC02MzUsNiAmIzQzOzY1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dGNmX3BlZGl0X2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX3BlZGl0X2NsZWFudXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfcGVkaXRfaW5pdCxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BlZGl0X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG5AQCAtNDkwLDYgJiM0Mzs0OTAsMTcgQEAgc3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfcG9saWNlKSkgLyogVENBX1BPTElDRV9UQkYgKi9cbiYjNDM7XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1JBVEU2NCAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEtUUkFURTY0ICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RCVVJTVDY0ICovXG4mIzQzO1x0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi9cbiYjNDM7XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX1BPTElDRV9BVlJBVEUgKi9cbiYjNDM7fVxuJiM0MztcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0FsZXhleSBLdXpuZXRzb3ZcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtQb2xpY2luZyBhY3Rpb25zXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuQEAgLTUwMyw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wb2xpY2Vfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dGNmX3BvbGljZV9kdW1wLFxuIFx0LmluaXRcdFx0PVx0dGNmX3BvbGljZV9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHRjZl9wb2xpY2VfY2xlYW51cCxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9wb2xpY2UpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjQ0MzE5YTE1OWI1NWQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMzE1LDYgJiM0MzszMTUsMTQgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfUkFURSAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfVFJVTkNfU0laRSAqL1xuJiM0MztcdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi9cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQua2luZFx0ICA9IFwmIzM0O3NhbXBsZVwmIzM0OyxcbiBcdC5pZFx0ICA9IFRDQV9JRF9TQU1QTEUsXG5AQCAtMzI0LDYgJiM0MzszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQuZHVtcFx0ICA9IHRjZl9zYW1wbGVfZHVtcCxcbiBcdC5pbml0XHQgID0gdGNmX3NhbXBsZV9pbml0LFxuIFx0LmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLFxuJiM0MztcdC5nZXRfZmlsbF9zaXplID0gdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplLFxuIFx0LmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgICAgPSB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdCAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbmluZGV4IGIxNDgwNzc2MWQ4MjkuLmZmNDAxYWNlNGYzZGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbkBAIC04MzUsNiAmIzQzOzgzNSw4NSBAQCBzdGF0aWMgaW50IHRjZl90dW5uZWxfa2V5X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdFxuJiM0Mzt0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbiYjNDM7XHRpbnQgbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSAoY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKilzcmM7XG4mIzQzO1xuJiM0MztcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9HRU5FVkVfe0NMQVNTLFRZUEUsREFUQX0gKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKDIpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKDEpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKG9wdC1cdTAwM2VsZW5ndGggKiA0KTtcbiYjNDM7XG4mIzQzO1x0XHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbiYjNDM7XHRcdHNyYyAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VvcHRpb25zX2xlbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUUyBhbmQgdGhlIHBlci1wcm90b2NvbCBuZXN0IGluc2lkZSBpdCAqL1xuJiM0MztcdHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKSAmIzQzOyBubGFfdG90YWxfc2l6ZSgwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoaW5mbyk7XG4mIzQzO1x0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuJiM0MztcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9WWExBTl9HQlAgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuJiM0MztcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9FUlNQQU5fe1ZFUixJTkRFWCxESVIsSFdJRH0gKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNmX3R1bm5lbF9rZXkgKnQgPSB0b190dW5uZWxfa2V5KGFjdCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHRjZl90dW5uZWxfa2V5X3BhcmFtcyAqcGFyYW1zO1xuJiM0MztcdC8qIFRDQV9UVU5ORUxfS0VZX1BBUk1TICovXG4mIzQzO1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3R1bm5lbF9rZXkpKTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZXBhcmFtcyk7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2V0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPVxuJiM0MztcdFx0XHRcdTAwMjZwYXJhbXMtXHUwMDNldGNmdF9lbmNfbWV0YWRhdGEtXHUwMDNldS50dW5faW5mbztcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbiBkdW1wIG9yZGVyOiBUQ0FfVFVOTkVMX0tFWV9FTkNfS0VZX0lELCB0aGUgSVB2NiBhZGRyZXNzXG4mIzQzO1x0XHQgKiBwYWlyIChsYXJnZXIgdGhhbiB0aGUgSVB2NCBvbmUpLCAuLi5fRU5DX0RTVF9QT1JULFxuJiM0MztcdFx0ICogLi4uX05PX0NTVU0sIC4uLl9OT19GUkFHLCB0aGUgb3B0aW9ucyBhbmQgLi4uX0VOQ197VE9TLFRUTH0uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuJiM0MztcdFx0XHQmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuJiM0MztcdFx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZSgwKVxuJiM0MztcdFx0XHQmIzQzOyB0dW5uZWxfa2V5X29wdHNfZmlsbF9zaXplKGluZm8pXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4mIzQzO1x0XHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwmIzM0O3R1bm5lbF9rZXlcJiMzNDssXG4gXHQuaWRcdFx0PVx0VENBX0lEX1RVTk5FTF9LRVksXG5AQCAtODQzLDYgJiM0Mzs5MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dHVubmVsX2tleV9kdW1wLFxuIFx0LmluaXRcdFx0PVx0dHVubmVsX2tleV9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHR1bm5lbF9rZXlfcmVsZWFzZSxcbiYjNDM7XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dHVubmVsX2tleV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl90dW5uZWxfa2V5X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksXG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9CUEYmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUSU5GTyYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0lGRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1BFRElUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfUE9MSUNFJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfU0FNUExFJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfVFVOTkVMX0tFWSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX01BUksmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0xBQkVMUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfWk9ORVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25faW5pdCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2luaXRfMSYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2R1bXAmIzM0OywKICAgICYjMzQ7dGNmX2V4dHNfdmFsaWRhdGVfZXgmIzM0OywKICAgICYjMzQ7dGNmX2V4dHNfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgdG8gdmFyaW91cyBUQyBhY3Rpb25zIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgbmVlZGVkIHRvIGR1bXAgdGhlIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIEl0JiMzOTtzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNDMzMWI2NmQ5ZjM5ZWViMmM1ODdkY2I1OWQxZDFmM2M5MGEzZDMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMjA6NTU6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCA2MDBiNzgwNGJlZmQyLi5iNDQxNWQzNThjOTExIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTQ1Miw3ICYjNDM7NDUyLDEwIEBAIHN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiAJCS8qIFRDQV9TVEFUU19RVUVVRSAqLwogCQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IGduZXRfc3RhdHNfcXVldWUpKQogCQkmIzQzOyBubGFfdG90YWxfc2l6ZSgwKSAvKiBUQ0FfQUNUX09QVElPTlMgbmVzdGVkICovCi0JCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNmX3QpKTsgLyogVENBX0dBQ1RfVE0gKi8KJiM0MzsJCS8qIFRDQV9HQUNUX1RNOyBhY3Rpb25zIGR1bXAgdGhlaXIgdGNmX3Qgd2l0aCBubGFfcHV0XzY0Yml0KCksCiYjNDM7CQkgKiB3aGljaCBtYXkgZW1pdCBhbiBleHRyYSBOTEFfUEFEIGF0dHJpYnV0ZS4KJiM0MzsJCSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOwogfQogCiBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeikKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYnBmLmMgYi9uZXQvc2NoZWQvYWN0X2JwZi5jCmluZGV4IDA5ZDQ2ZTE5NWUzM2IuLjA2ZDhmNzhiNzM2ODMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9icGYuYwpAQCAtMzg5LDYgJiM0MzszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKIAl0Y2ZfYnBmX2NmZ19jbGVhbnVwKCZhbXA7dG1wKTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2JwZl9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7CiYjNDM7CXNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19hY3RfYnBmKSk7CiYjNDM7CiYjNDM7CS8qIGJwZl9vcHMgYW5kIGJwZl9udW1fb3BzIGFyZSBwdWJsaXNoZWQgYXMgc2VwYXJhdGUgc3RvcmVzIHVuZGVyCiYjNDM7CSAqIHRjZl9sb2NrLCBzbyB0YWtlIGl0IGhlcmUgYXMgdGNmX2JwZl9kdW1wKCkgZG9lcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3Byb2ctJmd0O3RjZl9sb2NrKTsKJiM0MzsJaWYgKHRjZl9icGZfaXNfZWJwZihwcm9nKSkgewomIzQzOwkJLyogVENBX0FDVF9CUEZfTkFNRSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoQUNUX0JQRl9OQU1FX0xFTiAmIzQzOyAxKTsKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX0FDVF9CUEZfSUQgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKEJQRl9UQUdfU0laRSk7IC8qIFRDQV9BQ1RfQlBGX1RBRyAqLwomIzQzOwl9IGVsc2UgewomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQUNUX0JQRl9PUFNfTEVOICovCiYjNDM7CQkvKiBUQ0FfQUNUX0JQRl9PUFMgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHByb2ctJmd0O2JwZl9udW1fb3BzICoKJiM0MzsJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3Byb2ctJmd0O3RjZl9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmtpbmQJCT0JJiMzNDticGYmIzM0OywKIAkuaWQJCT0JVENBX0lEX0JQRiwKQEAgLTM5Nyw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmR1bXAJCT0JdGNmX2JwZl9kdW1wLAogCS5jbGVhbnVwCT0JdGNmX2JwZl9jbGVhbnVwLAogCS5pbml0CQk9CXRjZl9icGZfaW5pdCwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0Y2ZfYnBmX2dldF9maWxsX3NpemUsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfYnBmKSwKIH07CiBNT0RVTEVfQUxJQVNfTkVUX0FDVCgmIzM0O2JwZiYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuYwppbmRleCBlMjUwOTY5Yzg0YWNhLi4zNzAwODVhYjZlYTQxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9jdC5jCkBAIC0xNjU3LDYgJiM0MzsxNjU3LDUxIEBAIHN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwomIzQzOwlzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdCkpIC8qIFRDQV9DVF9QQVJNUyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovCiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcCA9IHJjdV9kZXJlZmVyZW5jZSh0b19jdChhY3QpLSZndDtwYXJhbXMpOwomIzQzOwomIzQzOwlpZiAocC0mZ3Q7Y3RfYWN0aW9uICZhbXA7IFRDQV9DVF9BQ1RfQ0xFQVIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogVENBX0NUX01BUkssIFRDQV9DVF9NQVJLX01BU0sgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSkKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDttYXJrKSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7bWFya19tYXNrKSk7CiYjNDM7CiYjNDM7CS8qIFRDQV9DVF9MQUJFTFMsIFRDQV9DVF9MQUJFTFNfTUFTSyAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7bGFiZWxzKSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7bGFiZWxzX21hc2spKTsKJiM0MzsKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykpCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YocC0mZ3Q7em9uZSkpOyAvKiBUQ0FfQ1RfWk9ORSAqLwomIzQzOwomIzQzOwlpZiAocC0mZ3Q7Y3RfYWN0aW9uICZhbXA7IFRDQV9DVF9BQ1RfTkFUKQomIzQzOwkJLyogVENBX0NUX05BVF9JUFY2X3tNSU4sTUFYfSwgdGhlIGxhcmdlciBvZiB0aGUgdHdvIGFkZHJlc3MKJiM0MzsJCSAqIHZhcmlhbnRzLCBwbHVzIFRDQV9DVF9OQVRfUE9SVF97TUlOLE1BWH0uCiYjNDM7CQkgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkKJiM0MzsJCQkmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpOwomIzQzOwomIzQzOwkvKiBUQ0FfQ1RfSEVMUEVSX3tOQU1FLEZBTUlMWSxQUk9UT30gKi8KJiM0MzsJaWYgKHAtJmd0O2hlbHBlcikKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKE5GX0NUX0hFTFBFUl9OQU1FX0xFTikKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpOwomIzQzO291dDoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0gewogCS5raW5kCQk9CSYjMzQ7Y3QmIzM0OywKIAkuaWQJCT0JVENBX0lEX0NULApAQCAtMTY2Niw2ICYjNDM7MTcxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0gewogCS5pbml0CQk9CXRjZl9jdF9pbml0LAogCS5jbGVhbnVwCT0JdGNmX2N0X2NsZWFudXAsCiAJLnN0YXRzX3VwZGF0ZQk9CXRjZl9zdGF0c191cGRhdGUsCiYjNDM7CS5nZXRfZmlsbF9zaXplCT0JdGNmX2N0X2dldF9maWxsX3NpemUsCiAJLm9mZmxvYWRfYWN0X3NldHVwID0JdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwLAogCS5zaXplCQk9CXNpemVvZihzdHJ1Y3QgdGNmX2N0KSwKIH07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uYwppbmRleCAxODg2ZmZkMmNhOTU2Li5mY2VkNGIxMDk0YWY4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMKQEAgLTM1Niw2ICYjNDM7MzU2LDE2IEBAIHN0YXRpYyB2b2lkIHRjZl9jdGluZm9fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKQogCQlrZnJlZV9yY3UoY3AsIHJjdSk7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdGluZm8pKSAvKiBUQ0FfQ1RJTkZPX0FDVCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpIC8qIFRDQV9DVElORk9fWk9ORSAqLwomIzQzOwkJLyogVENBX0NUSU5GT19QQVJNU197RFNDUF9NQVNLLERTQ1BfU1RBVEVNQVNLLENQTUFSS19NQVNLfSAqLwomIzQzOwkJJiM0MzsgMyAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKQomIzQzOwkJLyogVENBX0NUSU5GT19TVEFUU197RFNDUF9TRVQsRFNDUF9FUlJPUixDUE1BUktfU0VUfSAqLwomIzQzOwkJJiM0MzsgMyAqIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7CiAJLmtpbmQJPSAmIzM0O2N0aW5mbyYjMzQ7LAogCS5pZAk9IFRDQV9JRF9DVElORk8sCkBAIC0zNjQsNiAmIzQzOzM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHsKIAkuZHVtcAk9IHRjZl9jdGluZm9fZHVtcCwKIAkuaW5pdAk9IHRjZl9jdGluZm9faW5pdCwKIAkuY2xlYW51cD0gdGNmX2N0aW5mb19jbGVhbnVwLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZSwKIAkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksCiB9OwogTU9EVUxFX0FMSUFTX05FVF9BQ1QoJiMzNDtjdGluZm8mIzM0Oyk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lmZS5jIGIvbmV0L3NjaGVkL2FjdF9pZmUuYwppbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfaWZlLmMKQEAgLTg3OCw2ICYjNDM7ODc4LDI4IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYWN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IHRjZl9pZmVfcGFyYW1zICpwOwomIzQzOwlzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTsKJiM0MzsJc2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2lmZSkpIC8qIFRDQV9JRkVfUEFSTVMgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBUQ0FfSUZFX0RNQUMgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBUQ0FfSUZFX1NNQUMgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKDIpIC8qIFRDQV9JRkVfVFlQRSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoMCk7IC8qIFRDQV9JRkVfTUVUQUxTVCAqLwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXAgPSByY3VfZGVyZWZlcmVuY2UoaWZlLSZndDtwYXJhbXMpOwomIzQzOwlpZiAocCkgewomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmFtcDtwLSZndDttZXRhbGlzdCwgbWV0YWxpc3QpCiYjNDM7CQkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7CiAJLmtpbmQgPSAmIzM0O2lmZSYjMzQ7LAogCS5pZCA9IFRDQV9JRF9JRkUsCkBAIC04ODYsNiAmIzQzOzkwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHsKIAkuZHVtcCA9IHRjZl9pZmVfZHVtcCwKIAkuY2xlYW51cCA9IHRjZl9pZmVfY2xlYW51cCwKIAkuaW5pdCA9IHRjZl9pZmVfaW5pdCwKJiM0MzsJLmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsCiAJLnNpemUgPQlzaXplb2Yoc3RydWN0IHRjZl9pZmVfaW5mbyksCiB9OwogTU9EVUxFX0FMSUFTX05FVF9BQ1QoJiMzNDtpZmUmIzM0Oyk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKaW5kZXggZDRkNDdhOTkyMWY0NS4uOTlkN2UzNjUxMGJkMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwpAQCAtNjI2LDYgJiM0Mzs2MjYsMjkgQEAgc3RhdGljIGludCB0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtczsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcGFybXMgPSByY3VfZGVyZWZlcmVuY2UodG9fcGVkaXQoYWN0KS0mZ3Q7cGFybXMpOwomIzQzOwlzaXplID0gbmxhX3RvdGFsX3NpemUoc3RydWN0X3NpemVfdChzdHJ1Y3QgdGNfcGVkaXQsIGtleXMsCiYjNDM7CQkJCQkgICAgcGFybXMtJmd0O3RjZnBfbmtleXMpKTsKJiM0MzsJaWYgKHBhcm1zLSZndDt0Y2ZwX2tleXNfZXgpIHsKJiM0MzsJCS8qIFRDQV9QRURJVF9LRVlTX0VYLCBob2xkaW5nIG9uZSBUQ0FfUEVESVRfS0VZX0VYIG5lc3Qgd2l0aCBhCiYjNDM7CQkgKiBIVFlQRSBhbmQgYSBDTUQgYXR0cmlidXRlIHBlciBrZXkuCiYjNDM7CQkgKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApCiYjNDM7CQkJJiM0MzsgcGFybXMtJmd0O3RjZnBfbmtleXMgKiAobmxhX3RvdGFsX3NpemUoMCkKJiM0MzsJCQkJCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkKJiM0MzsJCQkJCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHsKIAkua2luZAkJPQkmIzM0O3BlZGl0JiMzNDssCiAJLmlkCQk9CVRDQV9JRF9QRURJVCwKQEAgLTYzNSw2ICYjNDM7NjU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wZWRpdF9vcHMgPSB7CiAJLmR1bXAJCT0JdGNmX3BlZGl0X2R1bXAsCiAJLmNsZWFudXAJPQl0Y2ZfcGVkaXRfY2xlYW51cCwKIAkuaW5pdAkJPQl0Y2ZfcGVkaXRfaW5pdCwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpAQCAtNDkwLDYgJiM0Mzs0OTAsMTcgQEAgc3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3BvbGljZSkpIC8qIFRDQV9QT0xJQ0VfVEJGICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9SQVRFNjQgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BFQUtSQVRFNjQgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVFJBVEU2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEtUQlVSU1Q2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9QT0xJQ0VfUkVTVUxUICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9QT0xJQ0VfQVZSQVRFICovCiYjNDM7fQomIzQzOwogTU9EVUxFX0FVVEhPUigmIzM0O0FsZXhleSBLdXpuZXRzb3YmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtQb2xpY2luZyBhY3Rpb25zJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CkBAIC01MDMsNiAmIzQzOzUxNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHsKIAkuZHVtcAkJPQl0Y2ZfcG9saWNlX2R1bXAsCiAJLmluaXQJCT0JdGNmX3BvbGljZV9pbml0LAogCS5jbGVhbnVwCT0JdGNmX3BvbGljZV9jbGVhbnVwLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwLAogCS5zaXplCQk9CXNpemVvZihzdHJ1Y3QgdGNmX3BvbGljZSksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKaW5kZXggMmNlYjRkMTQxYjcxMy4uNDQzMTlhMTU5YjU1ZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCkBAIC0zMTUsNiAmIzQzOzMxNSwxNCBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfUkFURSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfVFJVTkNfU0laRSAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi8KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7CiAJLmtpbmQJICA9ICYjMzQ7c2FtcGxlJiMzNDssCiAJLmlkCSAgPSBUQ0FfSURfU0FNUExFLApAQCAtMzI0LDYgJiM0MzszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7CiAJLmR1bXAJICA9IHRjZl9zYW1wbGVfZHVtcCwKIAkuaW5pdAkgID0gdGNmX3NhbXBsZV9pbml0LAogCS5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCwKJiM0MzsJLmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsCiAJLmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsCiAJLm9mZmxvYWRfYWN0X3NldHVwICAgID0gdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cCwKIAkuc2l6ZQkgID0gc2l6ZW9mKHN0cnVjdCB0Y2Zfc2FtcGxlKSwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMKaW5kZXggYjE0ODA3NzYxZDgyOS4uZmY0MDFhY2U0ZjNkYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMKQEAgLTgzNSw2ICYjNDM7ODM1LDg1IEBAIHN0YXRpYyBpbnQgdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdAomIzQzO3R1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHU4ICpzcmMgPSBpcF90dW5uZWxfaW5mb19vcHRzKGluZm8pOwomIzQzOwlpbnQgbGVuID0gaW5mby0mZ3Q7b3B0aW9uc19sZW47CiYjNDM7CXNpemVfdCBzaXplID0gMDsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbiAmZ3Q7IDApIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICpvcHQgPSAoY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKilzcmM7CiYjNDM7CiYjNDM7CQkvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX0dFTkVWRV97Q0xBU1MsVFlQRSxEQVRBfSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMikKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZSgxKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKG9wdC0mZ3Q7bGVuZ3RoICogNCk7CiYjNDM7CiYjNDM7CQlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtJmd0O2xlbmd0aCAqIDQ7CiYjNDM7CQlzcmMgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgJiM0Mzsgb3B0LSZndDtsZW5ndGggKiA0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7b3B0aW9uc19sZW4pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVENBX1RVTk5FTF9LRVlfRU5DX09QVFMgYW5kIHRoZSBwZXItcHJvdG9jb2wgbmVzdCBpbnNpZGUgaXQgKi8KJiM0MzsJc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApICYjNDM7IG5sYV90b3RhbF9zaXplKDApOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklULCBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKSkgewomIzQzOwkJc2l6ZSAmIzQzOz0gdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoaW5mbyk7CiYjNDM7CX0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tJmd0O2tleS50dW5fZmxhZ3MpKSB7CiYjNDM7CQkvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUCAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwl9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby0mZ3Q7a2V5LnR1bl9mbGFncykpIHsKJiM0MzsJCS8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfRVJTUEFOX3tWRVIsSU5ERVgsRElSLEhXSUR9ICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y2ZfdHVubmVsX2tleSAqdCA9IHRvX3R1bm5lbF9rZXkoYWN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IHRjZl90dW5uZWxfa2V5X3BhcmFtcyAqcGFyYW1zOwomIzQzOwkvKiBUQ0FfVFVOTkVMX0tFWV9QQVJNUyAqLwomIzQzOwlzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfdHVubmVsX2tleSkpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LSZndDtwYXJhbXMpOwomIzQzOwlpZiAocGFyYW1zLSZndDt0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPQomIzQzOwkJCSZhbXA7cGFyYW1zLSZndDt0Y2Z0X2VuY19tZXRhZGF0YS0mZ3Q7dS50dW5faW5mbzsKJiM0MzsKJiM0MzsJCS8qIEluIGR1bXAgb3JkZXI6IFRDQV9UVU5ORUxfS0VZX0VOQ19LRVlfSUQsIHRoZSBJUHY2IGFkZHJlc3MKJiM0MzsJCSAqIHBhaXIgKGxhcmdlciB0aGFuIHRoZSBJUHY0IG9uZSksIC4uLl9FTkNfRFNUX1BPUlQsCiYjNDM7CQkgKiAuLi5fTk9fQ1NVTSwgLi4uX05PX0ZSQUcsIHRoZSBvcHRpb25zIGFuZCAuLi5fRU5DX3tUT1MsVFRMfS4KJiM0MzsJCSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpCiYjNDM7CQkJJiM0MzsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoMCkKJiM0MzsJCQkmIzQzOyB0dW5uZWxfa2V5X29wdHNfZmlsbF9zaXplKGluZm8pCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHsKIAkua2luZAkJPQkmIzM0O3R1bm5lbF9rZXkmIzM0OywKIAkuaWQJCT0JVENBX0lEX1RVTk5FTF9LRVksCkBAIC04NDMsNiAmIzQzOzkyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7CiAJLmR1bXAJCT0JdHVubmVsX2tleV9kdW1wLAogCS5pbml0CQk9CXR1bm5lbF9rZXlfaW5pdCwKIAkuY2xlYW51cAk9CXR1bm5lbF9rZXlfcmVsZWFzZSwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsCiAJLm9mZmxvYWRfYWN0X3NldHVwID0JdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksCiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzgwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBEdW1wIFNpemUgQ2FsY3VsYXRpb24gZm9yIFRDIEFjdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGFjcm9zcyBhIGJ1bmNoIG9mIFRyYWZmaWMgQ29udHJvbCAoVEMpIGFjdGlvbnM6IGBhY3RfYnBmYCwgYGFjdF9jdGAsIGBhY3RfY3RpbmZvYCwgYGFjdF9pZmVgLCBgYWN0X3BlZGl0YCwgYGFjdF9wb2xpY2VgLCBgYWN0X3NhbXBsZWAsIGFuZCBgYWN0X3R1bm5lbF9rZXlgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHNvbWV0aGluZyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBuZXRsaW5rIGR1bXAgc2l6ZSBjYWxjdWxhdGlvbnMgZm9yIHRoZXNlIGFjdGlvbnMuIFRoZSBjb3JlIGlkZWEgaXMgdG8gbW92ZSBhd2F5IGZyb20gcG90ZW50aWFsbHkgd2FzdGVmdWwgZml4ZWQtc2l6ZSBhbGxvY2F0aW9ucyBhbmQgaW5zdGVhZCBkZXRlcm1pbmUgdGhlICpleGFjdCogc2l6ZSBuZWVkZWQgZm9yIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBkdW1waW5nIHRoZSBhY3Rpb24uIFRoaXMgc2hvdWxkIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFRDIGFjdGlvbnMgb3IgY29tcGxleCBjb25maWd1cmF0aW9ucy4KCkkgc2VlIHRoYXQgYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBpcyBhbHNvIGJlaW5nIHR3ZWFrZWQuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBhcmVhLCBzbyBJJiMzOTtsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBob3cgaXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG5ldyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2sgaXMgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uLiBBdm9pZGluZyBgTkxNU0dfR09PRFNJWkVgIG9yIG90aGVyIGdlbmVyaWMgYWxsb2NhdGlvbnMgaW4gZmF2b3Igb2YgYSBwcmVjaXNlIGNhbGN1bGF0aW9uIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfZmlsbF9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTQ2OT1zdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ3Mi1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDczOlx0aWYgKGFjdC1cdTAwM2VvcHMtXHUwMDNlZ2V0X2ZpbGxfc2l6ZSlcbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDc0Olx0XHRyZXR1cm4gYWN0LVx1MDAzZW9wcy1cdTAwM2VnZXRfZmlsbF9zaXplKGFjdCkgJiM0Mzsgc3o7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ3NS1cdHJldHVybiBzejtcbi0tXG5uZXQvc2NoZWQvYWN0X2JwZi5jPTM4ND1zdGF0aWMgdm9pZCB0Y2ZfYnBmX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuLS1cbm5ldC9zY2hlZC9hY3RfYnBmLmMtMzkxLVxubmV0L3NjaGVkL2FjdF9icGYuYzozOTI6c3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9icGYuYy0zOTMte1xuLS1cbm5ldC9zY2hlZC9hY3RfYnBmLmM9NDE3PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfYnBmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfYnBmLmMtNDI0LVx0LmluaXRcdFx0PVx0dGNmX2JwZl9pbml0LFxubmV0L3NjaGVkL2FjdF9icGYuYzo0MjU6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2JwZl9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9icGYuYy00MjYtXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9icGYpLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3N1bS5jPTY3ND1zdGF0aWMgdm9pZCB0Y2ZfY3N1bV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9jc3VtLmMtNjgzLVxubmV0L3NjaGVkL2FjdF9jc3VtLmM6Njg0OnN0YXRpYyBzaXplX3QgdGNmX2NzdW1fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy02ODUte1xuLS1cbm5ldC9zY2hlZC9hY3RfY3N1bS5jPTcwOD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2NzdW1fb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTcxNS1cdC5jbGVhbnVwXHQ9IHRjZl9jc3VtX2NsZWFudXAsXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo3MTY6XHQuZ2V0X2ZpbGxfc2l6ZSAgPSB0Y2ZfY3N1bV9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9jc3VtLmMtNzE3LVx0Lm9mZmxvYWRfYWN0X3NldHVwID0gdGNmX2NzdW1fb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE2MzY9c3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjU5LVxubmV0L3NjaGVkL2FjdF9jdC5jOjE2NjA6c3RhdGljIHNpemVfdCB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2MS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE3MDU9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE3MTMtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfc3RhdHNfdXBkYXRlLFxubmV0L3NjaGVkL2FjdF9jdC5jOjE3MTQ6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2N0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxNS1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zNDk9c3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNTgtXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jOjM1OTpzdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM2MC17XG4tLVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYz0zNjk9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzc2LVx0LmNsZWFudXA9IHRjZl9jdGluZm9fY2xlYW51cCxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6Mzc3Olx0LmdldF9maWxsX3NpemUgPSB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTM3OC1cdC5zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXG4tLVxubmV0L3NjaGVkL2FjdF9nYWN0LmM9MTkwPXN0YXRpYyBpbnQgdGNmX2dhY3RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jLTIzMC1cbm5ldC9zY2hlZC9hY3RfZ2FjdC5jOjIzMTpzdGF0aWMgc2l6ZV90IHRjZl9nYWN0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjMyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhY3QuYz0yOTI9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYWN0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0yOTktXHQuaW5pdFx0XHQ9XHR0Y2ZfZ2FjdF9pbml0LFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MzAwOlx0LmdldF9maWxsX3NpemVcdD1cdHRjZl9nYWN0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0zMDEtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX2dhY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NjcyPXN0YXRpYyB2b2lkIHRjZl9nYXRlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY4MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY4MjpzdGF0aWMgc2l6ZV90IHRjZl9nYXRlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjgzLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03MzY9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDQtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NDU6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2dhdGVfZ2V0X2ZpbGxfc2l6ZSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0Ni1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cCxcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTg2ND1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg4MC1cbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODgxOnN0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODgyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTkwMz1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTAtXHQuaW5pdCA9IHRjZl9pZmVfaW5pdCxcbm5ldC9zY2hlZC9hY3RfaWZlLmM6OTExOlx0LmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkxMi1cdC5zaXplID1cdHNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSxcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTU5MT10Y2ZfbWlycmVkX2dldF9kZXYoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTYwNy1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6NjA4OnN0YXRpYyBzaXplX3QgdGNmX21pcnJlZF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtNjA5LXtcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTY2ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X21pcnJlZF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy02NzItXHQuaW5pdFx0XHQ9XHR0Y2ZfbWlycmVkX2luaXQsXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjY3MzpcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfbWlycmVkX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTY3NC1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfbWlycmVkX29mZmxvYWRfYWN0X3NldHVwLFxuLS1cbm5ldC9zY2hlZC9hY3RfcGVkaXQuYz01NjQ9c3RhdGljIGludCB0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuLS1cbm5ldC9zY2hlZC9hY3RfcGVkaXQuYy02MjgtXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM6NjI5OnN0YXRpYyBzaXplX3QgdGNmX3BlZGl0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTYzMC17XG4tLVxubmV0L3NjaGVkL2FjdF9wZWRpdC5jPTY1Mj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmMtNjYwLVx0LmluaXRcdFx0PVx0dGNmX3BlZGl0X2luaXQsXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM6NjYxOlx0LmdldF9maWxsX3NpemVcdD1cdHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTY2Mi1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYz00NDI9c3RhdGljIGludCB0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTQ5Mi1cbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6NDkzOnN0YXRpYyBzaXplX3QgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDk0LXtcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jPTUwOD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BvbGljZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy01MTYtXHQuY2xlYW51cFx0PVx0dGNmX3BvbGljZV9jbGVhbnVwLFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYzo1MTc6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy01MTgtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3BvbGljZV9vZmZsb2FkX2FjdF9zZXR1cCxcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTI5Nj1zdGF0aWMgaW50IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzE3LVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMTg6c3RhdGljIHNpemVfdCB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMTkte1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM9MzI2PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMzNC1cdC5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzM1Olx0LmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMzNi1cdC5nZXRfcHNhbXBsZV9ncm91cCA9IHRjZl9zYW1wbGVfZ2V0X2dyb3VwLFxuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jPTM0OD1zdGF0aWMgdm9pZCB0Y2Zfc2tiZWRpdF9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtMzU3LVxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM6MzU4OnN0YXRpYyBzaXplX3QgdGNmX3NrYmVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zNTkte1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jPTQxOD1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYmVkaXRfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQyNi1cdC5jbGVhbnVwXHQ9XHR0Y2Zfc2tiZWRpdF9jbGVhbnVwLFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM6NDI3Olx0LmdldF9maWxsX3NpemVcdD1cdHRjZl9za2JlZGl0X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy00MjgtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3NrYmVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9ODYwPXN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtODg1LVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODg2OnN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jLTg4Ny17XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9OTE3PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtOTI0LVx0LmNsZWFudXBcdD1cdHR1bm5lbF9rZXlfcmVsZWFzZSxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjkyNTpcdC5nZXRfZmlsbF9zaXplXHQ9XHR0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy05MjYtXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4tLVxubmV0L3NjaGVkL2FjdF92bGFuLmM9MzM2PXN0YXRpYyB2b2lkIHRjZl92bGFuX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuLS1cbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTM0NS1cbm5ldC9zY2hlZC9hY3Rfdmxhbi5jOjM0NjpzdGF0aWMgc2l6ZV90IHRjZl92bGFuX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF92bGFuLmMtMzQ3LXtcbi0tXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYz00MTY9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF92bGFuX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYy00MjQtXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfdmxhbl9zdGF0c191cGRhdGUsXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYzo0MjU6XHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3ZsYW5fZ2V0X2ZpbGxfc2l6ZSxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQyNi1cdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2Zfdmxhbl9vZmZsb2FkX2FjdF9zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRsaW5rIE1lc3NhZ2UgU2l6ZSBDYWxjdWxhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlc2UgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBhcmUgdGhlIG5ldyBwbGF5ZXJzIGluIHRoZSBnYW1lIGZvciBkZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiBvdXIgbmV0bGluayBtZXNzYWdlcyB3aGVuIGR1bXBpbmcgVEMgYWN0aW9ucy4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyBhIGNoYW5nZSwgYnV0IHNlZW1zIHByZXR0eSBpc29sYXRlZCB0byB0aGUgbmV0bGluayBkdW1wIHByb2NlZHVyZXMsIGFzIEkgdW5kZXJzdGFuZCBpdC4gQnV0IHN0aWxsLCB0aGUgcXVlc3Rpb24gaXM6IHNob3VsZCB3ZSBmdXp6IHRoZXNlPyBBYnNvbHV0ZWx5LiBBIG1pc2NhbGN1bGF0aW9uIGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIHNpemUgY2FsY3VsYXRpb24gaXMgd3JvbmcsIHdlIGNvdWxkIGhhdmUgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aGVuIHdlIGNvbnN0cnVjdCB0aGUgbmV0bGluayBtZXNzYWdlLCBvciBldmVuIGp1c3QgZ2V0IGBFTVNHU0laRWAgZXJyb3JzIGlmIHdlIHVuZGVyc2hvb3QgdGhlIHNpemUuIFRoYXQmIzM5O3Mgbm90IGlkZWFsLgoKU28sIGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBpdDogYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgLCBgdGNmX2lmZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgLCBhbmQgYHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZWAuCgpUaGV5IGFsbCBhcHBlYXIgdG8gYmUgY2FsbGVkIGZyb20gYHRjZl9hY3Rpb25fZmlsbF9zaXplYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZ1bmN0aW9uIG5leHQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBlbnN1cmUgdGhhdCBteSBhbmFseXNpcyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9hY3Rpb25fZmlsbF9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTQ2MT1zdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeilcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ2OC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDY5OnN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxubmV0L3NjaGVkL2FjdF9hcGkuYy00NzAte1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2OT1pbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTYtXHRcdH1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTUxNzpcdFx0c3ogJiM0Mzs9IHRjZl9hY3Rpb25fZmlsbF9zaXplKGFjdCk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTgtXHRcdC8qIFN0YXJ0IGZyb20gaW5kZXggMCAqL1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTg1OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRjZl9yZW9mZmxvYWRfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2MC17XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE4NjE6XHRzaXplX3QgYXR0cl9zaXplID0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0aW9uKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2Mi1cdHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbVENBX0FDVF9NQVhfUFJJT10gPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDEyPXRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMzktXHRcdH1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjA0MDpcdFx0YXR0cl9zaXplICYjNDM7PSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDQxLVx0XHRhY3Rpb25zW2kgLSAxXSA9IGFjdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUQyBBY3Rpb24gU2l6ZSBDYWxjdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciBuZXRsaW5rIG1lc3NhZ2VzIHVzZWQgYnkgVHJhZmZpYyBDb250cm9sIChUQykgYWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gYHRjZl9hY3Rpb25fZmlsbF9zaXplYC4gSWYgdGhhdCBzaXplIGNhbGN1bGF0aW9uIGlzIG9mZiwgd2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgYSBiYWQgZGF5IHdpdGggYHNrYl9vdmVyX3BhbmljYCBvciBzb21ldGhpbmcgc2ltaWxhciB3aGVuIHdlIHRyeSB0byBkdW1wIHRoZSBhY3Rpb25zLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGRpZyBpbnRvIHRoaXMuCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHJlY2FsbCB0aGF0IGBDT05GSUdfTkVUX0NMU19BQ1RgIGlzIHRoZSBvdmVyYXJjaGluZyBzZXR0aW5nIGZvciBUQyBhY3Rpb25zLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBmb3IgZWFjaCBhY3Rpb24uIEZvciBleGFtcGxlOgoKKiAgIGBhY3RfYnBmYCB3aWxsIG5lZWQgYENPTkZJR19ORVRfQUNUX0JQRmAgZW5hYmxlZC4KKiAgIGBhY3RfY3RgIG5lZWRzIGBDT05GSUdfTkVUX0FDVF9DVGAuCiogICBgYWN0X2N0aW5mb2AgcmVxdWlyZXMgYENPTkZJR19ORVRfQUNUX0NUSU5GT2AuCiogICBgYWN0X2lmZWA6IGBDT05GSUdfTkVUX0FDVF9JRkVgLgoqICAgYGFjdF9wZWRpdGA6IGBDT05GSUdfTkVUX0FDVF9QRURJVGAuCiogICBgYWN0X3BvbGljZWA6IGBDT05GSUdfTkVUX0FDVF9QT0xJQ0VgLgoqICAgYGFjdF9zYW1wbGVgOiBgQ09ORklHX05FVF9BQ1RfU0FNUExFYC4KKiAgIGBhY3RfdHVubmVsX2tleWA6IGBDT05GSUdfTkVUX0FDVF9UVU5ORUxfS0VZYC4KCkkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGRvdWJsZS1jaGVjayB0aG9zZSBvcHRpb25zIHdvdWxkIGJlIHRvIGdvIHN0cmFpZ2h0IGludG8gYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NzAyPWNvbmZpZyBORVRfQ0xTX0FDVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcxNC1cbm5ldC9zY2hlZC9LY29uZmlnOjcxNTpjb25maWcgTkVUX0FDVF9QT0xJQ0Vcbm5ldC9zY2hlZC9LY29uZmlnLTcxNi1cdHRyaXN0YXRlIFwmIzM0O1RyYWZmaWMgUG9saWNpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03MjUtXG5uZXQvc2NoZWQvS2NvbmZpZzo3MjY6Y29uZmlnIE5FVF9BQ1RfR0FDVFxubmV0L3NjaGVkL0tjb25maWctNzI3LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBhY3Rpb25zXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9NzM2PWNvbmZpZyBHQUNUX1BST0Jcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03NDEtXG5uZXQvc2NoZWQvS2NvbmZpZzo3NDI6Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXG5uZXQvc2NoZWQvS2NvbmZpZy03NDMtXHR0cmlzdGF0ZSBcJiMzNDtSZWRpcmVjdGluZyBhbmQgTWlycm9yaW5nXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNzUxLVxubmV0L3NjaGVkL0tjb25maWc6NzUyOmNvbmZpZyBORVRfQUNUX1NBTVBMRVxubmV0L3NjaGVkL0tjb25maWctNzUzLVx0dHJpc3RhdGUgXCYjMzQ7VHJhZmZpYyBTYW1wbGluZ1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTc2My1cbm5ldC9zY2hlZC9LY29uZmlnOjc2NDpjb25maWcgTkVUX0FDVF9OQVRcbm5ldC9zY2hlZC9LY29uZmlnLTc2NS1cdHRyaXN0YXRlIFwmIzM0O1N0YXRlbGVzcyBOQVRcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03NzMtXG5uZXQvc2NoZWQvS2NvbmZpZzo3NzQ6Y29uZmlnIE5FVF9BQ1RfUEVESVRcbm5ldC9zY2hlZC9LY29uZmlnLTc3NS1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBFZGl0aW5nXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNzgyLVxubmV0L3NjaGVkL0tjb25maWc6NzgzOmNvbmZpZyBORVRfQUNUX1NJTVBcbm5ldC9zY2hlZC9LY29uZmlnLTc4NC1cdHRyaXN0YXRlIFwmIzM0O1NpbXBsZSBFeGFtcGxlIChEZWJ1ZylcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03OTYtXG5uZXQvc2NoZWQvS2NvbmZpZzo3OTc6Y29uZmlnIE5FVF9BQ1RfU0tCRURJVFxubmV0L3NjaGVkL0tjb25maWctNzk4LVx0dHJpc3RhdGUgXCYjMzQ7U0tCIEVkaXRpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MDctXG5uZXQvc2NoZWQvS2NvbmZpZzo4MDg6Y29uZmlnIE5FVF9BQ1RfQ1NVTVxubmV0L3NjaGVkL0tjb25maWctODA5LVx0dHJpc3RhdGUgXCYjMzQ7Q2hlY2tzdW0gVXBkYXRpbmdcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXG5uZXQvc2NoZWQvS2NvbmZpZzo4MTk6Y29uZmlnIE5FVF9BQ1RfTVBMU1xubmV0L3NjaGVkL0tjb25maWctODIwLVx0dHJpc3RhdGUgXCYjMzQ7TVBMUyBtYW5pcHVsYXRpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo4MzA6Y29uZmlnIE5FVF9BQ1RfVkxBTlxubmV0L3NjaGVkL0tjb25maWctODMxLVx0dHJpc3RhdGUgXCYjMzQ7VmxhbiBtYW5pcHVsYXRpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NDAtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy04NDItXHR0cmlzdGF0ZSBcJiMzNDtCUEYgYmFzZWQgYWN0aW9uXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctODUyLVxubmV0L3NjaGVkL0tjb25maWc6ODUzOmNvbmZpZyBORVRfQUNUX0NPTk5NQVJLXG5uZXQvc2NoZWQvS2NvbmZpZy04NTQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIFJldHJpZXZlclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cbm5ldC9zY2hlZC9LY29uZmlnOjg2NTpjb25maWcgTkVUX0FDVF9DVElORk9cbm5ldC9zY2hlZC9LY29uZmlnLTg2Ni1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9uc1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cbm5ldC9zY2hlZC9LY29uZmlnOjg4Mjpjb25maWcgTkVUX0FDVF9TS0JNT0Rcbm5ldC9zY2hlZC9LY29uZmlnLTg4My1cdHRyaXN0YXRlIFwmIzM0O3NrYiBkYXRhIG1vZGlmaWNhdGlvbiBhY3Rpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTM6Y29uZmlnIE5FVF9BQ1RfSUZFXG5uZXQvc2NoZWQvS2NvbmZpZy04OTQtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MDUtXG5uZXQvc2NoZWQvS2NvbmZpZzo5MDY6Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxubmV0L3NjaGVkL0tjb25maWctOTA3LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdHVubmVsIG1ldGFkYXRhIG1hbmlwdWxhdGlvblwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTkxNi1cbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxubmV0L3NjaGVkL0tjb25maWctOTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo5MzA6Y29uZmlnIE5FVF9BQ1RfR0FURVxubmV0L3NjaGVkL0tjb25maWctOTMxLVx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ2xhc3NpZmllciBBY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNsYXNzaWZpZXIgYWN0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSBjb25maWd1cmVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBORVRfQ0xTX0FDVGAsIGBORVRfQUNUX0JQRmAsIGBORVRfQUNUX0NUYCwgYE5FVF9BQ1RfQ1RJTkZPYCwgYE5FVF9BQ1RfSUZFYCwgYE5FVF9BQ1RfUEVESVRgLCBgTkVUX0FDVF9QT0xJQ0VgLCBgTkVUX0FDVF9TQU1QTEVgLCBhbmQgYE5FVF9BQ1RfVFVOTkVMX0tFWWAuIFRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0cmFmZmljIGlzIGNsYXNzaWZpZWQgYW5kIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBvZiBlYWNoLCBlc3BlY2lhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggY29ubmVjdGlvbiB0cmFja2luZy4KCk5vdywgSSByZW1lbWJlciBzZWVpbmcgc29tZSBjb25kaXRpb25hbHMgaW4gYGFjdF9jdC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gbG9naWMgcmVzaWRlcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIEkgc2VlIHRob3NlIGNoZWNrczogYENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS2AsIGBDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGFuZCBgQ09ORklHX05GX0NPTk5UUkFDS19aT05FU2AuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBkYXRhIGlzIG1hbmFnZWQgYW5kIHV0aWxpemVkLiBJdCBsb29rcyBsaWtlIHRob3NlIGFyZSB1c2VkIHdoZW4gdGhlIGBORVRfQUNUX0NUYCBpcyBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvc2NoZWQvYWN0X2N0LmNgIGRpcmVjdGx5IHRvIHNlZSBob3cgdGhlc2UgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCB3aGF0IGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZfQ09OTlRSQUNLXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2N0LmM9MTc4PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZF9hY3Rpb25fbWV0YShzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE4OC1cdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fQ1RfTUVUQURBVEE7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSylcbm5ldC9zY2hlZC9hY3RfY3QuYy0xOTAtXHRlbnRyeS1cdTAwM2VjdF9tZXRhZGF0YS5tYXJrID0gUkVBRF9PTkNFKGN0LVx1MDAzZW1hcmspO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05MTY9c3RhdGljIHZvaWQgdGNmX2N0X2FjdF9zZXRfbWFyayhzdHJ1Y3QgbmZfY29ubiAqY3QsIHUzMiBtYXJrLCB1MzIgbWFzaylcbm5ldC9zY2hlZC9hY3RfY3QuYy05MTcte1xubmV0L3NjaGVkL2FjdF9jdC5jOjkxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTE5LVx0dTMyIG5ld19tYXJrO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz05MzM9c3RhdGljIHZvaWQgdGNmX2N0X2FjdF9zZXRfbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTM2LXtcbm5ldC9zY2hlZC9hY3RfY3QuYzo5Mzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTM4LVx0c2l6ZV90IGxhYmVsc19zeiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTI1OT1zdGF0aWMgaW50IHRjZl9jdF9maWxsX3BhcmFtcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyODUtXHRpZiAodGJbVENBX0NUX01BUktdKSB7XG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI4NjpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpIHtcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg3LVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0Nvbm50cmFjayBtYXJrIGlzbiYjMzk7dCBlbmFibGVkLlwmIzM0Oyk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTEyOTgtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI5OTpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSkge1xubmV0L3NjaGVkL2FjdF9jdC5jLTEzMDAtXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29ubnRyYWNrIGxhYmVscyBpc24mIzM5O3QgZW5hYmxlZC5cJiMzNDspO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzE3LVx0aWYgKHRiW1RDQV9DVF9aT05FXSkge1xubmV0L3NjaGVkL2FjdF9jdC5jOjEzMTg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSkge1xubmV0L3NjaGVkL2FjdF9jdC5jLTEzMTktXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29ubnRyYWNrIHpvbmVzIGlzbiYjMzk7dCBlbmFibGVkLlwmIzM0Oyk7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTE1NTg9c3RhdGljIGlubGluZSBpbnQgdGNmX2N0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU4My1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTg0Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSBcdTAwMjZcdTAwMjZcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTg1LVx0ICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTkwLVxubmV0L3NjaGVkL2FjdF9jdC5jOjE1OTE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgXHUwMDI2XHUwMDI2XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Mi1cdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Ny1cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTk4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19aT05FUykgXHUwMDI2XHUwMDI2XG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5OS1cdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTY2MD1zdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY3NC1cdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY3NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY3Ni1cdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbWFyaykpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NzktXHQvKiBUQ0FfQ1RfTEFCRUxTLCBUQ0FfQ1RfTEFCRUxTX01BU0sgKi9cbm5ldC9zY2hlZC9hY3RfY3QuYzoxNjgwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2ODEtXHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZWxhYmVscykpXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2ODMtXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY4NDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpKVxubmV0L3NjaGVkL2FjdF9jdC5jLTE2ODUtXHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZXpvbmUpKTsgLyogVENBX0NUX1pPTkUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY292ZXJpbmcgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGFuZCBgTkZfQ09OTlRSQUNLX1pPTkVTYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVycyBvZiBpbnRlcmVzdC4KCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IGJpdCBmbGFncyBpbiBgYWN0X3R1bm5lbF9rZXkuY2AgKGBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVRgLCBldGMuKSDigJMgdGhlc2UgYXJlIGp1c3QgYml0IGRlZmluaXRpb25zLCBzbyB0aGV5IGFyZSBub3QgY29uZmlndXJhdGlvbnMuIFRoZW4sIEkgc2VlIGBDT05GSUdfTkVUX0FDVF9CUEZgIGluIGBhY3RfYnBmLmNgLCBgQ09ORklHX05FVF9BQ1RfQ1RJTkZPYCBpbiBgYWN0X2N0aW5mby5jYCwgYENPTkZJR19ORVRfQUNUX0lGRWAgaW4gYGFjdF9pZmUuY2AsIGBDT05GSUdfTkVUX0FDVF9QRURJVGAgaW4gYGFjdF9wZWRpdC5jYCwgYENPTkZJR19ORVRfQUNUX1BPTElDRWAgaW4gYGFjdF9wb2xpY2UuY2AsIGBDT05GSUdfTkVUX0FDVF9TQU1QTEVgIGluIGBhY3Rfc2FtcGxlLmNgLCBhbmQgZmluYWxseSwgYENPTkZJR19ORVRfQUNUX1RVTk5FTF9LRVlgIGluIGBhY3RfdHVubmVsX2tleS5jYC4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBtYWtlIGEgbGlzdCBvZiBjYW5kaWRhdGUgZnVuY3Rpb25zOiBgdGNmX2FjdGlvbl9maWxsX3NpemVgLCBgdGNmX2JwZl9nZXRfZmlsbF9zaXplYCwgYHRjZl9jdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfaWZlX2dldF9maWxsX3NpemVgLCBgdGNmX3BlZGl0X2dldF9maWxsX3NpemVgLCBgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZWAsIGB0dW5uZWxfa2V5X2dldF9maWxsX3NpemVgLCBgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZWAsIGFuZCBgdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemVgLgoKQWhhLCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoYXQgYHRjZl9hY3Rpb25fZmlsbF9zaXplYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIEdpdmVuIHRoZSBndWlkZWxpbmVzLCB0aGlzIG5lZWRzIHRvIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBub3QgaW5saW5lZC4gVGhlIGluc3RydWN0aW9ucyAqcHJlZmVyKiBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gRXZlbiB0aG91Z2ggdGhlc2UgYGdldF9maWxsX3NpemVgIGZ1bmN0aW9ucyAqYXJlKiBzdGF0aWMsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgc3RydWN0IHRjX2FjdGlvbl9vcHNgLiBUaGlzIG1lYW5zIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgdGFrZW4sIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBwcm9iYWJseSB3b24mIzM5O3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5IGFyZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIHN0YXRpYy4gT2theSwgbGV0JiMzOTtzIHNlZS4gWWVzLCB0aGV5IGFyZSBzdGF0aWMhIEJ1dCBzaW5jZSB3ZSBhcmUgYXNzaWduaW5nIHRoZWlyIGFkZHJlc3NlcywgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4KCkhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIHN0YXRlIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uc2lkZXIgQVBJIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlc2Ugb3BlcmF0aW9uczogYHRjYV9hY3Rpb25fZ2RgLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnYC4gTGV0IG1lIGdvIGFoZWFkIGFuZCBjaGVjayBgdGNhX2FjdGlvbl9nZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjYV9hY3Rpb25fZ2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MjAxMT1zdGF0aWMgaW50XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwMTI6dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDEzLVx0ICAgICAgdTMyIHBvcnRpZCwgaW50IGV2ZW50LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMTMyPXN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTY5LVx0Y2FzZSBSVE1fREVMQUNUSU9OOlxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTcwOlx0XHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3MS1cdFx0XHRcdCAgICBwb3J0aWQsIFJUTV9ERUxBQ1RJT04sIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTczLVx0Y2FzZSBSVE1fR0VUQUNUSU9OOlxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTc0Olx0XHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3NS1cdFx0XHRcdCAgICBwb3J0aWQsIFJUTV9HRVRBQ1RJT04sIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzkwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBBY3Rpb24gQ29udHJvbCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBvZiBob3cgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMgYXJlIG1hbmFnZWQgdmlhIG5ldGxpbmsuIGB0Y19jdGxfYWN0aW9uYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgaGVyZTsgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGBSVE1fTkVXQUNUSU9OYCwgYFJUTV9ERUxBQ1RJT05gLCBhbmQgYFJUTV9HRVRBQ1RJT05gIG5ldGxpbmsgbWVzc2FnZXMuIFRoYXQgbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byB6ZXJvIGluIG9uLiBXaGVuIHdlJiMzOTtyZSBhZGRpbmcgYSBuZXcgYWN0aW9uIHdpdGggYFJUTV9ORVdBQ1RJT05gLCB0aGUgc3lzdGVtIGNhbGxzIGB0Y2ZfYWN0aW9uX2luaXRgLiBBbmQgZm9yIGRlbGV0aW5nIG9yIGdldHRpbmcgYW4gYWN0aW9uIOKAkyBgUlRNX0RFTEFDVElPTmAgYW5kIGBSVE1fR0VUQUNUSU9OYCDigJMgdGhlIGZ1bmN0aW9uIGB0Y2FfYWN0aW9uX2dkYCBjb21lcyBpbnRvIHBsYXkuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRjX2N0bF9hY3Rpb25gLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2FfYWN0aW9uX2dkYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHRjX2N0bF9hY3Rpb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGJpdCBtb3JlIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY3RsX2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0yMTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0Y2FhX3BvbGljeVtUQ0FfUk9PVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTMxLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTMyOnN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMzMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIyOTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2FjdGlvbl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk1Olx0ey5tc2d0eXBlID0gUlRNX05FV0FDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjI5NjpcdHsubXNndHlwZSA9IFJUTV9ERUxBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIyOTc6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUQUNUSU9OLCAuZG9pdCA9IHRjX2N0bF9hY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIyOTgtXHQgLmR1bXBpdCA9IHRjX2R1bXBfYWN0aW9ufSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgKHRjKSBBY3Rpb24gTWVjaGFuaXNtKioKCkhtbSwgc28gYHRjX2N0bF9hY3Rpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGluaXRpYWxseSBzdWdnZXN0cyBhIGxpbWl0ZWQgc2NvcGUsIHJpZ2h0PyBPbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIG5vIGRpcmVjdCBleHRlcm5hbCBjYWxscy4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gSSByZW1lbWJlciBzZWVpbmcgYHJ0bmxfbXNnX2hhbmRsZXJzYCByZWdpc3RlcmVkIHNvbWV3aGVyZS4gVGhhdCBtZWFucyB0aGUgYHRjX2N0bF9hY3Rpb25gIGZ1bmN0aW9uICppcyogbGlrZWx5IGJlaW5nIGNhbGxlZCwgbm90IGRpcmVjdGx5LCBidXQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgc3RvcmVkIHdpdGhpbiB0aGF0IHJlZ2lzdHJhdGlvbi4gTGlrZWx5IHRoaXMgaXMgaG93IGl0IHJlY2VpdmVzIHJlcXVlc3RzIHZpYSBuZXRsaW5rLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgaG93IHRob3NlIGhhbmRsZXJzIGFyZSBzZXQgdXAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGNvcmUgcGF0aC4gTm93LCB3aGF0JiMzOTtzIHRoZSByb2xlIG9mIGB0Y2ZfYWN0aW9uX2luaXRgIGluIGFsbCBvZiB0aGlzPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYHRjX2N0bF9hY3Rpb25gLiBJcyBpdCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgaXQ/IE9yIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyIGFjdGlvbiBpbml0aWFsaXphdGlvbiBzY2hlbWU/IFRoZSBpbnRlcmFjdGlvbiBoZXJlIGlzIGtleSB0byBob3cgdGMgYWN0aW9ucyBhcmUgbWFuYWdlZCBhdCBydW50aW1lLiBJIG5lZWQgdG8gcmV2aWV3IHRoZSBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTAxOD1pbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYWN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyNy1cdC8qIFdlIGhhdmUgdG8gcmVnaXN0ZXIgcGVybmV0IG9wcyBiZWZvcmUgbWFraW5nIHRoZSBhY3Rpb24gb3BzIHZpc2libGUsXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEwMjg6XHQgKiBvdGhlcndpc2UgdGNmX2FjdGlvbl9pbml0XzEoKSBjb3VsZCBnZXQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWRcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyOS1cdCAqIG5ldG5zLlxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTMzNz1zdHJ1Y3QgdGNfYWN0aW9uX29wcyAqdGNfYWN0aW9uX2xvYWRfb3BzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIGZsYWdzLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTM5OS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQwMDpzdHJ1Y3QgdGNfYWN0aW9uICp0Y2ZfYWN0aW9uX2luaXRfMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDAxLVx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2Mj1zdGF0aWMgYm9vbCB0Y19hY3RfYmluZCh1MzIgZmxhZ3MpXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDY4LVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNDY5OmludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDcwLVx0XHQgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEwLVx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IFRDQV9BQ1RfTUFYX1BSSU8gXHUwMDI2XHUwMDI2IHRiW2ldOyBpJiM0MzsmIzQzOykge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoxNTExOlx0XHRhY3QgPSB0Y2ZfYWN0aW9uX2luaXRfMShuZXQsIHRwLCB0YltpXSwgZXN0LCBvcHNbaSAtIDFdLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEyLVx0XHRcdFx0XHRcdTAwMjZpbml0X3Jlc1tpIC0gMV0sIGZsYWdzLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjA5OT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjEwOC1cdGZvciAobG9vcCA9IDA7IGxvb3AgXHUwMDNjIDEwOyBsb29wJiM0MzsmIzQzOykge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTA5Olx0XHRyZXQgPSB0Y2ZfYWN0aW9uX2luaXQobmV0LCBOVUxMLCBubGEsIE5VTEwsIGFjdGlvbnMsIGluaXRfcmVzLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTEwLVx0XHRcdFx0ICAgICAgXHUwMDI2YXR0cl9zaXplLCBmbGFncywgMCwgZXh0YWNrKTtcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0MDc9aW50IHRjZl9leHRzX3ZhbGlkYXRlX2V4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjQtXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihhX28pO1xubmV0L3NjaGVkL2Nsc19hcGkuYzozNDI1Olx0XHRcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2V4dHMtXHUwMDNlcG9saWNlXSxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzQyNi1cdFx0XHRcdFx0XHRyYXRlX3RsdiwgYV9vLCBpbml0X3JlcywgZmxhZ3MsXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDM5LVx0XHRcdGZsYWdzIHw9IFRDQV9BQ1RfRkxBR1NfQklORDtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQ0MDpcdFx0XHRlcnIgPSB0Y2ZfYWN0aW9uX2luaXQobmV0LCB0cCwgdGJbZXh0cy1cdTAwM2VhY3Rpb25dLFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDQxLVx0XHRcdFx0XHQgICAgICByYXRlX3RsdiwgZXh0cy1cdTAwM2VhY3Rpb25zLCBpbml0X3JlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTeW1ib2wgRXhwb3J0KioKCk9rYXksIHNvIGB0Y2ZfYWN0aW9uX2luaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzIHN5bWJvbCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIEFsc28sIEkgc2VlIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgaXMgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC4KClRoZSBuZXh0IHN0ZXAgaXMgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgdG8gdmVyaWZ5LCBkZWZpbml0aXZlbHksIHdoZXRoZXIgYHRjZl9hY3Rpb25faW5pdGAgaXMgaW5kZWVkIGV4cG9ydGVkIGFzIGludGVuZGVkLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBNb2R1bGUgRXhwb3J0IGFuZCBTdGF0aWMgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIHN0YXRpYyBlaXRoZXIuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYW4gb2RkIGNvbWJpbmF0aW9uLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCBpdHMgdmlzaWJpbGl0eSBvciB1c2FnZS4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSBpcyB0ZWxsaW5nIG1lIHRvIGludmVzdGlnYXRlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAoYHRjZl9hY3Rpb25faW5pdGApIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9hY3RfYXBpLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGNhbiBpbmxpbmUgaXQgd2hlbiBJIGJ1aWxkIHRoZSBtb2R1bGUgdG8gZXhwbGFpbiB0aGlzLiBJJiMzOTtsbCBjaGVjayBpdHMgZGVjbGFyYXRpb24gYW5kIGxvb2sgZm9yIGNsdWVzIHRoZXJlLCBtYXliZSB0aGVyZSYjMzk7cyBhIG1hY3JvIG9yIHNvbWUgdW51c3VhbCBsaW5rZXIgdHJpY2sgSSYjMzk7bSBtaXNzaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGNmX2FjdGlvbl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTE0NjI9c3RhdGljIGJvb2wgdGNfYWN0X2JpbmQodTMyIGZsYWdzKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQ2OC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQ2OTppbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQ3MC1cdFx0ICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgTm9uLVN0YXRpYyBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBub24tc3RhdGljIGNvbnRleHQsIHdoaWNoLCBvZiBjb3Vyc2UsIGNoYW5nZXMgZXZlcnl0aGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNoaWZ0IGluIHBhcmFkaWdtLiBUaGVuLCB0aGUgbmV4dCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCB3aGF0IGFib3V0IGB0Y2ZfYWN0aW9uX2luaXRfMWA/IFRoYXQgcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBvZnRlbiBhIGNyaXRpY2FsIHBvaW50IG9mIGluc3RhbnRpYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gd2l0aGluIHN1Y2ggYSBkeW5hbWljIHNldHVwLCBzbyB0aGF0IG5vdyBiZWNvbWVzIGEga2V5IGZvY3VzLiBXaGF0IGRlcGVuZGVuY2llcyBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmUgYW5kIHdoYXQgc3RhdGUgaXMgdGhhdCBpbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2FjdGlvbl9pbml0XzEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTAxOD1pbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYWN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyNy1cdC8qIFdlIGhhdmUgdG8gcmVnaXN0ZXIgcGVybmV0IG9wcyBiZWZvcmUgbWFraW5nIHRoZSBhY3Rpb24gb3BzIHZpc2libGUsXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEwMjg6XHQgKiBvdGhlcndpc2UgdGNmX2FjdGlvbl9pbml0XzEoKSBjb3VsZCBnZXQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWRcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyOS1cdCAqIG5ldG5zLlxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTMzNz1zdHJ1Y3QgdGNfYWN0aW9uX29wcyAqdGNfYWN0aW9uX2xvYWRfb3BzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIGZsYWdzLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTM5OS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQwMDpzdHJ1Y3QgdGNfYWN0aW9uICp0Y2ZfYWN0aW9uX2luaXRfMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDAxLVx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2OT1pbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTAtXHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgdGJbaV07IGkmIzQzOyYjNDM7KSB7XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE1MTE6XHRcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2ldLCBlc3QsIG9wc1tpIC0gMV0sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTItXHRcdFx0XHRcdFx1MDAyNmluaXRfcmVzW2kgLSAxXSwgZmxhZ3MsIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNDA3PWludCB0Y2ZfZXh0c192YWxpZGF0ZV9leChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDI0LVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYV9vKTtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQyNTpcdFx0XHRhY3QgPSB0Y2ZfYWN0aW9uX2luaXRfMShuZXQsIHRwLCB0YltleHRzLVx1MDAzZXBvbGljZV0sXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjYtXHRcdFx0XHRcdFx0cmF0ZV90bHYsIGFfbywgaW5pdF9yZXMsIGZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJlZmxlY3Rpbmcgb24gVENGIEFjdGlvbiBJbml0aWFsaXphdGlvbiBhbmQgRHVtcGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTt2ZSBqdXN0IGNvbmZpcm1lZCB0aGF0IHRoZSBgdGNmX2FjdGlvbl9pbml0XzFgIGZ1bmN0aW9uIGlzbiYjMzk7dCBzdGF0aWMgZWl0aGVyLCBqdXN0IGxpa2UgdGhlIG90aGVycy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGtlZXBzIHRoZSBkZXNpZ24gZmxleGlibGUuIE5vdywgSSYjMzk7bSBwaXZvdGluZyBteSBmb2N1cyB0byB0aGUgZHVtcCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjZl9hY3Rpb25fZHVtcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGR1bXBpbmcgbWVjaGFuaXNtcyBhcmUgY29uc2lzdGVudCwgZWZmaWNpZW50LCBhbmQgcHJvdmlkZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIG5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy4gQXJlIHdlIHVzaW5nIHRoZSBzYW1lIGFwcHJvYWNoIGFjcm9zcyB0aGUgYm9hcmQ/IFNob3VsZCB3ZSBjb25zb2xpZGF0ZSB0aGVtPyBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGFuc3dlcnMgbWF5IGhhdmUgZGVzaWduIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2FjdGlvbl9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTQ3OD1zdGF0aWMgaW50XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjQ3OTp0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgYm9vbCBmcm9tX2FjdClcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNDgwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTUwOD1zdGF0aWMgaW50XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjUwOTp0Y2ZfYWN0aW9uX2R1bXBfMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBpbnQgYmluZCwgaW50IHJlZilcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTEwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTUxNS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6NTE2Olx0aWYgKHRjZl9hY3Rpb25fZHVtcF90ZXJzZShza2IsIGEsIGZhbHNlKSlcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTE3LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTU0MC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjU0MTpcdGVyciA9IHRjZl9hY3Rpb25fZHVtcF9vbGQoc2tiLCBhLCBiaW5kLCByZWYpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy01NDItXHRpZiAoZXJyIFx1MDAzZSAwKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz01NTI9c3RhdGljIGludCB0Y2ZfZHVtcF93YWxrZXIoc3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTg3LVx0XHRlcnIgPSAoYWN0X2ZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdfVEVSU0VfRFVNUCkgP1xubmV0L3NjaGVkL2FjdF9hcGkuYzo1ODg6XHRcdFx0dGNmX2FjdGlvbl9kdW1wX3RlcnNlKHNrYiwgcCwgdHJ1ZSkgOlxubmV0L3NjaGVkL2FjdF9hcGkuYzo1ODk6XHRcdFx0dGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBwLCAwLCAwKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTkwLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMjQzPWludFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ0OnRjZl9hY3Rpb25fZHVtcF9vbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IGJpbmQsIGludCByZWYpXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDUte1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI0OC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI0OTppbnQgdGNmX2FjdGlvbl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI1MC1cdFx0ICAgIGludCBiaW5kLCBpbnQgcmVmLCBib29sIHRlcnNlKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI1OS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI2MDpcdFx0ZXJyID0gdGVyc2UgPyB0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc2tiLCBhLCBmYWxzZSkgOlxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjYxOlx0XHRcdHRjZl9hY3Rpb25fZHVtcF8xKHNrYiwgYSwgYmluZCwgcmVmKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2Mi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTE2NTA9c3RhdGljIGludCB0Y2FfZ2V0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTY3NC1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTY3NTpcdGlmICh0Y2ZfYWN0aW9uX2R1bXAoc2tiLCBhY3Rpb25zLCBiaW5kLCByZWYsIGZhbHNlKSBcdTAwM2MgMClcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTY3Ni1cdFx0Z290byBvdXRfbmxtc2dfdHJpbTtcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0OTE9aW50IHRjZl9leHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzUwNi1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzUwNzpcdFx0XHRpZiAodGNmX2FjdGlvbl9kdW1wKHNrYiwgZXh0cy1cdTAwM2VhY3Rpb25zLCAwLCAwLCBmYWxzZSlcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzUwOC1cdFx0XHQgICAgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTE1LVx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1MTY6XHRcdFx0aWYgKHRjZl9hY3Rpb25fZHVtcF9vbGQoc2tiLCBhY3QsIDAsIDApIFx1MDAzYyAwKVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTE3LVx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNTMyPWludCB0Y2ZfZXh0c190ZXJzZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1NDMtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1NDQ6XHRpZiAodGNmX2FjdGlvbl9kdW1wKHNrYiwgZXh0cy1cdTAwM2VhY3Rpb25zLCAwLCAwLCB0cnVlKSBcdTAwM2MgMClcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzU0NS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIGB0Y2ZfYWN0aW9uX2R1bXBgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmb2N1cywgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBIbW0sIGB0Y2FfYWN0aW9uX2dkYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGxlc3MgdXNlZnVsIGZvciBleHRlcm5hbCBpbnNwZWN0aW9uLCBhbmQgYHRjX2N0bF9hY3Rpb25gIGlzIHN0YXRpYyB0b28uIFdhaXQsIHdoYXQgYWJvdXQgYHRjYV9nZXRfZmlsbGAsIHRoYXQmIzM5O3Mgc3RhdGljIGFzIHdlbGwuIE9rYXksIHNvIGJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiBzbyBmYXIsIHRoZSBiZXN0IGJldHMgZm9yIGltbWVkaWF0ZSBmb2N1cyBhcmU6CgoqICAgYHRjZl9hY3Rpb25faW5pdGAKKiAgIGB0Y2ZfYWN0aW9uX2luaXRfMWAKKiAgIGB0Y2ZfYWN0aW9uX2R1bXBgCiogICBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgCiogICBgdGNmX2V4dHNfZHVtcGAKCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gQWgsIHRoZXJlJiMzOTtzIGB0Y2ZfYWN0aW9uX2R1bXBfb2xkYCAtIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gd29ydGggbm90aW5nLCBhbmQgYHRjZl9hY3Rpb25fZHVtcF8xYCBpcyBzdGF0aWMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBmb2xsb3dpbmcgYXJlIG9uZXMgb2YgaW50ZXJlc3Q6CgoqICAgYE5FVF9DTFNfQUNUYAoqICAgYE5FVF9BQ1RfQlBGYAoqICAgYE5FVF9BQ1RfQ1RgCiogICBgTkVUX0FDVF9DVElORk9gCiogICBgTkVUX0FDVF9JRkVgCiogICBgTkVUX0FDVF9QRURJVGAKKiAgIGBORVRfQUNUX1BPTElDRWAKKiAgIGBORVRfQUNUX1NBTVBMRWAKKiAgIGBORVRfQUNUX1RVTk5FTF9LRVlgCiogICBgTkZfQ09OTlRSQUNLX01BUktgCiogICBgTkZfQ09OTlRSQUNLX0xBQkVMU2AKKiAgIGBORl9DT05OVFJBQ0tfWk9ORVNgCgpJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLCBzbyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfTkVUX0FDVF9DVGAgZGVwZW5kcyBvbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTg1Mz1jb25maWcgTkVUX0FDVF9DT05OTUFSS1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cbm5ldC9zY2hlZC9LY29uZmlnOjg2NTpjb25maWcgTkVUX0FDVF9DVElORk9cbm5ldC9zY2hlZC9LY29uZmlnLTg2Ni1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9uc1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTkwNj1jb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXG4tLVxubmV0L3NjaGVkL0tjb25maWctOTE2LVxubmV0L3NjaGVkL0tjb25maWc6OTE3OmNvbmZpZyBORVRfQUNUX0NUXG5uZXQvc2NoZWQvS2NvbmZpZy05MTgtXHR0cmlzdGF0ZSBcJiMzNDtjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTkVUX0FDVF9DVCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0NUYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgYSAqdGhvcm91Z2gqIHVuZGVyc3RhbmRpbmcuIFdoYXQgYXJlIHRoZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIG9yIGFyZSB3ZSBjb25zaWRlcmluZyB0cmFuc2l0aXZlIG9uZXM/IFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyBsaWJyYXJpZXM7IEkgbmVlZCB0byBhc3Nlc3MgcG90ZW50aWFsIHZlcnNpb24gY29uZmxpY3RzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHN0ZW1taW5nIGZyb20gaXRzIGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGlzIG1vZHVsZSBleGlzdHMgYW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIFdoYXQgaXMgdGhpcyBgTkVUX0FDVF9DVGAgYW5kIHdoYXQgaXMgaXRzIHJvbGU/IElzIGl0IGEgY3JpdGljYWwgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBwZXJpcGhlcmFsPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IGNoYW5nZXMgdG8gYE5FVF9BQ1RfQ1RgIHdvdWxkIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0gYW5kIHdoYXQgdGhlIGltcGFjdCB3b3VsZCBiZSBvbiB0aGUgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5IG9mIHRoZSBuZXR3b3JrLiBUaGlzIHNob3VsZCBhbHNvIGZhY3RvciBpbiB0aGUgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUgYW5kIGFsbCBvZiB0aGUgaW50ZXJmYWNlcyB0aGlzIG1vZHVsZSBtYXkgdG91Y2guIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzLCBsaWtlIGRlcHJlY2F0ZWQgZmVhdHVyZXMgb3Iga25vd24gbGltaXRhdGlvbnM/IE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfQ1QkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9OTA2PWNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVlcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MTYtXG5uZXQvc2NoZWQvS2NvbmZpZzo5MTc6Y29uZmlnIE5FVF9BQ1RfQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cdHRyaXN0YXRlIFwmIzM0O2Nvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbGluZXMgYXJvdW5kIDkxNyBpbiBgbmV0L3NjaGVkL0tjb25maWdgLgoKKipEaWdnaW5nIGludG8gdGhlIE5ldCBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTE3LiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBjcnVjaWFsIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmZWF0dXJlIHNlbGVjdGlvbiwgYSBkZWZhdWx0IHNldHRpbmcsIG9yIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcXVldWVpbmcgZGlzY2lwbGluZSAocWRpc2MpLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gZW5jb3VudGVyIGNvbmRpdGlvbmFsIGxvZ2lj4oCUYGNvbmZpZ2Agc3RhdGVtZW50cywgYGlmYCBzdGF0ZW1lbnRzLCBwb3NzaWJseSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLiBJIGFudGljaXBhdGUgc2VlaW5nIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCBiZXR3ZWVuIGRpZmZlcmVudCBzY2hlZHVsaW5nIGFsZ29yaXRobXMgb3IgZmVhdHVyZXMuIFRoZSBjb250ZXh0IHdpbGwgcHJvYmFibHkgc2hlZCBsaWdodCBvbiB3aGljaCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbnZpcm9ubWVudHMgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3QgYXBwbGljYWJsZS4KClRoZSBjb2RlIG1pZ2h0IGJlIGRlZmluaW5nIGEgbmV3IHRyYWZmaWMgc2hhcGluZyBtZWNoYW5pc20sIG9yIGFsbG93aW5nIGNvbnRyb2wgb2YgdGhlIHJhdGUgbGltaXRpbmcgb2YgcGFja2V0cyBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2UuCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBncmFudWxhciBsZXZlbCBvZiBjb250cm9sIHRoZSBkZXZlbG9wZXJzIGhhdmUgb2ZmZXJlZCB1cy4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTA6XHRcdCAgU2F5IFkgaGVyZSB0byBzZXQvcmVsZWFzZSBpcCB0dW5uZWwgbWV0YWRhdGEuXG4gOTExOlx0XG4gOTEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTEzOlx0XG4gOTE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA5MTU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxuIDkxNjpcdFxuIDkxNzpcdGNvbmZpZyBORVRfQUNUX0NUXG4gOTE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblwmIzM0O1xuIDkxOTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4gOTIwOlx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xuIDkyMTpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gOTIyOlx0XHRoZWxwXG4gOTIzOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxuIDkyNDpcdFxuIDkyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkyNjpcdFxuIDkyNzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTI4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuXG4gOTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlZXAgRGl2ZSBpbnRvIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBORVRfQUNUX0NUYCDigJMgdGhhdCYjMzk7cyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3Rpb24gbW9kdWxlLCByaWdodD8gSG1tLCBuYXR1cmFsbHksIGl0IHJlbGllcyBvbiBib3RoIGBORl9DT05OVFJBQ0tgIChOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBjb3JlKSBhbmQgYE5GX0ZMT1dfVEFCTEVgIChmbG93IG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUpIGJlaW5nIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgeW91IGNhbiYjMzk7dCAqYWN0KiBvbiBjb25uZWN0aW9uIHRyYWNraW5nIGlmIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgYXJlbiYjMzk7dCBpbiBwbGFjZS4gSSB3b3VsZG4mIzM5O3QgZXhwZWN0IGFueXRoaW5nIGxlc3MsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBleHBsaWNpdGx5IGNvbnNpZGVyIHRoZSBkZXBlbmRlbmNpZXMuIE5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIGBORVRfQUNUX0NUSU5GT2AuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBzb3J0IG9mIGluZm9ybWF0aW9uIGFuZCBvcHRpb25zIGFyZSBvZmZlcmVkIGJ5IHRoZSBtb2R1bGUgSSBqdXN0IGNvbmZpcm1lZCBkZXBlbmRzIG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDg2MTpcdFxuIDg2MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODYzOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY29ubm1hcmsuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG4gODY2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcJiMzNDtcbiA4Njc6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1QgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuIDg2ODpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDS19NQVJLXG4gODY5Olx0XHRoZWxwXG4gODcwOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHJhbnNmZXIgb2YgYSBjb25ubWFyayBzdG9yZWQgaW5mb3JtYXRpb24uXG4gODcxOlx0XHQgIEN1cnJlbnQgYWN0aW9ucyB0cmFuc2ZlciBjb25ubWFyayBzdG9yZWQgRFNDUCBpbnRvXG4gODcyOlx0XHQgIGlwdjQvdjYgZGlmZnNlcnYgYW5kL29yIHRvIHRyYW5zZmVyIGNvbm5tYXJrIHRvIHBhY2tldFxuIDg3MzpcdFx0ICBtYXJrLiAgQm90aCBhcmUgdXNlZnVsIGZvciByZXN0b3JpbmcgZWdyZXNzIGJhc2VkIG1hcmtzXG4gODc0Olx0XHQgIGJhY2sgb250byBpbmdyZXNzIGNvbm5lY3Rpb25zIGZvciBxZGlzYyBwcmlvcml0eSBtYXBwaW5nXG4gODc1Olx0XHQgIHB1cnBvc2VzLlxuIDg3NjpcdFxuIDg3NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDg3ODpcdFxuIDg3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYE5FVF9BQ1RfQ1RJTkZPYCBmdW5jdGlvbmFsaXR5IGlzIGJ1aWx0IHVwIGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgcmVseWluZyBvbiBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgdGhlIG1vZHVsZXMgZm9yIGl0LCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5UUkFDS19NQVJLYC4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gbGV2ZXJhZ2UgdGhlIHN0YXRlZnVsIGluc3BlY3Rpb24gY2FwYWJpbGl0aWVzIHRoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciBwcm92aWRlcy4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYnkgbG9va2luZyBhdCBgTkVUX0FDVF9TQU1QTEVgLiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBzYW1wbGluZyBpcyBpbXBsZW1lbnRlZCBpbiByZWxhdGlvbiB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBkYXRhIHdlIGp1c3QgaWRlbnRpZmllZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgYW5kIHV0aWxpemVzIGNvbm5lY3Rpb24gdHJhY2tpbmcgZGF0YSB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWxhdGlvbnNoaXAgYW5kIHRvIGJldHRlciBjb250ZXh0dWFsaXplIHdoZXJlIHRoaXMgcGFydGljdWxhciBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDU6XHRcdGhlbHBcbiA3NDY6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBwYWNrZXRzIHRvIGJlIG1pcnJvcmVkIG9yIHJlZGlyZWN0ZWQgdG9cbiA3NDc6XHRcdCAgb3RoZXIgZGV2aWNlcy5cbiA3NDg6XHRcbiA3NDk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDc1MDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X21pcnJlZC5cbiA3NTE6XHRcbiA3NTI6XHRjb25maWcgTkVUX0FDVF9TQU1QTEVcbiA3NTM6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYWZmaWMgU2FtcGxpbmdcJiMzNDtcbiA3NTQ6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3NTU6XHRcdHNlbGVjdCBQU0FNUExFXG4gNzU2Olx0XHRoZWxwXG4gNzU3Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0IHNhbXBsaW5nIHRjIGFjdGlvbi4gVGhlIHBhY2tldCBzYW1wbGVcbiA3NTg6XHRcdCAgYWN0aW9uIGNvbnNpc3RzIG9mIHN0YXRpc3RpY2FsbHkgY2hvb3NpbmcgcGFja2V0cyBhbmQgc2FtcGxpbmdcbiA3NTk6XHRcdCAgdGhlbSB1c2luZyB0aGUgcHNhbXBsZSBtb2R1bGUuXG4gNzYwOlx0XG4gNzYxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3NjI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zYW1wbGUuXG4gNzYzOlx0XG4gNzY0Olx0Y29uZmlnIE5FVF9BQ1RfTkFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQ3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5ldHdvcmsgQWN0aXZhdGlvbiBTYW1wbGluZyoqCgpPa2F5LCBzbyBgTkVUX0FDVF9TQU1QTEVgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBgTkVUX0NMU19BQ1RgIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIGFjdGl2YXRpb24gY2xhc3NpZmljYXRpb24uIEFuZCBpdCYjMzk7cyBnb2luZyB0byB1c2UgYFBTQU1QTEVgIGZvciBpdHMgc2FtcGxpbmcgbWVjaGFuaXNtLCB3aGljaCBJJiMzOTtsbCBrZWVwIGluIG1pbmQuIE5vdywgZ2l2ZW4gdGhhdCwgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgc2VlIGhvdyBgTkVUX0FDVF9CUEZgIGZpdHMgaW50byB0aGlzIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYWN0aXZhdGlvbiBzYW1wbGluZyBwcm9jZXNzLiBXaGF0JiMzOTtzIHRoZSBjb25uZWN0aW9uPyBJcyBpdCBhbiBhbHRlcm5hdGl2ZSwgb3IgYSBjb21wbGVtZW50PyBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdFxuIDgzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDgzNzpcdFxuIDgzODpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODM5Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfdmxhbi5cbiA4NDA6XHRcbiA4NDE6XHRjb25maWcgTkVUX0FDVF9CUEZcbiA4NDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JQRiBiYXNlZCBhY3Rpb25cJiMzNDtcbiA4NDM6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4NDQ6XHRcdGhlbHBcbiA4NDU6XHRcdCAgU2F5IFkgaGVyZSB0byBleGVjdXRlIEJQRiBjb2RlIG9uIHBhY2tldHMuIFRoZSBCUEYgY29kZSB3aWxsIGRlY2lkZVxuIDg0NjpcdFx0ICBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkIG9yIG5vdC5cbiA4NDc6XHRcbiA4NDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4NDk6XHRcbiA4NTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDg1MTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2JwZi5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgTkVUX0FDVF9DT05OTUFSS1xuIDg1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBSZXRyaWV2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBJbnRlcmNvbm5lY3RlZCBXZWIgb2YgTmV0d29yayBBY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgTkVUX0FDVF9CUEZgIG1vZHVsZS4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkVUX0NMU19BQ1RgLiBDYW4mIzM5O3QgZG8gb25lIHdpdGhvdXQgdGhlIG90aGVyLCB0aGF0JiMzOTtzIGp1c3QgaG93IHRoZSBhcmNoaXRlY3R1cmUgaXMgc2V0IHVwLiBUaGV5JiMzOTtyZSBpbnRlcnR3aW5lZCwgYW5kIHlvdSBuZWVkIHRoYXQgYmFzZSB0byBidWlsZCB1cG9uLgoKTm93LCBteSBtaW5kIG5hdHVyYWxseSBqdW1wcyB0byBhbm90aGVyIHJlbGF0ZWQgYWN0aW9uLCBgTkVUX0FDVF9JRkVgLiBJdCYjMzk7cyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBvbmUgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGRlcGVuZGVuY3kuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIHdob2xlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODg1Olx0XHRoZWxwXG4gODg2Olx0XHQgU2F5IFkgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2Ygc2tiIGRhdGFcbiA4ODc6XHRcbiA4ODg6XHRcdCBJZiB1bnN1cmUsIHNheSBOLlxuIDg4OTpcdFxuIDg5MDpcdFx0IFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4OTE6XHRcdCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NrYm1vZC5cbiA4OTI6XHRcbiA4OTM6XHRjb25maWcgTkVUX0FDVF9JRkVcbiA4OTQ6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuIDg5NTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDg5NjpcdFx0c2VsZWN0IE5FVF9JRkVcbiA4OTc6XHRcdGhlbHBcbiA4OTg6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBmb3Igc291cmNpbmcgYW5kIHRlcm1pbmF0aW5nIG1ldGFkYXRhXG4gODk5Olx0XHQgIEZvciBkZXRhaWxzIHJlZmVyIHRvIG5ldGRldjAxIHBhcGVyOlxuIDkwMDpcdFx0ICBcJiMzNDtEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVwmIzM0O1xuIDkwMTpcdFx0ICAgQXV0aG9yczogSmFtYWwgSGFkaSBTYWxpbSBhbmQgRGFtYXNjZW5lIE0uIEpvYWNoaW1waWxsYWlcbiA5MDI6XHRcbiA5MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDkwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgTmV0d29yayBBY3RpdmF0aW9uIExvZ2ljKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBORVRfQUNUX0lGRWAuLi4gdGhhdCYjMzk7cyB0aGUgSW5kZXBlbmRlbnQgRnVuY3Rpb24gRXZhbHVhdGlvbiwgcmlnaHQ/IFNvLCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jeSwgaXQgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZSBjbGFzcyBhY3RpdmF0aW9uLiBTbywgaW4gb3RoZXIgd29yZHMsIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBpbmRlcGVuZGVudCBmdW5jdGlvbiBvZiB0aGUgbmV0d29yayBpcyBkZXBlbmRlbnQgb24gaXQgYmVpbmcgYWN0aXZhdGVkLiBJdCB1c2VzIHRoYXQgaW5mb3JtYXRpb24gdG8gc2VsZWN0IGBORVRfSUZFYC4gR290IGl0LiBOb3csIGl0JiMzOTtzIHNlbGVjdGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlLCB3aGljaCBpcyBhIGtleSBzdGVwLCBidXQgaXQgbXVzdCBiZSBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIGFjdGl2YXRlZC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYnVpbGQuIE5vdywgYmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYE5FVF9BQ1RfUEVESVRgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgZGVhbHMgd2l0aCBwYXJhbWV0ZXIgZWRpdGluZywgd2hpY2ggY291bGQgYWZmZWN0IGFsbCB0aGUgc3RlcHMgSSBqdXN0IHRob3VnaHQgYWJvdXQuIExldCBtZSBzZWUgd2hlcmUgdGhhdCBsaWVzIGluIHRoaXMgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFdlIHNob3VsZCBjaGVjayB0aGF0IGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBleHBlY3RlZCByZWxhdGlvbnNoaXBzLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3RhdGVsZXNzIE5BVFwmIzM0O1xuIDc2NjpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDc2NzpcdFx0aGVscFxuIDc2ODpcdFx0ICBTYXkgWSBoZXJlIHRvIGRvIHN0YXRlbGVzcyBOQVQgb24gSVB2NCBwYWNrZXRzLiAgWW91IHNob3VsZCB1c2VcbiA3Njk6XHRcdCAgbmV0ZmlsdGVyIGZvciBOQVQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiA3NzA6XHRcbiA3NzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDc3MjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X25hdC5cbiA3NzM6XHRcbiA3NzQ6XHRjb25maWcgTkVUX0FDVF9QRURJVFxuIDc3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEVkaXRpbmdcJiMzNDtcbiA3NzY6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3Nzc6XHRcdGhlbHBcbiA3Nzg6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBtYW5nbGUgdGhlIGNvbnRlbnQgb2YgcGFja2V0cy5cbiA3Nzk6XHRcbiA3ODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDc4MTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BlZGl0LlxuIDc4MjpcdFxuIDc4MzpcdGNvbmZpZyBORVRfQUNUX1NJTVBcbiA3ODQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXBsZSBFeGFtcGxlIChEZWJ1ZylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOZXR3b3JrIEFjdGl2aXR5IERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXR3b3JrIGFjdGl2aXR5IGRhdGEuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYE5FVF9BQ1RfUEVESVRgIOKAkyB0aGF0JiMzOTtzIHBhY2tldCBlZGl0aW5nIGFjdGl2aXR5LCByaWdodD8g4oCTIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgTkVUX0NMU19BQ1RgLiBUaGF0IG1ha2VzIHNlbnNlOyB5b3UgY2FuJiMzOTt0IHJlYWxseSBlZGl0IHNvbWV0aGluZyB5b3UgaGF2ZW4mIzM5O3QgY2xhc3NpZmllZCBmaXJzdC4gTm93LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIExldCYjMzk7cyBtb3ZlIG9udG8gYE5FVF9BQ1RfUE9MSUNFYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZmFjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzEwOlx0XHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxuIDcxMTpcdFxuIDcxMjpcdFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxuIDcxMzpcdFx0ICBleHRlbmRlZCBtYXRjaGVzLlxuIDcxNDpcdFxuIDcxNTpcdGNvbmZpZyBORVRfQUNUX1BPTElDRVxuIDcxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhZmZpYyBQb2xpY2luZ1wmIzM0O1xuIDcxNzpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDcxODpcdFx0aGVscFxuIDcxOTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIHRyYWZmaWMgcG9saWNpbmcsIGkuZS4gc3RyaWN0XG4gNzIwOlx0XHQgIGJhbmR3aWR0aCBsaW1pdGluZy4gVGhpcyBhY3Rpb24gcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHBvbGljaW5nXG4gNzIxOlx0XHQgIG1vZHVsZS5cbiA3MjI6XHRcbiA3MjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDcyNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BvbGljZS5cbiA3MjU6XHRcbiA3MjY6XHRjb25maWcgTkVUX0FDVF9HQUNUXG4gNzI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGFjdGlvbnNcJiMzNDtcbiA3Mjg6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3Mjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIE5ldHdvcmsgQWN0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRfQUNUX1BPTElDRWAgaXMgZGVwZW5kZW50IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQmIzM5O3Mgbm90IHVuZXhwZWN0ZWQsIGdpdmVuIHRoZSB3YXkgcG9saWNpbmcgb2Z0ZW4gd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIEl0IG5lZWRzIGNsYXNzaWZpY2F0aW9uIHRvIGZ1bmN0aW9uLCByaWdodD8gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgb3Igb3Zlcmxvb2tlZCBhIHN1YnRsZSBpbnRlcnBsYXkgaGVyZS4gU2luY2UgSSYjMzk7bSB0aGlua2luZyBhYm91dCBuZXR3b3JrIGFjdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IGdsYW5jZSBhdCBgTkVUX0FDVF9UVU5ORUxfS0VZYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHJlbGV2YW50IGNvcnJlbGF0aW9uLiBHb3R0YSBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUsIGV2ZW4gaWYgaXQgc2VlbXMgYSBsaXR0bGUgdGFuZ2VudGlhbCBhdCBmaXJzdC4gQWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGludGVyZGVwZW5kZW5jaWVzIGluIHRoaXMgYXJlYS4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGxlc3Mgb2J2aW91cyByZWxhdGlvbnNoaXBzIHRoYXQgdHJpcCBtZSB1cCwgc28gaXQmIzM5O3MgYmVzdCB0byBiZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHQgIFwmIzM0O0Rpc3RyaWJ1dGluZyBMaW51eCBUcmFmZmljIENvbnRyb2wgQ2xhc3NpZmllci1BY3Rpb24gU3Vic3lzdGVtXCYjMzQ7XG4gOTAxOlx0XHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxuIDkwMjpcdFxuIDkwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfaWZlLlxuIDkwNTpcdFxuIDkwNjpcdGNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVlcbiA5MDc6XHRcdHRyaXN0YXRlIFwmIzM0O0lQIHR1bm5lbCBtZXRhZGF0YSBtYW5pcHVsYXRpb25cJiMzNDtcbiA5MDg6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA5MDk6XHRcdGhlbHBcbiA5MTA6XHRcdCAgU2F5IFkgaGVyZSB0byBzZXQvcmVsZWFzZSBpcCB0dW5uZWwgbWV0YWRhdGEuXG4gOTExOlx0XG4gOTEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTEzOlx0XG4gOTE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA5MTU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxuIDkxNjpcdFxuIDkxNzpcdGNvbmZpZyBORVRfQUNUX0NUXG4gOTE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblwmIzM0O1xuIDkxOTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBgTkVUX0FDVF9UVU5ORUxfS0VZYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKR2l2ZW4gdGhhdCwgbXkgY3VycmVudCBzZXR1cCBpbnZvbHZlczoKCiogICBgTkVUX0NMU19BQ1RgCiogICBgTkVUX0FDVF9CUEZgCiogICBgTkVUX0FDVF9DVGAKKiAgIGBORVRfQUNUX0NUSU5GT2AKKiAgIGBORVRfQUNUX0lGRWAKKiAgIGBORVRfQUNUX1BFRElUYAoqICAgYE5FVF9BQ1RfUE9MSUNFYAoqICAgYE5FVF9BQ1RfU0FNUExFYAoqICAgYE5FVF9BQ1RfVFVOTkVMX0tFWWAgKHdoaWNoIHdlIGtub3cgaXMgaW5mbHVlbmNlZCBieSBgTkVUX0NMU19BQ1RgKQoqICAgYE5GX0NPTk5UUkFDS2AKKiAgIGBORl9DT05OVFJBQ0tfTUFSS2AKKiAgIGBORl9DT05OVFJBQ0tfTEFCRUxTYAoqICAgYE5GX0NPTk5UUkFDS19aT05FU2AKKiAgIGBORl9GTE9XX1RBQkxFYAoKUmlnaHQsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYE5GX0NPTk5UUkFDS19aT05FU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTIzPWNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIGBORl9DT05OVFJBQ0tfTEFCRUxTYCoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYE5GX0NPTk5UUkFDS19MQUJFTFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBtb2R1bGUgaXMgZW5hYmxlZCBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgc28gSSB3YW50IHRvIHJ1biBhIHF1aWNrIGRpYWdub3N0aWMgY2hlY2sgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGRvaW5nIGl0cyBqb2IuIEkgd2FudCB0byBydWxlIG91dCBhbnkgY29ubmVjdGlvbiB0cmFja2luZyBpc3N1ZXMgYmVmb3JlIEkgbW92ZSBvbiB0byBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIHN0ZXBzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTE3Nz1jb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipORl9DT05OVFJBQ0tfTUFSSyBFeGFtaW5hdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgTkZfQ09OTlRSQUNLX01BUktgLiBJJiMzOTttIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBmaWVsZCBvcGVyYXRlcyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBMZXQgbWUgcmVjYWxsOiBpcyBpdCB1c2VkIGZvciBtYXJraW5nIGNvbm5lY3Rpb25zIGZvciBzcGVjaWZpYyBwb2xpY3kgZW5mb3JjZW1lbnQsIHJvdXRpbmcgZGVjaXNpb25zLCBvciBwZXJoYXBzIGZvciB0cmFmZmljIHNoYXBpbmc/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBjb250ZXh0IHdpbGwgZGV0ZXJtaW5lIHdoYXQgSSBuZWVkIHRvIGxvb2sgZm9yLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIG1hcmsgaW50ZXJhY3RzIHdpdGggdGhlIHZhcmlvdXMgbmV0ZmlsdGVyIGhvb2tzLCBhbmQgd2hldGhlciBpdCYjMzk7cyBwcm9wYWdhdGluZyBjb3JyZWN0bHkgdGhyb3VnaCB0aGUgY29ubnRyYWNrIHRhYmxlIGVudHJpZXMuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIGFueSByZWxldmFudCBpcHRhYmxlcyBtb2R1bGVzIGFyZSBjb25maWd1cmVkIHRvIGFjdCBvbiB0aGlzIG1hcmsuIFRpbWUgdG8gY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLCBvZiBjb3Vyc2UsIGFuZCB0aGVuIHF1aWNrbHkgZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0cyB3aXRoaW4gdGhlIG5ldGZpbHRlciBzb3VyY2UgdG8gY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgdW5kZXIgZGlmZmVyZW50IG5ldHdvcmsgc2NlbmFyaW9zIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIHBvdGVudGlhbCBwcm9ibGVtcy4gUmlnaHQsIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipORl9GTE9XX1RBQkxFIENoZWNrLUluKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYE5GX0ZMT1dfVEFCTEVgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgdHJhZmZpYyBmbG93LCBsaWtlbHkgYXQgdGhlIGtlcm5lbCBsZXZlbCBnaXZlbiB0aGUgYE5GX2AgcHJlZml4LiBLbm93aW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIHRhYmxlIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dDogYXJlIHdlIHRyb3VibGVzaG9vdGluZyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgY29ubmVjdGl2aXR5IGlzc3VlLCBvciBwZXJoYXBzIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGZsb3cgbWFuYWdlbWVudD8gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHdpdGhpbi4gQSBkZWVwIGRpdmUgaW50byB0aGlzIHRhYmxlJiMzOTtzIHN0YXR1cyBjb3VsZCBwcm92aWRlIHRoZSBjbGFyaXR5IG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIG5leHQgc3RlcHMgcmVxdWlyZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHN0YXR1cyBvZiB0aGUgZmxvdyB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9CUEZgLCBgTkVUX0FDVF9DVGAsIGBORVRfQUNUX0NUSU5GT2AsIGBORVRfQUNUX0lGRWAsIGBORVRfQUNUX1BFRElUYCwgYE5FVF9BQ1RfUE9MSUNFYCwgYE5FVF9BQ1RfU0FNUExFYCwgYE5FVF9BQ1RfVFVOTkVMX0tFWWAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGBORl9DT05OVFJBQ0tfWk9ORVNgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcyB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgY29uZmlndXJhdGlvbi4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYE5FVF9BQ1RfQ1RgIGFuZCBgTkZfTkFUYC4gVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgYE5FVF9BQ1RfQ1RgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUICZhbXA7JmFtcDsgTkZfQ09OTlRSQUNLICZhbXA7JmFtcDsgKCFORl9OQVQgfHwgTkZfTkFUKSAmYW1wOyZhbXA7IE5GX0ZMT1dfVEFCTEVgLiBUaGlzIGRlcGVuZGVuY3kgY29uZGl0aW9uIG1lYW5zIHRoYXQgYE5FVF9BQ1RfQ1RgIGRvZXNuJiMzOTt0IHN0cmljdGx5ICpyZXF1aXJlKiBgTkZfTkFUYC4gSWYgYE5GX05BVGAgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoZW4gYE5FVF9BQ1RfQ1RgIGFsc28gbmVlZHMgdG8gYmUgYSBtb2R1bGUsIGJ1dCBpZiBgTkZfTkFUYCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZW4gYE5FVF9BQ1RfQ1RgIGNhbiBiZSBidWlsdCBlaXRoZXIgd2F5LiBUaGF0JiMzOTtzIGdvb2QsIGl0IGdpdmVzIHVzIG1vcmUgZmxleGliaWxpdHkgaW4gdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYE5FVF9JRkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JRkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaWZlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lmZS9LY29uZmlnLTUtXG5uZXQvaWZlL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9JRkVcbm5ldC9pZmUvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZXItRkUgYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRyYWZmaWMgQ29udHJvbCBBY3Rpb24gSW5pdGlhbGl6YXRpb24gYW5kIER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIGFjdGlvbiBtb2R1bGVzIGFyZSBzZXQgdXAuIEkgc2VlIGBORVRfSUZFYCBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkIGJ5IGBORVRfQUNUX0lGRWAsIHdoaWNoIGlzIGdvb2QuIE5vIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuIFNhbWUgd2l0aCBgUFNBTVBMRWAgYW5kIGBORVRfQUNUX1NBTVBMRWAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgdGNmX2FjdGlvbl9pbml0YCBhbmQgYHRjZl9hY3Rpb25fZHVtcGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEFyZSB0aGVzZSB0aGUgb25seSBlbnRyeSBwb2ludHM/IFJpZ2h0LCBgdGNmX2FjdGlvbl9pbml0XzFgIGlzIGNhbGxlZCBieSBib3RoIGB0Y2ZfYWN0aW9uX2luaXRgIGFuZCBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgLiBHb29kIHRvIHJlbWVtYmVyLiBgdGNmX2FjdGlvbl9kdW1wYCBpcyB1c2VkIGluIGB0Y2FfZ2V0X2ZpbGxgLCBgdGNmX2V4dHNfZHVtcGAsIGFuZCBgdGNmX2V4dHNfdGVyc2VfZHVtcGAuCgpTbywgaXQgc2VlbXMgdGhlIGtleSBzeW1ib2xzLCB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLCBzaG91bGQgYmU6IGB0Y2ZfYWN0aW9uX2luaXRgLCBgdGNmX2FjdGlvbl9pbml0XzFgLCBgdGNmX2FjdGlvbl9kdW1wYCwgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YCwgYW5kIGB0Y2ZfZXh0c19kdW1wYC4gVGhhdCBzZWVtcyBjb21wcmVoZW5zaXZlLgoKTm93IEkgbmVlZCB0byBjaGVjayBpZiBgdGNmX2FjdGlvbl9pbml0XzFgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25faW5pdF8xJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZpc2liaWxpdHkgSXNzdWVzKioKCkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpc24mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdoeSB3b3VsZG4mIzM5O3QgaXQgYmUgc3RhdGljIGlmIGl0JiMzOTtzIG1lYW50IHRvIGJlIGludGVybmFsPyBUaGVuLCBJIGFsc28gbm90aWNlZCBgdGNmX2FjdGlvbl9pbml0YCBzaGFyZXMgdGhlIHNhbWUgY2hhcmFjdGVyaXN0aWMsIGl0IGlzIG5vdCBleHBvcnRlZC4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGJvdGggZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZC4gVGhpcyBjb21iaW5hdGlvbiB1c3VhbGx5IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgcG9zc2liaWxpdHkgb2YgZXh0ZXJuYWwgbGlua2FnZSwgZXZlbiBpZiB1bmludGVudGlvbmFsLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3IgaW5jbHVkZSBzdHJ1Y3R1cmUuIE9yIG1heWJlIHRoZXJlJiMzOTtzIGEgc3VidGxlIG1hY3JvIGRlZmluaXRpb24gYXQgcGxheS4gV2UgbmVlZCB0byBmb2xsb3cgdGhpcyBkb3duIHRoZSByYWJiaXQgaG9sZSB0byBzZWUgaWYgdGhleSBhcmUgdW5pbnRlbnRpb25hbGx5IGV4cG9zZWQgdG8gb3RoZXIgY29kZSBtb2R1bGVzLCBvciBpZiB0aGVyZSBpcyBhbm90aGVyIG1vZHVsZSB3aXRoIHNpbWlsYXIgaW50ZXJuYWwgcmVxdWlyZW1lbnRzLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbiB1bmV4cGVjdGVkIGV4dGVybmFsIGRlcGVuZGVuY3ksIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgYW5kIHNlZSBpZiB0aGUgcHJvYmxlbSBleGlzdHMgdGhlcmUgdG9vLCBvciBpZiB0aGlzIGlzc3VlIGlzIGxpbWl0ZWQgdG8gb25lIHNwZWNpZmljIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjZl9leHRzX3ZhbGlkYXRlX2V4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jPTM0MDc9aW50IHRjZl9leHRzX3ZhbGlkYXRlX2V4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKip0Yixcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0NTgtfVxubmV0L3NjaGVkL2Nsc19hcGkuYzozNDU5OkVYUE9SVF9TWU1CT0wodGNmX2V4dHNfdmFsaWRhdGVfZXgpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipWYWxpZGF0aW5nIHRoZSBFeHRlbnNpb24gTW9kdWxlIEludGVyZmFjZSoqCgpPa2F5LCBzbyBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciBkb3duIHRoaXMgcGF0aCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IHRoZSByZWxhdGVkIGB0Y2ZfZXh0c19kdW1wYCBmdW5jdGlvbiBleGlzdHMgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbW9kdWxlIGhhbmRsZXMgaW50ZXJuYWwgaW5mb3JtYXRpb24gYW5kIGhvdyBJIGNhbiBhbmFseXplIGl0LiBJdCYjMzk7cyBhbHdheXMgdXNlZnVsIHRvIGhhdmUgdGhhdCBleHRyYSBkZWJ1Z2dpbmcgdXRpbGl0eSByZWFkaWx5IGF2YWlsYWJsZSBhcyBJIGRpZyBkZWVwZXIgaW50byB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjZl9leHRzX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MzQ5MT1pbnQgdGNmX2V4dHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTI5LX1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzUzMDpFWFBPUlRfU1lNQk9MKHRjZl9leHRzX2R1bXApO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTMxLVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM9MzU1OD1pbnQgdGNmX2V4dHNfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTY2LX1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzU2NzpFWFBPUlRfU1lNQk9MKHRjZl9leHRzX2R1bXBfc3RhdHMpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjYzOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgVGltZTogRXhwbG9yaW5nIFRDRiBEdW1wcyoqCgpPa2F5LCBzbyBgdGNmX2V4dHNfZHVtcGAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggYHRjZl9hY3Rpb25fZHVtcGAuIEl0IGZlZWxzIGxpa2UgdGhlcmUmIzM5O3MgYSBjb25uZWN0aW9uIHRoZXJlLCBhIHJlbGF0ZWQgc2V0IG9mIGR1bXBzIHRoYXQgbGlrZWx5IHByb3ZpZGUgY29tcGxlbWVudGFyeSBpbmZvcm1hdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgcG90ZW50aWFsIGluc2lnaHRzIGludG8gdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0Y2ZfYWN0aW9uX2R1bXBgIGlzIHRlbGxpbmcgdXMgdG9vLiBJdCB3aWxsIGJlIGhlbHBmdWwgaW4gZGV0ZXJtaW5pbmcgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhbmQgaWYgdGhlcmUmIzM5O3MgYW4gb3Bwb3J0dW5pdHkgdG8gZ2xlYW4gbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBvdXRwdXRzIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y2ZfYWN0aW9uX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4NzgKCQkJCQkJCW91dHB1dDogMjg3CgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQyBBY3Rpb24gTmV0bGluayBEdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCB0aGF0JiMzOTtzIGZpbmUuIFRoZSBrZXkgZnVuY3Rpb25zLCBgdGNmX2FjdGlvbl9pbml0YCwgYHRjZl9hY3Rpb25faW5pdF8xYCwgYW5kIGB0Y2ZfYWN0aW9uX2R1bXBgLCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gcGVyZmVjdCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKTGV0JiMzOTtzIHF1aWNrbHkgZ28gb3ZlciB0aGUgY2hhbmdlcyBhZ2Fpbi4gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgVEMgYWN0aW9ucy4gVGhlIGFpbSBpcyB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIE5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgd2hlbiBkdW1waW5nIGFuIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyB3ZSBoYW5kbGUgTmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSByZWQgZmxhZyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpbmFjY3VyYXRlIHNpemUgY2FsY3VsYXRpb25zIGhlcmUgY291bGQgb3BlbiB0aGUgZG9vciB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IsIGF0IGEgbWluaW11bSwgYEVNU0dTSVpFYCBlcnJvcnMuCgpJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBORVRfQ0xTX0FDVGAsIGFuZCB0aGUgVEMgYWN0aW9uIG1vZHVsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGBORl9DT05OVFJBQ0tfWk9ORVNgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGFyZSBlbmFibGVkLgoKTXkgbWFpbiBmb2N1cyBzeW1ib2xzLCBhcyBzdGF0ZWQgYmVmb3JlLCBhcmUgYHRjZl9hY3Rpb25faW5pdGAsIGB0Y2ZfYWN0aW9uX2luaXRfMWAsIGB0Y2ZfYWN0aW9uX2R1bXBgLCBhcyB3ZWxsIGFzIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgYW5kIGB0Y2ZfZXh0c19kdW1wYC4uCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYW55IG90aGVyIGFjdGlvbnMgaGF2ZSBiZWVuIGFmZmVjdGVkLiBBaCwgeWVzOiBgYWN0X2FwaS5jYCwgYGFjdF9icGYuY2AsIGBhY3RfY3QuY2AsIGBhY3RfY3RpbmZvLmNgLCBgYWN0X2lmZS5jYCwgYGFjdF9wZWRpdC5jYCwgYGFjdF9wb2xpY2UuY2AsIGBhY3Rfc2FtcGxlLmNgLCBhbmQgYGFjdF90dW5uZWxfa2V5LmNgLiBPa2F5LCBzbyB0aG9zZSBhcmUgYWxsIHRoZSBhY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCYjMzk7cyBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgdGhvc2UgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgTmV0bGluayBhdHRyaWJ1dGUgc2l6ZXMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBkaXJlY3RseSBhZmZlY3RzIFRDIGFjdGlvbiBOZXRsaW5rIGR1bXAgb3BlcmF0aW9ucywgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBpbiB0aGVzZSBzY2VuYXJpb3MgY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzIGFuZCBvdGhlciBuYXN0eSBwcm9ibGVtcyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgTmV0bGluayBtZXNzYWdlLiBUaW1lIHRvIGdldCB0aGlzIGZvcm1hdHRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQlBGJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVElORk8mIzM0OywKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9QRURJVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1BPTElDRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1RVTk5FTF9LRVkmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19NQVJLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19MQUJFTFMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1pPTkVTJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfYWN0aW9uX2luaXQmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9pbml0XzEmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9kdW1wJiMzNDssCiAgICAmIzM0O3RjZl9leHRzX3ZhbGlkYXRlX2V4JiMzNDssCiAgICAmIzM0O3RjZl9leHRzX2R1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCYjMzk7cyB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgaW5jb3JyZWN0IHNpemUgY2FsY3VsYXRpb25zIGNhbiBsZWFkIHRvIGJ1ZmZlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgd3JpdGVzLCBvciBgRU1TR1NJWkVgIGVycm9ycyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgbmV0bGluayBtZXNzYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0JQRiYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1RJTkZPJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfUEVESVQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9QT0xJQ0UmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9TQU1QTEUmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9UVU5ORUxfS0VZJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTUFSSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTEFCRUxTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19aT05FUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2FjdGlvbl9pbml0JiMzNDssCiAgICAmIzM0O3RjZl9hY3Rpb25faW5pdF8xJiMzNDssCiAgICAmIzM0O3RjZl9hY3Rpb25fZHVtcCYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c192YWxpZGF0ZV9leCYjMzQ7LAogICAgJiMzNDt0Y2ZfZXh0c19kdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyB0byB2YXJpb3VzIFRDIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgdG8gZHVtcCB0aGUgYWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBuZXRsaW5rIGR1bXAgb3BlcmF0aW9ucyBmb3IgVEMgYWN0aW9ucy4gSXQmIzM5O3Mgd29ydGggZnV6emluZyBiZWNhdXNlIGluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBjYW4gbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgYEVNU0dTSVpFYCBlcnJvcnMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjA6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGludm9sdmUgY2FsY3VsYXRpbmcgc2l6ZXMgKHJldHVybmluZyBgc2l6ZV90YCkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG8gbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgYWRkIGNvbXBsZXggY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGEgc2l6ZSBpcyBtaXNjYWxjdWxhdGVkLCBpdCB3b3VsZCBlaXRoZXIgcmVzdWx0IGluIGFuIGBFTVNHU0laRWAgZXJyb3IgZHVyaW5nIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gb3IgcG90ZW50aWFsbHkgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgdW5kZXJlc3RpbWF0ZWQgYW5kIGJvdW5kcyBjaGVja3MgYXJlIG1pc3NpbmcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTikuIE5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmxhX3B1dGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdoaWNoIHVwZGF0ZSB0aGUgYHNrYi1cdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDo1NTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDYwMGI3ODA0YmVmZDIuLmI0NDE1ZDM1OGM5MTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtNDUyLDcgJiM0Mzs0NTIsMTAgQEAgc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKIAkJLyogVENBX1NUQVRTX1FVRVVFICovCiAJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZihzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZSkpCiAJCSYjNDM7IG5sYV90b3RhbF9zaXplKDApIC8qIFRDQV9BQ1RfT1BUSU9OUyBuZXN0ZWQgKi8KLQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOyAvKiBUQ0FfR0FDVF9UTSAqLwomIzQzOwkJLyogVENBX0dBQ1RfVE07IGFjdGlvbnMgZHVtcCB0aGVpciB0Y2ZfdCB3aXRoIG5sYV9wdXRfNjRiaXQoKSwKJiM0MzsJCSAqIHdoaWNoIG1heSBlbWl0IGFuIGV4dHJhIE5MQV9QQUQgYXR0cmlidXRlLgomIzQzOwkJICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IHRjZl90KSk7CiB9CiAKIHN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9mdWxsX2F0dHJzX3NpemUoc2l6ZV90IHN6KQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBmLmMKaW5kZXggMDlkNDZlMTk1ZTMzYi4uMDZkOGY3OGI3MzY4MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2JwZi5jCkBAIC0zODksNiAmIzQzOzM4OSwzMSBAQCBzdGF0aWMgdm9pZCB0Y2ZfYnBmX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0KQogCXRjZl9icGZfY2ZnX2NsZWFudXAoJmFtcDt0bXApOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRjZl9icGYgKnByb2cgPSB0b19icGYoYWN0KTsKJiM0MzsJc2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2FjdF9icGYpKTsKJiM0MzsKJiM0MzsJLyogYnBmX29wcyBhbmQgYnBmX251bV9vcHMgYXJlIHB1Ymxpc2hlZCBhcyBzZXBhcmF0ZSBzdG9yZXMgdW5kZXIKJiM0MzsJICogdGNmX2xvY2ssIHNvIHRha2UgaXQgaGVyZSBhcyB0Y2ZfYnBmX2R1bXAoKSBkb2VzLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cHJvZy0mZ3Q7dGNmX2xvY2spOwomIzQzOwlpZiAodGNmX2JwZl9pc19lYnBmKHByb2cpKSB7CiYjNDM7CQkvKiBUQ0FfQUNUX0JQRl9OQU1FICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShBQ1RfQlBGX05BTUVfTEVOICYjNDM7IDEpOwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfQUNUX0JQRl9JRCAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoQlBGX1RBR19TSVpFKTsgLyogVENBX0FDVF9CUEZfVEFHICovCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9BQ1RfQlBGX09QU19MRU4gKi8KJiM0MzsJCS8qIFRDQV9BQ1RfQlBGX09QUyAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUocHJvZy0mZ3Q7YnBmX251bV9vcHMgKgomIzQzOwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7cHJvZy0mZ3Q7dGNmX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkua2luZAkJPQkmIzM0O2JwZiYjMzQ7LAogCS5pZAkJPQlUQ0FfSURfQlBGLApAQCAtMzk3LDYgJiM0Mzs0MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZHVtcAkJPQl0Y2ZfYnBmX2R1bXAsCiAJLmNsZWFudXAJPQl0Y2ZfYnBmX2NsZWFudXAsCiAJLmluaXQJCT0JdGNmX2JwZl9pbml0LAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXRjZl9icGZfZ2V0X2ZpbGxfc2l6ZSwKIAkuc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHRjZl9icGYpLAogfTsKIE1PRFVMRV9BTElBU19ORVRfQUNUKCYjMzQ7YnBmJiMzNDspOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jCmluZGV4IGUyNTA5NjljODRhY2EuLjM3MDA4NWFiNmVhNDEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0LmMKQEAgLTE2NTcsNiAmIzQzOzE2NTcsNTEgQEAgc3RhdGljIGludCB0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CiYjNDM7CXNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0KSkgLyogVENBX0NUX1BBUk1TICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9DVF9BQ1RJT04gKi8KJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwID0gcmN1X2RlcmVmZXJlbmNlKHRvX2N0KGFjdCktJmd0O3BhcmFtcyk7CiYjNDM7CiYjNDM7CWlmIChwLSZndDtjdF9hY3Rpb24gJmFtcDsgVENBX0NUX0FDVF9DTEVBUikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBUQ0FfQ1RfTUFSSywgVENBX0NUX01BUktfTUFTSyAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspKQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtJmd0O21hcmspKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDttYXJrX21hc2spKTsKJiM0MzsKJiM0MzsJLyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSkKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDtsYWJlbHMpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDtsYWJlbHNfbWFzaykpOwomIzQzOwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSkKJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLSZndDt6b25lKSk7IC8qIFRDQV9DVF9aT05FICovCiYjNDM7CiYjNDM7CWlmIChwLSZndDtjdF9hY3Rpb24gJmFtcDsgVENBX0NUX0FDVF9OQVQpCiYjNDM7CQkvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzcwomIzQzOwkJICogdmFyaWFudHMsIHBsdXMgVENBX0NUX05BVF9QT1JUX3tNSU4sTUFYfS4KJiM0MzsJCSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKQomIzQzOwkJCSYjNDM7IDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSk7CiYjNDM7CiYjNDM7CS8qIFRDQV9DVF9IRUxQRVJfe05BTUUsRkFNSUxZLFBST1RPfSAqLwomIzQzOwlpZiAocC0mZ3Q7aGVscGVyKQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoTkZfQ1RfSEVMUEVSX05BTUVfTEVOKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7CiYjNDM7b3V0OgomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7CiAJLmtpbmQJCT0JJiMzNDtjdCYjMzQ7LAogCS5pZAkJPQlUQ0FfSURfQ1QsCkBAIC0xNjY2LDYgJiM0MzsxNzExLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7CiAJLmluaXQJCT0JdGNmX2N0X2luaXQsCiAJLmNsZWFudXAJPQl0Y2ZfY3RfY2xlYW51cCwKIAkuc3RhdHNfdXBkYXRlCT0JdGNmX3N0YXRzX3VwZGF0ZSwKJiM0MzsJLmdldF9maWxsX3NpemUJPQl0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jCmluZGV4IDE4ODZmZmQyY2E5NTYuLmZjZWQ0YjEwOTRhZjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uYwpAQCAtMzU2LDYgJiM0MzszNTYsMTYgQEAgc3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpCiAJCWtmcmVlX3JjdShjcCwgcmN1KTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0aW5mbykpIC8qIFRDQV9DVElORk9fQUNUICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkgLyogVENBX0NUSU5GT19aT05FICovCiYjNDM7CQkvKiBUQ0FfQ1RJTkZPX1BBUk1TX3tEU0NQX01BU0ssRFNDUF9TVEFURU1BU0ssQ1BNQVJLX01BU0t9ICovCiYjNDM7CQkmIzQzOyAzICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpCiYjNDM7CQkvKiBUQ0FfQ1RJTkZPX1NUQVRTX3tEU0NQX1NFVCxEU0NQX0VSUk9SLENQTUFSS19TRVR9ICovCiYjNDM7CQkmIzQzOyAzICogbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHsKIAkua2luZAk9ICYjMzQ7Y3RpbmZvJiMzNDssCiAJLmlkCT0gVENBX0lEX0NUSU5GTywKQEAgLTM2NCw2ICYjNDM7Mzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0gewogCS5kdW1wCT0gdGNmX2N0aW5mb19kdW1wLAogCS5pbml0CT0gdGNmX2N0aW5mb19pbml0LAogCS5jbGVhbnVwPSB0Y2ZfY3RpbmZvX2NsZWFudXAsCiYjNDM7CS5nZXRfZmlsbF9zaXplID0gdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplLAogCS5zaXplCT0gc2l6ZW9mKHN0cnVjdCB0Y2ZfY3RpbmZvKSwKIH07CiBNT0RVTEVfQUxJQVNfTkVUX0FDVCgmIzM0O2N0aW5mbyYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4IDA2NTIyODAyNmM1OGUuLmZmMmIxNmUzNWI5YjAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuYwpAQCAtODc4LDYgJiM0Mzs4NzgsMjggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIHRjZl9pZmVfZGVjb2RlKHNrYiwgYSwgcmVzKTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y2ZfaWZlX2luZm8gKmlmZSA9IHRvX2lmZShhY3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7CiYjNDM7CXN0cnVjdCB0Y2ZfbWV0YV9pbmZvICplOwomIzQzOwlzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfaWZlKSkgLyogVENBX0lGRV9QQVJNUyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfRE1BQyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemUoMikgLyogVENBX0lGRV9UWVBFICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZSgwKTsgLyogVENBX0lGRV9NRVRBTFNUICovCiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcCA9IHJjdV9kZXJlZmVyZW5jZShpZmUtJmd0O3BhcmFtcyk7CiYjNDM7CWlmIChwKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCAmYW1wO3AtJmd0O21ldGFsaXN0LCBtZXRhbGlzdCkKJiM0MzsJCQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHsKIAkua2luZCA9ICYjMzQ7aWZlJiMzNDssCiAJLmlkID0gVENBX0lEX0lGRSwKQEAgLTg4Niw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0gewogCS5kdW1wID0gdGNmX2lmZV9kdW1wLAogCS5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLAogCS5pbml0ID0gdGNmX2lmZV9pbml0LAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZSwKIAkuc2l6ZSA9CXNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSwKIH07CiBNT0RVTEVfQUxJQVNfTkVUX0FDVCgmIzM0O2lmZSYjMzQ7KTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwppbmRleCBkNGQ0N2E5OTIxZjQ1Li45OWQ3ZTM2NTEwYmQwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC02MjYsNiAmIzQzOzYyNiwyOSBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y2ZfcGVkaXRfcGFybXMgKnBhcm1zOwomIzQzOwlzaXplX3Qgc2l6ZTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwYXJtcyA9IHJjdV9kZXJlZmVyZW5jZSh0b19wZWRpdChhY3QpLSZndDtwYXJtcyk7CiYjNDM7CXNpemUgPSBubGFfdG90YWxfc2l6ZShzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCB0Y19wZWRpdCwga2V5cywKJiM0MzsJCQkJCSAgICBwYXJtcy0mZ3Q7dGNmcF9ua2V5cykpOwomIzQzOwlpZiAocGFybXMtJmd0O3RjZnBfa2V5c19leCkgewomIzQzOwkJLyogVENBX1BFRElUX0tFWVNfRVgsIGhvbGRpbmcgb25lIFRDQV9QRURJVF9LRVlfRVggbmVzdCB3aXRoIGEKJiM0MzsJCSAqIEhUWVBFIGFuZCBhIENNRCBhdHRyaWJ1dGUgcGVyIGtleS4KJiM0MzsJCSAqLwomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCkKJiM0MzsJCQkmIzQzOyBwYXJtcy0mZ3Q7dGNmcF9ua2V5cyAqIChubGFfdG90YWxfc2l6ZSgwKQomIzQzOwkJCQkJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKQomIzQzOwkJCQkJICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0gewogCS5raW5kCQk9CSYjMzQ7cGVkaXQmIzM0OywKIAkuaWQJCT0JVENBX0lEX1BFRElULApAQCAtNjM1LDYgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHsKIAkuZHVtcAkJPQl0Y2ZfcGVkaXRfZHVtcCwKIAkuY2xlYW51cAk9CXRjZl9wZWRpdF9jbGVhbnVwLAogCS5pbml0CQk9CXRjZl9wZWRpdF9pbml0LAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLAogCS5vZmZsb2FkX2FjdF9zZXR1cCA9CXRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cCwKIAkuc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHRjZl9wZWRpdCksCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggY2UwOGY2ODQwZWY3Yy4uM2Y4MTQ3ZjM3NTQ5MyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC00OTAsNiAmIzQzOzQ5MCwxNyBAQCBzdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfcG9saWNlKSkgLyogVENBX1BPTElDRV9UQkYgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1JBVEU2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqLwomIzQzOwkJJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEtUUkFURTY0ICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RCVVJTVDY0ICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi8KJiM0MzsJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX1BPTElDRV9BVlJBVEUgKi8KJiM0Mzt9CiYjNDM7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7QWxleGV5IEt1em5ldHNvdiYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1BvbGljaW5nIGFjdGlvbnMmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKQEAgLTUwMyw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wb2xpY2Vfb3BzID0gewogCS5kdW1wCQk9CXRjZl9wb2xpY2VfZHVtcCwKIAkuaW5pdAkJPQl0Y2ZfcG9saWNlX2luaXQsCiAJLmNsZWFudXAJPQl0Y2ZfcG9saWNlX2NsZWFudXAsCiYjNDM7CS5nZXRfZmlsbF9zaXplCT0JdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLAogCS5vZmZsb2FkX2FjdF9zZXR1cCA9CXRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsCiAJLnNpemUJCT0Jc2l6ZW9mKHN0cnVjdCB0Y2ZfcG9saWNlKSwKIH07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwppbmRleCAyY2ViNGQxNDFiNzEzLi40NDMxOWExNTliNTVkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKQEAgLTMxNSw2ICYjNDM7MzE1LDE0IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19zYW1wbGUpKSAvKiBUQ0FfU0FNUExFX1BBUk1TICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9SQVRFICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9UUlVOQ19TSVpFICovCiYjNDM7CQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUCAqLwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHsKIAkua2luZAkgID0gJiMzNDtzYW1wbGUmIzM0OywKIAkuaWQJICA9IFRDQV9JRF9TQU1QTEUsCkBAIC0zMjQsNiAmIzQzOzMzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHsKIAkuZHVtcAkgID0gdGNmX3NhbXBsZV9kdW1wLAogCS5pbml0CSAgPSB0Y2Zfc2FtcGxlX2luaXQsCiAJLmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZSwKIAkuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgICAgPSB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwLAogCS5zaXplCSAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYwppbmRleCBiMTQ4MDc3NjFkODI5Li5mZjQwMWFjZTRmM2RhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYwpAQCAtODM1LDYgJiM0Mzs4MzUsODUgQEAgc3RhdGljIGludCB0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc2l6ZV90CiYjNDM7dHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7CiYjNDM7CWludCBsZW4gPSBpbmZvLSZndDtvcHRpb25zX2xlbjsKJiM0MzsJc2l6ZV90IHNpemUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAobGVuICZndDsgMCkgewomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IChjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqKXNyYzsKJiM0MzsKJiM0MzsJCS8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfR0VORVZFX3tDTEFTUyxUWVBFLERBVEF9ICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZSgyKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKDEpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUob3B0LSZndDtsZW5ndGggKiA0KTsKJiM0MzsKJiM0MzsJCWxlbiAtPSBzaXplb2Yoc3RydWN0IGdlbmV2ZV9vcHQpICYjNDM7IG9wdC0mZ3Q7bGVuZ3RoICogNDsKJiM0MzsJCXNyYyAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSAmIzQzOyBvcHQtJmd0O2xlbmd0aCAqIDQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNpemU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzaXplX3Qgc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDtvcHRpb25zX2xlbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUUyBhbmQgdGhlIHBlci1wcm90b2NvbCBuZXN0IGluc2lkZSBpdCAqLwomIzQzOwlzaXplID0gbmxhX3RvdGFsX3NpemUoMCkgJiM0MzsgbmxhX3RvdGFsX3NpemUoMCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tJmd0O2tleS50dW5fZmxhZ3MpKSB7CiYjNDM7CQlzaXplICYjNDM7PSB0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShpbmZvKTsKJiM0MzsJfSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby0mZ3Q7a2V5LnR1bl9mbGFncykpIHsKJiM0MzsJCS8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfVlhMQU5fR0JQICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CX0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKSkgewomIzQzOwkJLyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9FUlNQQU5fe1ZFUixJTkRFWCxESVIsSFdJRH0gKi8KJiM0MzsJCXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNpemVfdCB0dW5uZWxfa2V5X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRjZl90dW5uZWxfa2V5ICp0ID0gdG9fdHVubmVsX2tleShhY3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgdGNmX3R1bm5lbF9rZXlfcGFyYW1zICpwYXJhbXM7CiYjNDM7CS8qIFRDQV9UVU5ORUxfS0VZX1BBUk1TICovCiYjNDM7CXNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y190dW5uZWxfa2V5KSk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcGFyYW1zID0gcmN1X2RlcmVmZXJlbmNlKHQtJmd0O3BhcmFtcyk7CiYjNDM7CWlmIChwYXJhbXMtJmd0O3RjZnRfYWN0aW9uID09IFRDQV9UVU5ORUxfS0VZX0FDVF9TRVQpIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwYXJhbXMtJmd0O3RjZnRfZW5jX21ldGFkYXRhLSZndDt1LnR1bl9pbmZvOwomIzQzOwomIzQzOwkJLyogSW4gZHVtcCBvcmRlcjogVENBX1RVTk5FTF9LRVlfRU5DX0tFWV9JRCwgdGhlIElQdjYgYWRkcmVzcwomIzQzOwkJICogcGFpciAobGFyZ2VyIHRoYW4gdGhlIElQdjQgb25lKSwgLi4uX0VOQ19EU1RfUE9SVCwKJiM0MzsJCSAqIC4uLl9OT19DU1VNLCAuLi5fTk9fRlJBRywgdGhlIG9wdGlvbnMgYW5kIC4uLl9FTkNfe1RPUyxUVEx9LgomIzQzOwkJICovCiYjNDM7CQlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSkKJiM0MzsJCQkmIzQzOyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpCiYjNDM7CQkJJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZSgwKQomIzQzOwkJCSYjNDM7IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoaW5mbykKJiM0MzsJCQkmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKQomIzQzOwkJCSYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0gewogCS5raW5kCQk9CSYjMzQ7dHVubmVsX2tleSYjMzQ7LAogCS5pZAkJPQlUQ0FfSURfVFVOTkVMX0tFWSwKQEAgLTg0Myw2ICYjNDM7OTIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHsKIAkuZHVtcAkJPQl0dW5uZWxfa2V5X2R1bXAsCiAJLmluaXQJCT0JdHVubmVsX2tleV9pbml0LAogCS5jbGVhbnVwCT0JdHVubmVsX2tleV9yZWxlYXNlLAomIzQzOwkuZ2V0X2ZpbGxfc2l6ZQk9CXR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZSwKIAkub2ZmbG9hZF9hY3Rfc2V0dXAgPQl0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cCwKIAkuc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHRjZl90dW5uZWxfa2V5KSwKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzc3CgkJCQkJCQlvdXRwdXQ6IDI3NwoJCQkJCQkJdGhvdWdodHM6IDEzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFRyYWZmaWMgQ29udHJvbCBQYXRjaCBTZXJpZXM6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhZGRpbmcgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBmb3IgdmFyaW91cyB0YyBhY3Rpb25zIGluIHRoZSBrZXJuZWwsIHRoaW5ncyBsaWtlIGB0Y2ZfYnBmX2dldF9maWxsX3NpemVgLCBgdGNmX2N0X2dldF9maWxsX3NpemVgLCBhbmQgdGhlIG90aGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGFjY3VyYXRlIHNpemUgZXN0aW1hdGVzIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgZHVtcGVkIHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3MgYWxzbyBhIGNoYW5nZSBpbiBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgdG8gaGFuZGxlIDY0LWJpdCBwYWRkaW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDb3VsZCB0aGlzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcz8mIzM0OyBBZnRlciBhbGwsIGNhbGN1bGF0aW5nIHNpemVzIGFuZCB0aGVuIGFsbG9jYXRpbmcgYSBidWZmZXIgYmFzZWQgb24gdGhvc2Ugc2l6ZXMgKmNvdWxkKiBiZSByaXNreS4gQSBtaXNjYWxjdWxhdGlvbiwgZWl0aGVyIG92ZXJlc3RpbWF0aW5nIG9yIHVuZGVyZXN0aW1hdGluZywgY291bGQgbGVhZCB0byBwcm9ibGVtcy4gQnV0IGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpGaXJzdGx5LCB0aGVzZSBgZ2V0X2ZpbGxfc2l6ZWAgZnVuY3Rpb25zICpyZXR1cm4qIGEgYHNpemVfdGAuIFRoZXkgZG9uJiMzOTt0ICphbGxvY2F0ZSogbWVtb3J5LCBvciBjb3B5IGFueSBkYXRhIHRoZW1zZWx2ZXMuIFRoZXkmIzM5O3JlIGp1c3Qgc2l6ZSBjYWxjdWxhdGlvbnMuIE5ldGxpbmsmIzM5O3MgYG5sYV9wdXRgIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBidWlsZCB0aGUgbWVzc2FnZXMsIGFuZCB0aGV5IGNvcHkgdGhlIGNvcnJlY3QgYW1vdW50IG9mIGRhdGEuIElmIHRoZSBzaXplIGlzIG92ZXJlc3RpbWF0ZWQsIGl0IGp1c3QgbWVhbnMgc29tZSB0YWlscm9vbSBpcyB1bnVzZWQgaW4gdGhlIHNrYiwgd2hpY2ggaXMgZmluZS4gVGhlIGBza2ItJmd0O2xlbmAgaXMgdXBkYXRlZCBieSBgbmxhX3B1dGAsIHNvIGl0IGNvcnJlY3RseSBvbmx5IHNlbmRzIHRoZSBhY3R1YWxseSB3cml0dGVuIGJ5dGVzIHRvIHVzZXJzcGFjZS4gVW5kZXJlc3RpbWF0aW5nIHRoZSBzaXplIHRyaWdnZXJzIGFuIGBFTVNHU0laRWAgZXJyb3Igb3IgYSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGlmIHRoZSBgbmxhX3B1dGAgaW1wbGVtZW50YXRpb24sIHdoaWNoIGRvZXMgdGhlIGNoZWNrcywgaXMgYnlwYXNzZWQgKGJ1dCB0aGlzIGlzIGFscmVhZHkgY2hlY2tlZCkuCgpUaGVuLCBsb29raW5nIGF0IHRoZSBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgY2hhbmdlLCBpdCYjMzk7cyBzaW1wbHkgZml4aW5nIHRoZSBzaXplIGNhbGN1bGF0aW9uIGZvciBgc3RydWN0IHRjZl90YCB0byBhY2NvdW50IGZvciB0aGUgZXh0cmEgcGFkZGluZyBpbnRyb2R1Y2VkIGJ5IGBubGFfcHV0XzY0Yml0YC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIGFsbG9jYXRlZCwgbm90aGluZyBtb3JlLgoKVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBpbnRyb2R1Y2VzIHNpemUgY2FsY3VsYXRpb25zLiBJdCBkb2VzbiYjMzk7dCBhZGQgYW55ICpuZXcqIGBubGFfcHV0YCBjYWxscywgbm9yIGRvZXMgaXQgY3JlYXRlIG1lbW9yeSwgdGhlcmVmb3JlIGl0IGNhbm5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhlIHBhdGNoZXMgZG8gKm5vdCogaW50cm9kdWNlIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIHRoZXkgZG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LgoKT2theSwgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzaXplIGNhbGN1bGF0aW9ucyB0aGVtc2VsdmVzIGRvbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0cy4gSSBjaGVja2VkIGVhY2ggYGdldF9maWxsX3NpemVgIGNhbGxiYWNrOgoKKiAgIGB0Y2ZfYnBmX2dldF9maWxsX3NpemVgOiBMb29rcyBnb29kLCByZWFkcyBpbml0aWFsaXplZCBkYXRhLgoqICAgYHRjZl9jdF9nZXRfZmlsbF9zaXplYDogSW5pdGlhbGl6ZWQgZGF0YS4KKiAgIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy4KKiAgIGB0Y2ZfaWZlX2dldF9maWxsX3NpemVgOiBSZWFkcyBpbml0aWFsaXplZCBgcC0mZ3Q7bWV0YWxpc3RgLgoqICAgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYDogUmVhZHMgaW5pdGlhbGl6ZWQgZGF0YS4KKiAgIGB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy4KKiAgIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy4KKiAgIGB0dW5uZWxfa2V5X2dldF9maWxsX3NpemVgOiBSZWFkcyBpbml0aWFsaXplZCBkYXRhLCBsaWtlIGBvcHRpb25zX2xlbmAsIGBsZW5ndGhgLCBgdHVuX2ZsYWdzYC4KCk5vdGhpbmcgaGVyZSBzZWVtcyB0byBpbnRyb2R1Y2Ugcmlza3Mgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgY29yZSBvZiBteSBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIHNlcmllcyBpcyBzb2xlbHkgYWJvdXQgYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgbmV0bGluayBkdW1wcy4gQSBtaXNjYWxjdWxhdGlvbiB3aWxsIGVpdGhlciBiZSBhIGZ1bmN0aW9uYWwgYnVnIChgRU1TR1NJWkVgIGVycm9yKSwgb3IgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGUgc2l6ZSBpcyB1c2VkIGluY29ycmVjdGx5LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGNyZWF0ZSBuZXcgcmlza3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBJJiMzOTttIHByZXR0eSBzdXJlIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkmIzM5O20gc2F0aXNmaWVkLiBOb3csIHRpbWUgdG8gdXNlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcGF5bG9hZCBzaXplIHJlcXVpcmVkIHdoZW4gZHVtcGluZyB0aGVzZSBhY3Rpb25zIHRvIHVzZXJzcGFjZS4gSXQgYWxzbyBmaXhlcyBhIHNpemUgY2FsY3VsYXRpb24gaW4gYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIHRvIGFjY291bnQgZm9yIDY0LWJpdCBwYWRkaW5nLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVx1MDAzZWxlbmAgYXBwcm9wcmlhdGVseSwgc28gb3ZlcmVzdGltYXRpbmcgdGhlIHNpemUgc2ltcGx5IGxlYXZlcyB1bnVzZWQgdGFpbHJvb20gaW4gdGhlIHNvY2tldCBidWZmZXIgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcGF5bG9hZCBzaXplIHJlcXVpcmVkIHdoZW4gZHVtcGluZyB0aGVzZSBhY3Rpb25zIHRvIHVzZXJzcGFjZS4gSXQgYWxzbyBmaXhlcyBhIHNpemUgY2FsY3VsYXRpb24gaW4gYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIHRvIGFjY291bnQgZm9yIDY0LWJpdCBwYWRkaW5nLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVx1MDAzZWxlbmAgYXBwcm9wcmlhdGVseSwgc28gb3ZlcmVzdGltYXRpbmcgdGhlIHNpemUgc2ltcGx5IGxlYXZlcyB1bnVzZWQgdGFpbHJvb20gaW4gdGhlIHNvY2tldCBidWZmZXIgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTU6NTEuNzEwMDY4NjUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTgxODE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORVRfQUNUX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9DVFwiLFxuICAgIFwiTkVUX0FDVF9DVElORk9cIixcbiAgICBcIk5FVF9BQ1RfSUZFXCIsXG4gICAgXCJORVRfQUNUX1BFRElUXCIsXG4gICAgXCJORVRfQUNUX1BPTElDRVwiLFxuICAgIFwiTkVUX0FDVF9TQU1QTEVcIixcbiAgICBcIk5FVF9BQ1RfVFVOTkVMX0tFWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTUFSS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0xBQkVMU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1pPTkVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2FjdGlvbl9pbml0XCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2luaXRfMVwiLFxuICAgIFwidGNmX2FjdGlvbl9kdW1wXCIsXG4gICAgXCJ0Y2ZfZXh0c192YWxpZGF0ZV9leFwiLFxuICAgIFwidGNmX2V4dHNfZHVtcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBmb3IgdmFyaW91cyB0cmFmZmljIGNvbnRyb2wgKHRjKSBhY3Rpb25zIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBwYXlsb2FkIHNpemUgcmVxdWlyZWQgd2hlbiBkdW1waW5nIHRoZXNlIGFjdGlvbnMgdG8gdXNlcnNwYWNlLiBJdCBhbHNvIGZpeGVzIGEgc2l6ZSBjYWxjdWxhdGlvbiBpbiBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgdG8gYWNjb3VudCBmb3IgNjQtYml0IHBhZGRpbmcuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IGludm9sdmUgY2FsY3VsYXRpbmcgc2l6ZXMgKHJldHVybmluZyBgc2l6ZV90YCkgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG8gbm90IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgYWRkIGNvbXBsZXggY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIElmIGEgc2l6ZSBpcyBtaXNjYWxjdWxhdGVkLCBpdCB3b3VsZCBlaXRoZXIgcmVzdWx0IGluIGFuIGBFTVNHU0laRWAgZXJyb3IgZHVyaW5nIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gb3IgcG90ZW50aWFsbHkgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgdW5kZXJlc3RpbWF0ZWQgYW5kIGJvdW5kcyBjaGVja3MgYXJlIG1pc3NpbmcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTikuIE5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmxhX3B1dGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdoaWNoIHVwZGF0ZSB0aGUgYHNrYi1cXHUwMDNlbGVuYCBhcHByb3ByaWF0ZWx5LCBzbyBvdmVyZXN0aW1hdGluZyB0aGUgc2l6ZSBzaW1wbHkgbGVhdmVzIHVudXNlZCB0YWlscm9vbSBpbiB0aGUgc29ja2V0IGJ1ZmZlciBhbmQgZG9lcyBub3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCdzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU1OjUxLjcxMDA3NDc2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTY0NzY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMTYgMjA6NTU6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcXG5pbmRleCA2MDBiNzgwNGJlZmQyLi5iNDQxNWQzNThjOTExIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXFxuQEAgLTQ1Miw3ICs0NTIsMTAgQEAgc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4gXFx0XFx0LyogVENBX1NUQVRTX1FVRVVFICovXFxuIFxcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKSlcXG4gXFx0XFx0KyBubGFfdG90YWxfc2l6ZSgwKSAvKiBUQ0FfQUNUX09QVElPTlMgbmVzdGVkICovXFxuLVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOyAvKiBUQ0FfR0FDVF9UTSAqL1xcbitcXHRcXHQvKiBUQ0FfR0FDVF9UTTsgYWN0aW9ucyBkdW1wIHRoZWlyIHRjZl90IHdpdGggbmxhX3B1dF82NGJpdCgpLFxcbitcXHRcXHQgKiB3aGljaCBtYXkgZW1pdCBhbiBleHRyYSBOTEFfUEFEIGF0dHJpYnV0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeilcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9icGYuYyBiL25ldC9zY2hlZC9hY3RfYnBmLmNcXG5pbmRleCAwOWQ0NmUxOTVlMzNiLi4wNmQ4Zjc4YjczNjgzIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfYnBmLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2JwZi5jXFxuQEAgLTM4OSw2ICszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4gXFx0dGNmX2JwZl9jZmdfY2xlYW51cChcXHUwMDI2dG1wKTtcXG4gfVxcbiBcXG4rc3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbit7XFxuK1xcdHN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7XFxuK1xcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19hY3RfYnBmKSk7XFxuK1xcbitcXHQvKiBicGZfb3BzIGFuZCBicGZfbnVtX29wcyBhcmUgcHVibGlzaGVkIGFzIHNlcGFyYXRlIHN0b3JlcyB1bmRlclxcbitcXHQgKiB0Y2ZfbG9jaywgc28gdGFrZSBpdCBoZXJlIGFzIHRjZl9icGZfZHVtcCgpIGRvZXMuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByb2ctXFx1MDAzZXRjZl9sb2NrKTtcXG4rXFx0aWYgKHRjZl9icGZfaXNfZWJwZihwcm9nKSkge1xcbitcXHRcXHQvKiBUQ0FfQUNUX0JQRl9OQU1FICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoQUNUX0JQRl9OQU1FX0xFTiArIDEpO1xcbitcXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX0FDVF9CUEZfSUQgKi9cXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShCUEZfVEFHX1NJWkUpOyAvKiBUQ0FfQUNUX0JQRl9UQUcgKi9cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9BQ1RfQlBGX09QU19MRU4gKi9cXG4rXFx0XFx0LyogVENBX0FDVF9CUEZfT1BTICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUocHJvZy1cXHUwMDNlYnBmX251bV9vcHMgKlxcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwcm9nLVxcdTAwM2V0Y2ZfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdC5raW5kXFx0XFx0PVxcdFxcXCJicGZcXFwiLFxcbiBcXHQuaWRcXHRcXHQ9XFx0VENBX0lEX0JQRixcXG5AQCAtMzk3LDYgKzQyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfYnBmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbiBcXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfYnBmX2R1bXAsXFxuIFxcdC5jbGVhbnVwXFx0PVxcdHRjZl9icGZfY2xlYW51cCxcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dGNmX2JwZl9pbml0LFxcbitcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfYnBmX2dldF9maWxsX3NpemUsXFxuIFxcdC5zaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgdGNmX2JwZiksXFxuIH07XFxuIE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJicGZcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jXFxuaW5kZXggZTI1MDk2OWM4NGFjYS4uMzcwMDg1YWI2ZWE0MSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2N0LmNcXG5AQCAtMTY1Nyw2ICsxNjU3LDUxIEBAIHN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwO1xcbitcXHRzaXplX3Qgc2l6ZTtcXG4rXFxuK1xcdHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0KSkgLyogVENBX0NUX1BBUk1TICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovXFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHAgPSByY3VfZGVyZWZlcmVuY2UodG9fY3QoYWN0KS1cXHUwMDNlcGFyYW1zKTtcXG4rXFxuK1xcdGlmIChwLVxcdTAwM2VjdF9hY3Rpb24gXFx1MDAyNiBUQ0FfQ1RfQUNUX0NMRUFSKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZW1hcmspKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihwLVxcdTAwM2VtYXJrX21hc2spKTtcXG4rXFxuK1xcdC8qIFRDQV9DVF9MQUJFTFMsIFRDQV9DVF9MQUJFTFNfTUFTSyAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZWxhYmVscykpXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZWxhYmVsc19tYXNrKSk7XFxuK1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSlcXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cXHUwMDNlem9uZSkpOyAvKiBUQ0FfQ1RfWk9ORSAqL1xcbitcXG4rXFx0aWYgKHAtXFx1MDAzZWN0X2FjdGlvbiBcXHUwMDI2IFRDQV9DVF9BQ1RfTkFUKVxcbitcXHRcXHQvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzc1xcbitcXHRcXHQgKiB2YXJpYW50cywgcGx1cyBUQ0FfQ1RfTkFUX1BPUlRfe01JTixNQVh9LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2l6ZSArPSAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXFxuK1xcdFxcdFxcdCsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKTtcXG4rXFxuK1xcdC8qIFRDQV9DVF9IRUxQRVJfe05BTUUsRkFNSUxZLFBST1RPfSAqL1xcbitcXHRpZiAocC1cXHUwMDNlaGVscGVyKVxcbitcXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKE5GX0NUX0hFTFBFUl9OQU1FX0xFTilcXG4rXFx0XFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xcbitvdXQ6XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xcbiBcXHQua2luZFxcdFxcdD1cXHRcXFwiY3RcXFwiLFxcbiBcXHQuaWRcXHRcXHQ9XFx0VENBX0lEX0NULFxcbkBAIC0xNjY2LDYgKzE3MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dGNmX2N0X2luaXQsXFxuIFxcdC5jbGVhbnVwXFx0PVxcdHRjZl9jdF9jbGVhbnVwLFxcbiBcXHQuc3RhdHNfdXBkYXRlXFx0PVxcdHRjZl9zdGF0c191cGRhdGUsXFxuK1xcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9jdF9nZXRfZmlsbF9zaXplLFxcbiBcXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfY3QpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xcbmluZGV4IDE4ODZmZmQyY2E5NTYuLmZjZWQ0YjEwOTRhZjggMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcXG5AQCAtMzU2LDYgKzM1NiwxNiBAQCBzdGF0aWMgdm9pZCB0Y2ZfY3RpbmZvX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG4gXFx0XFx0a2ZyZWVfcmN1KGNwLCByY3UpO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuK3tcXG4rXFx0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfY3RpbmZvKSkgLyogVENBX0NUSU5GT19BQ1QgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkgLyogVENBX0NUSU5GT19aT05FICovXFxuK1xcdFxcdC8qIFRDQV9DVElORk9fUEFSTVNfe0RTQ1BfTUFTSyxEU0NQX1NUQVRFTUFTSyxDUE1BUktfTUFTS30gKi9cXG4rXFx0XFx0KyAzICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpXFxuK1xcdFxcdC8qIFRDQV9DVElORk9fU1RBVFNfe0RTQ1BfU0VULERTQ1BfRVJST1IsQ1BNQVJLX1NFVH0gKi9cXG4rXFx0XFx0KyAzICogbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7XFxuIFxcdC5raW5kXFx0PSBcXFwiY3RpbmZvXFxcIixcXG4gXFx0LmlkXFx0PSBUQ0FfSURfQ1RJTkZPLFxcbkBAIC0zNjQsNiArMzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xcbiBcXHQuZHVtcFxcdD0gdGNmX2N0aW5mb19kdW1wLFxcbiBcXHQuaW5pdFxcdD0gdGNmX2N0aW5mb19pbml0LFxcbiBcXHQuY2xlYW51cD0gdGNmX2N0aW5mb19jbGVhbnVwLFxcbitcXHQuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9jdGluZm9fZ2V0X2ZpbGxfc2l6ZSxcXG4gXFx0LnNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXFxuIH07XFxuIE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJjdGluZm9cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcXG5pbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXFxuQEAgLTg3OCw2ICs4NzgsMjggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4re1xcbitcXHRzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYWN0KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHRjZl9pZmVfcGFyYW1zICpwO1xcbitcXHRzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTtcXG4rXFx0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2lmZSkpIC8qIFRDQV9JRkVfUEFSTVMgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShFVEhfQUxFTikgLyogVENBX0lGRV9ETUFDICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplKDIpIC8qIFRDQV9JRkVfVFlQRSAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplKDApOyAvKiBUQ0FfSUZFX01FVEFMU1QgKi9cXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cCA9IHJjdV9kZXJlZmVyZW5jZShpZmUtXFx1MDAzZXBhcmFtcyk7XFxuK1xcdGlmIChwKSB7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFxcdTAwMjZwLVxcdTAwM2VtZXRhbGlzdCwgbWV0YWxpc3QpXFxuK1xcdFxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG4gXFx0LmtpbmQgPSBcXFwiaWZlXFxcIixcXG4gXFx0LmlkID0gVENBX0lEX0lGRSxcXG5AQCAtODg2LDYgKzkwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG4gXFx0LmR1bXAgPSB0Y2ZfaWZlX2R1bXAsXFxuIFxcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxcbiBcXHQuaW5pdCA9IHRjZl9pZmVfaW5pdCxcXG4rXFx0LmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsXFxuIFxcdC5zaXplID1cXHRzaXplb2Yoc3RydWN0IHRjZl9pZmVfaW5mbyksXFxuIH07XFxuIE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJpZmVcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXFxuaW5kZXggZDRkNDdhOTkyMWY0NS4uOTlkN2UzNjUxMGJkMCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcXG5AQCAtNjI2LDYgKzYyNiwyOSBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtcztcXG4rXFx0c2l6ZV90IHNpemU7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHBhcm1zID0gcmN1X2RlcmVmZXJlbmNlKHRvX3BlZGl0KGFjdCktXFx1MDAzZXBhcm1zKTtcXG4rXFx0c2l6ZSA9IG5sYV90b3RhbF9zaXplKHN0cnVjdF9zaXplX3Qoc3RydWN0IHRjX3BlZGl0LCBrZXlzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGFybXMtXFx1MDAzZXRjZnBfbmtleXMpKTtcXG4rXFx0aWYgKHBhcm1zLVxcdTAwM2V0Y2ZwX2tleXNfZXgpIHtcXG4rXFx0XFx0LyogVENBX1BFRElUX0tFWVNfRVgsIGhvbGRpbmcgb25lIFRDQV9QRURJVF9LRVlfRVggbmVzdCB3aXRoIGFcXG4rXFx0XFx0ICogSFRZUEUgYW5kIGEgQ01EIGF0dHJpYnV0ZSBwZXIga2V5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZSgwKVxcbitcXHRcXHRcXHQrIHBhcm1zLVxcdTAwM2V0Y2ZwX25rZXlzICogKG5sYV90b3RhbF9zaXplKDApXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKVxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHNpemU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xcbiBcXHQua2luZFxcdFxcdD1cXHRcXFwicGVkaXRcXFwiLFxcbiBcXHQuaWRcXHRcXHQ9XFx0VENBX0lEX1BFRElULFxcbkBAIC02MzUsNiArNjU4LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wZWRpdF9vcHMgPSB7XFxuIFxcdC5kdW1wXFx0XFx0PVxcdHRjZl9wZWRpdF9kdW1wLFxcbiBcXHQuY2xlYW51cFxcdD1cXHR0Y2ZfcGVkaXRfY2xlYW51cCxcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dGNmX3BlZGl0X2luaXQsXFxuK1xcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLFxcbiBcXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuY1xcbmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcXG5AQCAtNDkwLDYgKzQ5MCwxNyBAQCBzdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbit7XFxuK1xcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3BvbGljZSkpIC8qIFRDQV9QT0xJQ0VfVEJGICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUkFURTY0ICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVFJBVEU2NCAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVEJVUlNUNjQgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9QT0xJQ0VfQVZSQVRFICovXFxuK31cXG4rXFxuIE1PRFVMRV9BVVRIT1IoXFxcIkFsZXhleSBLdXpuZXRzb3ZcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQb2xpY2luZyBhY3Rpb25zXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5AQCAtNTAzLDYgKzUxNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHtcXG4gXFx0LmR1bXBcXHRcXHQ9XFx0dGNmX3BvbGljZV9kdW1wLFxcbiBcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfcG9saWNlX2luaXQsXFxuIFxcdC5jbGVhbnVwXFx0PVxcdHRjZl9wb2xpY2VfY2xlYW51cCxcXG4rXFx0LmdldF9maWxsX3NpemVcXHQ9XFx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxcbiBcXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuIFxcdC5zaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgdGNmX3BvbGljZSksXFxuIH07XFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuaW5kZXggMmNlYjRkMTQxYjcxMy4uNDQzMTlhMTU5YjU1ZCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xcbkBAIC0zMTUsNiArMzE1LDE0IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuK3tcXG4rXFx0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqL1xcbitcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAvKiBUQ0FfU0FNUExFX1JBVEUgKi9cXG4rXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9UUlVOQ19TSVpFICovXFxuK1xcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi9cXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xcbiBcXHQua2luZFxcdCAgPSBcXFwic2FtcGxlXFxcIixcXG4gXFx0LmlkXFx0ICA9IFRDQV9JRF9TQU1QTEUsXFxuQEAgLTMyNCw2ICszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XFxuIFxcdC5kdW1wXFx0ICA9IHRjZl9zYW1wbGVfZHVtcCxcXG4gXFx0LmluaXRcXHQgID0gdGNmX3NhbXBsZV9pbml0LFxcbiBcXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxuK1xcdC5nZXRfZmlsbF9zaXplID0gdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplLFxcbiBcXHQuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCxcXG4gXFx0Lm9mZmxvYWRfYWN0X3NldHVwICAgID0gdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHQgID0gc2l6ZW9mKHN0cnVjdCB0Y2Zfc2FtcGxlKSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xcbmluZGV4IGIxNDgwNzc2MWQ4MjkuLmZmNDAxYWNlNGYzZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xcbkBAIC04MzUsNiArODM1LDg1IEBAIHN0YXRpYyBpbnQgdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHNpemVfdFxcbit0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XFxuK1xcdGludCBsZW4gPSBpbmZvLVxcdTAwM2VvcHRpb25zX2xlbjtcXG4rXFx0c2l6ZV90IHNpemUgPSAwO1xcbitcXG4rXFx0d2hpbGUgKGxlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IChjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqKXNyYztcXG4rXFxuK1xcdFxcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfR0VORVZFX3tDTEFTUyxUWVBFLERBVEF9ICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoMilcXG4rXFx0XFx0XFx0KyBubGFfdG90YWxfc2l6ZSgxKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKG9wdC1cXHUwMDNlbGVuZ3RoICogNCk7XFxuK1xcbitcXHRcXHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIG9wdC1cXHUwMDNlbGVuZ3RoICogNDtcXG4rXFx0XFx0c3JjICs9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgKyBvcHQtXFx1MDAzZWxlbmd0aCAqIDQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbit7XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VvcHRpb25zX2xlbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUUyBhbmQgdGhlIHBlci1wcm90b2NvbCBuZXN0IGluc2lkZSBpdCAqL1xcbitcXHRzaXplID0gbmxhX3RvdGFsX3NpemUoMCkgKyBubGFfdG90YWxfc2l6ZSgwKTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxuK1xcdFxcdHNpemUgKz0gdHVubmVsX2tleV9nZW5ldmVfb3B0c19maWxsX3NpemUoaW5mbyk7XFxuK1xcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XFxuK1xcdFxcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfVlhMQU5fR0JQICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcbitcXHR9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cXHUwMDNla2V5LnR1bl9mbGFncykpIHtcXG4rXFx0XFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9FUlNQQU5fe1ZFUixJTkRFWCxESVIsSFdJRH0gKi9cXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuK3tcXG4rXFx0c3RydWN0IHRjZl90dW5uZWxfa2V5ICp0ID0gdG9fdHVubmVsX2tleShhY3QpO1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNmX3R1bm5lbF9rZXlfcGFyYW1zICpwYXJhbXM7XFxuK1xcdC8qIFRDQV9UVU5ORUxfS0VZX1BBUk1TICovXFxuK1xcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y190dW5uZWxfa2V5KSk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LVxcdTAwM2VwYXJhbXMpO1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2V0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9XFxuK1xcdFxcdFxcdFxcdTAwMjZwYXJhbXMtXFx1MDAzZXRjZnRfZW5jX21ldGFkYXRhLVxcdTAwM2V1LnR1bl9pbmZvO1xcbitcXG4rXFx0XFx0LyogSW4gZHVtcCBvcmRlcjogVENBX1RVTk5FTF9LRVlfRU5DX0tFWV9JRCwgdGhlIElQdjYgYWRkcmVzc1xcbitcXHRcXHQgKiBwYWlyIChsYXJnZXIgdGhhbiB0aGUgSVB2NCBvbmUpLCAuLi5fRU5DX0RTVF9QT1JULFxcbitcXHRcXHQgKiAuLi5fTk9fQ1NVTSwgLi4uX05PX0ZSQUcsIHRoZSBvcHRpb25zIGFuZCAuLi5fRU5DX3tUT1MsVFRMfS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpXFxuK1xcdFxcdFxcdCsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKVxcbitcXHRcXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoMClcXG4rXFx0XFx0XFx0KyB0dW5uZWxfa2V5X29wdHNfZmlsbF9zaXplKGluZm8pXFxuK1xcdFxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcXG4rXFx0XFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0ge1xcbiBcXHQua2luZFxcdFxcdD1cXHRcXFwidHVubmVsX2tleVxcXCIsXFxuIFxcdC5pZFxcdFxcdD1cXHRUQ0FfSURfVFVOTkVMX0tFWSxcXG5AQCAtODQzLDYgKzkyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XFxuIFxcdC5kdW1wXFx0XFx0PVxcdHR1bm5lbF9rZXlfZHVtcCxcXG4gXFx0LmluaXRcXHRcXHQ9XFx0dHVubmVsX2tleV9pbml0LFxcbiBcXHQuY2xlYW51cFxcdD1cXHR0dW5uZWxfa2V5X3JlbGVhc2UsXFxuK1xcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZSxcXG4gXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cCxcXG4gXFx0LnNpemVcXHRcXHQ9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksXFxuIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU1OjUzLjA4MDUzNzIxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMDYxMTE5NTU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIk5FVF9BQ1RfQ1RJTkZPXCIsXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0FDVF9QRURJVFwiLFxuICAgIFwiTkVUX0FDVF9QT0xJQ0VcIixcbiAgICBcIk5FVF9BQ1RfU0FNUExFXCIsXG4gICAgXCJORVRfQUNUX1RVTk5FTF9LRVlcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX01BUktcIixcbiAgICBcIk5GX0NPTk5UUkFDS19MQUJFTFNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19aT05FU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9hY3Rpb25faW5pdFwiLFxuICAgIFwidGNmX2FjdGlvbl9pbml0XzFcIixcbiAgICBcInRjZl9hY3Rpb25fZHVtcFwiLFxuICAgIFwidGNmX2V4dHNfdmFsaWRhdGVfZXhcIixcbiAgICBcInRjZl9leHRzX2R1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgdG8gdmFyaW91cyBUQyBhY3Rpb25zIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgbmVlZGVkIHRvIGR1bXAgdGhlIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIEl0J3Mgd29ydGggZnV6emluZyBiZWNhdXNlIGluY29ycmVjdCBzaXplIGNhbGN1bGF0aW9ucyBjYW4gbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLCBvdXQtb2YtYm91bmRzIHdyaXRlcywgb3IgYEVNU0dTSVpFYCBlcnJvcnMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDQzMzFiNjZkOWYzOWVlYjJjNTg3ZGNiNTlkMWQxZjNjOTBhM2QzMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDIwOjU1OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcbmluZGV4IDYwMGI3ODA0YmVmZDIuLmI0NDE1ZDM1OGM5MTEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5AQCAtNDUyLDcgKzQ1MiwxMCBAQCBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuIFx0XHQvKiBUQ0FfU1RBVFNfUVVFVUUgKi9cbiBcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IGduZXRfc3RhdHNfcXVldWUpKVxuIFx0XHQrIG5sYV90b3RhbF9zaXplKDApIC8qIFRDQV9BQ1RfT1BUSU9OUyBuZXN0ZWQgKi9cbi1cdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjZl90KSk7IC8qIFRDQV9HQUNUX1RNICovXG4rXHRcdC8qIFRDQV9HQUNUX1RNOyBhY3Rpb25zIGR1bXAgdGhlaXIgdGNmX3Qgd2l0aCBubGFfcHV0XzY0Yml0KCksXG4rXHRcdCAqIHdoaWNoIG1heSBlbWl0IGFuIGV4dHJhIE5MQV9QQUQgYXR0cmlidXRlLlxuK1x0XHQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2Yoc3RydWN0IHRjZl90KSk7XG4gfVxuIFxuIHN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9mdWxsX2F0dHJzX3NpemUoc2l6ZV90IHN6KVxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYnBmLmMgYi9uZXQvc2NoZWQvYWN0X2JwZi5jXG5pbmRleCAwOWQ0NmUxOTVlMzNiLi4wNmQ4Zjc4YjczNjgzIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9icGYuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9icGYuY1xuQEAgLTM4OSw2ICszODksMzEgQEAgc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiBcdHRjZl9icGZfY2ZnX2NsZWFudXAoXHUwMDI2dG1wKTtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfYnBmX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuK3tcbitcdHN0cnVjdCB0Y2ZfYnBmICpwcm9nID0gdG9fYnBmKGFjdCk7XG4rXHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfYWN0X2JwZikpO1xuK1xuK1x0LyogYnBmX29wcyBhbmQgYnBmX251bV9vcHMgYXJlIHB1Ymxpc2hlZCBhcyBzZXBhcmF0ZSBzdG9yZXMgdW5kZXJcbitcdCAqIHRjZl9sb2NrLCBzbyB0YWtlIGl0IGhlcmUgYXMgdGNmX2JwZl9kdW1wKCkgZG9lcy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuK1x0aWYgKHRjZl9icGZfaXNfZWJwZihwcm9nKSkge1xuK1x0XHQvKiBUQ0FfQUNUX0JQRl9OQU1FICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoQUNUX0JQRl9OQU1FX0xFTiArIDEpO1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgLyogVENBX0FDVF9CUEZfSUQgKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShCUEZfVEFHX1NJWkUpOyAvKiBUQ0FfQUNUX0JQRl9UQUcgKi9cbitcdH0gZWxzZSB7XG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQUNUX0JQRl9PUFNfTEVOICovXG4rXHRcdC8qIFRDQV9BQ1RfQlBGX09QUyAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHByb2ctXHUwMDNlYnBmX251bV9vcHMgKlxuK1x0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnByb2ctXHUwMDNldGNmX2xvY2spO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfYnBmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0LmtpbmRcdFx0PVx0XCJicGZcIixcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfQlBGLFxuQEAgLTM5Nyw2ICs0MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5kdW1wXHRcdD1cdHRjZl9icGZfZHVtcCxcbiBcdC5jbGVhbnVwXHQ9XHR0Y2ZfYnBmX2NsZWFudXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfYnBmX2luaXQsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX2JwZl9nZXRfZmlsbF9zaXplLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfYnBmKSxcbiB9O1xuIE1PRFVMRV9BTElBU19ORVRfQUNUKFwiYnBmXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuaW5kZXggZTI1MDk2OWM4NGFjYS4uMzcwMDg1YWI2ZWE0MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMTY1Nyw2ICsxNjU3LDUxIEBAIHN0YXRpYyBpbnQgdGNmX2N0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDtcbitcdHNpemVfdCBzaXplO1xuK1xuK1x0c2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfY3QpKSAvKiBUQ0FfQ1RfUEFSTVMgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSk7IC8qIFRDQV9DVF9BQ1RJT04gKi9cbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHAgPSByY3VfZGVyZWZlcmVuY2UodG9fY3QoYWN0KS1cdTAwM2VwYXJhbXMpO1xuK1xuK1x0aWYgKHAtXHUwMDNlY3RfYWN0aW9uIFx1MDAyNiBUQ0FfQ1RfQUNUX0NMRUFSKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIFRDQV9DVF9NQVJLLCBUQ0FfQ1RfTUFSS19NQVNLICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspKVxuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZW1hcmspKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbWFya19tYXNrKSk7XG4rXG4rXHQvKiBUQ0FfQ1RfTEFCRUxTLCBUQ0FfQ1RfTEFCRUxTX01BU0sgKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSlcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2VsYWJlbHMpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzX21hc2spKTtcbitcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpKVxuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZXpvbmUpKTsgLyogVENBX0NUX1pPTkUgKi9cbitcbitcdGlmIChwLVx1MDAzZWN0X2FjdGlvbiBcdTAwMjYgVENBX0NUX0FDVF9OQVQpXG4rXHRcdC8qIFRDQV9DVF9OQVRfSVBWNl97TUlOLE1BWH0sIHRoZSBsYXJnZXIgb2YgdGhlIHR3byBhZGRyZXNzXG4rXHRcdCAqIHZhcmlhbnRzLCBwbHVzIFRDQV9DVF9OQVRfUE9SVF97TUlOLE1BWH0uXG4rXHRcdCAqL1xuK1x0XHRzaXplICs9IDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGluNl9hZGRyKSlcbitcdFx0XHQrIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSk7XG4rXG4rXHQvKiBUQ0FfQ1RfSEVMUEVSX3tOQU1FLEZBTUlMWSxQUk9UT30gKi9cbitcdGlmIChwLVx1MDAzZWhlbHBlcilcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShORl9DVF9IRUxQRVJfTkFNRV9MRU4pXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XG4rb3V0OlxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7XG4gXHQua2luZFx0XHQ9XHRcImN0XCIsXG4gXHQuaWRcdFx0PVx0VENBX0lEX0NULFxuQEAgLTE2NjYsNiArMTcxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuIFx0LmluaXRcdFx0PVx0dGNmX2N0X2luaXQsXG4gXHQuY2xlYW51cFx0PVx0dGNmX2N0X2NsZWFudXAsXG4gXHQuc3RhdHNfdXBkYXRlXHQ9XHR0Y2Zfc3RhdHNfdXBkYXRlLFxuK1x0LmdldF9maWxsX3NpemVcdD1cdHRjZl9jdF9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cCxcbiBcdC5zaXplXHRcdD1cdHNpemVvZihzdHJ1Y3QgdGNmX2N0KSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmMgYi9uZXQvc2NoZWQvYWN0X2N0aW5mby5jXG5pbmRleCAxODg2ZmZkMmNhOTU2Li5mY2VkNGIxMDk0YWY4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xuQEAgLTM1Niw2ICszNTYsMTYgQEAgc3RhdGljIHZvaWQgdGNmX2N0aW5mb19jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4gXHRcdGtmcmVlX3JjdShjcCwgcmN1KTtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuK3tcbitcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0aW5mbykpIC8qIFRDQV9DVElORk9fQUNUICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpIC8qIFRDQV9DVElORk9fWk9ORSAqL1xuK1x0XHQvKiBUQ0FfQ1RJTkZPX1BBUk1TX3tEU0NQX01BU0ssRFNDUF9TVEFURU1BU0ssQ1BNQVJLX01BU0t9ICovXG4rXHRcdCsgMyAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKVxuK1x0XHQvKiBUQ0FfQ1RJTkZPX1NUQVRTX3tEU0NQX1NFVCxEU0NQX0VSUk9SLENQTUFSS19TRVR9ICovXG4rXHRcdCsgMyAqIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuIFx0LmtpbmRcdD0gXCJjdGluZm9cIixcbiBcdC5pZFx0PSBUQ0FfSURfQ1RJTkZPLFxuQEAgLTM2NCw2ICszNzQsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0aW5mb19vcHMgPSB7XG4gXHQuZHVtcFx0PSB0Y2ZfY3RpbmZvX2R1bXAsXG4gXHQuaW5pdFx0PSB0Y2ZfY3RpbmZvX2luaXQsXG4gXHQuY2xlYW51cD0gdGNmX2N0aW5mb19jbGVhbnVwLFxuK1x0LmdldF9maWxsX3NpemUgPSB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUsXG4gXHQuc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHRjZl9jdGluZm8pLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCJjdGluZm9cIik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IDA2NTIyODAyNmM1OGUuLmZmMmIxNmUzNWI5YjAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtODc4LDYgKzg3OCwyOCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX2lmZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYWN0KTtcbitcdGNvbnN0IHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbitcdHN0cnVjdCB0Y2ZfbWV0YV9pbmZvICplO1xuK1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2lmZSkpIC8qIFRDQV9JRkVfUEFSTVMgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShFVEhfQUxFTikgLyogVENBX0lGRV9ETUFDICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfU01BQyAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKDIpIC8qIFRDQV9JRkVfVFlQRSAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKDApOyAvKiBUQ0FfSUZFX01FVEFMU1QgKi9cbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHAgPSByY3VfZGVyZWZlcmVuY2UoaWZlLVx1MDAzZXBhcmFtcyk7XG4rXHRpZiAocCkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcdTAwMjZwLVx1MDAzZW1ldGFsaXN0LCBtZXRhbGlzdClcbitcdFx0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcbiBcdC5raW5kID0gXCJpZmVcIixcbiBcdC5pZCA9IFRDQV9JRF9JRkUsXG5AQCAtODg2LDYgKzkwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcbiBcdC5kdW1wID0gdGNmX2lmZV9kdW1wLFxuIFx0LmNsZWFudXAgPSB0Y2ZfaWZlX2NsZWFudXAsXG4gXHQuaW5pdCA9IHRjZl9pZmVfaW5pdCxcbitcdC5nZXRfZmlsbF9zaXplID0gdGNmX2lmZV9nZXRfZmlsbF9zaXplLFxuIFx0LnNpemUgPVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfaWZlX2luZm8pLFxuIH07XG4gTU9EVUxFX0FMSUFTX05FVF9BQ1QoXCJpZmVcIik7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXG5pbmRleCBkNGQ0N2E5OTIxZjQ1Li45OWQ3ZTM2NTEwYmQwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmNcbkBAIC02MjYsNiArNjI2LDI5IEBAIHN0YXRpYyBpbnQgdGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX3BlZGl0X3Bhcm1zICpwYXJtcztcbitcdHNpemVfdCBzaXplO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cGFybXMgPSByY3VfZGVyZWZlcmVuY2UodG9fcGVkaXQoYWN0KS1cdTAwM2VwYXJtcyk7XG4rXHRzaXplID0gbmxhX3RvdGFsX3NpemUoc3RydWN0X3NpemVfdChzdHJ1Y3QgdGNfcGVkaXQsIGtleXMsXG4rXHRcdFx0XHRcdCAgICBwYXJtcy1cdTAwM2V0Y2ZwX25rZXlzKSk7XG4rXHRpZiAocGFybXMtXHUwMDNldGNmcF9rZXlzX2V4KSB7XG4rXHRcdC8qIFRDQV9QRURJVF9LRVlTX0VYLCBob2xkaW5nIG9uZSBUQ0FfUEVESVRfS0VZX0VYIG5lc3Qgd2l0aCBhXG4rXHRcdCAqIEhUWVBFIGFuZCBhIENNRCBhdHRyaWJ1dGUgcGVyIGtleS5cbitcdFx0ICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoMClcbitcdFx0XHQrIHBhcm1zLVx1MDAzZXRjZnBfbmtleXMgKiAobmxhX3RvdGFsX3NpemUoMClcbitcdFx0XHRcdFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpXG4rXHRcdFx0XHRcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwicGVkaXRcIixcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfUEVESVQsXG5AQCAtNjM1LDYgKzY1OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dGNmX3BlZGl0X2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX3BlZGl0X2NsZWFudXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfcGVkaXRfaW5pdCxcbitcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9wZWRpdCksXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuY1xuaW5kZXggY2UwOGY2ODQwZWY3Yy4uM2Y4MTQ3ZjM3NTQ5MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbkBAIC00OTAsNiArNDkwLDE3IEBAIHN0YXRpYyBpbnQgdGNmX3BvbGljZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuK3tcbitcdHJldHVybiBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3BvbGljZSkpIC8qIFRDQV9QT0xJQ0VfVEJGICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUkFURTY0ICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHU2NCkpIC8qIFRDQV9QT0xJQ0VfUEVBS1JBVEU2NCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVFJBVEU2NCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BLVEJVUlNUNjQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1BPTElDRV9SRVNVTFQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9QT0xJQ0VfQVZSQVRFICovXG4rfVxuK1xuIE1PRFVMRV9BVVRIT1IoXCJBbGV4ZXkgS3V6bmV0c292XCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlBvbGljaW5nIGFjdGlvbnNcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5AQCAtNTAzLDYgKzUxNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHtcbiBcdC5kdW1wXHRcdD1cdHRjZl9wb2xpY2VfZHVtcCxcbiBcdC5pbml0XHRcdD1cdHRjZl9wb2xpY2VfaW5pdCxcbiBcdC5jbGVhbnVwXHQ9XHR0Y2ZfcG9saWNlX2NsZWFudXAsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BvbGljZV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9wb2xpY2UpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjQ0MzE5YTE1OWI1NWQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMzE1LDYgKzMxNSwxNCBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19zYW1wbGUpKSAvKiBUQ0FfU0FNUExFX1BBUk1TICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9TQU1QTEVfUkFURSAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAvKiBUQ0FfU0FNUExFX1RSVU5DX1NJWkUgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUCAqL1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQua2luZFx0ICA9IFwic2FtcGxlXCIsXG4gXHQuaWRcdCAgPSBUQ0FfSURfU0FNUExFLFxuQEAgLTMyNCw2ICszMzIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4gXHQuZHVtcFx0ICA9IHRjZl9zYW1wbGVfZHVtcCxcbiBcdC5pbml0XHQgID0gdGNmX3NhbXBsZV9pbml0LFxuIFx0LmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLFxuK1x0LmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsXG4gXHQuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCAgICA9IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0ICA9IHNpemVvZihzdHJ1Y3QgdGNmX3NhbXBsZSksXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuaW5kZXggYjE0ODA3NzYxZDgyOS4uZmY0MDFhY2U0ZjNkYSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuQEAgLTgzNSw2ICs4MzUsODUgQEAgc3RhdGljIGludCB0Y2ZfdHVubmVsX2tleV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdFxuK3R1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbit7XG4rXHRjb25zdCB1OCAqc3JjID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTtcbitcdGludCBsZW4gPSBpbmZvLVx1MDAzZW9wdGlvbnNfbGVuO1xuK1x0c2l6ZV90IHNpemUgPSAwO1xuK1xuK1x0d2hpbGUgKGxlbiBcdTAwM2UgMCkge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqb3B0ID0gKGNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICopc3JjO1xuK1xuK1x0XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX0dFTkVWRV97Q0xBU1MsVFlQRSxEQVRBfSAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKDIpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZSgxKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUob3B0LVx1MDAzZWxlbmd0aCAqIDQpO1xuK1xuK1x0XHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIG9wdC1cdTAwM2VsZW5ndGggKiA0O1xuK1x0XHRzcmMgKz0gc2l6ZW9mKHN0cnVjdCBnZW5ldmVfb3B0KSArIG9wdC1cdTAwM2VsZW5ndGggKiA0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuK3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4re1xuK1x0c2l6ZV90IHNpemU7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlb3B0aW9uc19sZW4pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVFMgYW5kIHRoZSBwZXItcHJvdG9jb2wgbmVzdCBpbnNpZGUgaXQgKi9cbitcdHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKSArIG5sYV90b3RhbF9zaXplKDApO1xuK1xuK1x0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuK1x0XHRzaXplICs9IHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplKGluZm8pO1xuK1x0fSBlbHNlIGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfVlhMQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuK1x0XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUCAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0VSU1BBTl9PUFRfQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpKSB7XG4rXHRcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRfRVJTUEFOX3tWRVIsSU5ERVgsRElSLEhXSUR9ICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuK3N0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRzdHJ1Y3QgdGNmX3R1bm5lbF9rZXkgKnQgPSB0b190dW5uZWxfa2V5KGFjdCk7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX3R1bm5lbF9rZXlfcGFyYW1zICpwYXJhbXM7XG4rXHQvKiBUQ0FfVFVOTkVMX0tFWV9QQVJNUyAqL1xuK1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX3R1bm5lbF9rZXkpKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHBhcmFtcyA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZXBhcmFtcyk7XG4rXHRpZiAocGFyYW1zLVx1MDAzZXRjZnRfYWN0aW9uID09IFRDQV9UVU5ORUxfS0VZX0FDVF9TRVQpIHtcbitcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwYXJhbXMtXHUwMDNldGNmdF9lbmNfbWV0YWRhdGEtXHUwMDNldS50dW5faW5mbztcbitcbitcdFx0LyogSW4gZHVtcCBvcmRlcjogVENBX1RVTk5FTF9LRVlfRU5DX0tFWV9JRCwgdGhlIElQdjYgYWRkcmVzc1xuK1x0XHQgKiBwYWlyIChsYXJnZXIgdGhhbiB0aGUgSVB2NCBvbmUpLCAuLi5fRU5DX0RTVF9QT1JULFxuK1x0XHQgKiAuLi5fTk9fQ1NVTSwgLi4uX05PX0ZSQUcsIHRoZSBvcHRpb25zIGFuZCAuLi5fRU5DX3tUT1MsVFRMfS5cbitcdFx0ICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpXG4rXHRcdFx0KyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZSgwKVxuK1x0XHRcdCsgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShpbmZvKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHtcbiBcdC5raW5kXHRcdD1cdFwidHVubmVsX2tleVwiLFxuIFx0LmlkXHRcdD1cdFRDQV9JRF9UVU5ORUxfS0VZLFxuQEAgLTg0Myw2ICs5MjIsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3R1bm5lbF9rZXlfb3BzID0ge1xuIFx0LmR1bXBcdFx0PVx0dHVubmVsX2tleV9kdW1wLFxuIFx0LmluaXRcdFx0PVx0dHVubmVsX2tleV9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHR1bm5lbF9rZXlfcmVsZWFzZSxcbitcdC5nZXRfZmlsbF9zaXplXHQ9XHR0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl90dW5uZWxfa2V5KSxcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTU6NTMuMDgwNTM4NTg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NzUwODU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgRHVtcCBTaXplIENhbGN1bGF0aW9uIGZvciBUQyBBY3Rpb25zKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGFjcm9zcyBhIGJ1bmNoIG9mIFRyYWZmaWMgQ29udHJvbCAoVEMpIGFjdGlvbnM6IGBhY3RfYnBmYCwgYGFjdF9jdGAsIGBhY3RfY3RpbmZvYCwgYGFjdF9pZmVgLCBgYWN0X3BlZGl0YCwgYGFjdF9wb2xpY2VgLCBgYWN0X3NhbXBsZWAsIGFuZCBgYWN0X3R1bm5lbF9rZXlgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHNvbWV0aGluZyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSBuZXRsaW5rIGR1bXAgc2l6ZSBjYWxjdWxhdGlvbnMgZm9yIHRoZXNlIGFjdGlvbnMuIFRoZSBjb3JlIGlkZWEgaXMgdG8gbW92ZSBhd2F5IGZyb20gcG90ZW50aWFsbHkgd2FzdGVmdWwgZml4ZWQtc2l6ZSBhbGxvY2F0aW9ucyBhbmQgaW5zdGVhZCBkZXRlcm1pbmUgdGhlICpleGFjdCogc2l6ZSBuZWVkZWQgZm9yIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBkdW1waW5nIHRoZSBhY3Rpb24uIFRoaXMgc2hvdWxkIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFRDIGFjdGlvbnMgb3IgY29tcGxleCBjb25maWd1cmF0aW9ucy5cblxuSSBzZWUgdGhhdCBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgIGlzIGFsc28gYmVpbmcgdHdlYWtlZC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgYXJlYSwgc28gSSdsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBob3cgaXQncyBiZWluZyBtb2RpZmllZCBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgbmV3IGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MuIEknbGwgbmVlZCB0byBnbyB0byBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrIGlzIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbi4gQXZvaWRpbmcgYE5MTVNHX0dPT0RTSVpFYCBvciBvdGhlciBnZW5lcmljIGFsbG9jYXRpb25zIGluIGZhdm9yIG9mIGEgcHJlY2lzZSBjYWxjdWxhdGlvbiBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBhcHByb2FjaC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzgwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTU6NTcuMjM4MDUwMDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjE1ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9maWxsX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTQ2OT1zdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNDcyLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6NDczOlxcdGlmIChhY3QtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X2ZpbGxfc2l6ZSlcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjQ3NDpcXHRcXHRyZXR1cm4gYWN0LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9maWxsX3NpemUoYWN0KSArIHN6O1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNDc1LVxcdHJldHVybiBzejtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYnBmLmM9Mzg0PXN0YXRpYyB2b2lkIHRjZl9icGZfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2JwZi5jLTM5MS1cXG5uZXQvc2NoZWQvYWN0X2JwZi5jOjM5MjpzdGF0aWMgc2l6ZV90IHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9icGYuYy0zOTMte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9icGYuYz00MTc9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2JwZi5jLTQyNC1cXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfYnBmX2luaXQsXFxubmV0L3NjaGVkL2FjdF9icGYuYzo0MjU6XFx0LmdldF9maWxsX3NpemVcXHQ9XFx0dGNmX2JwZl9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3RfYnBmLmMtNDI2LVxcdC5zaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgdGNmX2JwZiksXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2NzdW0uYz02NzQ9c3RhdGljIHZvaWQgdGNmX2NzdW1fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jc3VtLmMtNjgzLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jOjY4NDpzdGF0aWMgc2l6ZV90IHRjZl9jc3VtX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTY4NS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2NzdW0uYz03MDg9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jc3VtX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTcxNS1cXHQuY2xlYW51cFxcdD0gdGNmX2NzdW1fY2xlYW51cCxcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo3MTY6XFx0LmdldF9maWxsX3NpemUgID0gdGNmX2NzdW1fZ2V0X2ZpbGxfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy03MTctXFx0Lm9mZmxvYWRfYWN0X3NldHVwID0gdGNmX2NzdW1fb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTYzNj1zdGF0aWMgaW50IHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY1OS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY2MDpzdGF0aWMgc2l6ZV90IHRjZl9jdF9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY2MS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MTcwNT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNzEzLVxcdC5zdGF0c191cGRhdGVcXHQ9XFx0dGNmX3N0YXRzX3VwZGF0ZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTcxNDpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTcxNS1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9MzQ5PXN0YXRpYyB2b2lkIHRjZl9jdGluZm9fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNTgtXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozNTk6c3RhdGljIHNpemVfdCB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzYwLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM9MzY5PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmMtMzc2LVxcdC5jbGVhbnVwPSB0Y2ZfY3RpbmZvX2NsZWFudXAsXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzozNzc6XFx0LmdldF9maWxsX3NpemUgPSB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0zNzgtXFx0LnNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdGNmX2N0aW5mbyksXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYz0xOTA9c3RhdGljIGludCB0Y2ZfZ2FjdF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhY3QuYy0yMzAtXFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MjMxOnN0YXRpYyBzaXplX3QgdGNmX2dhY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjMyLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2FjdC5jPTI5Mj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhY3Rfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMjk5LVxcdC5pbml0XFx0XFx0PVxcdHRjZl9nYWN0X2luaXQsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmM6MzAwOlxcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9nYWN0X2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9nYWN0LmMtMzAxLVxcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XFx0dGNmX2dhY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz02NzI9c3RhdGljIHZvaWQgdGNmX2dhdGVfc3RhdHNfdXBkYXRlKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHU2NCBieXRlcywgdTY0IHBhY2tldHMsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02ODEtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NjgyOnN0YXRpYyBzaXplX3QgdGNmX2dhdGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjgzLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTczNj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ0LVxcdC5zdGF0c191cGRhdGVcXHQ9XFx0dGNmX2dhdGVfc3RhdHNfdXBkYXRlLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0NTpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfZ2F0ZV9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0Ni1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9nYXRlX29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz04NjQ9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg4MC1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg4MTpzdGF0aWMgc2l6ZV90IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9pZmUuYy04ODIte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz05MDM9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTAtXFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXFxubmV0L3NjaGVkL2FjdF9pZmUuYzo5MTE6XFx0LmdldF9maWxsX3NpemUgPSB0Y2ZfaWZlX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTItXFx0LnNpemUgPVxcdHNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM9NTkxPXRjZl9taXJyZWRfZ2V0X2Rldihjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy02MDctXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYzo2MDg6c3RhdGljIHNpemVfdCB0Y2ZfbWlycmVkX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtNjA5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM9NjY0PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfbWlycmVkX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtNjcyLVxcdC5pbml0XFx0XFx0PVxcdHRjZl9taXJyZWRfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjY3MzpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfbWlycmVkX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy02NzQtXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfbWlycmVkX29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jPTU2ND1zdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmMtNjI4LVxcbm5ldC9zY2hlZC9hY3RfcGVkaXQuYzo2Mjk6c3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTYzMC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM9NjUyPXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcGVkaXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9wZWRpdC5jLTY2MC1cXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfcGVkaXRfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X3BlZGl0LmM6NjYxOlxcdC5nZXRfZmlsbF9zaXplXFx0PVxcdHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3RfcGVkaXQuYy02NjItXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfcGVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jPTQ0Mj1zdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy00OTItXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYzo0OTM6c3RhdGljIHNpemVfdCB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNDk0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM9NTA4PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfcG9saWNlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmMtNTE2LVxcdC5jbGVhbnVwXFx0PVxcdHRjZl9wb2xpY2VfY2xlYW51cCxcXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jOjUxNzpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2ZfcG9saWNlX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy01MTgtXFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cXHR0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYz0yOTY9c3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzE3LVxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzE4OnN0YXRpYyBzaXplX3QgdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMxOS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTMyNj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMzNC1cXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMzU6XFx0LmdldF9maWxsX3NpemUgPSB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMzYtXFx0LmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYz0zNDg9c3RhdGljIHZvaWQgdGNmX3NrYmVkaXRfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtMzU3LVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjM1ODpzdGF0aWMgc2l6ZV90IHRjZl9za2JlZGl0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTM1OS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYz00MTg9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9za2JlZGl0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQyNi1cXHQuY2xlYW51cFxcdD1cXHR0Y2Zfc2tiZWRpdF9jbGVhbnVwLFxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjQyNzpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2Zfc2tiZWRpdF9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQyOC1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl9za2JlZGl0X29mZmxvYWRfYWN0X3NldHVwLFxcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9ODYwPXN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04ODUtXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM6ODg2OnN0YXRpYyBzaXplX3QgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy04ODcte1xcbi0tXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmM9OTE3PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuYy05MjQtXFx0LmNsZWFudXBcXHQ9XFx0dHVubmVsX2tleV9yZWxlYXNlLFxcbm5ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jOjkyNTpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0dW5uZWxfa2V5X2dldF9maWxsX3NpemUsXFxubmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmMtOTI2LVxcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XFx0dGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYz0zMzY9c3RhdGljIHZvaWQgdGNmX3ZsYW5fc3RhdHNfdXBkYXRlKHN0cnVjdCB0Y19hY3Rpb24gKmEsIHU2NCBieXRlcywgdTY0IHBhY2tldHMsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3ZsYW4uYy0zNDUtXFxubmV0L3NjaGVkL2FjdF92bGFuLmM6MzQ2OnN0YXRpYyBzaXplX3QgdGNmX3ZsYW5fZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF92bGFuLmMtMzQ3LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jPTQxNj1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3ZsYW5fb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF92bGFuLmMtNDI0LVxcdC5zdGF0c191cGRhdGVcXHQ9XFx0dGNmX3ZsYW5fc3RhdHNfdXBkYXRlLFxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jOjQyNTpcXHQuZ2V0X2ZpbGxfc2l6ZVxcdD1cXHR0Y2Zfdmxhbl9nZXRfZmlsbF9zaXplLFxcbm5ldC9zY2hlZC9hY3Rfdmxhbi5jLTQyNi1cXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVxcdHRjZl92bGFuX29mZmxvYWRfYWN0X3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NTo1Ny4zMTcyNjk5MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQyMDI4MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGxpbmsgTWVzc2FnZSBTaXplIENhbGN1bGF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZXNlIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgYXJlIHRoZSBuZXcgcGxheWVycyBpbiB0aGUgZ2FtZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2Ygb3VyIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiBkdW1waW5nIFRDIGFjdGlvbnMuIEZ1bmN0aW9uYWxseSwgaXQncyBhIGNoYW5nZSwgYnV0IHNlZW1zIHByZXR0eSBpc29sYXRlZCB0byB0aGUgbmV0bGluayBkdW1wIHByb2NlZHVyZXMsIGFzIEkgdW5kZXJzdGFuZCBpdC4gQnV0IHN0aWxsLCB0aGUgcXVlc3Rpb24gaXM6IHNob3VsZCB3ZSBmdXp6IHRoZXNlPyBBYnNvbHV0ZWx5LiBBIG1pc2NhbGN1bGF0aW9uIGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MuIFNwZWNpZmljYWxseSwgaWYgdGhlIHNpemUgY2FsY3VsYXRpb24gaXMgd3JvbmcsIHdlIGNvdWxkIGhhdmUgYnVmZmVyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHdyaXRlcyB3aGVuIHdlIGNvbnN0cnVjdCB0aGUgbmV0bGluayBtZXNzYWdlLCBvciBldmVuIGp1c3QgZ2V0IGBFTVNHU0laRWAgZXJyb3JzIGlmIHdlIHVuZGVyc2hvb3QgdGhlIHNpemUuIFRoYXQncyBub3QgaWRlYWwuXG5cblNvLCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCB0aGVzZSBuZXcgZnVuY3Rpb25zIHRvIGhhbmRsZSBpdDogYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgLCBgdGNmX2lmZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgLCBhbmQgYHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZWAuXG5cblRoZXkgYWxsIGFwcGVhciB0byBiZSBjYWxsZWQgZnJvbSBgdGNmX2FjdGlvbl9maWxsX3NpemVgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCwgc28gSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24gbmV4dCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgYW5kIGVuc3VyZSB0aGF0IG15IGFuYWx5c2lzIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjAyLjE1OTMwMjUzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk3ODIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9NDYxPXN0YXRpYyBzaXplX3QgdGNmX2FjdGlvbl9mdWxsX2F0dHJzX3NpemUoc2l6ZV90IHN6KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy00NjgtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzo0Njk6c3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXFxubmV0L3NjaGVkL2FjdF9hcGkuYy00NzAte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xNDY5PWludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTE2LVxcdFxcdH1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE1MTc6XFx0XFx0c3ogKz0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0KTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE1MTgtXFx0XFx0LyogU3RhcnQgZnJvbSBpbmRleCAwICovXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTE4NTg9c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2MC17XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxODYxOlxcdHNpemVfdCBhdHRyX3NpemUgPSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3Rpb24pO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg2Mi1cXHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDEyPXRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAzOS1cXHRcXHR9XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMDQwOlxcdFxcdGF0dHJfc2l6ZSArPSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA0MS1cXHRcXHRhY3Rpb25zW2kgLSAxXSA9IGFjdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MDIuMjM1Mjg2ODQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4ODY3ODkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUQyBBY3Rpb24gU2l6ZSBDYWxjdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgbmV0bGluayBtZXNzYWdlcyB1c2VkIGJ5IFRyYWZmaWMgQ29udHJvbCAoVEMpIGFjdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZWAuIElmIHRoYXQgc2l6ZSBjYWxjdWxhdGlvbiBpcyBvZmYsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgYSBiYWQgZGF5IHdpdGggYHNrYl9vdmVyX3BhbmljYCBvciBzb21ldGhpbmcgc2ltaWxhciB3aGVuIHdlIHRyeSB0byBkdW1wIHRoZSBhY3Rpb25zLiBJdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQgdG8gZGlnIGludG8gdGhpcy5cblxuRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSByZWNhbGwgdGhhdCBgQ09ORklHX05FVF9DTFNfQUNUYCBpcyB0aGUgb3ZlcmFyY2hpbmcgc2V0dGluZyBmb3IgVEMgYWN0aW9ucy4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBmb3IgZWFjaCBhY3Rpb24uIEZvciBleGFtcGxlOlxuXG4qICAgYGFjdF9icGZgIHdpbGwgbmVlZCBgQ09ORklHX05FVF9BQ1RfQlBGYCBlbmFibGVkLlxuKiAgIGBhY3RfY3RgIG5lZWRzIGBDT05GSUdfTkVUX0FDVF9DVGAuXG4qICAgYGFjdF9jdGluZm9gIHJlcXVpcmVzIGBDT05GSUdfTkVUX0FDVF9DVElORk9gLlxuKiAgIGBhY3RfaWZlYDogYENPTkZJR19ORVRfQUNUX0lGRWAuXG4qICAgYGFjdF9wZWRpdGA6IGBDT05GSUdfTkVUX0FDVF9QRURJVGAuXG4qICAgYGFjdF9wb2xpY2VgOiBgQ09ORklHX05FVF9BQ1RfUE9MSUNFYC5cbiogICBgYWN0X3NhbXBsZWA6IGBDT05GSUdfTkVUX0FDVF9TQU1QTEVgLlxuKiAgIGBhY3RfdHVubmVsX2tleWA6IGBDT05GSUdfTkVUX0FDVF9UVU5ORUxfS0VZYC5cblxuSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gZG91YmxlLWNoZWNrIHRob3NlIG9wdGlvbnMgd291bGQgYmUgdG8gZ28gc3RyYWlnaHQgaW50byBgbmV0L3NjaGVkL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MDcuNTIzOTY4NjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTg2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz03MDI9Y29uZmlnIE5FVF9DTFNfQUNUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MTQtXFxubmV0L3NjaGVkL0tjb25maWc6NzE1OmNvbmZpZyBORVRfQUNUX1BPTElDRVxcbm5ldC9zY2hlZC9LY29uZmlnLTcxNi1cXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBQb2xpY2luZ1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcyNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MjY6Y29uZmlnIE5FVF9BQ1RfR0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcyNy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBhY3Rpb25zXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NzM2PWNvbmZpZyBHQUNUX1BST0JcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTc0MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3NDI6Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXFxubmV0L3NjaGVkL0tjb25maWctNzQzLVxcdHRyaXN0YXRlIFxcXCJSZWRpcmVjdGluZyBhbmQgTWlycm9yaW5nXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzUxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjc1Mjpjb25maWcgTkVUX0FDVF9TQU1QTEVcXG5uZXQvc2NoZWQvS2NvbmZpZy03NTMtXFx0dHJpc3RhdGUgXFxcIlRyYWZmaWMgU2FtcGxpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03NjMtXFxubmV0L3NjaGVkL0tjb25maWc6NzY0OmNvbmZpZyBORVRfQUNUX05BVFxcbm5ldC9zY2hlZC9LY29uZmlnLTc2NS1cXHR0cmlzdGF0ZSBcXFwiU3RhdGVsZXNzIE5BVFxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTc3My1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3NzQ6Y29uZmlnIE5FVF9BQ1RfUEVESVRcXG5uZXQvc2NoZWQvS2NvbmZpZy03NzUtXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBFZGl0aW5nXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzgyLVxcbm5ldC9zY2hlZC9LY29uZmlnOjc4Mzpjb25maWcgTkVUX0FDVF9TSU1QXFxubmV0L3NjaGVkL0tjb25maWctNzg0LVxcdHRyaXN0YXRlIFxcXCJTaW1wbGUgRXhhbXBsZSAoRGVidWcpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzk2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjc5Nzpjb25maWcgTkVUX0FDVF9TS0JFRElUXFxubmV0L3NjaGVkL0tjb25maWctNzk4LVxcdHRyaXN0YXRlIFxcXCJTS0IgRWRpdGluZ1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTgwNy1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4MDg6Y29uZmlnIE5FVF9BQ1RfQ1NVTVxcbm5ldC9zY2hlZC9LY29uZmlnLTgwOS1cXHR0cmlzdGF0ZSBcXFwiQ2hlY2tzdW0gVXBkYXRpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04MTgtXFxubmV0L3NjaGVkL0tjb25maWc6ODE5OmNvbmZpZyBORVRfQUNUX01QTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy04MjAtXFx0dHJpc3RhdGUgXFxcIk1QTFMgbWFuaXB1bGF0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODI5LVxcbm5ldC9zY2hlZC9LY29uZmlnOjgzMDpjb25maWcgTkVUX0FDVF9WTEFOXFxubmV0L3NjaGVkL0tjb25maWctODMxLVxcdHRyaXN0YXRlIFxcXCJWbGFuIG1hbmlwdWxhdGlvblxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg0MC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXFxubmV0L3NjaGVkL0tjb25maWctODQyLVxcdHRyaXN0YXRlIFxcXCJCUEYgYmFzZWQgYWN0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODUyLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg1Mzpjb25maWcgTkVUX0FDVF9DT05OTUFSS1xcbm5ldC9zY2hlZC9LY29uZmlnLTg1NC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBSZXRyaWV2ZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04NjQtXFxubmV0L3NjaGVkL0tjb25maWc6ODY1OmNvbmZpZyBORVRfQUNUX0NUSU5GT1xcbm5ldC9zY2hlZC9LY29uZmlnLTg2Ni1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBBY3Rpb25zXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODgxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg4Mjpjb25maWcgTkVUX0FDVF9TS0JNT0RcXG5uZXQvc2NoZWQvS2NvbmZpZy04ODMtXFx0dHJpc3RhdGUgXFxcInNrYiBkYXRhIG1vZGlmaWNhdGlvbiBhY3Rpb25cXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXFxubmV0L3NjaGVkL0tjb25maWc6ODkzOmNvbmZpZyBORVRfQUNUX0lGRVxcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cXHR0cmlzdGF0ZSBcXFwiSW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTA1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkwNjpjb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXFxubmV0L3NjaGVkL0tjb25maWctOTA3LVxcdHRyaXN0YXRlIFxcXCJJUCB0dW5uZWwgbWV0YWRhdGEgbWFuaXB1bGF0aW9uXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXFxubmV0L3NjaGVkL0tjb25maWc6OTMwOmNvbmZpZyBORVRfQUNUX0dBVEVcXG5uZXQvc2NoZWQvS2NvbmZpZy05MzEtXFx0dHJpc3RhdGUgXFxcIkZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MDcuNTg0MTU5NjA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MDA2MDQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVyIEFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNsYXNzaWZpZXIgYWN0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5J3JlIGNvbmZpZ3VyZWQuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgTkVUX0NMU19BQ1RgLCBgTkVUX0FDVF9CUEZgLCBgTkVUX0FDVF9DVGAsIGBORVRfQUNUX0NUSU5GT2AsIGBORVRfQUNUX0lGRWAsIGBORVRfQUNUX1BFRElUYCwgYE5FVF9BQ1RfUE9MSUNFYCwgYE5FVF9BQ1RfU0FNUExFYCwgYW5kIGBORVRfQUNUX1RVTk5FTF9LRVlgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdHJhZmZpYyBpcyBjbGFzc2lmaWVkIGFuZCBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgZWFjaCwgZXNwZWNpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcuXG5cbk5vdywgSSByZW1lbWJlciBzZWVpbmcgc29tZSBjb25kaXRpb25hbHMgaW4gYGFjdF9jdC5jYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbiBsb2dpYyByZXNpZGVzLiBMZXQgbWUgc2VlLi4uIHllcywgSSBzZWUgdGhvc2UgY2hlY2tzOiBgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLYCwgYENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTYCwgYW5kIGBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgaXMgbWFuYWdlZCBhbmQgdXRpbGl6ZWQuIEl0IGxvb2tzIGxpa2UgdGhvc2UgYXJlIHVzZWQgd2hlbiB0aGUgYE5FVF9BQ1RfQ1RgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9zY2hlZC9hY3RfY3QuY2AgZGlyZWN0bHkgdG8gc2VlIGhvdyB0aGVzZSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFjdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgaXMgYXZhaWxhYmxlIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjEyLjI1NDIyMzM2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1ODU4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05GX0NPTk5UUkFDS19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfY3QuYz0xNzg9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfYWRkX2FjdGlvbl9tZXRhKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xODgtXFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fQ1RfTUVUQURBVEE7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjE4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE5MC1cXHRlbnRyeS1cXHUwMDNlY3RfbWV0YWRhdGEubWFyayA9IFJFQURfT05DRShjdC1cXHUwMDNlbWFyayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTE2PXN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X21hcmsoc3RydWN0IG5mX2Nvbm4gKmN0LCB1MzIgbWFyaywgdTMyIG1hc2spXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkxNy17XFxubmV0L3NjaGVkL2FjdF9jdC5jOjkxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspXFxubmV0L3NjaGVkL2FjdF9jdC5jLTkxOS1cXHR1MzIgbmV3X21hcms7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9OTMzPXN0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtOTM2LXtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6OTM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy05MzgtXFx0c2l6ZV90IGxhYmVsc19zeiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xMjU5PXN0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg1LVxcdGlmICh0YltUQ0FfQ1RfTUFSS10pIHtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTI4NjpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMjg3LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb25udHJhY2sgbWFyayBpc24ndCBlbmFibGVkLlxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTEyOTgtXFxubmV0L3NjaGVkL2FjdF9jdC5jOjEyOTk6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSkge1xcbm5ldC9zY2hlZC9hY3RfY3QuYy0xMzAwLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb25udHJhY2sgbGFiZWxzIGlzbid0IGVuYWJsZWQuXFxcIik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTMxNy1cXHRpZiAodGJbVENBX0NUX1pPTkVdKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jOjEzMTg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMpKSB7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTEzMTktXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNvbm50cmFjayB6b25lcyBpc24ndCBlbmFibGVkLlxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTE1NTg9c3RhdGljIGlubGluZSBpbnQgdGNmX2N0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTgzLVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoxNTg0OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU4NS1cXHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5MC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU5MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Mi1cXHQgICAgdGNmX2N0X2R1bXBfa2V5X3ZhbChza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTU5Ny1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTU5ODpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNTk5LVxcdCAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0xNjYwPXN0YXRpYyBzaXplX3QgdGNmX2N0X2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NzQtXFx0LyogVENBX0NUX01BUkssIFRDQV9DVF9NQVJLX01BU0sgKi9cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY3NTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjc2LVxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZW1hcmspKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTE2NzktXFx0LyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovXFxubmV0L3NjaGVkL2FjdF9jdC5jOjE2ODA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19MQUJFTFMpKVxcbm5ldC9zY2hlZC9hY3RfY3QuYy0xNjgxLVxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXFx1MDAzZWxhYmVscykpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY4My1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6MTY4NDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSlcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMTY4NS1cXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihwLVxcdTAwM2V6b25lKSk7IC8qIFRDQV9DVF9aT05FICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjEyLjMwMjgxNDg4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg0NTU4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb3ZlcmluZyByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBORl9DT05OVFJBQ0tfTUFSS2AsIGBORl9DT05OVFJBQ0tfTEFCRUxTYCwgYW5kIGBORl9DT05OVFJBQ0tfWk9ORVNgLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlcnMgb2YgaW50ZXJlc3QuXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IGJpdCBmbGFncyBpbiBgYWN0X3R1bm5lbF9rZXkuY2AgKGBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVRgLCBldGMuKSDigJMgdGhlc2UgYXJlIGp1c3QgYml0IGRlZmluaXRpb25zLCBzbyB0aGV5IGFyZSBub3QgY29uZmlndXJhdGlvbnMuIFRoZW4sIEkgc2VlIGBDT05GSUdfTkVUX0FDVF9CUEZgIGluIGBhY3RfYnBmLmNgLCBgQ09ORklHX05FVF9BQ1RfQ1RJTkZPYCBpbiBgYWN0X2N0aW5mby5jYCwgYENPTkZJR19ORVRfQUNUX0lGRWAgaW4gYGFjdF9pZmUuY2AsIGBDT05GSUdfTkVUX0FDVF9QRURJVGAgaW4gYGFjdF9wZWRpdC5jYCwgYENPTkZJR19ORVRfQUNUX1BPTElDRWAgaW4gYGFjdF9wb2xpY2UuY2AsIGBDT05GSUdfTkVUX0FDVF9TQU1QTEVgIGluIGBhY3Rfc2FtcGxlLmNgLCBhbmQgZmluYWxseSwgYENPTkZJR19ORVRfQUNUX1RVTk5FTF9LRVlgIGluIGBhY3RfdHVubmVsX2tleS5jYC5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEknbGwgbWFrZSBhIGxpc3Qgb2YgY2FuZGlkYXRlIGZ1bmN0aW9uczogYHRjZl9hY3Rpb25fZmlsbF9zaXplYCwgYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2ZfY3RpbmZvX2dldF9maWxsX3NpemVgLCBgdGNmX2lmZV9nZXRfZmlsbF9zaXplYCwgYHRjZl9wZWRpdF9nZXRfZmlsbF9zaXplYCwgYHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZWAsIGB0Y2Zfc2FtcGxlX2dldF9maWxsX3NpemVgLCBgdHVubmVsX2tleV9nZXRfZmlsbF9zaXplYCwgYHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemVgLCBhbmQgYHR1bm5lbF9rZXlfZ2VuZXZlX29wdHNfZmlsbF9zaXplYC5cblxuQWhhLCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoYXQgYHRjZl9hY3Rpb25fZmlsbF9zaXplYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIEdpdmVuIHRoZSBndWlkZWxpbmVzLCB0aGlzIG5lZWRzIHRvIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3Mgbm90IGlubGluZWQuIFRoZSBpbnN0cnVjdGlvbnMgKnByZWZlciogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIEV2ZW4gdGhvdWdoIHRoZXNlIGBnZXRfZmlsbF9zaXplYCBmdW5jdGlvbnMgKmFyZSogc3RhdGljLCB0aGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHN0cnVjdCB0Y19hY3Rpb25fb3BzYC4gVGhpcyBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgcHJvYmFibHkgd29uJ3QgaW5saW5lIHRoZW0sIGFuZCB0aGV5IGFyZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIHN0YXRpYy4gT2theSwgbGV0J3Mgc2VlLiBZZXMsIHRoZXkgYXJlIHN0YXRpYyEgQnV0IHNpbmNlIHdlIGFyZSBhc3NpZ25pbmcgdGhlaXIgYWRkcmVzc2VzLCB0aGV5IHdvbid0IGJlIGlubGluZWQuXG5cbkhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIHN0YXRlIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uc2lkZXIgQVBJIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlc2Ugb3BlcmF0aW9uczogYHRjYV9hY3Rpb25fZ2RgLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnYC4gTGV0IG1lIGdvIGFoZWFkIGFuZCBjaGVjayBgdGNhX2FjdGlvbl9nZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjIxLjM4NzM3NjY4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwNzI1NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjYV9hY3Rpb25fZ2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTIwMTE9c3RhdGljIGludFxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxMjp0Y2FfYWN0aW9uX2dkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDEzLVxcdCAgICAgIHUzMiBwb3J0aWQsIGludCBldmVudCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMTMyPXN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxNjktXFx0Y2FzZSBSVE1fREVMQUNUSU9OOlxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjE3MDpcXHRcXHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxNzEtXFx0XFx0XFx0XFx0ICAgIHBvcnRpZCwgUlRNX0RFTEFDVElPTiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3My1cXHRjYXNlIFJUTV9HRVRBQ1RJT046XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTc0OlxcdFxcdHJldCA9IHRjYV9hY3Rpb25fZ2QobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE3NS1cXHRcXHRcXHRcXHQgICAgcG9ydGlkLCBSVE1fR0VUQUNUSU9OLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjoyMi4wNjgxMDcyOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NzE0ODIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGxpbmsgQWN0aW9uIENvbnRyb2wgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIG9mIGhvdyB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucyBhcmUgbWFuYWdlZCB2aWEgbmV0bGluay4gYHRjX2N0bF9hY3Rpb25gIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBoZXJlOyB0aGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBgUlRNX05FV0FDVElPTmAsIGBSVE1fREVMQUNUSU9OYCwgYW5kIGBSVE1fR0VUQUNUSU9OYCBuZXRsaW5rIG1lc3NhZ2VzLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gemVybyBpbiBvbi4gV2hlbiB3ZSdyZSBhZGRpbmcgYSBuZXcgYWN0aW9uIHdpdGggYFJUTV9ORVdBQ1RJT05gLCB0aGUgc3lzdGVtIGNhbGxzIGB0Y2ZfYWN0aW9uX2luaXRgLiBBbmQgZm9yIGRlbGV0aW5nIG9yIGdldHRpbmcgYW4gYWN0aW9uIOKAkyBgUlRNX0RFTEFDVElPTmAgYW5kIGBSVE1fR0VUQUNUSU9OYCDigJMgdGhlIGZ1bmN0aW9uIGB0Y2FfYWN0aW9uX2dkYCBjb21lcyBpbnRvIHBsYXkuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRjX2N0bF9hY3Rpb25gLCBgdGNmX2FjdGlvbl9pbml0YCwgYW5kIGB0Y2FfYWN0aW9uX2dkYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHRjX2N0bF9hY3Rpb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGJpdCBtb3JlIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6MjYuMDY1MjU4NTIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY4Mzk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jdGxfYWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuYz0yMTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0Y2FhX3BvbGljeVtUQ0FfUk9PVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjEzMS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIxMzI6c3RhdGljIGludCB0Y19jdGxfYWN0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMzMtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjI5ND1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdGNfYWN0aW9uX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk1OlxcdHsubXNndHlwZSA9IFJUTV9ORVdBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk2OlxcdHsubXNndHlwZSA9IFJUTV9ERUxBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMjk3OlxcdHsubXNndHlwZSA9IFJUTV9HRVRBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbixcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIyOTgtXFx0IC5kdW1waXQgPSB0Y19kdW1wX2FjdGlvbn0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjI2LjExMTk0NTk0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUzNzU0NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgVHJhZmZpYyBDb250cm9sICh0YykgQWN0aW9uIE1lY2hhbmlzbSoqXG5cbkhtbSwgc28gYHRjX2N0bF9hY3Rpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGluaXRpYWxseSBzdWdnZXN0cyBhIGxpbWl0ZWQgc2NvcGUsIHJpZ2h0PyBPbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIG5vIGRpcmVjdCBleHRlcm5hbCBjYWxscy4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gSSByZW1lbWJlciBzZWVpbmcgYHJ0bmxfbXNnX2hhbmRsZXJzYCByZWdpc3RlcmVkIHNvbWV3aGVyZS4gVGhhdCBtZWFucyB0aGUgYHRjX2N0bF9hY3Rpb25gIGZ1bmN0aW9uICppcyogbGlrZWx5IGJlaW5nIGNhbGxlZCwgbm90IGRpcmVjdGx5LCBidXQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgc3RvcmVkIHdpdGhpbiB0aGF0IHJlZ2lzdHJhdGlvbi4gTGlrZWx5IHRoaXMgaXMgaG93IGl0IHJlY2VpdmVzIHJlcXVlc3RzIHZpYSBuZXRsaW5rLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgaG93IHRob3NlIGhhbmRsZXJzIGFyZSBzZXQgdXAuIE9rYXksIHRoYXQncyB0aGUgY29yZSBwYXRoLiBOb3csIHdoYXQncyB0aGUgcm9sZSBvZiBgdGNmX2FjdGlvbl9pbml0YCBpbiBhbGwgb2YgdGhpcz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGB0Y19jdGxfYWN0aW9uYC4gSXMgaXQgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGl0PyBPciBpcyBpdCBwYXJ0IG9mIGEgYnJvYWRlciBhY3Rpb24gaW5pdGlhbGl6YXRpb24gc2NoZW1lPyBUaGUgaW50ZXJhY3Rpb24gaGVyZSBpcyBrZXkgdG8gaG93IHRjIGFjdGlvbnMgYXJlIG1hbmFnZWQgYXQgcnVudGltZS4gSSBuZWVkIHRvIHJldmlldyB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjoyOS4yNjU3MDM0NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzU3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9hY3Rpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTAxOD1pbnQgdGNmX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqYWN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMDI3LVxcdC8qIFdlIGhhdmUgdG8gcmVnaXN0ZXIgcGVybmV0IG9wcyBiZWZvcmUgbWFraW5nIHRoZSBhY3Rpb24gb3BzIHZpc2libGUsXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMDI4OlxcdCAqIG90aGVyd2lzZSB0Y2ZfYWN0aW9uX2luaXRfMSgpIGNvdWxkIGdldCBhIHBhcnRpYWxseSBpbml0aWFsaXplZFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyOS1cXHQgKiBuZXRucy5cXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTMzNz1zdHJ1Y3QgdGNfYWN0aW9uX29wcyAqdGNfYWN0aW9uX2xvYWRfb3BzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIGZsYWdzLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMzk5LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQwMDpzdHJ1Y3QgdGNfYWN0aW9uICp0Y2ZfYWN0aW9uX2luaXRfMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQwMS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3QgbmxhdHRyICplc3QsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTE0NjI9c3RhdGljIGJvb2wgdGNfYWN0X2JpbmQodTMyIGZsYWdzKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNDY4LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTQ2OTppbnQgdGNmX2FjdGlvbl9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE0NzAtXFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEwLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiB0YltpXTsgaSsrKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNTExOlxcdFxcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2ldLCBlc3QsIG9wc1tpIC0gMV0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpbml0X3Jlc1tpIC0gMV0sIGZsYWdzLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDk5PXN0YXRpYyBpbnQgdGNmX2FjdGlvbl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMDgtXFx0Zm9yIChsb29wID0gMDsgbG9vcCBcXHUwMDNjIDEwOyBsb29wKyspIHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIxMDk6XFx0XFx0cmV0ID0gdGNmX2FjdGlvbl9pbml0KG5ldCwgTlVMTCwgbmxhLCBOVUxMLCBhY3Rpb25zLCBpbml0X3JlcyxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxMTAtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmF0dHJfc2l6ZSwgZmxhZ3MsIDAsIGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0MDc9aW50IHRjZl9leHRzX3ZhbGlkYXRlX2V4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzQyNC1cXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihhX28pO1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQyNTpcXHRcXHRcXHRhY3QgPSB0Y2ZfYWN0aW9uX2luaXRfMShuZXQsIHRwLCB0YltleHRzLVxcdTAwM2Vwb2xpY2VdLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzQyNi1cXHRcXHRcXHRcXHRcXHRcXHRyYXRlX3RsdiwgYV9vLCBpbml0X3JlcywgZmxhZ3MsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MzktXFx0XFx0XFx0ZmxhZ3MgfD0gVENBX0FDVF9GTEFHU19CSU5EO1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzQ0MDpcXHRcXHRcXHRlcnIgPSB0Y2ZfYWN0aW9uX2luaXQobmV0LCB0cCwgdGJbZXh0cy1cXHUwMDNlYWN0aW9uXSxcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0NDEtXFx0XFx0XFx0XFx0XFx0ICAgICAgcmF0ZV90bHYsIGV4dHMtXFx1MDAzZWFjdGlvbnMsIGluaXRfcmVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjoyOS4zMzkwNjU1NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NDIyOTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU3ltYm9sIEV4cG9ydCoqXG5cbk9rYXksIHNvIGB0Y2ZfYWN0aW9uX2luaXRgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBUaGF0J3MgZ29vZDsgaXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuIEFsc28sIEkgc2VlIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgaXMgYWxzbyBub24tc3RhdGljIGFuZCBleHBvcnRlZC5cblxuVGhlIG5leHQgc3RlcCBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byB2ZXJpZnksIGRlZmluaXRpdmVseSwgd2hldGhlciBgdGNmX2FjdGlvbl9pbml0YCBpcyBpbmRlZWQgZXhwb3J0ZWQgYXMgaW50ZW5kZWQuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjMzLjIxMzI5NzU0OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNjc5OTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NjozMy4yNzIzNzM2NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMTQ0NDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIE1vZHVsZSBFeHBvcnQgYW5kIFN0YXRpYyBEZWNsYXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgc29tZXRoaW5nIGlzbid0IGV4cG9ydGVkIGFzIGEgbW9kdWxlLCBidXQgaXQncyBub3QgZGVjbGFyZWQgYXMgc3RhdGljIGVpdGhlci4gVGhhdCdzIGEgYml0IG9mIGFuIG9kZCBjb21iaW5hdGlvbiwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGdvaW5nIG9uIHdpdGggaXRzIHZpc2liaWxpdHkgb3IgdXNhZ2UuIE15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEgaXMgdGVsbGluZyBtZSB0byBpbnZlc3RpZ2F0ZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGB0Y2ZfYWN0aW9uX2luaXRgKSB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgYW5kIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGNhbiBpbmxpbmUgaXQgd2hlbiBJIGJ1aWxkIHRoZSBtb2R1bGUgdG8gZXhwbGFpbiB0aGlzLiBJJ2xsIGNoZWNrIGl0cyBkZWNsYXJhdGlvbiBhbmQgbG9vayBmb3IgY2x1ZXMgdGhlcmUsIG1heWJlIHRoZXJlJ3MgYSBtYWNybyBvciBzb21lIHVudXN1YWwgbGlua2VyIHRyaWNrIEknbSBtaXNzaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU1MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjM2Ljg4MzgyMTIzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMTgyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjZl9hY3Rpb25faW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTQ2Mj1zdGF0aWMgYm9vbCB0Y19hY3RfYmluZCh1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE0NjgtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNDY5OmludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTQ3MC1cXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjM2LjkzMzE0MzU4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkwMjAyMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5vbi1TdGF0aWMgTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5vbi1zdGF0aWMgY29udGV4dCwgd2hpY2gsIG9mIGNvdXJzZSwgY2hhbmdlcyBldmVyeXRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc2hpZnQgaW4gcGFyYWRpZ20uIFRoZW4sIHRoZSBuZXh0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYHRjZl9hY3Rpb25faW5pdF8xYD8gVGhhdCBwYXJ0aWN1bGFyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIG9mdGVuIGEgY3JpdGljYWwgcG9pbnQgb2YgaW5zdGFudGlhdGlvbiBhbmQgY29uZmlndXJhdGlvbiB3aXRoaW4gc3VjaCBhIGR5bmFtaWMgc2V0dXAsIHNvIHRoYXQgbm93IGJlY29tZXMgYSBrZXkgZm9jdXMuIFdoYXQgZGVwZW5kZW5jaWVzIGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZSBhbmQgd2hhdCBzdGF0ZSBpcyB0aGF0IGluP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjQwLjEyMzM0ODMxNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzEyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdGlvbl9pbml0XzFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTEwMTg9aW50IHRjZl9yZWdpc3Rlcl9hY3Rpb24oc3RydWN0IHRjX2FjdGlvbl9vcHMgKmFjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTAyNy1cXHQvKiBXZSBoYXZlIHRvIHJlZ2lzdGVyIHBlcm5ldCBvcHMgYmVmb3JlIG1ha2luZyB0aGUgYWN0aW9uIG9wcyB2aXNpYmxlLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTAyODpcXHQgKiBvdGhlcndpc2UgdGNmX2FjdGlvbl9pbml0XzEoKSBjb3VsZCBnZXQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWRcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEwMjktXFx0ICogbmV0bnMuXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTEzMzc9c3RydWN0IHRjX2FjdGlvbl9vcHMgKnRjX2FjdGlvbl9sb2FkX29wcyhzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBmbGFncyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTM5OS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE0MDA6c3RydWN0IHRjX2FjdGlvbiAqdGNmX2FjdGlvbl9pbml0XzEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE0MDEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xNDY5PWludCB0Y2ZfYWN0aW9uX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEwLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiB0YltpXTsgaSsrKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNTExOlxcdFxcdGFjdCA9IHRjZl9hY3Rpb25faW5pdF8xKG5ldCwgdHAsIHRiW2ldLCBlc3QsIG9wc1tpIC0gMV0sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNTEyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpbml0X3Jlc1tpIC0gMV0sIGZsYWdzLCBleHRhY2spO1xcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNDA3PWludCB0Y2ZfZXh0c192YWxpZGF0ZV9leChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjQtXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYV9vKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM0MjU6XFx0XFx0XFx0YWN0ID0gdGNmX2FjdGlvbl9pbml0XzEobmV0LCB0cCwgdGJbZXh0cy1cXHUwMDNlcG9saWNlXSxcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM0MjYtXFx0XFx0XFx0XFx0XFx0XFx0cmF0ZV90bHYsIGFfbywgaW5pdF9yZXMsIGZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo0MC4xNzE3ODQwMDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MTg0NzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmVmbGVjdGluZyBvbiBUQ0YgQWN0aW9uIEluaXRpYWxpemF0aW9uIGFuZCBEdW1waW5nKipcblxuQWxyaWdodCwgc28gSSd2ZSBqdXN0IGNvbmZpcm1lZCB0aGF0IHRoZSBgdGNmX2FjdGlvbl9pbml0XzFgIGZ1bmN0aW9uIGlzbid0IHN0YXRpYyBlaXRoZXIsIGp1c3QgbGlrZSB0aGUgb3RoZXJzLiBUaGF0J3MgZ29vZCB0byBrbm93LCBrZWVwcyB0aGUgZGVzaWduIGZsZXhpYmxlLiBOb3csIEknbSBwaXZvdGluZyBteSBmb2N1cyB0byB0aGUgZHVtcCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjZl9hY3Rpb25fZHVtcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGR1bXBpbmcgbWVjaGFuaXNtcyBhcmUgY29uc2lzdGVudCwgZWZmaWNpZW50LCBhbmQgcHJvdmlkZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIG5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy4gQXJlIHdlIHVzaW5nIHRoZSBzYW1lIGFwcHJvYWNoIGFjcm9zcyB0aGUgYm9hcmQ/IFNob3VsZCB3ZSBjb25zb2xpZGF0ZSB0aGVtPyBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIGFuc3dlcnMgbWF5IGhhdmUgZGVzaWduIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MDQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo0My40MjM2MzM5ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDc3MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9hY3Rpb25fZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9NDc4PXN0YXRpYyBpbnRcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjQ3OTp0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgYm9vbCBmcm9tX2FjdClcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTQ4MC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTUwOD1zdGF0aWMgaW50XFxubmV0L3NjaGVkL2FjdF9hcGkuYzo1MDk6dGNmX2FjdGlvbl9kdW1wXzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IGJpbmQsIGludCByZWYpXFxubmV0L3NjaGVkL2FjdF9hcGkuYy01MTAte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy01MTUtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzo1MTY6XFx0aWYgKHRjZl9hY3Rpb25fZHVtcF90ZXJzZShza2IsIGEsIGZhbHNlKSlcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTUxNy1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTQwLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6NTQxOlxcdGVyciA9IHRjZl9hY3Rpb25fZHVtcF9vbGQoc2tiLCBhLCBiaW5kLCByZWYpO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtNTQyLVxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTU1Mj1zdGF0aWMgaW50IHRjZl9kdW1wX3dhbGtlcihzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTU4Ny1cXHRcXHRlcnIgPSAoYWN0X2ZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHX1RFUlNFX0RVTVApID9cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjU4ODpcXHRcXHRcXHR0Y2ZfYWN0aW9uX2R1bXBfdGVyc2Uoc2tiLCBwLCB0cnVlKSA6XFxubmV0L3NjaGVkL2FjdF9hcGkuYzo1ODk6XFx0XFx0XFx0dGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBwLCAwLCAwKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTU5MC1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMjQzPWludFxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI0NDp0Y2ZfYWN0aW9uX2R1bXBfb2xkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kLCBpbnQgcmVmKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI0NS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDgtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ5OmludCB0Y2ZfYWN0aW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI1MC1cXHRcXHQgICAgaW50IGJpbmQsIGludCByZWYsIGJvb2wgdGVyc2UpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNTktXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjYwOlxcdFxcdGVyciA9IHRlcnNlID8gdGNmX2FjdGlvbl9kdW1wX3RlcnNlKHNrYiwgYSwgZmFsc2UpIDpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEyNjE6XFx0XFx0XFx0dGNmX2FjdGlvbl9kdW1wXzEoc2tiLCBhLCBiaW5kLCByZWYpO1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2Mi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTY1MD1zdGF0aWMgaW50IHRjYV9nZXRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE2NzQtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxNjc1OlxcdGlmICh0Y2ZfYWN0aW9uX2R1bXAoc2tiLCBhY3Rpb25zLCBiaW5kLCByZWYsIGZhbHNlKSBcXHUwMDNjIDApXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xNjc2LVxcdFxcdGdvdG8gb3V0X25sbXNnX3RyaW07XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM0OTE9aW50IHRjZl9leHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTA2LVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzUwNzpcXHRcXHRcXHRpZiAodGNmX2FjdGlvbl9kdW1wKHNrYiwgZXh0cy1cXHUwMDNlYWN0aW9ucywgMCwgMCwgZmFsc2UpXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTA4LVxcdFxcdFxcdCAgICBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1MTUtXFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L3NjaGVkL2Nsc19hcGkuYzozNTE2OlxcdFxcdFxcdGlmICh0Y2ZfYWN0aW9uX2R1bXBfb2xkKHNrYiwgYWN0LCAwLCAwKSBcXHUwMDNjIDApXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTE3LVxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYz0zNTMyPWludCB0Y2ZfZXh0c190ZXJzZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzU0My1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1NDQ6XFx0aWYgKHRjZl9hY3Rpb25fZHVtcChza2IsIGV4dHMtXFx1MDAzZWFjdGlvbnMsIDAsIDAsIHRydWUpIFxcdTAwM2MgMClcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1NDUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjQzLjQ3NTcxNDMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTI0NTgyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIGB0Y2ZfYWN0aW9uX2R1bXBgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmb2N1cywgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBIbW0sIGB0Y2FfYWN0aW9uX2dkYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGxlc3MgdXNlZnVsIGZvciBleHRlcm5hbCBpbnNwZWN0aW9uLCBhbmQgYHRjX2N0bF9hY3Rpb25gIGlzIHN0YXRpYyB0b28uIFdhaXQsIHdoYXQgYWJvdXQgYHRjYV9nZXRfZmlsbGAsIHRoYXQncyBzdGF0aWMgYXMgd2VsbC4gT2theSwgc28gYmFzZWQgb24gd2hhdCBJJ3ZlIHNlZW4gc28gZmFyLCB0aGUgYmVzdCBiZXRzIGZvciBpbW1lZGlhdGUgZm9jdXMgYXJlOlxuXG4qICAgYHRjZl9hY3Rpb25faW5pdGBcbiogICBgdGNmX2FjdGlvbl9pbml0XzFgXG4qICAgYHRjZl9hY3Rpb25fZHVtcGBcbiogICBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgXG4qICAgYHRjZl9leHRzX2R1bXBgXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gQWgsIHRoZXJlJ3MgYHRjZl9hY3Rpb25fZHVtcF9vbGRgIC0gdGhhdCdzIG5vbi1zdGF0aWMsIHNvIHdvcnRoIG5vdGluZywgYW5kIGB0Y2ZfYWN0aW9uX2R1bXBfMWAgaXMgc3RhdGljLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGZvbGxvd2luZyBhcmUgb25lcyBvZiBpbnRlcmVzdDpcblxuKiAgIGBORVRfQ0xTX0FDVGBcbiogICBgTkVUX0FDVF9CUEZgXG4qICAgYE5FVF9BQ1RfQ1RgXG4qICAgYE5FVF9BQ1RfQ1RJTkZPYFxuKiAgIGBORVRfQUNUX0lGRWBcbiogICBgTkVUX0FDVF9QRURJVGBcbiogICBgTkVUX0FDVF9QT0xJQ0VgXG4qICAgYE5FVF9BQ1RfU0FNUExFYFxuKiAgIGBORVRfQUNUX1RVTk5FTF9LRVlgXG4qICAgYE5GX0NPTk5UUkFDS19NQVJLYFxuKiAgIGBORl9DT05OVFJBQ0tfTEFCRUxTYFxuKiAgIGBORl9DT05OVFJBQ0tfWk9ORVNgXG5cbkl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaGVyZSwgc28gSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfTkVUX0FDVF9DVGAgZGVwZW5kcyBvbiBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQgcmVsYXRpb25zaGlwIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo0OS4xNjgxNzU5OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MzQxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0NUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg1Mz1jb25maWcgTkVUX0FDVF9DT05OTUFSS1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODY0LVxcbm5ldC9zY2hlZC9LY29uZmlnOjg2NTpjb25maWcgTkVUX0FDVF9DVElORk9cXG5uZXQvc2NoZWQvS2NvbmZpZy04NjYtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgQWN0aW9uc1xcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTkwNj1jb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05MTYtXFxubmV0L3NjaGVkL0tjb25maWc6OTE3OmNvbmZpZyBORVRfQUNUX0NUXFxubmV0L3NjaGVkL0tjb25maWctOTE4LVxcdHRyaXN0YXRlIFxcXCJjb25uZWN0aW9uIHRyYWNraW5nIHRjIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTY6NDkuNzAzNTI2NTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODA1NDEwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTkVUX0FDVF9DVCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9BQ1RfQ1RgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJ20gdGhpbmtpbmcsIHRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCBhICp0aG9yb3VnaCogdW5kZXJzdGFuZGluZy4gV2hhdCBhcmUgdGhlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGltcGxpY2F0aW9ucz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGRlcGVuZGVuY2llcywgb3IgYXJlIHdlIGNvbnNpZGVyaW5nIHRyYW5zaXRpdmUgb25lcz8gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3RpbmcgbGlicmFyaWVzOyBJIG5lZWQgdG8gYXNzZXNzIHBvdGVudGlhbCB2ZXJzaW9uIGNvbmZsaWN0cywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCwgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBzdGVtbWluZyBmcm9tIGl0cyBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIGtub3cgKndoeSogdGhpcyBtb2R1bGUgZXhpc3RzIGFuZCB3aGF0IGl0cyBwdXJwb3NlIGlzLiBXaGF0IGlzIHRoaXMgYE5FVF9BQ1RfQ1RgIGFuZCB3aGF0IGlzIGl0cyByb2xlPyBJcyBpdCBhIGNyaXRpY2FsIGNvbXBvbmVudCwgb3Igc29tZXRoaW5nIG1vcmUgcGVyaXBoZXJhbD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBjaGFuZ2VzIHRvIGBORVRfQUNUX0NUYCB3b3VsZCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtIGFuZCB3aGF0IHRoZSBpbXBhY3Qgd291bGQgYmUgb24gdGhlIHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eSBvZiB0aGUgbmV0d29yay4gVGhpcyBzaG91bGQgYWxzbyBmYWN0b3IgaW4gdGhlIGRlc2lnbiBhbmQgYXJjaGl0ZWN0dXJlIGFuZCBhbGwgb2YgdGhlIGludGVyZmFjZXMgdGhpcyBtb2R1bGUgbWF5IHRvdWNoLiBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcywgbGlrZSBkZXByZWNhdGVkIGZlYXR1cmVzIG9yIGtub3duIGxpbWl0YXRpb25zPyBPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Njo1My40ODQwNzA3MjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzM1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0NUJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjUzLjU0NjQxMTc4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ0MjA5NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgbGluZXMgYXJvdW5kIDkxNyBpbiBgbmV0L3NjaGVkL0tjb25maWdgLlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTmV0IFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTE3LiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBjcnVjaWFsIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxpa2VseSBkZWZpbmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIGZlYXR1cmUgc2VsZWN0aW9uLCBhIGRlZmF1bHQgc2V0dGluZywgb3IgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBxdWV1ZWluZyBkaXNjaXBsaW5lIChxZGlzYykuXG5cbkknbSBleHBlY3RpbmcgdG8gZW5jb3VudGVyIGNvbmRpdGlvbmFsIGxvZ2lj4oCUYGNvbmZpZ2Agc3RhdGVtZW50cywgYGlmYCBzdGF0ZW1lbnRzLCBwb3NzaWJseSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLiBJIGFudGljaXBhdGUgc2VlaW5nIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCBiZXR3ZWVuIGRpZmZlcmVudCBzY2hlZHVsaW5nIGFsZ29yaXRobXMgb3IgZmVhdHVyZXMuIFRoZSBjb250ZXh0IHdpbGwgcHJvYmFibHkgc2hlZCBsaWdodCBvbiB3aGljaCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbnZpcm9ubWVudHMgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3QgYXBwbGljYWJsZS5cblxuVGhlIGNvZGUgbWlnaHQgYmUgZGVmaW5pbmcgYSBuZXcgdHJhZmZpYyBzaGFwaW5nIG1lY2hhbmlzbSwgb3IgYWxsb3dpbmcgY29udHJvbCBvZiB0aGUgcmF0ZSBsaW1pdGluZyBvZiBwYWNrZXRzIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZS5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGdyYW51bGFyIGxldmVsIG9mIGNvbnRyb2wgdGhlIGRldmVsb3BlcnMgaGF2ZSBvZmZlcmVkIHVzLiBJdCdzIHRpbWUgdG8gc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjU3LjM5MDYyMzkwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MTA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHNldC9yZWxlYXNlIGlwIHR1bm5lbCBtZXRhZGF0YS5cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA5MTM6XFx0XFxuIDkxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxcbiA5MTY6XFx0XFxuIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDkyMDpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WU1xcbiA5MjE6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuIDkyMjpcXHRcXHRoZWxwXFxuIDkyMzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0cyB0byBjb25udHJhY2sgbW9kdWxlLlxcbiA5MjQ6XFx0XFxuIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxcbiA5Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU2OjU3LjM5MDcxNDE2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ1NTIxNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZWVwIERpdmUgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYE5FVF9BQ1RfQ1RgIOKAkyB0aGF0J3MgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0aW9uIG1vZHVsZSwgcmlnaHQ/IEhtbSwgbmF0dXJhbGx5LCBpdCByZWxpZXMgb24gYm90aCBgTkZfQ09OTlRSQUNLYCAoTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29yZSkgYW5kIGBORl9GTE9XX1RBQkxFYCAoZmxvdyBvZmZsb2FkIGluZnJhc3RydWN0dXJlKSBiZWluZyBlbmFibGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHlvdSBjYW4ndCAqYWN0KiBvbiBjb25uZWN0aW9uIHRyYWNraW5nIGlmIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgYXJlbid0IGluIHBsYWNlLiBJIHdvdWxkbid0IGV4cGVjdCBhbnl0aGluZyBsZXNzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBleHBsaWNpdGx5IGNvbnNpZGVyIHRoZSBkZXBlbmRlbmNpZXMuIE5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYE5FVF9BQ1RfQ1RJTkZPYC4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQgc29ydCBvZiBpbmZvcm1hdGlvbiBhbmQgb3B0aW9ucyBhcmUgb2ZmZXJlZCBieSB0aGUgbW9kdWxlIEkganVzdCBjb25maXJtZWQgZGVwZW5kcyBvbiBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmbG93IHRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDEuMDM2MjM4NDMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDg2MTpcXHRcXG4gODYyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4NjM6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2Nvbm5tYXJrLlxcbiA4NjQ6XFx0XFxuIDg2NTpcXHRjb25maWcgTkVUX0FDVF9DVElORk9cXG4gODY2OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcXFwiXFxuIDg2NzpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiA4Njg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLX01BUktcXG4gODY5OlxcdFxcdGhlbHBcXG4gODcwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyB0cmFuc2ZlciBvZiBhIGNvbm5tYXJrIHN0b3JlZCBpbmZvcm1hdGlvbi5cXG4gODcxOlxcdFxcdCAgQ3VycmVudCBhY3Rpb25zIHRyYW5zZmVyIGNvbm5tYXJrIHN0b3JlZCBEU0NQIGludG9cXG4gODcyOlxcdFxcdCAgaXB2NC92NiBkaWZmc2VydiBhbmQvb3IgdG8gdHJhbnNmZXIgY29ubm1hcmsgdG8gcGFja2V0XFxuIDg3MzpcXHRcXHQgIG1hcmsuICBCb3RoIGFyZSB1c2VmdWwgZm9yIHJlc3RvcmluZyBlZ3Jlc3MgYmFzZWQgbWFya3NcXG4gODc0OlxcdFxcdCAgYmFjayBvbnRvIGluZ3Jlc3MgY29ubmVjdGlvbnMgZm9yIHFkaXNjIHByaW9yaXR5IG1hcHBpbmdcXG4gODc1OlxcdFxcdCAgcHVycG9zZXMuXFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjAxLjAzNjMyNjUzMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1Nzg2OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYE5FVF9BQ1RfQ1RJTkZPYCBmdW5jdGlvbmFsaXR5IGlzIGJ1aWx0IHVwIGluIHRoZSBrZXJuZWwuIEl0J3MgY2xlYXIgdGhhdCBpdCdzIHJlbHlpbmcgb24gY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHRoZSBtb2R1bGVzIGZvciBpdCwgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9DT05OVFJBQ0tfTUFSS2AuIEknZCBleHBlY3QgaXQgdG8gbGV2ZXJhZ2UgdGhlIHN0YXRlZnVsIGluc3BlY3Rpb24gY2FwYWJpbGl0aWVzIHRoYXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tlciBwcm92aWRlcy4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHNlZSB3aGF0IHdlIGNhbiBsZWFybiBieSBsb29raW5nIGF0IGBORVRfQUNUX1NBTVBMRWAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgc2FtcGxpbmcgaXMgaW1wbGVtZW50ZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZGF0YSB3ZSBqdXN0IGlkZW50aWZpZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCB1dGlsaXplcyBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSByZWxhdGlvbnNoaXAgYW5kIHRvIGJldHRlciBjb250ZXh0dWFsaXplIHdoZXJlIHRoaXMgcGFydGljdWxhciBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDQuMTEyMTE2MTI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0XFx0aGVscFxcbiA3NDY6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHBhY2tldHMgdG8gYmUgbWlycm9yZWQgb3IgcmVkaXJlY3RlZCB0b1xcbiA3NDc6XFx0XFx0ICBvdGhlciBkZXZpY2VzLlxcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzUwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9taXJyZWQuXFxuIDc1MTpcXHRcXG4gNzUyOlxcdGNvbmZpZyBORVRfQUNUX1NBTVBMRVxcbiA3NTM6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYWZmaWMgU2FtcGxpbmdcXFwiXFxuIDc1NDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDc1NTpcXHRcXHRzZWxlY3QgUFNBTVBMRVxcbiA3NTY6XFx0XFx0aGVscFxcbiA3NTc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHBhY2tldCBzYW1wbGluZyB0YyBhY3Rpb24uIFRoZSBwYWNrZXQgc2FtcGxlXFxuIDc1ODpcXHRcXHQgIGFjdGlvbiBjb25zaXN0cyBvZiBzdGF0aXN0aWNhbGx5IGNob29zaW5nIHBhY2tldHMgYW5kIHNhbXBsaW5nXFxuIDc1OTpcXHRcXHQgIHRoZW0gdXNpbmcgdGhlIHBzYW1wbGUgbW9kdWxlLlxcbiA3NjA6XFx0XFxuIDc2MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzYyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zYW1wbGUuXFxuIDc2MzpcXHRcXG4gNzY0OlxcdGNvbmZpZyBORVRfQUNUX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzowNC4xMTIyMjg2MzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MTczODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTmV0d29yayBBY3RpdmF0aW9uIFNhbXBsaW5nKipcblxuT2theSwgc28gYE5FVF9BQ1RfU0FNUExFYCBpcyBjbGVhcmx5IHJlbGlhbnQgb24gYE5FVF9DTFNfQUNUYCDigJMgdGhhdCdzIHRoZSBjb3JlIGFjdGl2YXRpb24gY2xhc3NpZmljYXRpb24uIEFuZCBpdCdzIGdvaW5nIHRvIHVzZSBgUFNBTVBMRWAgZm9yIGl0cyBzYW1wbGluZyBtZWNoYW5pc20sIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kLiBOb3csIGdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgc2VlIGhvdyBgTkVUX0FDVF9CUEZgIGZpdHMgaW50byB0aGlzIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYWN0aXZhdGlvbiBzYW1wbGluZyBwcm9jZXNzLiBXaGF0J3MgdGhlIGNvbm5lY3Rpb24/IElzIGl0IGFuIGFsdGVybmF0aXZlLCBvciBhIGNvbXBsZW1lbnQ/IExldCdzIGRpZyBpbiBhbmQgZmlndXJlIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDYuODYzOTY5NDA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzNTpcXHRcXG4gODM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODM3OlxcdFxcbiA4Mzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgzOTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfdmxhbi5cXG4gODQwOlxcdFxcbiA4NDE6XFx0Y29uZmlnIE5FVF9BQ1RfQlBGXFxuIDg0MjpcXHRcXHR0cmlzdGF0ZSBcXFwiQlBGIGJhc2VkIGFjdGlvblxcXCJcXG4gODQzOlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gODQ0OlxcdFxcdGhlbHBcXG4gODQ1OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBleGVjdXRlIEJQRiBjb2RlIG9uIHBhY2tldHMuIFRoZSBCUEYgY29kZSB3aWxsIGRlY2lkZVxcbiA4NDY6XFx0XFx0ICBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkIG9yIG5vdC5cXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA4NDk6XFx0XFxuIDg1MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODUxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9icGYuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBORVRfQUNUX0NPTk5NQVJLXFxuIDg1NDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIENvbm5lY3Rpb24gTWFyayBSZXRyaWV2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjA2Ljg2NDA2MzM1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc5MjE4MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBJbnRlcmNvbm5lY3RlZCBXZWIgb2YgTmV0d29yayBBY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYE5FVF9BQ1RfQlBGYCBtb2R1bGUuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkVUX0NMU19BQ1RgLiBDYW4ndCBkbyBvbmUgd2l0aG91dCB0aGUgb3RoZXIsIHRoYXQncyBqdXN0IGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGlzIHNldCB1cC4gVGhleSdyZSBpbnRlcnR3aW5lZCwgYW5kIHlvdSBuZWVkIHRoYXQgYmFzZSB0byBidWlsZCB1cG9uLlxuXG5Ob3csIG15IG1pbmQgbmF0dXJhbGx5IGp1bXBzIHRvIGFub3RoZXIgcmVsYXRlZCBhY3Rpb24sIGBORVRfQUNUX0lGRWAuIEl0J3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGRlcGVuZGVuY3kuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIHdob2xlIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjA5Ljc0MzI4NTIxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4ODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4ODU6XFx0XFx0aGVscFxcbiA4ODY6XFx0XFx0IFNheSBZIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHNrYiBkYXRhXFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdCBJZiB1bnN1cmUsIHNheSBOLlxcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4OTE6XFx0XFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxcbiA4OTI6XFx0XFxuIDg5MzpcXHRjb25maWcgTkVUX0FDVF9JRkVcXG4gODk0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuIDg5NTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDg5NjpcXHRcXHRzZWxlY3QgTkVUX0lGRVxcbiA4OTc6XFx0XFx0aGVscFxcbiA4OTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcXG4gODk5OlxcdFxcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XFxuIDkwMDpcXHRcXHQgIFxcXCJEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVxcXCJcXG4gOTAxOlxcdFxcdCAgIEF1dGhvcnM6IEphbWFsIEhhZGkgU2FsaW0gYW5kIERhbWFzY2VuZSBNLiBKb2FjaGltcGlsbGFpXFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5MDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MDkuNzQzMzg5MzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NTYxMDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIE5ldHdvcmsgQWN0aXZhdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYE5FVF9BQ1RfSUZFYC4uLiB0aGF0J3MgdGhlIEluZGVwZW5kZW50IEZ1bmN0aW9uIEV2YWx1YXRpb24sIHJpZ2h0PyBTbywgYmFzZWQgb24gdGhlIGRlcGVuZGVuY3ksIGl0IHJlbGllcyBvbiBgTkVUX0NMU19BQ1RgIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xhc3MgYWN0aXZhdGlvbi4gU28sIGluIG90aGVyIHdvcmRzLCB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgaW5kZXBlbmRlbnQgZnVuY3Rpb24gb2YgdGhlIG5ldHdvcmsgaXMgZGVwZW5kZW50IG9uIGl0IGJlaW5nIGFjdGl2YXRlZC4gSXQgdXNlcyB0aGF0IGluZm9ybWF0aW9uIHRvIHNlbGVjdCBgTkVUX0lGRWAuIEdvdCBpdC4gTm93LCBpdCdzIHNlbGVjdGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlLCB3aGljaCBpcyBhIGtleSBzdGVwLCBidXQgaXQgbXVzdCBiZSBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIGFjdGl2YXRlZC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYnVpbGQuIE5vdywgYmVmb3JlIEkgZ2V0IGFoZWFkIG9mIG15c2VsZiwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBgTkVUX0FDVF9QRURJVGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBpdCBkZWFscyB3aXRoIHBhcmFtZXRlciBlZGl0aW5nLCB3aGljaCBjb3VsZCBhZmZlY3QgYWxsIHRoZSBzdGVwcyBJIGp1c3QgdGhvdWdodCBhYm91dC4gTGV0IG1lIHNlZSB3aGVyZSB0aGF0IGxpZXMgaW4gdGhpcyBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gV2Ugc2hvdWxkIGNoZWNrIHRoYXQgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIGV4cGVjdGVkIHJlbGF0aW9uc2hpcHMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MTMuMDA5MDAyNzM0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3RhdGVsZXNzIE5BVFxcXCJcXG4gNzY2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzY3OlxcdFxcdGhlbHBcXG4gNzY4OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBkbyBzdGF0ZWxlc3MgTkFUIG9uIElQdjQgcGFja2V0cy4gIFlvdSBzaG91bGQgdXNlXFxuIDc2OTpcXHRcXHQgIG5ldGZpbHRlciBmb3IgTkFUIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3NzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X25hdC5cXG4gNzczOlxcdFxcbiA3NzQ6XFx0Y29uZmlnIE5FVF9BQ1RfUEVESVRcXG4gNzc1OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgRWRpdGluZ1xcXCJcXG4gNzc2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzc3OlxcdFxcdGhlbHBcXG4gNzc4OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBtYW5nbGUgdGhlIGNvbnRlbnQgb2YgcGFja2V0cy5cXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDc4MTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcGVkaXQuXFxuIDc4MjpcXHRcXG4gNzgzOlxcdGNvbmZpZyBORVRfQUNUX1NJTVBcXG4gNzg0OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW1wbGUgRXhhbXBsZSAoRGVidWcpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzoxMy4wMDkwOTY3MTRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3NjU2MDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHRoZSBzdW1tYXJ5LCBmcmFtZWQgYXMgeW91ciB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBBY3Rpdml0eSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldHdvcmsgYWN0aXZpdHkgZGF0YS4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBORVRfQUNUX1BFRElUYCDigJMgdGhhdCdzIHBhY2tldCBlZGl0aW5nIGFjdGl2aXR5LCByaWdodD8g4oCTIGlzIGRpcmVjdGx5IGRlcGVuZGVudCBvbiBgTkVUX0NMU19BQ1RgLiBUaGF0IG1ha2VzIHNlbnNlOyB5b3UgY2FuJ3QgcmVhbGx5IGVkaXQgc29tZXRoaW5nIHlvdSBoYXZlbid0IGNsYXNzaWZpZWQgZmlyc3QuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQncyBtb3ZlIG9udG8gYE5FVF9BQ1RfUE9MSUNFYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgZmFjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjE1LjU4NTY1OTQyNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTA6XFx0XFx0ICByZXN1bHQsIGluc3RhbnRseSBkcm9wIG9yIHJlZGlyZWN0IHBhY2tldHMsIGV0Yy5cXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxcbiA3MTM6XFx0XFx0ICBleHRlbmRlZCBtYXRjaGVzLlxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRjb25maWcgTkVUX0FDVF9QT0xJQ0VcXG4gNzE2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFmZmljIFBvbGljaW5nXFxcIlxcbiA3MTc6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA3MTg6XFx0XFx0aGVscFxcbiA3MTk6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGRvIHRyYWZmaWMgcG9saWNpbmcsIGkuZS4gc3RyaWN0XFxuIDcyMDpcXHRcXHQgIGJhbmR3aWR0aCBsaW1pdGluZy4gVGhpcyBhY3Rpb24gcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHBvbGljaW5nXFxuIDcyMTpcXHRcXHQgIG1vZHVsZS5cXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDcyNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcG9saWNlLlxcbiA3MjU6XFx0XFxuIDcyNjpcXHRjb25maWcgTkVUX0FDVF9HQUNUXFxuIDcyNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBhY3Rpb25zXFxcIlxcbiA3Mjg6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA3Mjk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzoxNS41ODU3NDk2OTZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDYxNzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBOZXR3b3JrIEFjdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRfQUNUX1BPTElDRWAgaXMgZGVwZW5kZW50IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQncyBub3QgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIHdheSBwb2xpY2luZyBvZnRlbiB3b3JrcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgbmVlZHMgY2xhc3NpZmljYXRpb24gdG8gZnVuY3Rpb24sIHJpZ2h0PyBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMgb3Igb3Zlcmxvb2tlZCBhIHN1YnRsZSBpbnRlcnBsYXkgaGVyZS4gU2luY2UgSSdtIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgYWN0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgZ2xhbmNlIGF0IGBORVRfQUNUX1RVTk5FTF9LRVlgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByZWxldmFudCBjb3JyZWxhdGlvbi4gR290dGEgY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLCBldmVuIGlmIGl0IHNlZW1zIGEgbGl0dGxlIHRhbmdlbnRpYWwgYXQgZmlyc3QuIEFsd2F5cyBnb29kIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBpbiB0aGlzIGFyZWEuIEl0J3Mgb2Z0ZW4gdGhlIGxlc3Mgb2J2aW91cyByZWxhdGlvbnNoaXBzIHRoYXQgdHJpcCBtZSB1cCwgc28gaXQncyBiZXN0IHRvIGJlIGFzIHRob3JvdWdoIGFzIHBvc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMzOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MTguNzkwMzcxODI0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0ICBcXFwiRGlzdHJpYnV0aW5nIExpbnV4IFRyYWZmaWMgQ29udHJvbCBDbGFzc2lmaWVyLUFjdGlvbiBTdWJzeXN0ZW1cXFwiXFxuIDkwMTpcXHRcXHQgICBBdXRob3JzOiBKYW1hbCBIYWRpIFNhbGltIGFuZCBEYW1hc2NlbmUgTS4gSm9hY2hpbXBpbGxhaVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9pZmUuXFxuIDkwNTpcXHRcXG4gOTA2OlxcdGNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVlcXG4gOTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJJUCB0dW5uZWwgbWV0YWRhdGEgbWFuaXB1bGF0aW9uXFxcIlxcbiA5MDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA5MDk6XFx0XFx0aGVscFxcbiA5MTA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIHNldC9yZWxlYXNlIGlwIHR1bm5lbCBtZXRhZGF0YS5cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA5MTM6XFx0XFxuIDkxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTE1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF90dW5uZWxfa2V5LlxcbiA5MTY6XFx0XFxuIDkxNzpcXHRjb25maWcgTkVUX0FDVF9DVFxcbiA5MTg6XFx0XFx0dHJpc3RhdGUgXFxcImNvbm5lY3Rpb24gdHJhY2tpbmcgdGMgYWN0aW9uXFxcIlxcbiA5MTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjE4Ljc5MDYyNTYwNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQyMDcwNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlc2UgbmV0d29yayBjb25maWd1cmF0aW9ucywgYW5kIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBgTkVUX0FDVF9UVU5ORUxfS0VZYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRfQ0xTX0FDVGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbkdpdmVuIHRoYXQsIG15IGN1cnJlbnQgc2V0dXAgaW52b2x2ZXM6XG5cbiogICBgTkVUX0NMU19BQ1RgXG4qICAgYE5FVF9BQ1RfQlBGYFxuKiAgIGBORVRfQUNUX0NUYFxuKiAgIGBORVRfQUNUX0NUSU5GT2BcbiogICBgTkVUX0FDVF9JRkVgXG4qICAgYE5FVF9BQ1RfUEVESVRgXG4qICAgYE5FVF9BQ1RfUE9MSUNFYFxuKiAgIGBORVRfQUNUX1NBTVBMRWBcbiogICBgTkVUX0FDVF9UVU5ORUxfS0VZYCAod2hpY2ggd2Uga25vdyBpcyBpbmZsdWVuY2VkIGJ5IGBORVRfQ0xTX0FDVGApXG4qICAgYE5GX0NPTk5UUkFDS2BcbiogICBgTkZfQ09OTlRSQUNLX01BUktgXG4qICAgYE5GX0NPTk5UUkFDS19MQUJFTFNgXG4qICAgYE5GX0NPTk5UUkFDS19aT05FU2BcbiogICBgTkZfRkxPV19UQUJMRWBcblxuUmlnaHQsIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgTkZfQ09OTlRSQUNLX1pPTkVTYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0J3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjMuMjMyNjk5MTEyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ3OTYzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTEyMz1jb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjQuMDM3NTAyMDg4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTUxMTgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGBORl9DT05OVFJBQ0tfTEFCRUxTYCoqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiBgTkZfQ09OTlRSQUNLX0xBQkVMU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIG1vZHVsZSBpcyBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIHNvIEkgd2FudCB0byBydW4gYSBxdWljayBkaWFnbm9zdGljIGNoZWNrIHRvIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIGl0cyBqb2IuIEkgd2FudCB0byBydWxlIG91dCBhbnkgY29ubmVjdGlvbiB0cmFja2luZyBpc3N1ZXMgYmVmb3JlIEkgbW92ZSBvbiB0byBtb3JlIGNvbXBsZXggdHJvdWJsZXNob290aW5nIHN0ZXBzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjcuNzMyNjIzNTU3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxMzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTE3Nz1jb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MjcuNzc5NDQxMzEyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTg3NTYyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipORl9DT05OVFJBQ0tfTUFSSyBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBORl9DT05OVFJBQ0tfTUFSS2AuIEknbSBzdGFydGluZyBoZXJlIGJlY2F1c2UgSSBoYXZlIGEgaHVuY2ggaXQncyByZWxldmFudCB0byB0aGUgY3VycmVudCBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBmaWVsZCBvcGVyYXRlcyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBMZXQgbWUgcmVjYWxsOiBpcyBpdCB1c2VkIGZvciBtYXJraW5nIGNvbm5lY3Rpb25zIGZvciBzcGVjaWZpYyBwb2xpY3kgZW5mb3JjZW1lbnQsIHJvdXRpbmcgZGVjaXNpb25zLCBvciBwZXJoYXBzIGZvciB0cmFmZmljIHNoYXBpbmc/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBjb250ZXh0IHdpbGwgZGV0ZXJtaW5lIHdoYXQgSSBuZWVkIHRvIGxvb2sgZm9yLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgbWFyayBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBuZXRmaWx0ZXIgaG9va3MsIGFuZCB3aGV0aGVyIGl0J3MgcHJvcGFnYXRpbmcgY29ycmVjdGx5IHRocm91Z2ggdGhlIGNvbm50cmFjayB0YWJsZSBlbnRyaWVzLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBhbnkgcmVsZXZhbnQgaXB0YWJsZXMgbW9kdWxlcyBhcmUgY29uZmlndXJlZCB0byBhY3Qgb24gdGhpcyBtYXJrLiBUaW1lIHRvIGNoZWNrIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgb2YgY291cnNlLCBhbmQgdGhlbiBxdWlja2x5IGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldHMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgc291cmNlIHRvIGNvbmZpcm0gdGhhdCBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIHVuZGVyIGRpZmZlcmVudCBuZXR3b3JrIHNjZW5hcmlvcyBhbmQgY29uc2lkZXIgaG93IHRoaXMgcmVsYXRlcyB0byBwb3RlbnRpYWwgcHJvYmxlbXMuIFJpZ2h0LCBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1NzozMC45NzgyMDE4M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwNDEzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjMxLjA1MDI0NzI2OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUwNDg3Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipORl9GTE9XX1RBQkxFIENoZWNrLUluKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBORl9GTE9XX1RBQkxFYC4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgdHJhZmZpYyBmbG93LCBsaWtlbHkgYXQgdGhlIGtlcm5lbCBsZXZlbCBnaXZlbiB0aGUgYE5GX2AgcHJlZml4LiBLbm93aW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIHRhYmxlIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dDogYXJlIHdlIHRyb3VibGVzaG9vdGluZyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgY29ubmVjdGl2aXR5IGlzc3VlLCBvciBwZXJoYXBzIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGZsb3cgbWFuYWdlbWVudD8gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHdpdGhpbi4gQSBkZWVwIGRpdmUgaW50byB0aGlzIHRhYmxlJ3Mgc3RhdHVzIGNvdWxkIHByb3ZpZGUgdGhlIGNsYXJpdHkgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgbmV4dCBzdGVwcyByZXF1aXJlZCB0byByZXNvbHZlIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc3RhdHVzIG9mIHRoZSBmbG93IHRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjM0LjUwMDczNzk4MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1OTc0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MzQuNTYwMzM4NDY4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzg4MDAxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE5FVF9DTFNfQUNUYCwgYE5FVF9BQ1RfQlBGYCwgYE5FVF9BQ1RfQ1RgLCBgTkVUX0FDVF9DVElORk9gLCBgTkVUX0FDVF9JRkVgLCBgTkVUX0FDVF9QRURJVGAsIGBORVRfQUNUX1BPTElDRWAsIGBORVRfQUNUX1NBTVBMRWAsIGBORVRfQUNUX1RVTk5FTF9LRVlgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19NQVJLYCwgYE5GX0NPTk5UUkFDS19MQUJFTFNgLCBgTkZfQ09OTlRSQUNLX1pPTkVTYCwgYW5kIGBORl9GTE9XX1RBQkxFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIGEgc3RhYmxlIGFuZCBwZXJmb3JtYW50IGNvbmZpZ3VyYXRpb24uXG5cblNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVUX0FDVF9DVGAgYW5kIGBORl9OQVRgLiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBgTkVUX0FDVF9DVGAgZGVwZW5kcyBvbiBgTkVUX0NMU19BQ1QgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRWAuIFRoaXMgZGVwZW5kZW5jeSBjb25kaXRpb24gbWVhbnMgdGhhdCBgTkVUX0FDVF9DVGAgZG9lc24ndCBzdHJpY3RseSAqcmVxdWlyZSogYE5GX05BVGAuIElmIGBORl9OQVRgIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGVuIGBORVRfQUNUX0NUYCBhbHNvIG5lZWRzIHRvIGJlIGEgbW9kdWxlLCBidXQgaWYgYE5GX05BVGAgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGVuIGBORVRfQUNUX0NUYCBjYW4gYmUgYnVpbHQgZWl0aGVyIHdheS4gVGhhdCdzIGdvb2QsIGl0IGdpdmVzIHVzIG1vcmUgZmxleGliaWxpdHkgaW4gdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBORVRfSUZFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTEwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjM5LjEzOTE0MjA3MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDI0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JRkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lmZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvS2NvbmZpZy01LVxcbm5ldC9pZmUvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX0lGRVxcbm5ldC9pZmUvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6MzkuMTg3NjkzMjI3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzQwMzE5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRyYWZmaWMgQ29udHJvbCBBY3Rpb24gSW5pdGlhbGl6YXRpb24gYW5kIER1bXBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBhY3Rpb24gbW9kdWxlcyBhcmUgc2V0IHVwLiBJIHNlZSBgTkVUX0lGRWAgaXMgaW1wbGljaXRseSBpbmNsdWRlZCBieSBgTkVUX0FDVF9JRkVgLCB3aGljaCBpcyBnb29kLiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBTYW1lIHdpdGggYFBTQU1QTEVgIGFuZCBgTkVUX0FDVF9TQU1QTEVgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIGB0Y2ZfYWN0aW9uX2luaXRgIGFuZCBgdGNmX2FjdGlvbl9kdW1wYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBBcmUgdGhlc2UgdGhlIG9ubHkgZW50cnkgcG9pbnRzPyBSaWdodCwgYHRjZl9hY3Rpb25faW5pdF8xYCBpcyBjYWxsZWQgYnkgYm90aCBgdGNmX2FjdGlvbl9pbml0YCBhbmQgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YC4gR29vZCB0byByZW1lbWJlci4gYHRjZl9hY3Rpb25fZHVtcGAgaXMgdXNlZCBpbiBgdGNhX2dldF9maWxsYCwgYHRjZl9leHRzX2R1bXBgLCBhbmQgYHRjZl9leHRzX3RlcnNlX2R1bXBgLlxuXG5TbywgaXQgc2VlbXMgdGhlIGtleSBzeW1ib2xzLCB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIGZvciB0aGlzIGFuYWx5c2lzLCBzaG91bGQgYmU6IGB0Y2ZfYWN0aW9uX2luaXRgLCBgdGNmX2FjdGlvbl9pbml0XzFgLCBgdGNmX2FjdGlvbl9kdW1wYCwgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YCwgYW5kIGB0Y2ZfZXh0c19kdW1wYC4gVGhhdCBzZWVtcyBjb21wcmVoZW5zaXZlLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIGlmIGB0Y2ZfYWN0aW9uX2luaXRfMWAgaXMgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjQ0LjAyMTcyNzY2N1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MjUxMTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25faW5pdF8xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjQ0LjA3NzU1Nzk1M1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAzMzcyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVmlzaWJpbGl0eSBJc3N1ZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgYnV0IGl0J3MgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gV2h5IHdvdWxkbid0IGl0IGJlIHN0YXRpYyBpZiBpdCdzIG1lYW50IHRvIGJlIGludGVybmFsPyBUaGVuLCBJIGFsc28gbm90aWNlZCBgdGNmX2FjdGlvbl9pbml0YCBzaGFyZXMgdGhlIHNhbWUgY2hhcmFjdGVyaXN0aWMsIGl0IGlzIG5vdCBleHBvcnRlZC4gQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIGJvdGggZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZC4gVGhpcyBjb21iaW5hdGlvbiB1c3VhbGx5IG1lYW5zIHRoZXJlJ3Mgc29tZSBwb3NzaWJpbGl0eSBvZiBleHRlcm5hbCBsaW5rYWdlLCBldmVuIGlmIHVuaW50ZW50aW9uYWwuIFBlcmhhcHMgdGhlcmUncyBhbiBpc3N1ZSB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIGluY2x1ZGUgc3RydWN0dXJlLiBPciBtYXliZSB0aGVyZSdzIGEgc3VidGxlIG1hY3JvIGRlZmluaXRpb24gYXQgcGxheS4gV2UgbmVlZCB0byBmb2xsb3cgdGhpcyBkb3duIHRoZSByYWJiaXQgaG9sZSB0byBzZWUgaWYgdGhleSBhcmUgdW5pbnRlbnRpb25hbGx5IGV4cG9zZWQgdG8gb3RoZXIgY29kZSBtb2R1bGVzLCBvciBpZiB0aGVyZSBpcyBhbm90aGVyIG1vZHVsZSB3aXRoIHNpbWlsYXIgaW50ZXJuYWwgcmVxdWlyZW1lbnRzLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbiB1bmV4cGVjdGVkIGV4dGVybmFsIGRlcGVuZGVuY3ksIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGB0Y2ZfZXh0c192YWxpZGF0ZV9leGAgYW5kIHNlZSBpZiB0aGUgcHJvYmxlbSBleGlzdHMgdGhlcmUgdG9vLCBvciBpZiB0aGlzIGlzc3VlIGlzIGxpbWl0ZWQgdG8gb25lIHNwZWNpZmljIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTc6NDcuNzgwOTM0NDQ0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2NDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0Y2ZfZXh0c192YWxpZGF0ZV9leFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MzQwNz1pbnQgdGNmX2V4dHNfdmFsaWRhdGVfZXgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDU4LX1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM0NTk6RVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c192YWxpZGF0ZV9leCk7XFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNDYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Nzo0Ny44MjcyMDUyMzlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MzM0NDk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVmFsaWRhdGluZyB0aGUgRXh0ZW5zaW9uIE1vZHVsZSBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBgdGNmX2V4dHNfdmFsaWRhdGVfZXhgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciBkb3duIHRoaXMgcGF0aCwgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIHRoYXQgdGhlIHJlbGF0ZWQgYHRjZl9leHRzX2R1bXBgIGZ1bmN0aW9uIGV4aXN0cyBhcyB3ZWxsLiBUaGlzIHdpbGwgaGVscCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtb2R1bGUgaGFuZGxlcyBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhbmQgaG93IEkgY2FuIGFuYWx5emUgaXQuIEl0J3MgYWx3YXlzIHVzZWZ1bCB0byBoYXZlIHRoYXQgZXh0cmEgZGVidWdnaW5nIHV0aWxpdHkgcmVhZGlseSBhdmFpbGFibGUgYXMgSSBkaWcgZGVlcGVyIGludG8gdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjUwLjYwMDU1MzQ1MloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDM4NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9leHRzX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTM0OTE9aW50IHRjZl9leHRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTI5LX1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1MzA6RVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c19kdW1wKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1MzEtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM1NTg9aW50IHRjZl9leHRzX2R1bXBfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zNTY2LX1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM1Njc6RVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c19kdW1wX3N0YXRzKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM1NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjUxLjEyNDk5NzgxN1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQzOTAzNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgVGltZTogRXhwbG9yaW5nIFRDRiBEdW1wcyoqXG5cbk9rYXksIHNvIGB0Y2ZfZXh0c19kdW1wYCBpcyBleHBvcnRlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIGB0Y2ZfYWN0aW9uX2R1bXBgLiBJdCBmZWVscyBsaWtlIHRoZXJlJ3MgYSBjb25uZWN0aW9uIHRoZXJlLCBhIHJlbGF0ZWQgc2V0IG9mIGR1bXBzIHRoYXQgbGlrZWx5IHByb3ZpZGUgY29tcGxlbWVudGFyeSBpbmZvcm1hdGlvbi4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgaW5zaWdodHMgaW50byB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRjZl9hY3Rpb25fZHVtcGAgaXMgdGVsbGluZyB1cyB0b28uIEl0IHdpbGwgYmUgaGVscGZ1bCBpbiBkZXRlcm1pbmluZyB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYW5kIGlmIHRoZXJlJ3MgYW4gb3Bwb3J0dW5pdHkgdG8gZ2xlYW4gbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIG91dHB1dHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU3OjU0LjY2ODkwNjM0MloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1NDM4ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjZl9hY3Rpb25fZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1Nzo1NC43MzI0NjAxOThaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg3OTA0NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEMgQWN0aW9uIE5ldGxpbmsgRHVtcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlIEknbSBsb29raW5nIGF0IGlzbid0IGV4cG9ydGVkLCBidXQgdGhhdCdzIGZpbmUuIFRoZSBrZXkgZnVuY3Rpb25zLCBgdGNmX2FjdGlvbl9pbml0YCwgYHRjZl9hY3Rpb25faW5pdF8xYCwgYW5kIGB0Y2ZfYWN0aW9uX2R1bXBgLCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gcGVyZmVjdCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5MZXQncyBxdWlja2x5IGdvIG92ZXIgdGhlIGNoYW5nZXMgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIFRDIGFjdGlvbnMuIFRoZSBhaW0gaXMgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIE5ldGxpbmsgYXR0cmlidXRlcyBuZWVkZWQgd2hlbiBkdW1waW5nIGFuIGFjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyB3ZSBoYW5kbGUgTmV0bGluayBkdW1wIG9wZXJhdGlvbnMgZm9yIFRDIGFjdGlvbnMuIFRoYXQncyBhIGRlZmluaXRlIHJlZCBmbGFnIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGluYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbnMgaGVyZSBjb3VsZCBvcGVuIHRoZSBkb29yIHRvIGJ1ZmZlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgd3JpdGVzLCBvciwgYXQgYSBtaW5pbXVtLCBgRU1TR1NJWkVgIGVycm9ycy5cblxuSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBORVRfQ0xTX0FDVGAsIGFuZCB0aGUgVEMgYWN0aW9uIG1vZHVsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX01BUktgLCBgTkZfQ09OTlRSQUNLX0xBQkVMU2AsIGBORl9DT05OVFJBQ0tfWk9ORVNgLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGFyZSBlbmFibGVkLlxuXG5NeSBtYWluIGZvY3VzIHN5bWJvbHMsIGFzIHN0YXRlZCBiZWZvcmUsIGFyZSBgdGNmX2FjdGlvbl9pbml0YCwgYHRjZl9hY3Rpb25faW5pdF8xYCwgYHRjZl9hY3Rpb25fZHVtcGAsIGFzIHdlbGwgYXMgYHRjZl9leHRzX3ZhbGlkYXRlX2V4YCBhbmQgYHRjZl9leHRzX2R1bXBgLi5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBhY3Rpb25zIGhhdmUgYmVlbiBhZmZlY3RlZC4gQWgsIHllczogYGFjdF9hcGkuY2AsIGBhY3RfYnBmLmNgLCBgYWN0X2N0LmNgLCBgYWN0X2N0aW5mby5jYCwgYGFjdF9pZmUuY2AsIGBhY3RfcGVkaXQuY2AsIGBhY3RfcG9saWNlLmNgLCBgYWN0X3NhbXBsZS5jYCwgYW5kIGBhY3RfdHVubmVsX2tleS5jYC4gT2theSwgc28gdGhvc2UgYXJlIGFsbCB0aGUgYWN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGlzIGFkZGluZyB0aG9zZSBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZSBzaXplcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBUQyBhY3Rpb24gTmV0bGluayBkdW1wIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgaW4gdGhlc2Ugc2NlbmFyaW9zIGNvdWxkIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgbmFzdHkgcHJvYmxlbXMgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIE5ldGxpbmsgbWVzc2FnZS4gVGltZSB0byBnZXQgdGhpcyBmb3JtYXR0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODc4LCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1ODowMy42MTE1MDg1NDZaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIyMTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfQlBGXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJORVRfQUNUX0NUSU5GT1wiLFxuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9BQ1RfUEVESVRcIixcbiAgICBcIk5FVF9BQ1RfUE9MSUNFXCIsXG4gICAgXCJORVRfQUNUX1NBTVBMRVwiLFxuICAgIFwiTkVUX0FDVF9UVU5ORUxfS0VZXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19NQVJLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTEFCRUxTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfWk9ORVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX2luaXRcIixcbiAgICBcInRjZl9hY3Rpb25faW5pdF8xXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2R1bXBcIixcbiAgICBcInRjZl9leHRzX3ZhbGlkYXRlX2V4XCIsXG4gICAgXCJ0Y2ZfZXh0c19kdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCdzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfQlBGXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJORVRfQUNUX0NUSU5GT1wiLFxuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9BQ1RfUEVESVRcIixcbiAgICBcIk5FVF9BQ1RfUE9MSUNFXCIsXG4gICAgXCJORVRfQUNUX1NBTVBMRVwiLFxuICAgIFwiTkVUX0FDVF9UVU5ORUxfS0VZXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19NQVJLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTEFCRUxTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfWk9ORVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX2luaXRcIixcbiAgICBcInRjZl9hY3Rpb25faW5pdF8xXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2R1bXBcIixcbiAgICBcInRjZl9leHRzX3ZhbGlkYXRlX2V4XCIsXG4gICAgXCJ0Y2ZfZXh0c19kdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIHRvIHZhcmlvdXMgVEMgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIG5lZWRlZCB0byBkdW1wIHRoZSBhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIG5ldGxpbmsgZHVtcCBvcGVyYXRpb25zIGZvciBUQyBhY3Rpb25zLiBJdCdzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpbmNvcnJlY3Qgc2l6ZSBjYWxjdWxhdGlvbnMgY2FuIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cywgb3V0LW9mLWJvdW5kcyB3cml0ZXMsIG9yIGBFTVNHU0laRWAgZXJyb3JzIHdoZW4gY29uc3RydWN0aW5nIHRoZSBuZXRsaW5rIG1lc3NhZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU4OjAzLjY5MTczNzQ0NFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDAxMzgxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMDo1ODowMy42OTIyNDcyOTVaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTcxOTk2MjQxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGBnZXRfZmlsbF9zaXplYCBjYWxsYmFja3MgZm9yIHZhcmlvdXMgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9ucyB0byBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcGF5bG9hZCBzaXplIHJlcXVpcmVkIHdoZW4gZHVtcGluZyB0aGVzZSBhY3Rpb25zIHRvIHVzZXJzcGFjZS4gSXQgYWxzbyBmaXhlcyBhIHNpemUgY2FsY3VsYXRpb24gaW4gYHRjZl9hY3Rpb25fc2hhcmVkX2F0dHJzX3NpemVgIHRvIGFjY291bnQgZm9yIDY0LWJpdCBwYWRkaW5nLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBpbnZvbHZlIGNhbGN1bGF0aW5nIHNpemVzIChyZXR1cm5pbmcgYHNpemVfdGApIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvIG5vdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG8gbm90IGFkZCBjb21wbGV4IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBhIHNpemUgaXMgbWlzY2FsY3VsYXRlZCwgaXQgd291bGQgZWl0aGVyIHJlc3VsdCBpbiBhbiBgRU1TR1NJWkVgIGVycm9yIGR1cmluZyBuZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIG9yIHBvdGVudGlhbGx5IGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgdGhlIGJ1ZmZlciBzaXplIGlzIHVuZGVyZXN0aW1hdGVkIGFuZCBib3VuZHMgY2hlY2tzIGFyZSBtaXNzaW5nICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4pLiBOZXRsaW5rIG1lc3NhZ2UgY29uc3RydWN0aW9uIHVzZXMgYG5sYV9wdXRgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyB3aGljaCB1cGRhdGUgdGhlIGBza2ItXFx1MDAzZWxlbmAgYXBwcm9wcmlhdGVseSwgc28gb3ZlcmVzdGltYXRpbmcgdGhlIHNpemUgc2ltcGx5IGxlYXZlcyB1bnVzZWQgdGFpbHJvb20gaW4gdGhlIHNvY2tldCBidWZmZXIgYW5kIGRvZXMgbm90IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0MzMxYjY2ZDlmMzllZWIyYzU4N2RjYjU5ZDFkMWYzYzkwYTNkMzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMDo1NTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5pbmRleCA2MDBiNzgwNGJlZmQyLi5iNDQxNWQzNThjOTExIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuQEAgLTQ1Miw3ICs0NTIsMTAgQEAgc3RhdGljIHNpemVfdCB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbiBcdFx0LyogVENBX1NUQVRTX1FVRVVFICovXG4gXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKSlcbiBcdFx0KyBubGFfdG90YWxfc2l6ZSgwKSAvKiBUQ0FfQUNUX09QVElPTlMgbmVzdGVkICovXG4tXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpOyAvKiBUQ0FfR0FDVF9UTSAqL1xuK1x0XHQvKiBUQ0FfR0FDVF9UTTsgYWN0aW9ucyBkdW1wIHRoZWlyIHRjZl90IHdpdGggbmxhX3B1dF82NGJpdCgpLFxuK1x0XHQgKiB3aGljaCBtYXkgZW1pdCBhbiBleHRyYSBOTEFfUEFEIGF0dHJpYnV0ZS5cbitcdFx0ICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemVfNjRiaXQoc2l6ZW9mKHN0cnVjdCB0Y2ZfdCkpO1xuIH1cbiBcbiBzdGF0aWMgc2l6ZV90IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKHNpemVfdCBzeilcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2JwZi5jIGIvbmV0L3NjaGVkL2FjdF9icGYuY1xuaW5kZXggMDlkNDZlMTk1ZTMzYi4uMDZkOGY3OGI3MzY4MyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfYnBmLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfYnBmLmNcbkBAIC0zODksNiArMzg5LDMxIEBAIHN0YXRpYyB2b2lkIHRjZl9icGZfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4gXHR0Y2ZfYnBmX2NmZ19jbGVhbnVwKFx1MDAyNnRtcCk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX2JwZl9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRzdHJ1Y3QgdGNmX2JwZiAqcHJvZyA9IHRvX2JwZihhY3QpO1xuK1x0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2FjdF9icGYpKTtcbitcbitcdC8qIGJwZl9vcHMgYW5kIGJwZl9udW1fb3BzIGFyZSBwdWJsaXNoZWQgYXMgc2VwYXJhdGUgc3RvcmVzIHVuZGVyXG4rXHQgKiB0Y2ZfbG9jaywgc28gdGFrZSBpdCBoZXJlIGFzIHRjZl9icGZfZHVtcCgpIGRvZXMuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZwcm9nLVx1MDAzZXRjZl9sb2NrKTtcbitcdGlmICh0Y2ZfYnBmX2lzX2VicGYocHJvZykpIHtcbitcdFx0LyogVENBX0FDVF9CUEZfTkFNRSAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKEFDVF9CUEZfTkFNRV9MRU4gKyAxKTtcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7IC8qIFRDQV9BQ1RfQlBGX0lEICovXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoQlBGX1RBR19TSVpFKTsgLyogVENBX0FDVF9CUEZfVEFHICovXG4rXHR9IGVsc2Uge1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTsgLyogVENBX0FDVF9CUEZfT1BTX0xFTiAqL1xuK1x0XHQvKiBUQ0FfQUNUX0JQRl9PUFMgKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShwcm9nLVx1MDAzZWJwZl9udW1fb3BzICpcbitcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2tfZmlsdGVyKSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZwcm9nLVx1MDAzZXRjZl9sb2NrKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2JwZl9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5raW5kXHRcdD1cdFwiYnBmXCIsXG4gXHQuaWRcdFx0PVx0VENBX0lEX0JQRixcbkBAIC0zOTcsNiArNDIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQuZHVtcFx0XHQ9XHR0Y2ZfYnBmX2R1bXAsXG4gXHQuY2xlYW51cFx0PVx0dGNmX2JwZl9jbGVhbnVwLFxuIFx0LmluaXRcdFx0PVx0dGNmX2JwZl9pbml0LFxuK1x0LmdldF9maWxsX3NpemVcdD1cdHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5zaXplXHRcdD1cdHNpemVvZihzdHJ1Y3QgdGNmX2JwZiksXG4gfTtcbiBNT0RVTEVfQUxJQVNfTkVUX0FDVChcImJwZlwiKTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IGUyNTA5NjljODRhY2EuLjM3MDA4NWFiNmVhNDEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2N0LmNcbisrKyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuQEAgLTE2NTcsNiArMTY1Nyw1MSBAQCBzdGF0aWMgaW50IHRjZl9jdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjZl9jdF9wYXJhbXMgKnA7XG4rXHRzaXplX3Qgc2l6ZTtcbitcbitcdHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHRjX2N0KSkgLyogVENBX0NUX1BBUk1TICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUxNikpOyAvKiBUQ0FfQ1RfQUNUSU9OICovXG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwID0gcmN1X2RlcmVmZXJlbmNlKHRvX2N0KGFjdCktXHUwMDNlcGFyYW1zKTtcbitcbitcdGlmIChwLVx1MDAzZWN0X2FjdGlvbiBcdTAwMjYgVENBX0NUX0FDVF9DTEVBUilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBUQ0FfQ1RfTUFSSywgVENBX0NUX01BUktfTUFTSyAqL1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKSlcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2VtYXJrKSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZW1hcmtfbWFzaykpO1xuK1xuK1x0LyogVENBX0NUX0xBQkVMUywgVENBX0NUX0xBQkVMU19NQVNLICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHAtXHUwMDNlbGFiZWxzKSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihwLVx1MDAzZWxhYmVsc19tYXNrKSk7XG4rXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTKSlcbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YocC1cdTAwM2V6b25lKSk7IC8qIFRDQV9DVF9aT05FICovXG4rXG4rXHRpZiAocC1cdTAwM2VjdF9hY3Rpb24gXHUwMDI2IFRDQV9DVF9BQ1RfTkFUKVxuK1x0XHQvKiBUQ0FfQ1RfTkFUX0lQVjZfe01JTixNQVh9LCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gYWRkcmVzc1xuK1x0XHQgKiB2YXJpYW50cywgcGx1cyBUQ0FfQ1RfTkFUX1BPUlRfe01JTixNQVh9LlxuK1x0XHQgKi9cbitcdFx0c2l6ZSArPSAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG4rXHRcdFx0KyAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpO1xuK1xuK1x0LyogVENBX0NUX0hFTFBFUl97TkFNRSxGQU1JTFksUFJPVE99ICovXG4rXHRpZiAocC1cdTAwM2VoZWxwZXIpXG4rXHRcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoTkZfQ1RfSEVMUEVSX05BTUVfTEVOKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1xuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3Rfb3BzID0ge1xuIFx0LmtpbmRcdFx0PVx0XCJjdFwiLFxuIFx0LmlkXHRcdD1cdFRDQV9JRF9DVCxcbkBAIC0xNjY2LDYgKzE3MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2N0X29wcyA9IHtcbiBcdC5pbml0XHRcdD1cdHRjZl9jdF9pbml0LFxuIFx0LmNsZWFudXBcdD1cdHRjZl9jdF9jbGVhbnVwLFxuIFx0LnN0YXRzX3VwZGF0ZVx0PVx0dGNmX3N0YXRzX3VwZGF0ZSxcbitcdC5nZXRfZmlsbF9zaXplXHQ9XHR0Y2ZfY3RfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfY3Rfb2ZmbG9hZF9hY3Rfc2V0dXAsXG4gXHQuc2l6ZVx0XHQ9XHRzaXplb2Yoc3RydWN0IHRjZl9jdCksXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0aW5mby5jIGIvbmV0L3NjaGVkL2FjdF9jdGluZm8uY1xuaW5kZXggMTg4NmZmZDJjYTk1Ni4uZmNlZDRiMTA5NGFmOCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfY3RpbmZvLmNcbkBAIC0zNTYsNiArMzU2LDE2IEBAIHN0YXRpYyB2b2lkIHRjZl9jdGluZm9fY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxuIFx0XHRrZnJlZV9yY3UoY3AsIHJjdSk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19jdGluZm8pKSAvKiBUQ0FfQ1RJTkZPX0FDVCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKSAvKiBUQ0FfQ1RJTkZPX1pPTkUgKi9cbitcdFx0LyogVENBX0NUSU5GT19QQVJNU197RFNDUF9NQVNLLERTQ1BfU1RBVEVNQVNLLENQTUFSS19NQVNLfSAqL1xuK1x0XHQrIDMgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSlcbitcdFx0LyogVENBX0NUSU5GT19TVEFUU197RFNDUF9TRVQsRFNDUF9FUlJPUixDUE1BUktfU0VUfSAqL1xuK1x0XHQrIDMgKiBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfY3RpbmZvX29wcyA9IHtcbiBcdC5raW5kXHQ9IFwiY3RpbmZvXCIsXG4gXHQuaWRcdD0gVENBX0lEX0NUSU5GTyxcbkBAIC0zNjQsNiArMzc0LDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdGluZm9fb3BzID0ge1xuIFx0LmR1bXBcdD0gdGNmX2N0aW5mb19kdW1wLFxuIFx0LmluaXRcdD0gdGNmX2N0aW5mb19pbml0LFxuIFx0LmNsZWFudXA9IHRjZl9jdGluZm9fY2xlYW51cCxcbitcdC5nZXRfZmlsbF9zaXplID0gdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplLFxuIFx0LnNpemVcdD0gc2l6ZW9mKHN0cnVjdCB0Y2ZfY3RpbmZvKSxcbiB9O1xuIE1PRFVMRV9BTElBU19ORVRfQUNUKFwiY3RpbmZvXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCAwNjUyMjgwMjZjNThlLi5mZjJiMTZlMzViOWIwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTg3OCw2ICs4NzgsMjggQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gdGNmX2lmZV9kZWNvZGUoc2tiLCBhLCByZXMpO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0c3RydWN0IHRjZl9pZmVfaW5mbyAqaWZlID0gdG9faWZlKGFjdCk7XG4rXHRjb25zdCBzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7XG4rXHRzdHJ1Y3QgdGNmX21ldGFfaW5mbyAqZTtcbitcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19pZmUpKSAvKiBUQ0FfSUZFX1BBUk1TICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoRVRIX0FMRU4pIC8qIFRDQV9JRkVfRE1BQyAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBUQ0FfSUZFX1NNQUMgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZSgyKSAvKiBUQ0FfSUZFX1RZUEUgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZSgwKTsgLyogVENBX0lGRV9NRVRBTFNUICovXG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwID0gcmN1X2RlcmVmZXJlbmNlKGlmZS1cdTAwM2VwYXJhbXMpO1xuK1x0aWYgKHApIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgXHUwMDI2cC1cdTAwM2VtZXRhbGlzdCwgbWV0YWxpc3QpXG4rXHRcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7XG4gXHQua2luZCA9IFwiaWZlXCIsXG4gXHQuaWQgPSBUQ0FfSURfSUZFLFxuQEAgLTg4Niw2ICs5MDgsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHMgPSB7XG4gXHQuZHVtcCA9IHRjZl9pZmVfZHVtcCxcbiBcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxuIFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXG4rXHQuZ2V0X2ZpbGxfc2l6ZSA9IHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5zaXplID1cdHNpemVvZihzdHJ1Y3QgdGNmX2lmZV9pbmZvKSxcbiB9O1xuIE1PRFVMRV9BTElBU19ORVRfQUNUKFwiaWZlXCIpO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuY1xuaW5kZXggZDRkNDdhOTkyMWY0NS4uOTlkN2UzNjUxMGJkMCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jXG5AQCAtNjI2LDYgKzYyNiwyOSBAQCBzdGF0aWMgaW50IHRjZl9wZWRpdF9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHNpemVfdCB0Y2ZfcGVkaXRfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjZl9wZWRpdF9wYXJtcyAqcGFybXM7XG4rXHRzaXplX3Qgc2l6ZTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHBhcm1zID0gcmN1X2RlcmVmZXJlbmNlKHRvX3BlZGl0KGFjdCktXHUwMDNlcGFybXMpO1xuK1x0c2l6ZSA9IG5sYV90b3RhbF9zaXplKHN0cnVjdF9zaXplX3Qoc3RydWN0IHRjX3BlZGl0LCBrZXlzLFxuK1x0XHRcdFx0XHQgICAgcGFybXMtXHUwMDNldGNmcF9ua2V5cykpO1xuK1x0aWYgKHBhcm1zLVx1MDAzZXRjZnBfa2V5c19leCkge1xuK1x0XHQvKiBUQ0FfUEVESVRfS0VZU19FWCwgaG9sZGluZyBvbmUgVENBX1BFRElUX0tFWV9FWCBuZXN0IHdpdGggYVxuK1x0XHQgKiBIVFlQRSBhbmQgYSBDTUQgYXR0cmlidXRlIHBlciBrZXkuXG4rXHRcdCAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKDApXG4rXHRcdFx0KyBwYXJtcy1cdTAwM2V0Y2ZwX25rZXlzICogKG5sYV90b3RhbF9zaXplKDApXG4rXHRcdFx0XHRcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKVxuK1x0XHRcdFx0XHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2YodTE2KSkpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gc2l6ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9wZWRpdF9vcHMgPSB7XG4gXHQua2luZFx0XHQ9XHRcInBlZGl0XCIsXG4gXHQuaWRcdFx0PVx0VENBX0lEX1BFRElULFxuQEAgLTYzNSw2ICs2NTgsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BlZGl0X29wcyA9IHtcbiBcdC5kdW1wXHRcdD1cdHRjZl9wZWRpdF9kdW1wLFxuIFx0LmNsZWFudXBcdD1cdHRjZl9wZWRpdF9jbGVhbnVwLFxuIFx0LmluaXRcdFx0PVx0dGNmX3BlZGl0X2luaXQsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dGNmX3BlZGl0X2dldF9maWxsX3NpemUsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgPVx0dGNmX3BlZGl0X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcGVkaXQpLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmNcbmluZGV4IGNlMDhmNjg0MGVmN2MuLjNmODE0N2YzNzU0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jXG5AQCAtNDkwLDYgKzQ5MCwxNyBAQCBzdGF0aWMgaW50IHRjZl9wb2xpY2Vfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgdGNmX3BvbGljZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbit7XG4rXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y19wb2xpY2UpKSAvKiBUQ0FfUE9MSUNFX1RCRiAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1JBVEU2NCAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplXzY0Yml0KHNpemVvZih1NjQpKSAvKiBUQ0FfUE9MSUNFX1BFQUtSQVRFNjQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RSQVRFNjQgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZV82NGJpdChzaXplb2YodTY0KSkgLyogVENBX1BPTElDRV9QS1RCVVJTVDY0ICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIC8qIFRDQV9QT0xJQ0VfUkVTVUxUICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfUE9MSUNFX0FWUkFURSAqL1xuK31cbitcbiBNT0RVTEVfQVVUSE9SKFwiQWxleGV5IEt1em5ldHNvdlwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJQb2xpY2luZyBhY3Rpb25zXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuQEAgLTUwMyw2ICs1MTQsNyBAQCBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3BvbGljZV9vcHMgPSB7XG4gXHQuZHVtcFx0XHQ9XHR0Y2ZfcG9saWNlX2R1bXAsXG4gXHQuaW5pdFx0XHQ9XHR0Y2ZfcG9saWNlX2luaXQsXG4gXHQuY2xlYW51cFx0PVx0dGNmX3BvbGljZV9jbGVhbnVwLFxuK1x0LmdldF9maWxsX3NpemVcdD1cdHRjZl9wb2xpY2VfZ2V0X2ZpbGxfc2l6ZSxcbiBcdC5vZmZsb2FkX2FjdF9zZXR1cCA9XHR0Y2ZfcG9saWNlX29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfcG9saWNlKSxcbiB9O1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5pbmRleCAyY2ViNGQxNDFiNzEzLi40NDMxOWExNTliNTVkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xuQEAgLTMxNSw2ICszMTUsMTQgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IHRjZl9zYW1wbGVfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfc2FtcGxlKSkgLyogVENBX1NBTVBMRV9QQVJNUyAqL1xuK1x0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAvKiBUQ0FfU0FNUExFX1JBVEUgKi9cbitcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgLyogVENBX1NBTVBMRV9UUlVOQ19TSVpFICovXG4rXHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAvKiBUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVAgKi9cbit9XG4rXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xuIFx0LmtpbmRcdCAgPSBcInNhbXBsZVwiLFxuIFx0LmlkXHQgID0gVENBX0lEX1NBTVBMRSxcbkBAIC0zMjQsNiArMzMyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xuIFx0LmR1bXBcdCAgPSB0Y2Zfc2FtcGxlX2R1bXAsXG4gXHQuaW5pdFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcbiBcdC5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCxcbitcdC5nZXRfZmlsbF9zaXplID0gdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplLFxuIFx0LmdldF9wc2FtcGxlX2dyb3VwID0gdGNmX3NhbXBsZV9nZXRfZ3JvdXAsXG4gXHQub2ZmbG9hZF9hY3Rfc2V0dXAgICAgPSB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdCAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfdHVubmVsX2tleS5jIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbmluZGV4IGIxNDgwNzc2MWQ4MjkuLmZmNDAxYWNlNGYzZGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3R1bm5lbF9rZXkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF90dW5uZWxfa2V5LmNcbkBAIC04MzUsNiArODM1LDg1IEBAIHN0YXRpYyBpbnQgdGNmX3R1bm5lbF9rZXlfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3Rcbit0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4re1xuK1x0Y29uc3QgdTggKnNyYyA9IGlwX3R1bm5lbF9pbmZvX29wdHMoaW5mbyk7XG4rXHRpbnQgbGVuID0gaW5mby1cdTAwM2VvcHRpb25zX2xlbjtcbitcdHNpemVfdCBzaXplID0gMDtcbitcbitcdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbitcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdCA9IChjb25zdCBzdHJ1Y3QgZ2VuZXZlX29wdCAqKXNyYztcbitcbitcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9HRU5FVkVfe0NMQVNTLFRZUEUsREFUQX0gKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZSgyKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoMSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKG9wdC1cdTAwM2VsZW5ndGggKiA0KTtcbitcbitcdFx0bGVuIC09IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgKyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbitcdFx0c3JjICs9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX29wdCkgKyBvcHQtXHUwMDNlbGVuZ3RoICogNDtcbitcdH1cbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuK3tcbitcdHNpemVfdCBzaXplO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZW9wdGlvbnNfbGVuKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRDQV9UVU5ORUxfS0VZX0VOQ19PUFRTIGFuZCB0aGUgcGVyLXByb3RvY29sIG5lc3QgaW5zaWRlIGl0ICovXG4rXHRzaXplID0gbmxhX3RvdGFsX3NpemUoMCkgKyBubGFfdG90YWxfc2l6ZSgwKTtcbitcbitcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbitcdFx0c2l6ZSArPSB0dW5uZWxfa2V5X2dlbmV2ZV9vcHRzX2ZpbGxfc2l6ZShpbmZvKTtcbitcdH0gZWxzZSBpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1ZYTEFOX09QVF9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncykpIHtcbitcdFx0LyogVENBX1RVTk5FTF9LRVlfRU5DX09QVF9WWExBTl9HQlAgKi9cbitcdFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XG4rXHR9IGVsc2UgaWYgKHRlc3RfYml0KElQX1RVTk5FTF9FUlNQQU5fT1BUX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKSkge1xuK1x0XHQvKiBUQ0FfVFVOTkVMX0tFWV9FTkNfT1BUX0VSU1BBTl97VkVSLElOREVYLERJUixIV0lEfSAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSlcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcbitcdH1cbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbitzdGF0aWMgc2l6ZV90IHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphY3QpXG4re1xuK1x0c3RydWN0IHRjZl90dW5uZWxfa2V5ICp0ID0gdG9fdHVubmVsX2tleShhY3QpO1xuK1x0Y29uc3Qgc3RydWN0IHRjZl90dW5uZWxfa2V5X3BhcmFtcyAqcGFyYW1zO1xuK1x0LyogVENBX1RVTk5FTF9LRVlfUEFSTVMgKi9cbitcdHNpemVfdCBzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB0Y190dW5uZWxfa2V5KSk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwYXJhbXMgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VwYXJhbXMpO1xuK1x0aWYgKHBhcmFtcy1cdTAwM2V0Y2Z0X2FjdGlvbiA9PSBUQ0FfVFVOTkVMX0tFWV9BQ1RfU0VUKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9XG4rXHRcdFx0XHUwMDI2cGFyYW1zLVx1MDAzZXRjZnRfZW5jX21ldGFkYXRhLVx1MDAzZXUudHVuX2luZm87XG4rXG4rXHRcdC8qIEluIGR1bXAgb3JkZXI6IFRDQV9UVU5ORUxfS0VZX0VOQ19LRVlfSUQsIHRoZSBJUHY2IGFkZHJlc3NcbitcdFx0ICogcGFpciAobGFyZ2VyIHRoYW4gdGhlIElQdjQgb25lKSwgLi4uX0VOQ19EU1RfUE9SVCxcbitcdFx0ICogLi4uX05PX0NTVU0sIC4uLl9OT19GUkFHLCB0aGUgb3B0aW9ucyBhbmQgLi4uX0VOQ197VE9TLFRUTH0uXG4rXHRcdCAqL1xuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKVxuK1x0XHRcdCsgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKVxuK1x0XHRcdCsgbmxhX3RvdGFsX3NpemUoMClcbitcdFx0XHQrIHR1bm5lbF9rZXlfb3B0c19maWxsX3NpemUoaW5mbylcbitcdFx0XHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpXG4rXHRcdFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfdHVubmVsX2tleV9vcHMgPSB7XG4gXHQua2luZFx0XHQ9XHRcInR1bm5lbF9rZXlcIixcbiBcdC5pZFx0XHQ9XHRUQ0FfSURfVFVOTkVMX0tFWSxcbkBAIC04NDMsNiArOTIyLDcgQEAgc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF90dW5uZWxfa2V5X29wcyA9IHtcbiBcdC5kdW1wXHRcdD1cdHR1bm5lbF9rZXlfZHVtcCxcbiBcdC5pbml0XHRcdD1cdHR1bm5lbF9rZXlfaW5pdCxcbiBcdC5jbGVhbnVwXHQ9XHR0dW5uZWxfa2V5X3JlbGVhc2UsXG4rXHQuZ2V0X2ZpbGxfc2l6ZVx0PVx0dHVubmVsX2tleV9nZXRfZmlsbF9zaXplLFxuIFx0Lm9mZmxvYWRfYWN0X3NldHVwID1cdHRjZl90dW5uZWxfa2V5X29mZmxvYWRfYWN0X3NldHVwLFxuIFx0LnNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCB0Y2ZfdHVubmVsX2tleSksXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIwOjU4OjAzLjY5MjI0ODMyNFoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzE5OTYwMDMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVHJhZmZpYyBDb250cm9sIFBhdGNoIFNlcmllczogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhZGRpbmcgYGdldF9maWxsX3NpemVgIGNhbGxiYWNrcyBmb3IgdmFyaW91cyB0YyBhY3Rpb25zIGluIHRoZSBrZXJuZWwsIHRoaW5ncyBsaWtlIGB0Y2ZfYnBmX2dldF9maWxsX3NpemVgLCBgdGNmX2N0X2dldF9maWxsX3NpemVgLCBhbmQgdGhlIG90aGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGFjY3VyYXRlIHNpemUgZXN0aW1hdGVzIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgZHVtcGVkIHRvIHVzZXJzcGFjZS4gVGhlcmUncyBhbHNvIGEgY2hhbmdlIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBoYW5kbGUgNjQtYml0IHBhZGRpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ291bGQgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3M/XCIgQWZ0ZXIgYWxsLCBjYWxjdWxhdGluZyBzaXplcyBhbmQgdGhlbiBhbGxvY2F0aW5nIGEgYnVmZmVyIGJhc2VkIG9uIHRob3NlIHNpemVzICpjb3VsZCogYmUgcmlza3kuIEEgbWlzY2FsY3VsYXRpb24sIGVpdGhlciBvdmVyZXN0aW1hdGluZyBvciB1bmRlcmVzdGltYXRpbmcsIGNvdWxkIGxlYWQgdG8gcHJvYmxlbXMuIEJ1dCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbkZpcnN0bHksIHRoZXNlIGBnZXRfZmlsbF9zaXplYCBmdW5jdGlvbnMgKnJldHVybiogYSBgc2l6ZV90YC4gVGhleSBkb24ndCAqYWxsb2NhdGUqIG1lbW9yeSwgb3IgY29weSBhbnkgZGF0YSB0aGVtc2VsdmVzLiBUaGV5J3JlIGp1c3Qgc2l6ZSBjYWxjdWxhdGlvbnMuIE5ldGxpbmsncyBgbmxhX3B1dGAgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBtZXNzYWdlcywgYW5kIHRoZXkgY29weSB0aGUgY29ycmVjdCBhbW91bnQgb2YgZGF0YS4gSWYgdGhlIHNpemUgaXMgb3ZlcmVzdGltYXRlZCwgaXQganVzdCBtZWFucyBzb21lIHRhaWxyb29tIGlzIHVudXNlZCBpbiB0aGUgc2tiLCB3aGljaCBpcyBmaW5lLiBUaGUgYHNrYi1cdTAwM2VsZW5gIGlzIHVwZGF0ZWQgYnkgYG5sYV9wdXRgLCBzbyBpdCBjb3JyZWN0bHkgb25seSBzZW5kcyB0aGUgYWN0dWFsbHkgd3JpdHRlbiBieXRlcyB0byB1c2Vyc3BhY2UuIFVuZGVyZXN0aW1hdGluZyB0aGUgc2l6ZSB0cmlnZ2VycyBhbiBgRU1TR1NJWkVgIGVycm9yIG9yIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpZiB0aGUgYG5sYV9wdXRgIGltcGxlbWVudGF0aW9uLCB3aGljaCBkb2VzIHRoZSBjaGVja3MsIGlzIGJ5cGFzc2VkIChidXQgdGhpcyBpcyBhbHJlYWR5IGNoZWNrZWQpLlxuXG5UaGVuLCBsb29raW5nIGF0IHRoZSBgdGNmX2FjdGlvbl9zaGFyZWRfYXR0cnNfc2l6ZWAgY2hhbmdlLCBpdCdzIHNpbXBseSBmaXhpbmcgdGhlIHNpemUgY2FsY3VsYXRpb24gZm9yIGBzdHJ1Y3QgdGNmX3RgIHRvIGFjY291bnQgZm9yIHRoZSBleHRyYSBwYWRkaW5nIGludHJvZHVjZWQgYnkgYG5sYV9wdXRfNjRiaXRgLiBUaGlzIG1ha2VzIHN1cmUgdGhlIGNvcnJlY3QgYnVmZmVyIHNpemUgaXMgYWxsb2NhdGVkLCBub3RoaW5nIG1vcmUuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqb25seSogaW50cm9kdWNlcyBzaXplIGNhbGN1bGF0aW9ucy4gSXQgZG9lc24ndCBhZGQgYW55ICpuZXcqIGBubGFfcHV0YCBjYWxscywgbm9yIGRvZXMgaXQgY3JlYXRlIG1lbW9yeSwgdGhlcmVmb3JlIGl0IGNhbm5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhlIHBhdGNoZXMgZG8gKm5vdCogaW50cm9kdWNlIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIHRoZXkgZG8gbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LlxuXG5Pa2F5LCBsZXQncyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgdGhlbXNlbHZlcyBkb24ndCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgc3RydWN0cy4gSSBjaGVja2VkIGVhY2ggYGdldF9maWxsX3NpemVgIGNhbGxiYWNrOlxuXG4qICAgYHRjZl9icGZfZ2V0X2ZpbGxfc2l6ZWA6IExvb2tzIGdvb2QsIHJlYWRzIGluaXRpYWxpemVkIGRhdGEuXG4qICAgYHRjZl9jdF9nZXRfZmlsbF9zaXplYDogSW5pdGlhbGl6ZWQgZGF0YS5cbiogICBgdGNmX2N0aW5mb19nZXRfZmlsbF9zaXplYDogUmV0dXJucyBjb25zdGFudHMuXG4qICAgYHRjZl9pZmVfZ2V0X2ZpbGxfc2l6ZWA6IFJlYWRzIGluaXRpYWxpemVkIGBwLVx1MDAzZW1ldGFsaXN0YC5cbiogICBgdGNmX3BlZGl0X2dldF9maWxsX3NpemVgOiBSZWFkcyBpbml0aWFsaXplZCBkYXRhLlxuKiAgIGB0Y2ZfcG9saWNlX2dldF9maWxsX3NpemVgOiBSZXR1cm5zIGNvbnN0YW50cy5cbiogICBgdGNmX3NhbXBsZV9nZXRfZmlsbF9zaXplYDogUmV0dXJucyBjb25zdGFudHMuXG4qICAgYHR1bm5lbF9rZXlfZ2V0X2ZpbGxfc2l6ZWA6IFJlYWRzIGluaXRpYWxpemVkIGRhdGEsIGxpa2UgYG9wdGlvbnNfbGVuYCwgYGxlbmd0aGAsIGB0dW5fZmxhZ3NgLlxuXG5Ob3RoaW5nIGhlcmUgc2VlbXMgdG8gaW50cm9kdWNlIHJpc2tzIG9mIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgY29yZSBvZiBteSBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIHNlcmllcyBpcyBzb2xlbHkgYWJvdXQgYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgbmV0bGluayBkdW1wcy4gQSBtaXNjYWxjdWxhdGlvbiB3aWxsIGVpdGhlciBiZSBhIGZ1bmN0aW9uYWwgYnVnIChgRU1TR1NJWkVgIGVycm9yKSwgb3IgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGUgc2l6ZSBpcyB1c2VkIGluY29ycmVjdGx5LiBUaGlzIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIG5ldyByaXNrcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIEknbSBwcmV0dHkgc3VyZSBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEknbSBzYXRpc2ZpZWQuIE5vdywgdGltZSB0byB1c2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc3NywiT3V0cHV0VG9rZW5zIjoyNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjA6NTg6MjAuODkxODUxNzkzWiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVxcdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBgZ2V0X2ZpbGxfc2l6ZWAgY2FsbGJhY2tzIGZvciB2YXJpb3VzIHRyYWZmaWMgY29udHJvbCAodGMpIGFjdGlvbnMgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBheWxvYWQgc2l6ZSByZXF1aXJlZCB3aGVuIGR1bXBpbmcgdGhlc2UgYWN0aW9ucyB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZml4ZXMgYSBzaXplIGNhbGN1bGF0aW9uIGluIGB0Y2ZfYWN0aW9uX3NoYXJlZF9hdHRyc19zaXplYCB0byBhY2NvdW50IGZvciA2NC1iaXQgcGFkZGluZy5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgaW52b2x2ZSBjYWxjdWxhdGluZyBzaXplcyAocmV0dXJuaW5nIGBzaXplX3RgKSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkbyBub3QgY29weSBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBhZGQgY29tcGxleCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSWYgYSBzaXplIGlzIG1pc2NhbGN1bGF0ZWQsIGl0IHdvdWxkIGVpdGhlciByZXN1bHQgaW4gYW4gYEVNU0dTSVpFYCBlcnJvciBkdXJpbmcgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiBvciBwb3RlbnRpYWxseSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyB1bmRlcmVzdGltYXRlZCBhbmQgYm91bmRzIGNoZWNrcyBhcmUgbWlzc2luZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOKS4gTmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBubGFfcHV0YCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggdXBkYXRlIHRoZSBgc2tiLVxcdTAwM2VsZW5gIGFwcHJvcHJpYXRlbHksIHNvIG92ZXJlc3RpbWF0aW5nIHRoZSBzaXplIHNpbXBseSBsZWF2ZXMgdW51c2VkIHRhaWxyb29tIGluIHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBkb2VzIG5vdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowpqqk9[1] Phase: Succeeded StartedAt: 2026-08-16 20:58:32 +0000 UTC FinishedAt: 2026-08-16 20:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 20:58:32 +0000 UTC FinishedAt: 2026-08-16 20:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2] Phase: Running StartedAt: 2026-08-16 20:58:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-16 20:58:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 20:58:32 +0000 UTC FinishedAt: 2026-08-16 20:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 20:58:32 +0000 UTC FinishedAt: 2026-08-16 20:58:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-workflowpqqk9/series-workflowpqqk9-convert-artifact-60423287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 20:58:42 +0000 UTC FinishedAt: 2026-08-16 21:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 20:58:42 +0000 UTC FinishedAt: 2026-08-16 21:15:39 +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:*0c0f2a53-9db3-47c7-ba38-75a77fe3ee0e,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-workflowpqqk9/series-workflowpqqk9-convert-artifact-60423287/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": "bb58064c-d1c8-49ce-b72d-541d607a3bbd", "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-workflowpqqk9/series-workflowpqqk9-build-action-1061129933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 20:58:42 +0000 UTC FinishedAt: 2026-08-16 21:15:29 +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:*0c0f2a53-9db3-47c7-ba38-75a77fe3ee0e,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-workflowpqqk9/series-workflowpqqk9-convert-artifact-60423287/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": "bb58064c-d1c8-49ce-b72d-541d607a3bbd", "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-workflowpqqk9/series-workflowpqqk9-build-action-1061129933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:15:39 +0000 UTC FinishedAt: 2026-08-16 21:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:15:39 +0000 UTC FinishedAt: 2026-08-16 21:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:15:39 +0000 UTC FinishedAt: 2026-08-16 21:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:15:39 +0000 UTC FinishedAt: 2026-08-16 21:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-workflowpqqk9/series-workflowpqqk9-convert-artifact-2573113510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:15:50 +0000 UTC FinishedAt: 2026-08-16 21:17:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:15:50 +0000 UTC FinishedAt: 2026-08-16 21:17:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bb58064c-d1c8-49ce-b72d-541d607a3bbd,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-workflowpqqk9/series-workflowpqqk9-build-action-1061129933/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-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:17:39 +0000 UTC FinishedAt: 2026-08-16 21:17:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:17:39 +0000 UTC FinishedAt: 2026-08-16 21:17:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:17:39 +0000 UTC FinishedAt: 2026-08-16 21:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:17:39 +0000 UTC FinishedAt: 2026-08-16 21:34:45 +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:*0c0f2a53-9db3-47c7-ba38-75a77fe3ee0e,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-workflowpqqk9/series-workflowpqqk9-convert-artifact-2573113510/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": "9ff512a7-b08c-4ddc-afce-4f46484145f6", "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-workflowpqqk9/series-workflowpqqk9-build-action-3391993450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:17:39 +0000 UTC FinishedAt: 2026-08-16 21:34:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0c0f2a53-9db3-47c7-ba38-75a77fe3ee0e,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-workflowpqqk9/series-workflowpqqk9-convert-artifact-2573113510/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": "9ff512a7-b08c-4ddc-afce-4f46484145f6", "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-workflowpqqk9/series-workflowpqqk9-build-action-3391993450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:34:45 +0000 UTC FinishedAt: 2026-08-16 21:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:34:45 +0000 UTC FinishedAt: 2026-08-16 21:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:34:45 +0000 UTC FinishedAt: 2026-08-16 21:37:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:34:45 +0000 UTC FinishedAt: 2026-08-16 21:37:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ff512a7-b08c-4ddc-afce-4f46484145f6,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-workflowpqqk9/series-workflowpqqk9-build-action-3391993450/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-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-08-16 21:37:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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: Running StartedAt: 2026-08-16 21:37:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"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:*bb58064c-d1c8-49ce-b72d-541d607a3bbd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ff512a7-b08c-4ddc-afce-4f46484145f6,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-workflowpqqk9/series-workflowpqqk9-build-action-1061129933/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-workflowpqqk9/series-workflowpqqk9-build-action-3391993450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:37:21 +0000 UTC FinishedAt: 2026-08-16 21:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:37:21 +0000 UTC FinishedAt: 2026-08-16 21:37:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"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-workflowpqqk9/series-workflowpqqk9-convert-artifact-392935147/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:37:21 +0000 UTC FinishedAt: 2026-08-16 21:37:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:37:21 +0000 UTC FinishedAt: 2026-08-16 21:37:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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-08-16 21:37:21 +0000 UTC FinishedAt: 2026-08-16 21:37:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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: Running StartedAt: 2026-08-16 21:37:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqqk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_action_init","tcf_action_init_1","tcf_action_dump","tcf_exts_validate_ex","tcf_exts_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ACT","NET_ACT_BPF","NET_ACT_CT","NET_ACT_CTINFO","NET_ACT_IFE","NET_ACT_PEDIT","NET_ACT_POLICE","NET_ACT_SAMPLE","NET_ACT_TUNNEL_KEY","NF_CONNTRACK","NF_CONNTRACK_MARK","NF_CONNTRACK_LABELS","NF_CONNTRACK_ZONES","NF_FLOW_TABLE"],"series_id":"e72071c6-ec99-43f5-a9b9-3d196236fed4","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: Running StartedAt: 2026-08-16 21:37:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bb58064c-d1c8-49ce-b72d-541d607a3bbd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ff512a7-b08c-4ddc-afce-4f46484145f6,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-workflowpqqk9/series-workflowpqqk9-build-action-1061129933/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-workflowpqqk9/series-workflowpqqk9-build-action-3391993450/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-workflowpqqk9/series-workflowpqqk9-convert-artifact-392935147/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil