Name: series-workflowdnmrw Phase: Succeeded StartedAt: 2026-07-08 00:30:49 +0000 UTC FinishedAt: 2026-07-08 05:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[0] Phase: Succeeded StartedAt: 2026-07-08 00:30:49 +0000 UTC FinishedAt: 2026-07-08 00:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 00:30:49 +0000 UTC FinishedAt: 2026-07-08 00:45:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PROC_PAGE_MONITOR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PROC_PAGE_MONITOR" ], "series_id": "b95d30f9-8023-455c-8666-e5fbc36bd87c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "pagemap_page_category", "do_pagemap_scan", "pagemap_scan_pmd_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9wYWdlX2NhdGVnb3J5JiMzNDssCiAgICAmIzM0O2RvX3BhZ2VtYXBfc2NhbiYjMzQ7LAogICAgJiMzNDtwYWdlbWFwX3NjYW5fcG1kX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNmUzMzg1YjdjZDZhNTY0MTc5MDI2YjdlY2E3MGFmMGEzYTkzZTljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwMDo0MzowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi5kNDVjNzI5YWI2YmIzMyAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy90YXNrX21tdS5jXG5AQCAtMjQzMiw4ICYjNDM7MjQzMiwxOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcztcbiBcbi1cdGlmIChwdGVfbm9uZShwdGUpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAocHRlX25vbmUocHRlKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIHVucG9wdWxhdGVkIHB0ZSBjYXJyaWVzIG5vIHVmZmQtd3AgbWFya2VyLCBpLmUuIGl0IGlzIG5vdFxuJiM0MztcdFx0ICogd3JpdGUtcHJvdGVjdGVkLCB0aGUgc2FtZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlIHByZXNlbnRcbiYjNDM7XHRcdCAqIGFuZCBzd2FwIGNhc2VzIGJlbG93IHJlcG9ydCBQQUdFX0lTX1dSSVRURU4uIFJlcG9ydCBpdCBoZXJlXG4mIzQzO1x0XHQgKiB0b28gc28gdGhpcyBnZW5lcmljIHBhdGggYWdyZWVzIHdpdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0XG4mIzQzO1x0XHQgKiBwYXRoIGluIHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkoKSwgd2hpY2ggcmVwb3J0cyBwdGVfbm9uZSBhc1xuJiM0MztcdFx0ICogd3JpdHRlbiBhbmQsIHVuZGVyIFBNX1NDQU5fV1BfTUFUQ0hJTkcsIGFybXMgYSBtYXJrZXIuIFRoZVxuJiM0MztcdFx0ICogZmFzdCBwYXRoIGFwcGxpZXMgbm8gVk1BIHRlc3QsIHNvIG5laXRoZXIgZG9lcyB0aGlzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gUEFHRV9JU19XUklUVEVOO1xuJiM0MztcdH1cbiBcbiBcdGlmIChwdGVfcHJlc2VudChwdGUpKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggNzYyMzA2MTc3YWQ4MTMuLjU1MGQxZjJjMDU5YjM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDUxLDYgJiM0MzsxMDUxLDU3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2ltcGxlKHZvaWQpXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0KGkgPT0gVEVTVF9JVEVSQVRJT05TLCBcJiMzNDtUZXN0ICVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJiMzOTtkIGlzIGdlbnVpbmUgcHRlX25vbmVcbiYjNDM7ICogd2l0aCBubyB1ZmZkLXdwIG1hcmtlci4gU3VjaCBhIHB0ZSBtdXN0IHJlYWQgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGljaFxuJiM0MzsgKiBQQUdFTUFQX1NDQU4gcGF0aCBzZXJ2ZXMgdGhlIHJlcXVlc3Q6IGJvdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0IHBhdGggYW5kXG4mIzQzOyAqIHRoZSBnZW5lcmljIHBhdGggKHJlYWNoZWQgZS5nLiB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzaykgbXVzdCByZXBvcnQgZXZlcnlcbiYjNDM7ICogcGFnZSB3cml0dGVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbnBhZ2VzID0gMTYsIGk7XG4mIzQzO1x0bG9uZyBtZW1fc2l6ZSA9IG5wYWdlcyAqIHBhZ2Vfc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9yZWdpb24gcmVnaW9uc1sxNl07XG4mIzQzO1x0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbiYjNDM7XHRjaGFyICptZW07XG4mIzQzO1xuJiM0MztcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbiYjNDM7XHRpZiAobWVtID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgbW1hcCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XG4mIzQzO1x0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogUG9wdWxhdGUsIHRoZW4gZHJvcDogdGhlIHB0ZXMgYmVjb21lIHB0ZV9ub25lIHdpdGhvdXQgYSBtYXJrZXIuICovXG4mIzQzO1x0bWVtc2V0KG1lbSwgMSwgbWVtX3NpemUpO1xuJiM0MztcdGlmIChtYWR2aXNlKG1lbSwgbWVtX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1xuJiM0MztcdC8qIEZhc3QgcGF0aDogY2F0ZWdvcnlfbWFzayA9PSByZXR1cm5fbWFzayA9PSBQQUdFX0lTX1dSSVRURU4uICovXG4mIzQzO1x0cmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsXG4mIzQzO1x0XHRcdCAgICBQQUdFX0lTX1dSSVRURU4sIDAsIDAsIFBBR0VfSVNfV1JJVFRFTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyBmYXN0IHNjYW4gZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGZhc3QgJiM0Mzs9IExFTihyZWdpb25zW2ldKTtcbiYjNDM7XG4mIzQzO1x0LyogR2VuZXJpYyBwYXRoOiBzYW1lIHF1ZXJ5IGV4cHJlc3NlZCB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzay4gKi9cbiYjNDM7XHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcbiYjNDM7XHRcdFx0ICAgIDAsIFBBR0VfSVNfV1JJVFRFTiwgMCwgUEFHRV9JU19XUklUVEVOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIGdlbmVyaWMgc2NhbiBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2xvdyAmIzQzOz0gTEVOKHJlZ2lvbnNbaV0pO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGZhc3QgPT0gbnBhZ2VzIFx1MDAyNlx1MDAyNiBzbG93ID09IG5wYWdlcyxcbiYjNDM7XHRcdFx0IFwmIzM0OyVzIHVucG9wdWxhdGVkIHB0ZXMgcmVwb3J0ZWQgd3JpdHRlbiBieSBib3RoIHBhdGhzICglbGQsICVsZCBvZiAlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBfX2Z1bmNfXywgZmFzdCwgc2xvdywgbnBhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0d3BfZnJlZShtZW0sIG1lbV9zaXplKTtcbiYjNDM7XHRtdW5tYXAobWVtLCBtZW1fc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XG5AQCAtMTU1OSw3ICYjNDM7MTYxMCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdCg0KSlcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7SHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxcblwmIzM0Oyk7XG4gXG4tXHRrc2Z0X3NldF9wbGFuKDExNyk7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbigxMTgpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuQEAgLTE3MzcsNiAmIzQzOzE3ODgsOSBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0LyogMTcuIFpFUk9QRk4gdGVzdHMgKi9cbiBcdHplcm9wZm5fdGVzdHMoKTtcbiBcbiYjNDM7XHQvKiAxOC4gVW5wb3B1bGF0ZWQgcHRlIHNjYW4tcGF0aCBjb25zaXN0ZW5jeSAqL1xuJiM0MztcdHVucG9wdWxhdGVkX3NjYW5fdGVzdCgpO1xuJiM0MztcbiBcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuIFx0a3NmdF9maW5pc2hlZCgpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VtYXBfcGFnZV9jYXRlZ29yeSYjMzQ7LAogICAgJiMzNDtkb19wYWdlbWFwX3NjYW4mIzM0OywKICAgICYjMzQ7cGFnZW1hcF9zY2FuX3BtZF9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIGJlaGF2aW9yIGZvciB1bnBvcHVsYXRlZCBQVEVzIChwdGVfbm9uZSkgdG8gY29ycmVjdGx5IHJlcG9ydCB0aGVtIGFzIFBBR0VfSVNfV1JJVFRFTi4gVGhpcyBmaXhlcyBhbiBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIGZhc3QgYW5kIGdlbmVyaWMgc2NhbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcm9jZnMgY29kZSwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNmUzMzg1YjdjZDZhNTY0MTc5MDI2YjdlY2E3MGFmMGEzYTkzZTljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAwMDo0MzowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCBkMzI0MDhmN2NkNWVkMi4uZDQ1YzcyOWFiNmJiMzMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTI0MzIsOCAmIzQzOzI0MzIsMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wYWdlX2NhdGVnb3J5KHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCwKIHsKIAl1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXM7CiAKLQlpZiAocHRlX25vbmUocHRlKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmIChwdGVfbm9uZShwdGUpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQW4gdW5wb3B1bGF0ZWQgcHRlIGNhcnJpZXMgbm8gdWZmZC13cCBtYXJrZXIsIGkuZS4gaXQgaXMgbm90CiYjNDM7CQkgKiB3cml0ZS1wcm90ZWN0ZWQsIHRoZSBzYW1lIGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGUgcHJlc2VudAomIzQzOwkJICogYW5kIHN3YXAgY2FzZXMgYmVsb3cgcmVwb3J0IFBBR0VfSVNfV1JJVFRFTi4gUmVwb3J0IGl0IGhlcmUKJiM0MzsJCSAqIHRvbyBzbyB0aGlzIGdlbmVyaWMgcGF0aCBhZ3JlZXMgd2l0aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3QKJiM0MzsJCSAqIHBhdGggaW4gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSgpLCB3aGljaCByZXBvcnRzIHB0ZV9ub25lIGFzCiYjNDM7CQkgKiB3cml0dGVuIGFuZCwgdW5kZXIgUE1fU0NBTl9XUF9NQVRDSElORywgYXJtcyBhIG1hcmtlci4gVGhlCiYjNDM7CQkgKiBmYXN0IHBhdGggYXBwbGllcyBubyBWTUEgdGVzdCwgc28gbmVpdGhlciBkb2VzIHRoaXMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBQQUdFX0lTX1dSSVRURU47CiYjNDM7CX0KIAogCWlmIChwdGVfcHJlc2VudChwdGUpKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCmluZGV4IDc2MjMwNjE3N2FkODEzLi41NTBkMWYyYzA1OWIzNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMTA1MSw2ICYjNDM7MTA1MSw1NyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKQogCWtzZnRfdGVzdF9yZXN1bHQoaSA9PSBURVNUX0lURVJBVElPTlMsICYjMzQ7VGVzdCAlc1xuJiMzNDssIF9fZnVuY19fKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSByYW5nZSB0aGF0IHdhcyBwb3B1bGF0ZWQgYW5kIHRoZW4gTUFEVl9ET05UTkVFRCYjMzk7ZCBpcyBnZW51aW5lIHB0ZV9ub25lCiYjNDM7ICogd2l0aCBubyB1ZmZkLXdwIG1hcmtlci4gU3VjaCBhIHB0ZSBtdXN0IHJlYWQgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGljaAomIzQzOyAqIFBBR0VNQVBfU0NBTiBwYXRoIHNlcnZlcyB0aGUgcmVxdWVzdDogYm90aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3QgcGF0aCBhbmQKJiM0MzsgKiB0aGUgZ2VuZXJpYyBwYXRoIChyZWFjaGVkIGUuZy4gdmlhIGNhdGVnb3J5X2FueW9mX21hc2spIG11c3QgcmVwb3J0IGV2ZXJ5CiYjNDM7ICogcGFnZSB3cml0dGVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IG5wYWdlcyA9IDE2LCBpOwomIzQzOwlsb25nIG1lbV9zaXplID0gbnBhZ2VzICogcGFnZV9zaXplOwomIzQzOwlzdHJ1Y3QgcGFnZV9yZWdpb24gcmVnaW9uc1sxNl07CiYjNDM7CWxvbmcgZmFzdCA9IDAsIHNsb3cgPSAwLCByZXQ7CiYjNDM7CWNoYXIgKm1lbTsKJiM0MzsKJiM0MzsJbWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlpZiAobWVtID09IE1BUF9GQUlMRUQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBtbWFwIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsKJiM0MzsJd3BfaW5pdChtZW0sIG1lbV9zaXplKTsKJiM0MzsKJiM0MzsJLyogUG9wdWxhdGUsIHRoZW4gZHJvcDogdGhlIHB0ZXMgYmVjb21lIHB0ZV9ub25lIHdpdGhvdXQgYSBtYXJrZXIuICovCiYjNDM7CW1lbXNldChtZW0sIDEsIG1lbV9zaXplKTsKJiM0MzsJaWYgKG1hZHZpc2UobWVtLCBtZW1fc2l6ZSwgTUFEVl9ET05UTkVFRCkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBNQURWX0RPTlRORUVEIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsKJiM0MzsJLyogRmFzdCBwYXRoOiBjYXRlZ29yeV9tYXNrID09IHJldHVybl9tYXNrID09IFBBR0VfSVNfV1JJVFRFTi4gKi8KJiM0MzsJcmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsCiYjNDM7CQkJICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBmYXN0IHNjYW4gZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmV0OyBpJiM0MzsmIzQzOykKJiM0MzsJCWZhc3QgJiM0Mzs9IExFTihyZWdpb25zW2ldKTsKJiM0MzsKJiM0MzsJLyogR2VuZXJpYyBwYXRoOiBzYW1lIHF1ZXJ5IGV4cHJlc3NlZCB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzay4gKi8KJiM0MzsJcmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsCiYjNDM7CQkJICAgIDAsIFBBR0VfSVNfV1JJVFRFTiwgMCwgUEFHRV9JU19XUklUVEVOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBnZW5lcmljIHNjYW4gZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmV0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXNsb3cgJiM0Mzs9IExFTihyZWdpb25zW2ldKTsKJiM0MzsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdChmYXN0ID09IG5wYWdlcyAmYW1wOyZhbXA7IHNsb3cgPT0gbnBhZ2VzLAomIzQzOwkJCSAmIzM0OyVzIHVucG9wdWxhdGVkIHB0ZXMgcmVwb3J0ZWQgd3JpdHRlbiBieSBib3RoIHBhdGhzICglbGQsICVsZCBvZiAlZClcbiYjMzQ7LAomIzQzOwkJCSBfX2Z1bmNfXywgZmFzdCwgc2xvdywgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJd3BfZnJlZShtZW0sIG1lbV9zaXplKTsKJiM0MzsJbXVubWFwKG1lbSwgbWVtX3NpemUpOwomIzQzO30KJiM0MzsKIGludCBzYW5pdHlfdGVzdHModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplOwpAQCAtMTU1OSw3ICYjNDM7MTYxMCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxuJiMzNDspOwogCi0Ja3NmdF9zZXRfcGxhbigxMTcpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDExOCk7CiAKIAlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwogCWhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwpAQCAtMTczNyw2ICYjNDM7MTc4OCw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJLyogMTcuIFpFUk9QRk4gdGVzdHMgKi8KIAl6ZXJvcGZuX3Rlc3RzKCk7CiAKJiM0MzsJLyogMTguIFVucG9wdWxhdGVkIHB0ZSBzY2FuLXBhdGggY29uc2lzdGVuY3kgKi8KJiM0MzsJdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KCk7CiYjNDM7CiAJY2xvc2UocGFnZW1hcF9mZCk7CiAJa3NmdF9maW5pc2hlZCgpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBNTVUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIHR3ZWFrIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiB3aGVuIHRoZSBQYWdlIFRhYmxlIEVudHJ5IGlzIGNvbnNpZGVyZWQgJiMzNDtub25lJiMzNDsgKGkuZS4sIGBwdGVfbm9uZShwdGUpYCBpcyB0cnVlKSwgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGBQQUdFX0lTX1dSSVRURU5gIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGRlZmF1bHQgb2YgYDBgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBmZWVscyBsaWtlIGEgdmVyeSBzcGVjaWZpYyBlZGdlIGNhc2UuIFRoZW4gdGhlcmUgaXMgYW4gYWNjb21wYW55aW5nIHRlc3QgYWRkZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFNlZW1zIGxpa2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgYW5kIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCwgd2hpY2ggc3VnZ2VzdHMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcGFnZSB0YWJsZSB0cmF2ZXJzYWwgYW5kIHJlcG9ydGluZy4gU28sIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggaXMgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsIHVzZXMgb2YgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAgdG8gc2VlICp3aHkqIHRoaXMgcGFydGljdWxhciByZXR1cm4gdmFsdWUgaGFzIGJlZW4gYWx0ZXJlZC4gSSYjMzk7bGwgYWxzbyBjaGVjayBhbGwgdXNlcyBvZiBgUEFHRV9JU19XUklUVEVOYCwgdG8gZ2FpbiBpbnNpZ2h0IGludG8gd2hhdCB0aGlzIHZhbHVlIHJlcHJlc2VudHMuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IGltcG9ydGFudCwgc3VidGxlIGNoYW5nZSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFuZCByZXBvcnRzIG9uIGVtcHR5IFBURXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9wYWdlX2NhdGVnb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNDIxPXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MjgtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzAtXHRcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODk5LVx0XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfFxuZnMvcHJvYy90YXNrX21tdS5jOjI5MDA6XHRcdFx0XHRcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTAxLVx0XHR1bnNpZ25lZCBsb25nIG5leHQgPSBhZGRyICYjNDM7IFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZnMvcHJvYy90YXNrX21tdS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgY3VycmVudCBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgYXNwZWN0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IHNlZW1zIHRvIGJlIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCBhcm91bmQgbGluZSAyNDI5LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHRvIHVucmF2ZWwgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcuIFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aGUgdGFzayYjMzk7cyBtZW1vcnkgbWFwPyBJcyBpdCByZWxhdGVkIHRvIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6YXRpb24/IE9yIG1heWJlIHRyYWNraW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucz8gR290dGEga2VlcCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0IGluIG1pbmQgaGVyZSBhcyBJIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDIwOlx0XG4yNDIxOlx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlIHtcbjI0MjI6XHRcdHN0cnVjdCBwbV9zY2FuX2FyZyBhcmc7XG4yNDIzOlx0XHR1bnNpZ25lZCBsb25nIG1hc2tzX29mX2ludGVyZXN0LCBjdXJfdm1hX2NhdGVnb3J5O1xuMjQyNDpcdFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWNfYnVmO1xuMjQyNTpcdFx0dW5zaWduZWQgbG9uZyB2ZWNfYnVmX2xlbiwgdmVjX2J1Zl9pbmRleCwgZm91bmRfcGFnZXM7XG4yNDI2Olx0XHRzdHJ1Y3QgcGFnZV9yZWdpb24gX191c2VyICp2ZWNfb3V0O1xuMjQyNzpcdH07XG4yNDI4Olx0XG4yNDI5Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wYWdlX2NhdGVnb3J5KHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbjI0MzA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yNDMxOlx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuMjQzMjpcdHtcbjI0MzM6XHRcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcztcbjI0MzQ6XHRcbjI0MzU6XHRcdGlmIChwdGVfbm9uZShwdGUpKSB7XG4yNDM2Olx0XHRcdC8qXG4yNDM3Olx0XHRcdCAqIEFuIHVucG9wdWxhdGVkIHB0ZSBjYXJyaWVzIG5vIHVmZmQtd3AgbWFya2VyLCBpLmUuIGl0IGlzIG5vdFxuMjQzODpcdFx0XHQgKiB3cml0ZS1wcm90ZWN0ZWQsIHRoZSBzYW1lIGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGUgcHJlc2VudFxuMjQzOTpcdFx0XHQgKiBhbmQgc3dhcCBjYXNlcyBiZWxvdyByZXBvcnQgUEFHRV9JU19XUklUVEVOLiBSZXBvcnQgaXQgaGVyZVxuMjQ0MDpcdFx0XHQgKiB0b28gc28gdGhpcyBnZW5lcmljIHBhdGggYWdyZWVzIHdpdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0XG4yNDQxOlx0XHRcdCAqIHBhdGggaW4gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSgpLCB3aGljaCByZXBvcnRzIHB0ZV9ub25lIGFzXG4yNDQyOlx0XHRcdCAqIHdyaXR0ZW4gYW5kLCB1bmRlciBQTV9TQ0FOX1dQX01BVENISU5HLCBhcm1zIGEgbWFya2VyLiBUaGVcbjI0NDM6XHRcdFx0ICogZmFzdCBwYXRoIGFwcGxpZXMgbm8gVk1BIHRlc3QsIHNvIG5laXRoZXIgZG9lcyB0aGlzLlxuMjQ0NDpcdFx0XHQgKi9cbjI0NDU6XHRcdFx0cmV0dXJuIFBBR0VfSVNfV1JJVFRFTjtcbjI0NDY6XHRcdH1cbjI0NDc6XHRcbjI0NDg6XHRcdGlmIChwdGVfcHJlc2VudChwdGUpKSB7XG4yNDQ5Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMjQ1MDpcdFxuMjQ1MTpcdFx0XHRjYXRlZ29yaWVzID0gUEFHRV9JU19QUkVTRU5UO1xuMjQ1MjpcdFxuMjQ1MzpcdFx0XHRpZiAoIXB0ZV91ZmZkX3dwKHB0ZSkpXG4yNDU0Olx0XHRcdFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1dSSVRURU47XG4yNDU1Olx0XG4yNDU2Olx0XHRcdGlmIChwLVx1MDAzZW1hc2tzX29mX2ludGVyZXN0IFx1MDAyNiBQQUdFX0lTX0ZJTEUpIHtcbjI0NTc6XHRcdFx0XHRwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGUpO1xuMjQ1ODpcdFx0XHRcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiAhUGFnZUFub24ocGFnZSkpXG4yNDU5Olx0XHRcdFx0XHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfRklMRTtcbjI0NjA6XHRcdFx0fVxuMjQ2MTpcdFxuMjQ2MjpcdFx0XHRpZiAoaXNfemVyb19wZm4ocHRlX3BmbihwdGUpKSlcbjI0NjM6XHRcdFx0XHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfUEZOWkVSTztcbjI0NjQ6XHRcdFx0aWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZSkpXG4yNDY1Olx0XHRcdFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1NPRlRfRElSVFk7XG4yNDY2Olx0XHR9IGVsc2Uge1xuMjQ2NzpcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuMjQ2ODpcdFxuMjQ2OTpcdFx0XHRjYXRlZ29yaWVzID0gUEFHRV9JU19TV0FQUEVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQUdFTUFQX1NDQU4gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIHNwZWNpZmljYWxseSBpdHMgdXNlIHdpdGhpbiBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgdGhlIG1lbnRhbCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2MvcGlkL3BhZ2VtYXBgIGludGVyZmFjZS4gQnV0IGl0JiMzOTtzIG5vdCB0aGUgZmlsZSBpdHNlbGYsIGl0IGlzIGFuIGBpb2N0bGAgb24gYSBmaWxlIGRlc2NyaXB0b3IsIGBwYWdlbWFwX2ZkYCwgd2hpY2ggaXMgKmRlcml2ZWQqIGZyb20gb3BlbmluZyB0aGUgZmlsZSEgU28sIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNjYW5uaW5nIHRoZSBwYWdlIG1hcCBkYXRhIHRocm91Z2ggYSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuCgpPa2F5LCB0aW1lIHRvIHplcm8gaW46IHdoZXJlIGlzIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IGhhbmRsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYHBhZ2VtYXBgIHN1YnN5c3RlbS4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFTUFQX1NDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMyNTE9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXHRzd2l0Y2ggKGNtZCkge1xuZnMvcHJvYy90YXNrX21tdS5jOjMyNTc6XHRjYXNlIFBBR0VNQVBfU0NBTjpcbmZzL3Byb2MvdGFza19tbXUuYy0zMjU4LVx0XHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgUEFHRU1BUF9TQ0FOYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgZG9fcGFnZW1hcF9jbWRgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBgUEFHRU1BUF9TQ0FOYCwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QuIFRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwsIG1ha2luZyBpdCBhIGNyaXRpY2FsIHBvaW50IHRvIGF1ZGl0LiBDb25zaWRlcmluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0IHRyYWNraW5nIGFuZCByZWxhdGVkIGZlYXR1cmVzIHVzZSB0aGlzLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYW4gaW1wb3J0YW50IGFyZWEgZm9yIG1lIHRvIGNoZWNrLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBjb2RlIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBiYXNlbGluZS4gQnV0LCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZCBmb3IgYFBBR0VNQVBfU0NBTmAgZnVuY3Rpb25hbGl0eSB0byBiZSBwcmVzZW50PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYXJlIG1ldCB0byBlbnN1cmUgdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBhbmQgd2l0aG91dCB1bmZvcmVzZWVuIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRU1BUF9TQ0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMyNTE9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXHRzd2l0Y2ggKGNtZCkge1xuZnMvcHJvYy90YXNrX21tdS5jOjMyNTc6XHRjYXNlIFBBR0VNQVBfU0NBTjpcbmZzL3Byb2MvdGFza19tbXUuYy0zMjU4LVx0XHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGBkb19wYWdlbWFwX3NjYW5gIGZ1bmN0aW9uLCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkLCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGRlcGVuZGVudCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gZmxhZyBvciBzeXN0ZW0gZGVmaW5pdGlvbi4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgaXQgd2lsbCBzZXZlcmVseSBpbXBhY3QgaG93IEkgaW50ZXJwcmV0IGl0cyBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSwgYW5kIGlmIEkgY2FuIGV2ZW4gcmVseSBvbiBpdHMgcHJlc2VuY2UgaW4gYWxsIHNjZW5hcmlvcy4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBzaW1pbGFyIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhvc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19wYWdlbWFwX3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMxNTE9c3RhdGljIGxvbmcgcGFnZW1hcF9zY2FuX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnApXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzctXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE3ODpzdGF0aWMgbG9uZyBkb19wYWdlbWFwX3NjYW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdWFyZylcbmZzL3Byb2MvdGFza19tbXUuYy0zMTc5LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzI1MT1zdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1Ny1cdGNhc2UgUEFHRU1BUF9TQ0FOOlxuZnMvcHJvYy90YXNrX21tdS5jOjMyNTg6XHRcdHJldHVybiBkb19wYWdlbWFwX3NjYW4obW0sIGFyZyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRvX3BhZ2VtYXBfc2NhbmAgZnVuY3Rpb24gYmV0dGVyLCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9jIGZpbGVzeXN0ZW0mIzM5O3MgdGFzayBtZW1vcnkgbWFwcy4gVGltZSB0byB6ZXJvIGluIG9uIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXM/IFRob3NlIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIGBkb19wYWdlbWFwX3NjYW5gLiBJIHdhbnQgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5ICplbmFibGUqIG9yICpkaXNhYmxlKiB0aGlzIGNvZGUgcGF0aC4gSSBleHBlY3QgdGhlcmUgbWlnaHQgYmUgY29tcGlsZS10aW1lIGNob2ljZXMgcmVsYXRlZCB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IHBhZ2UgdGFibGUgYXJjaGl0ZWN0dXJlcywgTlVNQSBzdXBwb3J0LCBvciBldmVuIHNwZWNpZmljIHNlY3VyaXR5IGhhcmRlbmluZyBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZW4gYGRvX3BhZ2VtYXBfc2NhbmAgaXMgKmF2YWlsYWJsZSogYW5kIHRoZXJlZm9yZSB3aGVuIHRoZSBwcm9jIGZpbGVzeXN0ZW0gd2lsbCBleHBvc2UgdGhpcyBpbmZvcm1hdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uc3RyYWludHMuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IHJlcG9ydGluZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNzA6XHRcbjMxNzE6XHRcdHAtXHUwMDNldmVjX2J1Zl9pbmRleCA9IDA7XG4zMTcyOlx0XHRwLVx1MDAzZXZlY19idWZfbGVuID0gbWluX3Qoc2l6ZV90LCBwLVx1MDAzZXZlY19idWZfbGVuLCBwLVx1MDAzZWFyZy52ZWNfbGVuKTtcbjMxNzM6XHRcdHAtXHUwMDNldmVjX2J1Zi1cdTAwM2VzdGFydCA9IHAtXHUwMDNldmVjX2J1Zi1cdTAwM2VlbmQgPSAwO1xuMzE3NDpcdFxuMzE3NTpcdFx0cmV0dXJuIG47XG4zMTc2Olx0fVxuMzE3NzpcdFxuMzE3ODpcdHN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfc2NhbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB1YXJnKVxuMzE3OTpcdHtcbjMxODA6XHRcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSBwID0gezB9O1xuMzE4MTpcdFx0dW5zaWduZWQgbG9uZyB3YWxrX3N0YXJ0O1xuMzE4MjpcdFx0c2l6ZV90IG5fcmFuZ2VzX291dCA9IDA7XG4zMTgzOlx0XHRpbnQgcmV0O1xuMzE4NDpcdFxuMzE4NTpcdFx0cmV0ID0gcGFnZW1hcF9zY2FuX2dldF9hcmdzKFx1MDAyNnAuYXJnLCB1YXJnKTtcbjMxODY6XHRcdGlmIChyZXQpXG4zMTg3Olx0XHRcdHJldHVybiByZXQ7XG4zMTg4Olx0XG4zMTg5Olx0XHRwLm1hc2tzX29mX2ludGVyZXN0ID0gcC5hcmcuY2F0ZWdvcnlfbWFzayB8IHAuYXJnLmNhdGVnb3J5X2FueW9mX21hc2sgfFxuMzE5MDpcdFx0XHRcdCAgICAgIHAuYXJnLnJldHVybl9tYXNrO1xuMzE5MTpcdFx0cmV0ID0gcGFnZW1hcF9zY2FuX2luaXRfYm91bmNlX2J1ZmZlcihcdTAwMjZwKTtcbjMxOTI6XHRcdGlmIChyZXQpXG4zMTkzOlx0XHRcdHJldHVybiByZXQ7XG4zMTk0Olx0XG4zMTk1Olx0XHRmb3IgKHdhbGtfc3RhcnQgPSBwLmFyZy5zdGFydDsgd2Fsa19zdGFydCBcdTAwM2MgcC5hcmcuZW5kO1xuMzE5NjpcdFx0XHRcdHdhbGtfc3RhcnQgPSBwLmFyZy53YWxrX2VuZCkge1xuMzE5NzpcdFx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMzE5ODpcdFx0XHRsb25nIG5fb3V0O1xuMzE5OTpcdFxuMzIwMDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjMyMDE6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4zMjAyOlx0XHRcdFx0YnJlYWs7XG4zMjAzOlx0XHRcdH1cbjMyMDQ6XHRcbjMyMDU6XHRcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pO1xuMzIwNjpcdFx0XHRpZiAocmV0KVxuMzIwNzpcdFx0XHRcdGJyZWFrO1xuMzIwODpcdFxuMzIwOTpcdFx0XHQvKiBQcm90ZWN0aW9uIGNoYW5nZSBmb3IgdGhlIHJhbmdlIGlzIGdvaW5nIHRvIGhhcHBlbi4gKi9cbjMyMTA6XHRcdFx0aWYgKHAuYXJnLmZsYWdzIFx1MDAyNiBQTV9TQ0FOX1dQX01BVENISU5HKSB7XG4zMjExOlx0XHRcdFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfUFJPVEVDVElPTl9WTUEsIDAsXG4zMjEyOlx0XHRcdFx0XHRcdFx0bW0sIHdhbGtfc3RhcnQsIHAuYXJnLmVuZCk7XG4zMjEzOlx0XHRcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMzIxNDpcdFx0XHR9XG4zMjE1Olx0XG4zMjE2Olx0XHRcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kLFxuMzIxNzpcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGFnZW1hcF9zY2FuX29wcywgXHUwMDI2cCk7XG4zMjE4Olx0XG4zMjE5Olx0XHRcdGlmIChwLmFyZy5mbGFncyBcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBkb19wYWdlbWFwX3NjYW5gKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGRvX3BhZ2VtYXBfc2NhbmAgaXMgYmVpbmcgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiBvdGhlciBzZXR0aW5ncywgYXMgbG9uZyBhcyBgZnMvcHJvYy90YXNrX21tdS5jYCBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgd2hhdCB0cmlnZ2VycyB0aGUgY29tcGlsYXRpb24gb2YgdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZT8gTXkgaW1tZWRpYXRlIGh1bmNoLCBhbmQgdGhlIG9idmlvdXMgbmV4dCBzdGVwLCBpcyB0byBjaGVjayB0aGUgYGZzL3Byb2MvTWFrZWZpbGVgLiBJJiMzOTttIHByZXR0eSBzdXJlIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBpdCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgcnVsZXMgZGljdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFza19tbXUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICYjNDM7PSBwcm9jLm9cbmZzL3Byb2MvTWFrZWZpbGUtNy1cbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1x0JiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVx0XHRcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVx0Oj0gdGFza19tbXUub1xuZnMvcHJvYy9NYWtlZmlsZS0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg5MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHRhc2tfbW11Lm9gIG9ubHkgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfTU1VYCBpcyBhY3RpdmUg4oCTIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIE15IGZpcnN0IHRob3VnaHQgaXM6IGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IHRoYXQgYGZzL3Byb2NgIHJlcXVpcmVzIGBDT05GSUdfUFJPQ19GU2AgdG8gYmUgZW5hYmxlZCwgYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBwYWdlbWFwLiBJIHdvbmRlciwgZG9lcyBgUEFHRU1BUF9TQ0FOYCBoYXZlIGFueSBoaWRkZW4gcmVxdWlyZW1lbnRzPyBQZXJoYXBzIGl0IG5lZWRzIGBDT05GSUdfVVNFUkZBVUxURkRgIG9yIHNvbWUgb3RoZXIgb2JzY3VyZSBmbGFnIGVuYWJsZWQ/IEkgcmVjYWxsIHRoYXQgYFBBR0VNQVBfU0NBTmAgaXMgaW50ZXJ0d2luZWQgd2l0aCBgcGFnZW1hcF9yZWFkYCBhbmQgYHBhZ2VtYXBfY21kYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLiBMb29rcyBsaWtlIGBwYWdlbWFwX2NtZGAgaXMgZGVmaW5lZCBpbiBgZnMvcHJvYy90YXNrX21tdS5jYCwgd2hpY2ggbWFrZXMgdGhhdCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNDA6XHRcbjMyNDE6XHRcdC8qIFRoZSB3YWxrX2VuZCBpc24mIzM5O3Qgc2V0IHdoZW4gcmV0IGlzIHplcm8gKi9cbjMyNDI6XHRcdGlmICghcC5hcmcud2Fsa19lbmQpXG4zMjQzOlx0XHRcdHAuYXJnLndhbGtfZW5kID0gcC5hcmcuZW5kO1xuMzI0NDpcdFx0aWYgKHBhZ2VtYXBfc2Nhbl93cml0ZWJhY2tfYXJncyhcdTAwMjZwLmFyZywgdWFyZykpXG4zMjQ1Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4zMjQ2Olx0XG4zMjQ3Olx0XHRrZnJlZShwLnZlY19idWYpO1xuMzI0ODpcdFx0cmV0dXJuIHJldDtcbjMyNDk6XHR9XG4zMjUwOlx0XG4zMjUxOlx0c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4zMjUyOlx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4zMjUzOlx0e1xuMzI1NDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjMyNTU6XHRcbjMyNTY6XHRcdHN3aXRjaCAoY21kKSB7XG4zMjU3Olx0XHRjYXNlIFBBR0VNQVBfU0NBTjpcbjMyNTg6XHRcdFx0cmV0dXJuIGRvX3BhZ2VtYXBfc2NhbihtbSwgYXJnKTtcbjMyNTk6XHRcbjMyNjA6XHRcdGRlZmF1bHQ6XG4zMjYxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzI2MjpcdFx0fVxuMzI2MzpcdH1cbjMyNjQ6XHRcbjMyNjU6XHRjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zID0ge1xuMzI2NjpcdFx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlaywgLyogYm9ycm93IHRoaXMgKi9cbjMyNjc6XHRcdC5yZWFkXHRcdD0gcGFnZW1hcF9yZWFkLFxuMzI2ODpcdFx0Lm9wZW5cdFx0PSBwYWdlbWFwX29wZW4sXG4zMjY5Olx0XHQucmVsZWFzZVx0PSBwYWdlbWFwX3JlbGVhc2UsXG4zMjcwOlx0XHQudW5sb2NrZWRfaW9jdGwgPSBkb19wYWdlbWFwX2NtZCxcbjMyNzE6XHRcdC5jb21wYXRfaW9jdGxcdD0gZG9fcGFnZW1hcF9jbWQsXG4zMjcyOlx0fTtcbjMyNzM6XHQjZW5kaWYgLyogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SICovXG4zMjc0Olx0XG4zMjc1Olx0I2lmZGVmIENPTkZJR19OVU1BXG4zMjc2Olx0XG4zMjc3Olx0c3RydWN0IG51bWFfbWFwcyB7XG4zMjc4Olx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzO1xuMzI3OTpcdFx0dW5zaWduZWQgbG9uZyBhbm9uO1xuMzI4MDpcdFx0dW5zaWduZWQgbG9uZyBhY3RpdmU7XG4zMjgxOlx0XHR1bnNpZ25lZCBsb25nIHdyaXRlYmFjaztcbjMyODI6XHRcdHVuc2lnbmVkIGxvbmcgbWFwY291bnRfbWF4O1xuMzI4MzpcdFx0dW5zaWduZWQgbG9uZyBkaXJ0eTtcbjMyODQ6XHRcdHVuc2lnbmVkIGxvbmcgc3dhcGNhY2hlO1xuMzI4NTpcdFx0dW5zaWduZWQgbG9uZyBub2RlW01BWF9OVU1OT0RFU107XG4zMjg2Olx0fTtcbjMyODc6XHRcbjMyODg6XHRzdHJ1Y3QgbnVtYV9tYXBzX3ByaXZhdGUge1xuMzI4OTpcdFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlIHByb2NfbWFwcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AmIzM5O3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AuLi4gdGhhdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJIHNlZSBpdCYjMzk7cyB0dWNrZWQgYXdheSB1bmRlciBhbiBgI2VuZGlmIC8qIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiAqL2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHksIHByZXN1bWFibHkgcmVsYXRlZCB0byB0aGUgcHJvY2VzcyBwYWdlIG1hcCwgaXMgb25seSBwcmVzZW50IGlmIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzICpub3QqIGRlZmluZWQuIE5vdywgdGhhdCYjMzk7cyBub3QgdGhlIG1vc3QgaW50dWl0aXZlIGFycmFuZ2VtZW50LiBVc3VhbGx5LCB5b3UmIzM5O2QgKmV4cGVjdCogdGhlIGNvZGUgdG8gYmUgcHJlc2VudCAqaWYqIHRoZSBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuIEJ1dCBoZXksIGl0IGhhcHBlbnMsIGVzcGVjaWFsbHkgaW4gb2xkZXIgY29kZWJhc2VzIHdoZXJlIHRoaW5ncyBtaWdodCBoYXZlIGV2b2x2ZWQgYSBiaXQgb2RkbHkuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gKndoZXJlKiB0aGUgYCNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIHRoYXQgc3Vycm91bmRzIHRoaXMgcGFydGljdWxhciBibG9jayBhY3R1YWxseSBiZWdpbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoeSB0aGlzIGNvbmRpdGlvbmFsIGV4Y2x1c2lvbiBleGlzdHMuIElzIHRoaXMgc29tZSBraW5kIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlIG9yIHBsYXRmb3JtPyBPciBpcyBpdCBhIGRlcHJlY2F0ZWQgZmVhdHVyZT8gVW5kZXJzdGFuZGluZyB0aGUgKnN0YXJ0aW5nKiBwb2ludCBvZiB0aGUgYCNpZmRlZmAgaXMgdGhlIGtleSB0byBnZXR0aW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhhdCBgI2lmZGVmYCBhbmQgc2VlIHdoYXQgdGhlIHN0b3J5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfUFJPQ19QQUdFX01PTklUT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTg2Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX21hcHNfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtODkwLVxuZnMvcHJvYy90YXNrX21tdS5jOjg5MTojaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL3Rhc2tfbW11LmMtODkyLXN0cnVjdCBtZW1fc2l6ZV9zdGF0cyB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMyNjU9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3Mi19O1xuZnMvcHJvYy90YXNrX21tdS5jOjMyNzM6I2VuZGlmIC8qIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiAqL1xuZnMvcHJvYy90YXNrX21tdS5jLTMyNzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBQYWdlbWFwIGFuZCBVbnBvcHVsYXRlZCBQVEVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGluZ2VzIG9uIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIGhlcmUsIGJ1dCBsZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIHRoZSBtYWluIG9uZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCAqaW5zaWRlKiB0aGUgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgYmxvY2suCgpUaGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBpcyBzdWJ0bGU6IEluc3RlYWQgb2YgcmV0dXJuaW5nIDAgZm9yIHVucG9wdWxhdGVkIFBURXMgKHRob3NlIGluZGljYXRlZCBieSBgcHRlX25vbmUocHRlKWApLCB0aGUgY29kZSBub3cgcmV0dXJucyBgUEFHRV9JU19XUklUVEVOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCByZXBvcnRzIHRoZXNlIHVucG9wdWxhdGVkIGVudHJpZXMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgc2VtYW50aWNzIG9mIHRoYXQgcmVwb3J0LgoKTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwg4oCTIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAsIGFuZCBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC4gSSB3YXMgcmlnaHQsIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGlzIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uLgoKQWxyaWdodCwgYSBxdWljayBjaGVjay4uLiBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIGJ1dCBkb2VzbiYjMzk7dCBtYWtlIGl0IGxlc3MgaW1wb3J0YW50IGluIHRoaXMgY29udGV4dC4gQW5kIHllcywgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLCBhbmQgYGRvX3BhZ2VtYXBfc2NhbmAgYXJlIGFsc28gc3RhdGljLiBgZG9fcGFnZW1hcF9jbWRgIGlzIGFsc28gc3RhdGljISBJIGhhdmUgYSBzZXQgb2YgY29yZSBmdW5jdGlvbiBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKVGhlIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgaWYgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgbWFrZXMgdXNlIG9mIHRoZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBncmFwaCB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlbWFwX3NjYW5fcHRlX2hvbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMwNDA9c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ2LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDc6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ4LVx0XHRcdFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMwNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDc2LVx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA3NzpcdC5wdGVfaG9sZSA9IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc4LVx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUsIGFuZCB0aGUgbmFtZSBnaXZlcyBhIHN0cm9uZyBjbHVlLiBJdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZpbmRpbmcgJiMzNDtob2xlcyYjMzQ7IGluIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIG9yIFBURXMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgcGVyaGFwcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhvdyB0aGUga2VybmVsIG1hcHMgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5LiBTbywgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGlkZW50aWZpZXMgcmVnaW9ucyBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdGhhdCBhcmVuJiMzOTt0IGN1cnJlbnRseSBtYXBwZWQgdG8gYW55IHBoeXNpY2FsIHBhZ2VzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgZWZmaWNpZW50IG1lbW9yeSBhbGxvY2F0aW9uLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB3aGF0IGFsZ29yaXRobXMgYXJlIGVtcGxveWVkIGZvciB0aGUgc2Nhbm5pbmcgcHJvY2VzcywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciBvcHRpbWl6YXRpb25zIHByZXNlbnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbG9vayBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMsIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLCBhbmQgd2hldGhlciBpdCYjMzk7cyBjb25jZXJuZWQgYWJvdXQgdGhpbmdzIGxpa2UgbWVtb3J5IHByb3RlY3Rpb24gb3IgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBsaWtlIHRoZSBidWRkeSBhbGxvY2F0b3Igb3IgdGhlIHNsYWIgYWxsb2NhdG9yLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQ/IERvZXMgaXQgdXRpbGl6ZSBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGFuZCBpZiBzbywgaG93IGRvZXMgaXQgbWFuYWdlIHRoZW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzPyBJcyB0aGVyZSBhbnkgdXNlIG9mIHByZWZldGNoaW5nIG9yIG90aGVyIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzPyBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgcGVyZm9ybXMgaXRzIGR1dHksIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Yga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA0MDpcdHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjMwNDE6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcbjMwNDI6XHR7XG4zMDQzOlx0XHRyZXR1cm4gMDtcbjMwNDQ6XHR9XG4zMDQ1Olx0I2VuZGlmXG4zMDQ2Olx0XG4zMDQ3Olx0c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbjMwNDg6XHRcdFx0XHRcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuMzA0OTpcdHtcbjMwNTA6XHRcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbjMwNTE6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cdTAwM2V2bWE7XG4zMDUyOlx0XHRpbnQgcmV0LCBlcnI7XG4zMDUzOlx0XG4zMDU0Olx0XHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5LCBwKSlcbjMwNTU6XHRcdFx0cmV0dXJuIDA7XG4zMDU2Olx0XG4zMDU3Olx0XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbjMwNTg6XHRcdGlmIChhZGRyID09IGVuZClcbjMwNTk6XHRcdFx0cmV0dXJuIHJldDtcbjMwNjA6XHRcbjMwNjE6XHRcdGlmICh+cC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpXG4zMDYyOlx0XHRcdHJldHVybiByZXQ7XG4zMDYzOlx0XG4zMDY0Olx0XHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG4zMDY1Olx0XHRcdGVyciA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aodm1hLCBhZGRyLCBlbmQpO1xuMzA2NjpcdFx0ZWxzZVxuMzA2NzpcdFx0XHRlcnIgPSB1ZmZkX3dwX3JhbmdlKHZtYSwgYWRkciwgZW5kIC0gYWRkciwgdHJ1ZSk7XG4zMDY4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzA2OTpcdFx0XHRyZXQgPSBlcnI7XG4zMDcwOlx0XG4zMDcxOlx0XHRyZXR1cm4gcmV0O1xuMzA3MjpcdH1cbjMwNzM6XHRcbjMwNzQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XG4zMDc1Olx0XHQudGVzdF93YWxrID0gcGFnZW1hcF9zY2FuX3Rlc3Rfd2FsayxcbjMwNzY6XHRcdC5wbWRfZW50cnkgPSBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5LFxuMzA3NzpcdFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxuMzA3ODpcdFx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcbjMwNzk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKlJlZmxlY3Rpbmcgb24gUGFnZW1hcCBTY2FucyoqCgpIbW0sIGludGVyZXN0aW5nLiBJIHdhcyBqdXN0IHRoaW5raW5nIGFib3V0IHRoZSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgcGFnZSB0YWJsZSBlbnRyaWVzLiBJdCBzdHJ1Y2sgbWUgdGhhdCwgY3VycmVudGx5LCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHNlZW0gdG8gbWFrZSB1c2Ugb2YgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgdGhhdCB2YXJpYWJsZSBiZWluZyB1c2VkIGhlcmUgaW4gdGhlIHNhbWUgd2F5IEkmIzM5O20gYWNjdXN0b21lZCB0byBzZWVpbmcgaW4gc2ltaWxhciBmdW5jdGlvbnMuCgpUaGVuIEkgcGF1c2VkIGFuZCByZW1lbWJlcmVkIGEgcmVsYXRlZCBwb2ludC4gSSBrbm93IGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgICppcyogZGVmaW5pdGVseSBlbXBsb3llZCwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3MgdXNlZCB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgIGFuZCBgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnlgLiBUaGlzIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW5jZSBpbiBob3cgd2UmIzM5O3JlIGNhdGVnb3JpemluZyBwYWdlcyBiYXNlZCBvbiBlbnRyeSB0eXBlLCBwb3NzaWJseSBzb21ldGhpbmcgdGhhdCBJIHNob3VsZCByZXZpc2l0IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhcmVhIGZvciBvcHRpbWl6YXRpb24gb3IgaWYgdGhlIHNlcGFyYXRpb24gb2YgcHJvY2Vzc2VzIGlzIGFjdHVhbGx5IHRoZSBwcmVmZXJyZWQgbWV0aG9kLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGRpZmZlcmVuY2UgaW4gdXNhZ2UgYWNyb3NzIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbnRlbnRpb25hbCBhbmQgcGFydCBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24sIG9yIGlmIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGluY29uc2lzdGVuY3kgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZCB1cG9uLiBOZWVkIHRvIGludmVzdGlnYXRlIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9wYWdlX2NhdGVnb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNDIxPXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MjgtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzAtXHRcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODk5LVx0XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfFxuZnMvcHJvYy90YXNrX21tdS5jOjI5MDA6XHRcdFx0XHRcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTAxLVx0XHR1bnNpZ25lZCBsb25nIG5leHQgPSBhZGRyICYjNDM7IFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgKioKClJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBwaWVjZSBvZiBsb2dpYyBpcyBvbmx5IHJlZmVyZW5jZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGFsbCBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byByZWNvbnN0cnVjdCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGlzIHNwZWNpZmljIGludGVyYWN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwYWdlLW1hcCBzY2FubmluZyBwcm9jZXNzLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbWFuYWdlbWVudCBvZiBwYWdlIHRhYmxlIGVudHJpZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb250ZXh0IHJldmVhbHMgdGhlIHNwZWNpZmljIHVzZSBjYXNlIGFuZCB3aGF0IGNvbmNlcm5zIG1lIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4ODA6XHRcdFx0XHRpZiAoKHB0ZV9wcmVzZW50KHB0ZW50KSBcdTAwMjZcdTAwMjYgcHRlX3VmZmRfd3AocHRlbnQpKSB8fFxuMjg4MTpcdFx0XHRcdCAgICBwdGVfc3dwX3VmZmRfd3BfYW55KHB0ZW50KSlcbjI4ODI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjg4MzpcdFx0XHRcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHwgUEFHRV9JU19XUklUVEVOLFxuMjg4NDpcdFx0XHRcdFx0XHRcdCAgcCwgYWRkciwgXHUwMDI2bmV4dCk7XG4yODg1Olx0XHRcdFx0aWYgKG5leHQgPT0gYWRkcilcbjI4ODY6XHRcdFx0XHRcdGJyZWFrO1xuMjg4NzpcdFx0XHRcdGlmICh+cC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpXG4yODg4Olx0XHRcdFx0XHRjb250aW51ZTtcbjI4ODk6XHRcdFx0XHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XG4yODkwOlx0XHRcdFx0aWYgKCFmbHVzaF9lbmQpXG4yODkxOlx0XHRcdFx0XHRzdGFydCA9IGFkZHI7XG4yODkyOlx0XHRcdFx0Zmx1c2hfZW5kID0gbmV4dDtcbjI4OTM6XHRcdFx0fVxuMjg5NDpcdFx0XHRnb3RvIGZsdXNoX2FuZF9yZXR1cm47XG4yODk1Olx0XHR9XG4yODk2Olx0XG4yODk3Olx0XHRmb3IgKGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuMjg5ODpcdFx0XHRwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4yODk5Olx0XHRcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyA9IHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8XG4yOTAwOlx0XHRcdFx0XHRcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcbjI5MDE6XHRcdFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciAmIzQzOyBQQUdFX1NJWkU7XG4yOTAyOlx0XG4yOTAzOlx0XHRcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXG4yOTA0Olx0XHRcdFx0Y29udGludWU7XG4yOTA1Olx0XG4yOTA2Olx0XHRcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXHUwMDI2bmV4dCk7XG4yOTA3Olx0XHRcdGlmIChuZXh0ID09IGFkZHIpXG4yOTA4Olx0XHRcdFx0YnJlYWs7XG4yOTA5Olx0XG4yOTEwOlx0XHRcdGlmICh+cC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpXG4yOTExOlx0XHRcdFx0Y29udGludWU7XG4yOTEyOlx0XHRcdGlmICh+Y2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19XUklUVEVOKVxuMjkxMzpcdFx0XHRcdGNvbnRpbnVlO1xuMjkxNDpcdFxuMjkxNTpcdFx0XHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XG4yOTE2Olx0XHRcdGlmICghZmx1c2hfZW5kKVxuMjkxNzpcdFx0XHRcdHN0YXJ0ID0gYWRkcjtcbjI5MTg6XHRcdFx0Zmx1c2hfZW5kID0gbmV4dDtcbjI5MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIE1hcCBTY2FubmluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHBhZ2VtYXBgIGNvZGUuIEl0IGxvb2tzIGxpa2UgYGRvX3BhZ2VtYXBfc2NhbmAgYW5kIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1haW4gbG9naWMgZmxvdy4gSSByZW1lbWJlciBzZWVpbmcgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgbWVudGlvbmVkIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgZmVhdHVyZSwgc28gSSYjMzk7bSBrZWVwaW5nIHRoYXQgaW4gbWluZC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCB0aGF0IHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCBpcyBhY3R1YWxseSBpbnZvbHZlZCB3aXRoIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3QgdHJhY2tpbmcuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IG9yIGlmIGl0IGlzIHNvbWVob3cgb3B0aW9uYWwuIEkmIzM5O20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgdG8gYHB0ZV91ZmZkX3dwYCBvciBgbWFrZV91ZmZkX3dwX3B0ZWAuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFrZV91ZmZkX3dwX3B0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MjQyOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNDg4LVxuZnMvcHJvYy90YXNrX21tdS5jOjI0ODk6c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDkwLVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjgzND1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg2NC1cdFx0XHRcdGNvbnRpbnVlO1xuZnMvcHJvYy90YXNrX21tdS5jOjI4NjU6XHRcdFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4NjYtXHRcdFx0aWYgKCFmbHVzaF9lbmQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODgtXHRcdFx0XHRjb250aW51ZTtcbmZzL3Byb2MvdGFza19tbXUuYzoyODg5Olx0XHRcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yODkwLVx0XHRcdGlmICghZmx1c2hfZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTE0LVxuZnMvcHJvYy90YXNrX21tdS5jOjI5MTU6XHRcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTE2LVx0XHRpZiAoIWZsdXNoX2VuZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBgbWFrZV91ZmZkX3dwX3B0ZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlcmZhdWx0ZmQgKFVGRkQpIHdyaXRlIHByb3RlY3Rpb24gaXMgc2V0IHVwIGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGxldmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBwcm9jZXNzZXMgaW4gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG1ha2VfdWZmZF93cF9wdGVgIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCB0aGUgY3J1Y2lhbCBiaXQpIG9mIHNldHRpbmcgdGhlIFVGRkQgd3JpdGUgcHJvdGVjdGlvbiBzaG91bGQgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ4MDpcdFx0XHRcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19GSUxFO1xuMjQ4MTpcdFxuMjQ4MjpcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpXG4yNDgzOlx0XHRcdFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1NPRlRfRElSVFk7XG4yNDg0Olx0XHR9XG4yNDg1Olx0XG4yNDg2Olx0XHRyZXR1cm4gY2F0ZWdvcmllcztcbjI0ODc6XHR9XG4yNDg4Olx0XG4yNDg5Olx0c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI0OTA6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgcHRlX3QgcHRlbnQpXG4yNDkxOlx0e1xuMjQ5MjpcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZW50KSkge1xuMjQ5MzpcdFx0XHRwdGVfdCBvbGRfcHRlO1xuMjQ5NDpcdFxuMjQ5NTpcdFx0XHRvbGRfcHRlID0gcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZSk7XG4yNDk2Olx0XHRcdHB0ZW50ID0gcHRlX21rdWZmZF93cChvbGRfcHRlKTtcbjI0OTc6XHRcdFx0cHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGUsIG9sZF9wdGUsIHB0ZW50KTtcbjI0OTg6XHRcdH0gZWxzZSBpZiAocHRlX25vbmUocHRlbnQpKSB7XG4yNDk5Olx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG4yNTAwOlx0XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xuMjUwMTpcdFx0fSBlbHNlIHtcbjI1MDI6XHRcdFx0cHRlbnQgPSBwdGVfc3dwX21rdWZmZF93cChwdGVudCk7XG4yNTAzOlx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIHB0ZW50KTtcbjI1MDQ6XHRcdH1cbjI1MDU6XHR9XG4yNTA2Olx0XG4yNTA3Olx0I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuMjUwODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfdGhwX2NhdGVnb3J5KHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbjI1MDk6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI1MTA6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90IHBtZClcbjI1MTE6XHR7XG4yNTEyOlx0XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBQQUdFX0lTX0hVR0U7XG4yNTEzOlx0XG4yNTE0Olx0XHRpZiAocG1kX25vbmUocG1kKSlcbjI1MTU6XHRcdFx0cmV0dXJuIGNhdGVnb3JpZXM7XG4yNTE2Olx0XG4yNTE3Olx0XHRpZiAocG1kX3ByZXNlbnQocG1kKSkge1xuMjUxODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjI1MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipQVEVfTUFSS0VSX1VGRkRfV1AgSW5xdWlyeSoqCgpIbW0sIHNvIGBQVEVfTUFSS0VSX1VGRkRfV1BgIGlzIGluIHBsYXkgaGVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGlzIG1hcmtlciBhbHdheXMgYXZhaWxhYmxlLCBvciBpcyBpdCBjb250aW5nZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbiBvciBzcGVjaWZpYyBrZXJuZWwgYnVpbGQgb3B0aW9ucz8gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIHByZXNlbmNlLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycywgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYGluY2x1ZGUvbGludXgvc3dhcG9wcy5oYCwgb3IgbWF5YmUgYSByZWxhdGVkIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdGhpcyBraW5kIG9mIGRlZmluaXRpb24gdG8gcmVzaWRlLiBBIHF1aWNrIGdyZXAgbWlnaHQgYWxzbyBiZSB1c2VmdWwsIGJ1dCBjaGVja2luZyB0aGUgaGVhZGVyIGlzIHRoZSBkZWZpbml0aXZlIHdheSB0byBjb25maXJtIGl0cyB1bmNvbmRpdGlvbmFsIGF2YWlsYWJpbGl0eSBvciBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgaXRzIGRlZmluaXRpb24gYW5kIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb24gaXMgcGFyYW1vdW50IGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dCBvZiB0aGlzIG1hcmtlciBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFRFX01BUktFUl9VRkZEX1dQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaD0xNj1zdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9zdXBwb3J0c193cF9tYXJrZXIodm9pZClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcdHJldHVybiBwZ3RhYmxlX3N1cHBvcnRzX3VmZmRfd3AoKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTktfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NjE6XHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlx0aWYgKChzcmNtIFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTY0Olx0XHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY1LVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTgyPXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MTQtXHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjYxNTpcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTYxNi1cdFx0cmV0dXJuIHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MjgxPXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfbWFya2VyO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MjgzOiNkZWZpbmUgIFBURV9NQVJLRVJfVUZGRF9XUFx0XHRcdEJJVCgwKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjg0LS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Njc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBVRkZEIFdyaXRlIFByb3RlY3Rpb24gUmVsZXZhbmNlKioKCkhtbSwgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgLi4uIHRoYXQgc2V0dGluZyAqY291bGQqIGJlIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLiBJIG5lZWQgdG8gZ2V0IG1vcmUgY29udGV4dCBhbmQgc2VlIGlmIGl0JiMzOTtzIGFwcGxpY2FibGUuIExldCBtZSBjaGVjayB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBhY3R1YWxseSAqZG9lcyouIEkmIzM5O2xsIGxvb2sgZm9yIGl0cyBkZXNjcmlwdGlvbiwgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBjb3VsZCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgaW5mb3JtYXRpb24gSSYjMzk7bSBsb29raW5nIGZvciBhbmQgbGVhZCBtZSBkb3duIHRoZSByaWdodCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFRFX01BUktFUl9VRkZEX1dQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTY9aWYgVVNFUkZBVUxURkRcbm1tL0tjb25maWc6MTM5Nzpjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG5tbS9LY29uZmlnLTEzOTgtXHRib29sIFwmIzM0O1VzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEluZGVwZW5kZW5jZSBvZiBQQUdFTUFQX1NDQU4gYW5kIFVTRVJGQVVMVEZEKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEl0JiMzOTtzIGRhd25pbmcgb24gbWUg4oCTIGNvdWxkIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IG9wZXJhdGUgaW5kZXBlbmRlbnRseSBvZiBgVVNFUkZBVUxURkRgPyBUaGF0IHdvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvci4uLiB3ZWxsLCBmb3Igc2V2ZXJhbCB0aGluZ3MgSSYjMzk7bSB3b3JraW5nIG9uIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0LgoKUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBQQUdFTUFQX1NDQU5gIGFuZCBgQ09ORklHX1VTRVJGQVVMVEZEYCBhcmUgaW5oZXJlbnRseSBsaW5rZWQgaW4gdGhlIGNvZGUuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIAoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGNhbiBJIGZpbmQgaW5zdGFuY2VzIHdoZXJlIGBQQUdFTUFQX1NDQU5gIGlzIGVuYWJsZWQgb3IgdXNlZCBldmVuICp3aXRob3V0KiBgQ09ORklHX1VTRVJGQVVMVEZEYCBiZWluZyBkZWZpbmVkPyBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGFuZCBjb250cm9sIGZsb3cuCgpXaGlsZSBJJiMzOTttIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZG91YmxlLWNoZWNrIHRoZSBgbWFrZV91ZmZkX3dwX3B0ZWAgZnVuY3Rpb24gaW4gdGhlIHNhbWUgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdyaXRlIHByb3RlY3Rpb24gcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byB0aGVzZSB0d28gZmVhdHVyZXMuIEtub3dpbmcgaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWtlX3VmZmRfd3BfcHRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0ODgtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQ4OTpzdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0OTAtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZW50KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODY0LVx0XHRcdFx0Y29udGludWU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjg2NTpcdFx0XHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg2Ni1cdFx0XHRpZiAoIWZsdXNoX2VuZClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg4OC1cdFx0XHRcdGNvbnRpbnVlO1xuZnMvcHJvYy90YXNrX21tdS5jOjI4ODk6XHRcdFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4OTAtXHRcdFx0aWYgKCFmbHVzaF9lbmQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI5MTQtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkxNTpcdFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MTYtXHRcdGlmICghZmx1c2hfZW5kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJvbGUgb2YgYG1ha2VfdWZmZF93cF9wdGVgIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gYG1ha2VfdWZmZF93cF9wdGVgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeT8gV2hhdCYjMzk7cyBpdHMgcHVycG9zZT8mIzM0OyBUaGVuIEkgc2VlIHRoZSB1c2FnZSBvZiBgcHRlX21rdWZmZF93cGAgYW5kIGBwdGVfc3dwX21rdWZmZF93cGAuIFRoZXNlIHNvdW5kIGxpa2UgdGhleSYjMzk7cmUgcmVsYXRlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb25zIGhlcmUuIEkgc3VzcGVjdCB0aGlzIGlzIGFsbCB0aWVkIHRvIHVzZXJmYXVsdGZkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYFVTRVJGQVVMVEZEYCBpcywgaW4gZmFjdCwgZXNzZW50aWFsIGZvciBgUEFHRU1BUF9TQ0FOYCB0byBhY3R1YWxseSBiZSB1c2VmdWwuCgpJIGtub3cgYFBBR0VNQVBfU0NBTmAgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgYW5kL29yIGNsZWFyaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnLCBhIHZlcnkgY29tbW9uIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhpbmtpbmcgYmFjaywgdGhlIGBQQUdFX0lTX1dSSVRURU5gIGZsYWcgaXMsIGFzIEkgcmVjYWxsLCB0cmFja2VkIHV0aWxpemluZyBgdWZmZF93cGAgbWFya2Vycy4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3cgSSBuZWVkIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoYXQgc2NhbiBpbnRlcmFjdHMgd2l0aCB0aG9zZSBtYXJrZXJzLiBJIHNob3VsZCBkaXZlIGludG8gdGhlIGFsbG93ZWQgZmxhZ3MsIHNvIEkmIzM5O2xsIG5leHQgZXhhbWluZSBgcGFnZW1hcF9zY2FuX2dldF9hcmdzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcbjMwODE6XHRzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9nZXRfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcbjMwODI6XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHVhcmcpXG4zMDgzOlx0e1xuMzA4NDpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGFyZywgKHZvaWQgX191c2VyICopdWFyZywgc2l6ZW9mKCphcmcpKSlcbjMwODU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMDg2Olx0XG4zMDg3Olx0XHRpZiAoYXJnLVx1MDAzZXNpemUgIT0gc2l6ZW9mKHN0cnVjdCBwbV9zY2FuX2FyZykpXG4zMDg4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzA4OTpcdFxuMzA5MDpcdFx0LyogVmFsaWRhdGUgcmVxdWVzdGVkIGZlYXR1cmVzICovXG4zMDkxOlx0XHRpZiAoYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiB+UE1fU0NBTl9GTEFHUylcbjMwOTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDkzOlx0XHRpZiAoKGFyZy1cdTAwM2VjYXRlZ29yeV9pbnZlcnRlZCB8IGFyZy1cdTAwM2VjYXRlZ29yeV9tYXNrIHxcbjMwOTQ6XHRcdCAgICAgYXJnLVx1MDAzZWNhdGVnb3J5X2FueW9mX21hc2sgfCBhcmctXHUwMDNlcmV0dXJuX21hc2spIFx1MDAyNiB+UE1fU0NBTl9DQVRFR09SSUVTKVxuMzA5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwOTY6XHRcbjMwOTc6XHRcdGFyZy1cdTAwM2VzdGFydCA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVx1MDAzZXN0YXJ0KTtcbjMwOTg6XHRcdGFyZy1cdTAwM2VlbmQgPSB1bnRhZ2dlZF9hZGRyKCh1bnNpZ25lZCBsb25nKWFyZy1cdTAwM2VlbmQpO1xuMzA5OTpcdFx0YXJnLVx1MDAzZXZlYyA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVx1MDAzZXZlYyk7XG4zMTAwOlx0XG4zMTAxOlx0XHQvKiBWYWxpZGF0ZSBtZW1vcnkgcG9pbnRlcnMgKi9cbjMxMDI6XHRcdGlmICghSVNfQUxJR05FRChhcmctXHUwMDNlc3RhcnQsIFBBR0VfU0laRSkpXG4zMTAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEwNDpcdFx0aWYgKCFhY2Nlc3Nfb2soKHZvaWQgX191c2VyICopKGxvbmcpYXJnLVx1MDAzZXN0YXJ0LCBhcmctXHUwMDNlZW5kIC0gYXJnLVx1MDAzZXN0YXJ0KSlcbjMxMDU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMTA2Olx0XHRpZiAoIWFyZy1cdTAwM2V2ZWMgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2V2ZWNfbGVuKVxuMzEwNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMDg6XHRcdGlmIChVSU5UX01BWCA9PSBTSVpFX01BWCBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZXZlY19sZW4gXHUwMDNlIFNJWkVfTUFYKVxuMzEwOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMTA6XHRcdGlmIChhcmctXHUwMDNldmVjIFx1MDAyNlx1MDAyNiAhYWNjZXNzX29rKCh2b2lkIF9fdXNlciAqKShsb25nKWFyZy1cdTAwM2V2ZWMsXG4zMTExOlx0XHRcdFx0XHQgICBzaXplX211bChhcmctXHUwMDNldmVjX2xlbiwgc2l6ZW9mKHN0cnVjdCBwYWdlX3JlZ2lvbikpKSlcbjMxMTI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMTEzOlx0XG4zMTE0Olx0XHQvKiBGaXh1cCBkZWZhdWx0IHZhbHVlcyAqL1xuMzExNTpcdFx0YXJnLVx1MDAzZWVuZCA9IEFMSUdOKGFyZy1cdTAwM2VlbmQsIFBBR0VfU0laRSk7XG4zMTE2Olx0XHRhcmctXHUwMDNld2Fsa19lbmQgPSAwO1xuMzExNzpcdFx0aWYgKCFhcmctXHUwMDNlbWF4X3BhZ2VzKVxuMzExODpcdFx0XHRhcmctXHUwMDNlbWF4X3BhZ2VzID0gVUxPTkdfTUFYO1xuMzExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAwOAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHBhZ2VtYXBfaW9jdGwuY2AgU2VsZi1UZXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlbGYtdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHNwZWNpZmljYWxseSB0ZXN0IGBwYWdlbWFwX2lvY3RsYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXTigJlzIGEgZm9jdXNlZCB0ZXN0LCBhIGdvb2QgYXBwcm9hY2guIE5vdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSB0ZXN0IGl0c2VsZiB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIHRlc3RpbmcgYHBhZ2VtYXBfaW9jdGxgLiBBIHF1aWNrIHNlYXJjaCBmb3IgYHdwX2luaXRgIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIHJldmVhbCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyBpdCYjMzk7cyBlbXBsb3lpbmcgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaW9jdGwgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIHdyaXRlIHByb3RlY3Rpb24gYXNwZWN0IOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEga2V5IGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIExldCBtZSBzZWUgd2hhdCB0aGV54oCZcmUgZG9pbmcgd2l0aCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1MDpcdFxuMTA1MTpcdFx0a3NmdF90ZXN0X3Jlc3VsdChpID09IFRFU1RfSVRFUkFUSU9OUywgXCYjMzQ7VGVzdCAlc1xcblwmIzM0OywgX19mdW5jX18pO1xuMTA1MjpcdH1cbjEwNTM6XHRcbjEwNTQ6XHQvKlxuMTA1NTpcdCAqIEEgcmFuZ2UgdGhhdCB3YXMgcG9wdWxhdGVkIGFuZCB0aGVuIE1BRFZfRE9OVE5FRUQmIzM5O2QgaXMgZ2VudWluZSBwdGVfbm9uZVxuMTA1NjpcdCAqIHdpdGggbm8gdWZmZC13cCBtYXJrZXIuIFN1Y2ggYSBwdGUgbXVzdCByZWFkIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2hcbjEwNTc6XHQgKiBQQUdFTUFQX1NDQU4gcGF0aCBzZXJ2ZXMgdGhlIHJlcXVlc3Q6IGJvdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0IHBhdGggYW5kXG4xMDU4Olx0ICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxuMTA1OTpcdCAqIHBhZ2Ugd3JpdHRlbi5cbjEwNjA6XHQgKi9cbjEwNjE6XHRzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcbjEwNjI6XHR7XG4xMDYzOlx0XHRpbnQgbnBhZ2VzID0gMTYsIGk7XG4xMDY0Olx0XHRsb25nIG1lbV9zaXplID0gbnBhZ2VzICogcGFnZV9zaXplO1xuMTA2NTpcdFx0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xuMTA2NjpcdFx0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbjEwNjc6XHRcdGNoYXIgKm1lbTtcbjEwNjg6XHRcbjEwNjk6XHRcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4xMDcwOlx0XHRcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuMTA3MTpcdFx0aWYgKG1lbSA9PSBNQVBfRkFJTEVEKVxuMTA3MjpcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgbW1hcCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbjEwNzM6XHRcbjEwNzQ6XHRcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG4xMDc1Olx0XG4xMDc2Olx0XHQvKiBQb3B1bGF0ZSwgdGhlbiBkcm9wOiB0aGUgcHRlcyBiZWNvbWUgcHRlX25vbmUgd2l0aG91dCBhIG1hcmtlci4gKi9cbjEwNzc6XHRcdG1lbXNldChtZW0sIDEsIG1lbV9zaXplKTtcbjEwNzg6XHRcdGlmIChtYWR2aXNlKG1lbSwgbWVtX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuMTA3OTpcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgTUFEVl9ET05UTkVFRCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbjEwODA6XHRcbjEwODE6XHRcdC8qIEZhc3QgcGF0aDogY2F0ZWdvcnlfbWFzayA9PSByZXR1cm5fbWFzayA9PSBQQUdFX0lTX1dSSVRURU4uICovXG4xMDgyOlx0XHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcbjEwODM6XHRcdFx0XHQgICAgUEFHRV9JU19XUklUVEVOLCAwLCAwLCBQQUdFX0lTX1dSSVRURU4pO1xuMTA4NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwODU6XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIGZhc3Qgc2NhbiBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbjEwODY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldDsgaSYjNDM7JiM0MzspXG4xMDg3Olx0XHRcdGZhc3QgJiM0Mzs9IExFTihyZWdpb25zW2ldKTtcbjEwODg6XHRcbjEwODk6XHRcdC8qIEdlbmVyaWMgcGF0aDogc2FtZSBxdWVyeSBleHByZXNzZWQgdmlhIGNhdGVnb3J5X2FueW9mX21hc2suICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDM0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHBhZ2VtYXBfaW9jdGwuY2AgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IFNlbGYtVGVzdHMqKgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gc29tZSBrZXJuZWwgaW50ZXJuYWxzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgd3BfaW5pdGAgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZWxmLXRlc3RzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB2aWEgdGhlIHBhZ2VtYXAgSU9DVEwuIFRoZXJlIGFyZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhc3BlY3RzIG9mIHRoZSB0ZXN0IHNldHVwIGluIGB3cF9pbml0YCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IGF2ZW51ZXMgb2YgZXhwbG9yYXRpb24uIFRoZSBpbml0aWFsIHNldHVwIGlzIGtleSB0byB0aGUgdGVzdGluZywgYW5kIHRodXMgSSB3aWxsIGZvY3VzIG15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz05NT1pbnQgaW5pdF91ZmZkKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExNy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTg6aW50IHdwX2luaXQodm9pZCAqYWRkciwgbG9uZyBzaXplKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOS17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTE4OD1pbnQgdXNlcmZhdWx0ZmRfdGVzdHModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTk3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE5ODpcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTk5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0yMzk9aW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0yNjMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MjY0Olx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0yNjUtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy00MTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6NDExOlx0d3BfaW5pdChtWzBdLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6NDEyOlx0d3BfaW5pdChtWzFdLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtNDEzLVx0d3BfYWRkcl9yYW5nZShtWzBdLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQ0OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo0NDk6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQ1MC1cdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTUwMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo1MDQ6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTUwNS1cdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTU1My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo1NTQ6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTU1NS1cdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTgwMz1pbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04MTgtXHRpZiAobWFwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6ODE5Olx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTgyMC1cdFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODU1LVx0XHRtYXAgPSBnZXRodWdlcGFnZShtYXBfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6ODU2Olx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTg1Ny1cdFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODc5LVx0aWYgKG1hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjg4MDpcdFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04ODEtXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTkwMy1cdGlmIChtYXApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo5MDQ6XHRcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTA1LVx0XHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05MzMtXHRpZiAobWFwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6OTM0Olx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTkzNS1cdFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTYwLVx0aWYgKG1hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjk2MTpcdFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05NjItXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTEwMTY9c3RhdGljIHZvaWQgdGVzdF9zaW1wbGUodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMDI2Olx0d3BfaW5pdChtYXAsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNy1cdHdwX2FkZHJfcmFuZ2UobWFwLCBwYWdlX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDYxPXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMDczLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwNzQ6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEwNzUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTExMDU9aW50IHNhbml0eV90ZXN0cyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTIxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExMjI6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExMjMtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTQ4LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExNDk6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExNTAtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTk0LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExOTU6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOTYtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEyNTI6XHR3cF9pbml0KGZtZW0sIGJ1Zl9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUzLVx0d3BfYWRkcl9yYW5nZShmbWVtLCBidWZfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTEyNzc9aW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEyOTItXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtlcnJvciBub21lbVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTI5MzpcdHdwX2luaXQobWVtLCAyICogcGFnZV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjk0LVx0d3BfYWRkcl9yYW5nZShtZW0sIDIgKiBwYWdlX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMzE3LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEzMTg6XHR3cF9pbml0KG1lbTIsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTMxOS1cdHdwX2FkZHJfcmFuZ2UobWVtMiwgcGFnZV9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM9MTQ0Mz1zdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE0NjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTQ2MjpcdHdwX2luaXQobWVtLCAweDEwMDAgKiBudGhyZWFkcyAqIHBhZ2VzX3Blcl90aHJlYWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE0NjMtXHR3cF9hZGRyX3JhbmdlKG1lbSwgMHgxMDAwICogbnRocmVhZHMgKiBwYWdlc19wZXJfdGhyZWFkKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM9MTU5Nj1pbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjI5LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2MzA6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2MzEtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjQyLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2NDM6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NDQtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjUzLVx0aWYgKG1hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2NTQ6XHRcdHdwX2luaXQobWFwLCBocGFnZV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjU1LVx0XHR3cF9hZGRyX3JhbmdlKG1hcCwgaHBhZ2Vfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NjYtXHRpZiAobWVtKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY2NzpcdFx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjY4LVx0XHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjgwLVx0aWYgKG1lbSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2ODE6XHRcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY4Mi1cdFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY5Ny1cdGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2OTg6XHRcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY5OS1cdFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTcyOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNzMwOlx0d3BfaW5pdChmbWVtLCBzYnVmLnN0X3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3MzEtXHR3cF9hZGRyX3JhbmdlKGZtZW0sIHNidWYuc3Rfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTc1ODpcdHdwX2luaXQoZm1lbSwgYnVmX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTktXHR3cF9hZGRyX3JhbmdlKGZtZW0sIGJ1Zl9zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NDIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgYGluaXRfdWZmZGAgaW4gYHBhZ2VtYXBfaW9jdGwuY2AgZm9yIFNlbGZ0ZXN0cyoqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBpbml0X3VmZmRgIHdpdGhpbiB0aGF0IGBwYWdlbWFwX2lvY3RsLmNgIGZpbGUsIG5lc3RsZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tYC4gVGhhdCBtZWFucyB0aGlzIGlzIGEgdGVzdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgYHBhZ2VtYXBfaW9jdGxgIHN5c3RlbSBjYWxscy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCBgaW5pdF91ZmZkYCBsaWtlbHkgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgb2YgYSB1c2VyZmF1bHRmZCwgb3IgVUZGRCwgaW5zdGFuY2UgZm9yIHVzZSB3aXRoaW4gdGhlc2UgdGVzdHMuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgaW5kaWNhdGl2ZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSAmIzM0O3NlbGZ0ZXN0LCYjMzQ7IGl0IGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBlbnZpcm9ubWVudCByZWFkeSB0byBleGVyY2lzZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGFnZSBtYXAgSU9DVExzLiBTbywgcHJvYmFibHkgc2V0cyB1cCBzb21lIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIGNvbmZpZ3VyZXMgdGhlIFVGRkQgdG8gdHJpZ2dlciBvbiBzcGVjaWZpYyBldmVudHMsIGFuZCBnZW5lcmFsbHkgZG9lcyB0aGUgaGVhdnkgbGlmdGluZyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXN0aW5nIG9mIHRoZSBJT0NUTHMgdGhlbXNlbHZlcyBjYW4gY29tbWVuY2UuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzLiBNeSBtaW5kJiMzOTtzIGV5ZSBzZWVzIGEgZnVuY3Rpb24gcHJlcGFyaW5nIHRoZSBzdGFnZSBmb3IgdGhlIG1haW4gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdGludCBpbml0X3VmZmQodm9pZClcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgdWZmZGlvX2FwaSB1ZmZkaW9fYXBpO1xuICA5ODpcdFxuICA5OTpcdFx0dWZmZCA9IHN5c2NhbGwoX19OUl91c2VyZmF1bHRmZCwgT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpO1xuIDEwMDpcdFx0aWYgKHVmZmQgPT0gLTEpXG4gMTAxOlx0XHRcdHJldHVybiB1ZmZkO1xuIDEwMjpcdFxuIDEwMzpcdFx0dWZmZGlvX2FwaS5hcGkgPSBVRkZEX0FQSTtcbiAxMDQ6XHRcdHVmZmRpb19hcGkuZmVhdHVyZXMgPSBVRkZEX0ZFQVRVUkVfV1BfVU5QT1BVTEFURUQgfCBVRkZEX0ZFQVRVUkVfV1BfQVNZTkMgfFxuIDEwNTpcdFx0XHRcdCAgICAgIFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU07XG4gMTA2Olx0XHRpZiAoaW9jdGwodWZmZCwgVUZGRElPX0FQSSwgXHUwMDI2dWZmZGlvX2FwaSkpXG4gMTA3Olx0XHRcdHJldHVybiAtMTtcbiAxMDg6XHRcbiAxMDk6XHRcdGlmICghKHVmZmRpb19hcGkuYXBpIFx1MDAyNiBVRkZESU9fUkVHSVNURVJfTU9ERV9XUCkgfHxcbiAxMTA6XHRcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9VTlBPUFVMQVRFRCkgfHxcbiAxMTE6XHRcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9BU1lOQykgfHxcbiAxMTI6XHRcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU0pKVxuIDExMzpcdFx0XHRyZXR1cm4gLTE7XG4gMTE0Olx0XG4gMTE1Olx0XHRyZXR1cm4gMDtcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0aW50IHdwX2luaXQodm9pZCAqYWRkciwgbG9uZyBzaXplKVxuIDExOTpcdHtcbiAxMjA6XHRcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIDEyMTpcdFx0c3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7XG4gMTIyOlx0XG4gMTIzOlx0XHR1ZmZkaW9fcmVnaXN0ZXIucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuIDEyNDpcdFx0dWZmZGlvX3JlZ2lzdGVyLnJhbmdlLmxlbiA9IHNpemU7XG4gMTI1Olx0XHR1ZmZkaW9fcmVnaXN0ZXIubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQO1xuIDEyNjpcdFx0aWYgKGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgXHUwMDI2dWZmZGlvX3JlZ2lzdGVyKSlcbiAxMjc6XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2lvY3RsKFVGRkRJT19SRUdJU1RFUikgJWQgJXNcXG5cJiMzNDssIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIDEyODpcdFxuIDEyOTpcdFx0aWYgKCEodWZmZGlvX3JlZ2lzdGVyLmlvY3RscyBcdTAwMjYgVUZGRElPX1dSSVRFUFJPVEVDVCkpXG4gMTMwOlx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtpb2N0bCBzZXQgaXMgaW5jb3JyZWN0XFxuXCYjMzQ7KTtcbiAxMzE6XHRcbiAxMzI6XHRcdHdwLnJhbmdlLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbiAxMzM6XHRcdHdwLnJhbmdlLmxlbiA9IHNpemU7XG4gMTM0Olx0XHR3cC5tb2RlID0gVUZGRElPX1dSSVRFUFJPVEVDVF9NT0RFX1dQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIFdyaXRlIFByb3RlY3Rpb24gd2l0aCBVc2VyZmF1bHRmZCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBgUEFHRU1BUF9TQ0FOYCB3b3JrcywgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZGVlcGx5IGNvbm5lY3RlZCB0byBgVVNFUkZBVUxURkRgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYFVGRkRfRkVBVFVSRV9XUF9VTlBPUFVMQVRFRGAgZmVhdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc29tZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gZ2V0IHRoZSBtb3N0IG91dCBvZiB0aGlzLgoKSXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCBlbmFibGluZyBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgZmlyc3Qgc3RlcC4gVGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuIEJ1dCBJIG5lZWQgdG8gYWxzbyBjb25zaWRlciBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAuIFRoaXMgc2VlbXMgbGlrZSB0aGUgY3J1Y2lhbCBwaWVjZSBmb3IgbWFuYWdpbmcgd3JpdGUgcHJvdGVjdGlvbiB1c2luZyB1c2VyZmF1bHRmZCBlZmZlY3RpdmVseS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgSSYjMzk7dmUgY2hvc2VuIHRoZSByaWdodCBjb25maWcgaGVyZSB0byBnZXQgdGhlIGludGVuZGVkIHJlc3VsdHMsIG9mIGNvdXJzZSwgYmVjYXVzZSBhbiBpbmNvcnJlY3QgY29uZmlnIGNob2ljZSBjb3VsZCBsZWFkIHRvIHNvbWUgc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzk2PWlmIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnOjEzOTc6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxubW0vS2NvbmZpZy0xMzk4LVx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJhdmVsaW5nIFBURSBNYXJrZXJzIGFuZCBVRkZEKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0JiMzOTtzIHNwZWNpZmljYWxseSBmb3Igc2hhcmVkIG1lbW9yeSBvciBodWdldGxiZnMsIGJ1dCB0aGVuIGl0IGhpdCBtZTogYFBURV9NQVJLRVJfVUZGRF9XUGAgaXRzZWxmIGlzIHVzZWQgZm9yIGFsbCB1bnBvcHVsYXRlZCBQVEVzLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBiZSBwcmVjaXNlLgoKV2FpdCBhIHNlY29uZCwgd2FzbiYjMzk7dCBgUFRFX01BUktFUl9VRkZEX1dQYCB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBhcyBgQklUKDApYCBpbiBgaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhgPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLgoKTm93IEkmIzM5O20gd29uZGVyaW5nIGlmIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBtaWdodCBzdGlsbCBiZSBuZWVkZWQgZm9yIGNlcnRhaW4gZmVhdHVyZXMuIEl0IGZlZWxzIGxpa2UgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IG9yIHJlbGF0aW9uc2hpcCBJJiMzOTttIG92ZXJsb29raW5nIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4KCkxldCYjMzk7cyBjaGVjayBgQ09ORklHX1VTRVJGQVVMVEZEYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU2MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBVU0VSRkFVTFRGRGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdHVyZSwgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBhcmUgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBTbywgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgIGZvciBgVVNFUkZBVUxURkRgLiYjMzQ7IFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byBmaW5kIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlY2xhcmVkLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaXRzIGRlZmF1bHQgdmFsdWUuIEtub3dpbmcgdGhlIEtjb25maWcgZmlsZSB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSB1c2Ugb2YgdGhpcyBmbGFnIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNFUkZBVUxURkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzODgtXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxubW0vS2NvbmZpZy0xMzkwLVx0Ym9vbCBcJiMzNDtFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlY2lzaW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgZW5hYmxpbmcgdXNlcmZhdWx0ZmQuIEkgc2VlIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGRlZmluZWQgaW4gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQuIEFsc28sIEkga25vdyB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHJlbGV2YW50IHRvIHRoaXMgYXMgd2VsbCwgc28gSSBzaG91bGQgbGlzdCB0aGF0IGFzIHdlbGwuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgYmVpbmcgZW5hYmxlZCBieSBkZWZhdWx0IGluIGEgbG90IG9mIGJhc2UgY29uZmlndXJhdGlvbnMgYWxyZWFkeS4gU3RpbGwsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIGFuZCBleHBsaWNpdGx5IHN0YXRlIHRoZSBzZXR0aW5nLCBzbyBsZXQmIzM5O3MgZG9jdW1lbnQgdGhhdC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyBhbHNvIGRlZmluZWQgaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWc9ODM9Y29uZmlnIFBST0NfU1lTQ1RMXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwMS1cbmZzL3Byb2MvS2NvbmZpZzoxMDI6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL0tjb25maWctMTAzLSBcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIzMAoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBjaGFuZ2VzIGhvdyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCB0byByZXR1cm4gYFBBR0VfSVNfV1JJVFRFTmAgd2hlbiBpdCBlbmNvdW50ZXJzIGBwdGVfbm9uZShwdGUpYC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUuIEl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgdG8gZml4IGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMsIG1ha2luZyBzdXJlIHVucG9wdWxhdGVkIFBURXMgYXJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHdyaXR0ZW4uIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4KCk15IGluaXRpYWwgZm9jdXMgc3ltYm9scyBhcmUgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBhbmQgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUEFHRU1BUF9TQ0FOYCBpc24mIzM5O3Qgc29sZWx5IGRlcGVuZGVudCBvbiBgVVNFUkZBVUxURkRgLCBzaW5jZSB0aGUgcGF0Y2ggbWVudGlvbnMgaXRzIG1vZGlmaWNhdGlvbi4gSG1tLCBhZnRlciBhIHF1aWNrIGludmVzdGlnYXRpb24sIGl0IHNlZW1zIHlvdSAqY2FuKiB1c2UgYFBBR0VNQVBfU0NBTmAgdG8gcXVlcnkgcGFnZSBjYXRlZ29yaWVzIHdpdGhvdXQgYFVTRVJGQVVMVEZEYCwgYnV0IHRoZSB0ZXN0IHV0aWxpemVzIGl0IGZvciB3cml0ZSBwcm90ZWN0aW9uIGZpcnN0LiBTbywgdGhlIHRlc3QgaW4gdGhlIHBhdGNoIHVzZXMgYSBzZXR1cCB3aGVyZSBpdCBpbml0aWFsaXplcywgd3JpdGVzIHRvLCBhbmQgdGhlbiBhZHZpc2VzIG1lbW9yeSBhcyBgTUFEVl9ET05UTkVFRGAuIFRoYXQgZGVmaW5pdGVseSBtZWFucyBJIHNob3VsZCBpbmNsdWRlIGBVU0VSRkFVTFRGRGAgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIE5vcGUsIGl0JiMzOTtzIGp1c3QgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuIEdpdmVuIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcywgSSBzdXNwZWN0LgoKU28sIHRvIHN1bW1hcml6ZSwgbXkgZm9jdXMgaXMgbm93IG9uIHRoZXNlIHN5bWJvbHM6IGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLCBgZG9fcGFnZW1hcF9zY2FuYCwgYW5kIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCwgYW5kIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuIE15IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3Mgd2lsbCBiZSBgVVNFUkZBVUxURkRgIGFuZCBgUFJPQ19QQUdFX01PTklUT1JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkmIzM0OywKICAgICYjMzQ7ZG9fcGFnZW1hcF9zY2FuJiMzNDssCiAgICAmIzM0O3BhZ2VtYXBfc2Nhbl9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBiZWhhdmlvciBmb3IgdW5wb3B1bGF0ZWQgUFRFcyAocHRlX25vbmUpIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlbSBhcyBQQUdFX0lTX1dSSVRURU4uIFRoaXMgZml4ZXMgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkmIzM0OywKICAgICYjMzQ7ZG9fcGFnZW1hcF9zY2FuJiMzNDssCiAgICAmIzM0O3BhZ2VtYXBfc2Nhbl9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBiZWhhdmlvciBmb3IgdW5wb3B1bGF0ZWQgUFRFcyAocHRlX25vbmUpIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlbSBhcyBQQUdFX0lTX1dSSVRURU4uIFRoaXMgZml4ZXMgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjA2LjE0MjA0OTc3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA1MDk0MTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgICBcImRvX3BhZ2VtYXBfc2NhblwiLFxuICAgIFwicGFnZW1hcF9zY2FuX3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjA2LjE0MjA1NDM0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3MDQ0MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZlMzM4NWI3Y2Q2YTU2NDE3OTAyNmI3ZWNhNzBhZjBhM2E5M2U5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDAwOjQzOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi5kNDVjNzI5YWI2YmIzMyAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5AQCAtMjQzMiw4ICsyNDMyLDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xcbiBcXG4tXFx0aWYgKHB0ZV9ub25lKHB0ZSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAocHRlX25vbmUocHRlKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbiB1bnBvcHVsYXRlZCBwdGUgY2FycmllcyBubyB1ZmZkLXdwIG1hcmtlciwgaS5lLiBpdCBpcyBub3RcXG4rXFx0XFx0ICogd3JpdGUtcHJvdGVjdGVkLCB0aGUgc2FtZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlIHByZXNlbnRcXG4rXFx0XFx0ICogYW5kIHN3YXAgY2FzZXMgYmVsb3cgcmVwb3J0IFBBR0VfSVNfV1JJVFRFTi4gUmVwb3J0IGl0IGhlcmVcXG4rXFx0XFx0ICogdG9vIHNvIHRoaXMgZ2VuZXJpYyBwYXRoIGFncmVlcyB3aXRoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdFxcbitcXHRcXHQgKiBwYXRoIGluIHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkoKSwgd2hpY2ggcmVwb3J0cyBwdGVfbm9uZSBhc1xcbitcXHRcXHQgKiB3cml0dGVuIGFuZCwgdW5kZXIgUE1fU0NBTl9XUF9NQVRDSElORywgYXJtcyBhIG1hcmtlci4gVGhlXFxuK1xcdFxcdCAqIGZhc3QgcGF0aCBhcHBsaWVzIG5vIFZNQSB0ZXN0LCBzbyBuZWl0aGVyIGRvZXMgdGhpcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiBQQUdFX0lTX1dSSVRURU47XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChwdGVfcHJlc2VudChwdGUpKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCA3NjIzMDYxNzdhZDgxMy4uNTUwZDFmMmMwNTliMzYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTEwNTEsNiArMTA1MSw1NyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxcbiBcXHRrc2Z0X3Rlc3RfcmVzdWx0KGkgPT0gVEVTVF9JVEVSQVRJT05TLCBcXFwiVGVzdCAlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJ2QgaXMgZ2VudWluZSBwdGVfbm9uZVxcbisgKiB3aXRoIG5vIHVmZmQtd3AgbWFya2VyLiBTdWNoIGEgcHRlIG11c3QgcmVhZCB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdoaWNoXFxuKyAqIFBBR0VNQVBfU0NBTiBwYXRoIHNlcnZlcyB0aGUgcmVxdWVzdDogYm90aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3QgcGF0aCBhbmRcXG4rICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxcbisgKiBwYWdlIHdyaXR0ZW4uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcXG4re1xcbitcXHRpbnQgbnBhZ2VzID0gMTYsIGk7XFxuK1xcdGxvbmcgbWVtX3NpemUgPSBucGFnZXMgKiBwYWdlX3NpemU7XFxuK1xcdHN0cnVjdCBwYWdlX3JlZ2lvbiByZWdpb25zWzE2XTtcXG4rXFx0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcXG4rXFx0Y2hhciAqbWVtO1xcbitcXG4rXFx0bWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdGlmIChtZW0gPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBtbWFwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXG4rXFx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcXG4rXFxuK1xcdC8qIFBvcHVsYXRlLCB0aGVuIGRyb3A6IHRoZSBwdGVzIGJlY29tZSBwdGVfbm9uZSB3aXRob3V0IGEgbWFya2VyLiAqL1xcbitcXHRtZW1zZXQobWVtLCAxLCBtZW1fc2l6ZSk7XFxuK1xcdGlmIChtYWR2aXNlKG1lbSwgbWVtX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcbitcXHQvKiBGYXN0IHBhdGg6IGNhdGVnb3J5X21hc2sgPT0gcmV0dXJuX21hc2sgPT0gUEFHRV9JU19XUklUVEVOLiAqL1xcbitcXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcXG4rXFx0XFx0XFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgZmFzdCBzY2FuIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmV0OyBpKyspXFxuK1xcdFxcdGZhc3QgKz0gTEVOKHJlZ2lvbnNbaV0pO1xcbitcXG4rXFx0LyogR2VuZXJpYyBwYXRoOiBzYW1lIHF1ZXJ5IGV4cHJlc3NlZCB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzay4gKi9cXG4rXFx0cmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsXFxuK1xcdFxcdFxcdCAgICAwLCBQQUdFX0lTX1dSSVRURU4sIDAsIFBBR0VfSVNfV1JJVFRFTik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIGdlbmVyaWMgc2NhbiBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJldDsgaSsrKVxcbitcXHRcXHRzbG93ICs9IExFTihyZWdpb25zW2ldKTtcXG4rXFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoZmFzdCA9PSBucGFnZXMgXFx1MDAyNlxcdTAwMjYgc2xvdyA9PSBucGFnZXMsXFxuK1xcdFxcdFxcdCBcXFwiJXMgdW5wb3B1bGF0ZWQgcHRlcyByZXBvcnRlZCB3cml0dGVuIGJ5IGJvdGggcGF0aHMgKCVsZCwgJWxkIG9mICVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IF9fZnVuY19fLCBmYXN0LCBzbG93LCBucGFnZXMpO1xcbitcXG4rXFx0d3BfZnJlZShtZW0sIG1lbV9zaXplKTtcXG4rXFx0bXVubWFwKG1lbSwgbWVtX3NpemUpO1xcbit9XFxuK1xcbiBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZTtcXG5AQCAtMTU1OSw3ICsxNjEwLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJIdWdlVExCIHRlc3Qgd2lsbCBiZSBza2lwcGVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGtzZnRfc2V0X3BsYW4oMTE3KTtcXG4rXFx0a3NmdF9zZXRfcGxhbigxMTgpO1xcbiBcXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuQEAgLTE3MzcsNiArMTc4OCw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdC8qIDE3LiBaRVJPUEZOIHRlc3RzICovXFxuIFxcdHplcm9wZm5fdGVzdHMoKTtcXG4gXFxuK1xcdC8qIDE4LiBVbnBvcHVsYXRlZCBwdGUgc2Nhbi1wYXRoIGNvbnNpc3RlbmN5ICovXFxuK1xcdHVucG9wdWxhdGVkX3NjYW5fdGVzdCgpO1xcbitcXG4gXFx0Y2xvc2UocGFnZW1hcF9mZCk7XFxuIFxcdGtzZnRfZmluaXNoZWQoKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzowNi43MTk3OTE4NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzQ3MzE3NjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgICBcImRvX3BhZ2VtYXBfc2NhblwiLFxuICAgIFwicGFnZW1hcF9zY2FuX3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZlMzM4NWI3Y2Q2YTU2NDE3OTAyNmI3ZWNhNzBhZjBhM2E5M2U5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDA6NDM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi5kNDVjNzI5YWI2YmIzMyAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXG5AQCAtMjQzMiw4ICsyNDMyLDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xuIFxuLVx0aWYgKHB0ZV9ub25lKHB0ZSkpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKHB0ZV9ub25lKHB0ZSkpIHtcbitcdFx0LypcbitcdFx0ICogQW4gdW5wb3B1bGF0ZWQgcHRlIGNhcnJpZXMgbm8gdWZmZC13cCBtYXJrZXIsIGkuZS4gaXQgaXMgbm90XG4rXHRcdCAqIHdyaXRlLXByb3RlY3RlZCwgdGhlIHNhbWUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZSBwcmVzZW50XG4rXHRcdCAqIGFuZCBzd2FwIGNhc2VzIGJlbG93IHJlcG9ydCBQQUdFX0lTX1dSSVRURU4uIFJlcG9ydCBpdCBoZXJlXG4rXHRcdCAqIHRvbyBzbyB0aGlzIGdlbmVyaWMgcGF0aCBhZ3JlZXMgd2l0aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3RcbitcdFx0ICogcGF0aCBpbiBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KCksIHdoaWNoIHJlcG9ydHMgcHRlX25vbmUgYXNcbitcdFx0ICogd3JpdHRlbiBhbmQsIHVuZGVyIFBNX1NDQU5fV1BfTUFUQ0hJTkcsIGFybXMgYSBtYXJrZXIuIFRoZVxuK1x0XHQgKiBmYXN0IHBhdGggYXBwbGllcyBubyBWTUEgdGVzdCwgc28gbmVpdGhlciBkb2VzIHRoaXMuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gUEFHRV9JU19XUklUVEVOO1xuK1x0fVxuIFxuIFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCA3NjIzMDYxNzdhZDgxMy4uNTUwZDFmMmMwNTliMzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTEwNTEsNiArMTA1MSw1NyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxuIFx0a3NmdF90ZXN0X3Jlc3VsdChpID09IFRFU1RfSVRFUkFUSU9OUywgXCJUZXN0ICVzXFxuXCIsIF9fZnVuY19fKTtcbiB9XG4gXG4rLypcbisgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJ2QgaXMgZ2VudWluZSBwdGVfbm9uZVxuKyAqIHdpdGggbm8gdWZmZC13cCBtYXJrZXIuIFN1Y2ggYSBwdGUgbXVzdCByZWFkIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2hcbisgKiBQQUdFTUFQX1NDQU4gcGF0aCBzZXJ2ZXMgdGhlIHJlcXVlc3Q6IGJvdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0IHBhdGggYW5kXG4rICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxuKyAqIHBhZ2Ugd3JpdHRlbi5cbisgKi9cbitzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcbit7XG4rXHRpbnQgbnBhZ2VzID0gMTYsIGk7XG4rXHRsb25nIG1lbV9zaXplID0gbnBhZ2VzICogcGFnZV9zaXplO1xuK1x0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xuK1x0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbitcdGNoYXIgKm1lbTtcbitcbitcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0aWYgKG1lbSA9PSBNQVBfRkFJTEVEKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBtbWFwIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXG4rXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xuK1xuK1x0LyogUG9wdWxhdGUsIHRoZW4gZHJvcDogdGhlIHB0ZXMgYmVjb21lIHB0ZV9ub25lIHdpdGhvdXQgYSBtYXJrZXIuICovXG4rXHRtZW1zZXQobWVtLCAxLCBtZW1fc2l6ZSk7XG4rXHRpZiAobWFkdmlzZShtZW0sIG1lbV9zaXplLCBNQURWX0RPTlRORUVEKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgTUFEVl9ET05UTkVFRCBmYWlsZWRcXG5cIiwgX19mdW5jX18pO1xuK1xuK1x0LyogRmFzdCBwYXRoOiBjYXRlZ29yeV9tYXNrID09IHJldHVybl9tYXNrID09IFBBR0VfSVNfV1JJVFRFTi4gKi9cbitcdHJldCA9IHBhZ2VtYXBfaW9jdGwobWVtLCBtZW1fc2l6ZSwgcmVnaW9ucywgbnBhZ2VzLCAwLCAwLFxuK1x0XHRcdCAgICBQQUdFX0lTX1dSSVRURU4sIDAsIDAsIFBBR0VfSVNfV1JJVFRFTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBmYXN0IHNjYW4gZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldDsgaSsrKVxuK1x0XHRmYXN0ICs9IExFTihyZWdpb25zW2ldKTtcbitcbitcdC8qIEdlbmVyaWMgcGF0aDogc2FtZSBxdWVyeSBleHByZXNzZWQgdmlhIGNhdGVnb3J5X2FueW9mX21hc2suICovXG4rXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcbitcdFx0XHQgICAgMCwgUEFHRV9JU19XUklUVEVOLCAwLCBQQUdFX0lTX1dSSVRURU4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgZ2VuZXJpYyBzY2FuIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXQ7IGkrKylcbitcdFx0c2xvdyArPSBMRU4ocmVnaW9uc1tpXSk7XG4rXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGZhc3QgPT0gbnBhZ2VzIFx1MDAyNlx1MDAyNiBzbG93ID09IG5wYWdlcyxcbitcdFx0XHQgXCIlcyB1bnBvcHVsYXRlZCBwdGVzIHJlcG9ydGVkIHdyaXR0ZW4gYnkgYm90aCBwYXRocyAoJWxkLCAlbGQgb2YgJWQpXFxuXCIsXG4rXHRcdFx0IF9fZnVuY19fLCBmYXN0LCBzbG93LCBucGFnZXMpO1xuK1xuK1x0d3BfZnJlZShtZW0sIG1lbV9zaXplKTtcbitcdG11bm1hcChtZW0sIG1lbV9zaXplKTtcbit9XG4rXG4gaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XG5AQCAtMTU1OSw3ICsxNjEwLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KDQpKVxuIFx0XHRrc2Z0X3ByaW50X21zZyhcIkh1Z2VUTEIgdGVzdCB3aWxsIGJlIHNraXBwZWRcXG5cIik7XG4gXG4tXHRrc2Z0X3NldF9wbGFuKDExNyk7XG4rXHRrc2Z0X3NldF9wbGFuKDExOCk7XG4gXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG5AQCAtMTczNyw2ICsxNzg4LDkgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdC8qIDE3LiBaRVJPUEZOIHRlc3RzICovXG4gXHR6ZXJvcGZuX3Rlc3RzKCk7XG4gXG4rXHQvKiAxOC4gVW5wb3B1bGF0ZWQgcHRlIHNjYW4tcGF0aCBjb25zaXN0ZW5jeSAqL1xuK1x0dW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KCk7XG4rXG4gXHRjbG9zZShwYWdlbWFwX2ZkKTtcbiBcdGtzZnRfZmluaXNoZWQoKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzowNi43MTk3OTMyMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE1ODQ2NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBNTVUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byB0d2VhayBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpczogd2hlbiB0aGUgUGFnZSBUYWJsZSBFbnRyeSBpcyBjb25zaWRlcmVkIFwibm9uZVwiIChpLmUuLCBgcHRlX25vbmUocHRlKWAgaXMgdHJ1ZSksIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgUEFHRV9JU19XUklUVEVOYCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBkZWZhdWx0IG9mIGAwYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBmZWVscyBsaWtlIGEgdmVyeSBzcGVjaWZpYyBlZGdlIGNhc2UuIFRoZW4gdGhlcmUgaXMgYW4gYWNjb21wYW55aW5nIHRlc3QgYWRkZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFNlZW1zIGxpa2UgaXQncyBpbnZvbHZlZCBpbiBmdW5jdGlvbnMgbGlrZSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBhbmQgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLCB3aGljaCBzdWdnZXN0cyB3ZSdyZSB0YWxraW5nIGFib3V0IHBhZ2UgdGFibGUgdHJhdmVyc2FsIGFuZCByZXBvcnRpbmcuIFNvLCB0aGUgZnVuY3Rpb24gd2UncmUgY29uY2VybmVkIHdpdGggaXMgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBncmVwcGVyYCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJJ2xsIHNlYXJjaCBmb3IgYWxsIHVzZXMgb2YgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAgdG8gc2VlICp3aHkqIHRoaXMgcGFydGljdWxhciByZXR1cm4gdmFsdWUgaGFzIGJlZW4gYWx0ZXJlZC4gSSdsbCBhbHNvIGNoZWNrIGFsbCB1c2VzIG9mIGBQQUdFX0lTX1dSSVRURU5gLCB0byBnYWluIGluc2lnaHQgaW50byB3aGF0IHRoaXMgdmFsdWUgcmVwcmVzZW50cy4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBzdWJ0bGUgY2hhbmdlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYW5kIHJlcG9ydHMgb24gZW1wdHkgUFRFcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjEzLjMzNTY1MTY4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQyMDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNDIxPXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyOC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDMwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI4MzQ9c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg5OS1cXHRcXHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkwMDpcXHRcXHRcXHRcXHRcXHQgICBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkocCwgdm1hLCBhZGRyLCBwdGVudCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MDEtXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciArIFBBR0VfU0laRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MTMuMzk4MDc3NzUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDUwNDg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZnMvcHJvYy90YXNrX21tdS5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBjdXJyZW50IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiB0aGUgbW9zdCByZWxldmFudCBwbGFjZSB0byBzdGFydCBzZWVtcyB0byBiZSBgZnMvcHJvYy90YXNrX21tdS5jYCwgYXJvdW5kIGxpbmUgMjQyOS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHRvIHVucmF2ZWwgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZy4gV2hhdCdzIGl0IGRvaW5nIHdpdGggdGhlIHRhc2sncyBtZW1vcnkgbWFwPyBJcyBpdCByZWxhdGVkIHRvIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6YXRpb24/IE9yIG1heWJlIHRyYWNraW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucz8gR290dGEga2VlcCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0IGluIG1pbmQgaGVyZSBhcyBJIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MTYuNTI4NTg0MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MjA6XFx0XFxuMjQyMTpcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUge1xcbjI0MjI6XFx0XFx0c3RydWN0IHBtX3NjYW5fYXJnIGFyZztcXG4yNDIzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFza3Nfb2ZfaW50ZXJlc3QsIGN1cl92bWFfY2F0ZWdvcnk7XFxuMjQyNDpcXHRcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlY19idWY7XFxuMjQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHZlY19idWZfbGVuLCB2ZWNfYnVmX2luZGV4LCBmb3VuZF9wYWdlcztcXG4yNDI2OlxcdFxcdHN0cnVjdCBwYWdlX3JlZ2lvbiBfX3VzZXIgKnZlY19vdXQ7XFxuMjQyNzpcXHR9O1xcbjI0Mjg6XFx0XFxuMjQyOTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbjI0MzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjQzMTpcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcXG4yNDMyOlxcdHtcXG4yNDMzOlxcdFxcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcztcXG4yNDM0OlxcdFxcbjI0MzU6XFx0XFx0aWYgKHB0ZV9ub25lKHB0ZSkpIHtcXG4yNDM2OlxcdFxcdFxcdC8qXFxuMjQzNzpcXHRcXHRcXHQgKiBBbiB1bnBvcHVsYXRlZCBwdGUgY2FycmllcyBubyB1ZmZkLXdwIG1hcmtlciwgaS5lLiBpdCBpcyBub3RcXG4yNDM4OlxcdFxcdFxcdCAqIHdyaXRlLXByb3RlY3RlZCwgdGhlIHNhbWUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZSBwcmVzZW50XFxuMjQzOTpcXHRcXHRcXHQgKiBhbmQgc3dhcCBjYXNlcyBiZWxvdyByZXBvcnQgUEFHRV9JU19XUklUVEVOLiBSZXBvcnQgaXQgaGVyZVxcbjI0NDA6XFx0XFx0XFx0ICogdG9vIHNvIHRoaXMgZ2VuZXJpYyBwYXRoIGFncmVlcyB3aXRoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdFxcbjI0NDE6XFx0XFx0XFx0ICogcGF0aCBpbiBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KCksIHdoaWNoIHJlcG9ydHMgcHRlX25vbmUgYXNcXG4yNDQyOlxcdFxcdFxcdCAqIHdyaXR0ZW4gYW5kLCB1bmRlciBQTV9TQ0FOX1dQX01BVENISU5HLCBhcm1zIGEgbWFya2VyLiBUaGVcXG4yNDQzOlxcdFxcdFxcdCAqIGZhc3QgcGF0aCBhcHBsaWVzIG5vIFZNQSB0ZXN0LCBzbyBuZWl0aGVyIGRvZXMgdGhpcy5cXG4yNDQ0OlxcdFxcdFxcdCAqL1xcbjI0NDU6XFx0XFx0XFx0cmV0dXJuIFBBR0VfSVNfV1JJVFRFTjtcXG4yNDQ2OlxcdFxcdH1cXG4yNDQ3OlxcdFxcbjI0NDg6XFx0XFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcXG4yNDQ5OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRcXHRjYXRlZ29yaWVzID0gUEFHRV9JU19QUkVTRU5UO1xcbjI0NTI6XFx0XFxuMjQ1MzpcXHRcXHRcXHRpZiAoIXB0ZV91ZmZkX3dwKHB0ZSkpXFxuMjQ1NDpcXHRcXHRcXHRcXHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTjtcXG4yNDU1OlxcdFxcbjI0NTY6XFx0XFx0XFx0aWYgKHAtXFx1MDAzZW1hc2tzX29mX2ludGVyZXN0IFxcdTAwMjYgUEFHRV9JU19GSUxFKSB7XFxuMjQ1NzpcXHRcXHRcXHRcXHRwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGUpO1xcbjI0NTg6XFx0XFx0XFx0XFx0aWYgKHBhZ2UgXFx1MDAyNlxcdTAwMjYgIVBhZ2VBbm9uKHBhZ2UpKVxcbjI0NTk6XFx0XFx0XFx0XFx0XFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX0ZJTEU7XFxuMjQ2MDpcXHRcXHRcXHR9XFxuMjQ2MTpcXHRcXG4yNDYyOlxcdFxcdFxcdGlmIChpc196ZXJvX3BmbihwdGVfcGZuKHB0ZSkpKVxcbjI0NjM6XFx0XFx0XFx0XFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1BGTlpFUk87XFxuMjQ2NDpcXHRcXHRcXHRpZiAocHRlX3NvZnRfZGlydHkocHRlKSlcXG4yNDY1OlxcdFxcdFxcdFxcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19TT0ZUX0RJUlRZO1xcbjI0NjY6XFx0XFx0fSBlbHNlIHtcXG4yNDY3OlxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuMjQ2ODpcXHRcXG4yNDY5OlxcdFxcdFxcdGNhdGVnb3JpZXMgPSBQQUdFX0lTX1NXQVBQRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjE2LjUyODc0OTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NDM4NTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBBR0VNQVBfU0NBTiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLCBzcGVjaWZpY2FsbHkgaXRzIHVzZSB3aXRoaW4gYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRoZSBtZW50YWwgYXNzb2NpYXRpb24gd2l0aCB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2MvcGlkL3BhZ2VtYXBgIGludGVyZmFjZS4gQnV0IGl0J3Mgbm90IHRoZSBmaWxlIGl0c2VsZiwgaXQgaXMgYW4gYGlvY3RsYCBvbiBhIGZpbGUgZGVzY3JpcHRvciwgYHBhZ2VtYXBfZmRgLCB3aGljaCBpcyAqZGVyaXZlZCogZnJvbSBvcGVuaW5nIHRoZSBmaWxlISBTbywgd2UncmUgdGFsa2luZyBhYm91dCBzY2FubmluZyB0aGUgcGFnZSBtYXAgZGF0YSB0aHJvdWdoIGEgc3lzdGVtIGNhbGwgaW50ZXJmYWNlLlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW46IHdoZXJlIGlzIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IGhhbmRsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYHBhZ2VtYXBgIHN1YnN5c3RlbS4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjIwLjQ3MzEzNTk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU1OTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFTUFQX1NDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMjUxPXN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXFx0c3dpdGNoIChjbWQpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI1NzpcXHRjYXNlIFBBR0VNQVBfU0NBTjpcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1OC1cXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyMC41Mjc3MDAwNjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjEzMjAwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYFBBR0VNQVBfU0NBTmAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgZG9fcGFnZW1hcF9jbWRgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBgUEFHRU1BUF9TQ0FOYCwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QuIFRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwsIG1ha2luZyBpdCBhIGNyaXRpY2FsIHBvaW50IHRvIGF1ZGl0LiBDb25zaWRlcmluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0IHRyYWNraW5nIGFuZCByZWxhdGVkIGZlYXR1cmVzIHVzZSB0aGlzLCB0aGF0J3MgZGVmaW5pdGVseSBhbiBpbXBvcnRhbnQgYXJlYSBmb3IgbWUgdG8gY2hlY2suXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBjb2RlIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBiYXNlbGluZS4gQnV0LCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZCBmb3IgYFBBR0VNQVBfU0NBTmAgZnVuY3Rpb25hbGl0eSB0byBiZSBwcmVzZW50PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYXJlIG1ldCB0byBlbnN1cmUgdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBhbmQgd2l0aG91dCB1bmZvcmVzZWVuIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyNi4xNDA5MDI3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2OTk4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRU1BUF9TQ0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMjUxPXN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXFx0c3dpdGNoIChjbWQpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI1NzpcXHRjYXNlIFBBR0VNQVBfU0NBTjpcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1OC1cXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyNi4yMTY2MDcyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNTA0MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgZG9fcGFnZW1hcF9zY2FuYCBmdW5jdGlvbiwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0J3MgcG90ZW50aWFsbHkgZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkLCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGRlcGVuZGVudCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gZmxhZyBvciBzeXN0ZW0gZGVmaW5pdGlvbi4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgaXQgd2lsbCBzZXZlcmVseSBpbXBhY3QgaG93IEkgaW50ZXJwcmV0IGl0cyBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSwgYW5kIGlmIEkgY2FuIGV2ZW4gcmVseSBvbiBpdHMgcHJlc2VuY2UgaW4gYWxsIHNjZW5hcmlvcy4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBzaW1pbGFyIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIEknbGwgc2VhcmNoIGZvciB0aG9zZSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyOS4zNzgxMTI3NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NzQwNzMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19wYWdlbWFwX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMTUxPXN0YXRpYyBsb25nIHBhZ2VtYXBfc2Nhbl9mbHVzaF9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzctXFxuZnMvcHJvYy90YXNrX21tdS5jOjMxNzg6c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9zY2FuKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHVhcmcpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzkte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMyNTE9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1Ny1cXHRjYXNlIFBBR0VNQVBfU0NBTjpcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI1ODpcXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMjU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyOS43NzU1MjQ2MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNTU5MDQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGZzL3Byb2MvdGFza19tbXUuY2AncyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRvX3BhZ2VtYXBfc2NhbmAgZnVuY3Rpb24gYmV0dGVyLCBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2MgZmlsZXN5c3RlbSdzIHRhc2sgbWVtb3J5IG1hcHMuIFRpbWUgdG8gemVybyBpbiBvbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzPyBUaG9zZSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBgZG9fcGFnZW1hcF9zY2FuYC4gSSB3YW50IHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSAqZW5hYmxlKiBvciAqZGlzYWJsZSogdGhpcyBjb2RlIHBhdGguIEkgZXhwZWN0IHRoZXJlIG1pZ2h0IGJlIGNvbXBpbGUtdGltZSBjaG9pY2VzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IHBhZ2UgdGFibGUgYXJjaGl0ZWN0dXJlcywgTlVNQSBzdXBwb3J0LCBvciBldmVuIHNwZWNpZmljIHNlY3VyaXR5IGhhcmRlbmluZyBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZW4gYGRvX3BhZ2VtYXBfc2NhbmAgaXMgKmF2YWlsYWJsZSogYW5kIHRoZXJlZm9yZSB3aGVuIHRoZSBwcm9jIGZpbGVzeXN0ZW0gd2lsbCBleHBvc2UgdGhpcyBpbmZvcm1hdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uc3RyYWludHMuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IHJlcG9ydGluZyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjMzLjUwMTExNzU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE3MDpcXHRcXG4zMTcxOlxcdFxcdHAtXFx1MDAzZXZlY19idWZfaW5kZXggPSAwO1xcbjMxNzI6XFx0XFx0cC1cXHUwMDNldmVjX2J1Zl9sZW4gPSBtaW5fdChzaXplX3QsIHAtXFx1MDAzZXZlY19idWZfbGVuLCBwLVxcdTAwM2VhcmcudmVjX2xlbik7XFxuMzE3MzpcXHRcXHRwLVxcdTAwM2V2ZWNfYnVmLVxcdTAwM2VzdGFydCA9IHAtXFx1MDAzZXZlY19idWYtXFx1MDAzZWVuZCA9IDA7XFxuMzE3NDpcXHRcXG4zMTc1OlxcdFxcdHJldHVybiBuO1xcbjMxNzY6XFx0fVxcbjMxNzc6XFx0XFxuMzE3ODpcXHRzdGF0aWMgbG9uZyBkb19wYWdlbWFwX3NjYW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdWFyZylcXG4zMTc5OlxcdHtcXG4zMTgwOlxcdFxcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSBwID0gezB9O1xcbjMxODE6XFx0XFx0dW5zaWduZWQgbG9uZyB3YWxrX3N0YXJ0O1xcbjMxODI6XFx0XFx0c2l6ZV90IG5fcmFuZ2VzX291dCA9IDA7XFxuMzE4MzpcXHRcXHRpbnQgcmV0O1xcbjMxODQ6XFx0XFxuMzE4NTpcXHRcXHRyZXQgPSBwYWdlbWFwX3NjYW5fZ2V0X2FyZ3MoXFx1MDAyNnAuYXJnLCB1YXJnKTtcXG4zMTg2OlxcdFxcdGlmIChyZXQpXFxuMzE4NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjMxODg6XFx0XFxuMzE4OTpcXHRcXHRwLm1hc2tzX29mX2ludGVyZXN0ID0gcC5hcmcuY2F0ZWdvcnlfbWFzayB8IHAuYXJnLmNhdGVnb3J5X2FueW9mX21hc2sgfFxcbjMxOTA6XFx0XFx0XFx0XFx0ICAgICAgcC5hcmcucmV0dXJuX21hc2s7XFxuMzE5MTpcXHRcXHRyZXQgPSBwYWdlbWFwX3NjYW5faW5pdF9ib3VuY2VfYnVmZmVyKFxcdTAwMjZwKTtcXG4zMTkyOlxcdFxcdGlmIChyZXQpXFxuMzE5MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjMxOTQ6XFx0XFxuMzE5NTpcXHRcXHRmb3IgKHdhbGtfc3RhcnQgPSBwLmFyZy5zdGFydDsgd2Fsa19zdGFydCBcXHUwMDNjIHAuYXJnLmVuZDtcXG4zMTk2OlxcdFxcdFxcdFxcdHdhbGtfc3RhcnQgPSBwLmFyZy53YWxrX2VuZCkge1xcbjMxOTc6XFx0XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4zMTk4OlxcdFxcdFxcdGxvbmcgbl9vdXQ7XFxuMzE5OTpcXHRcXG4zMjAwOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjMyMDE6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjMyMDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzIwMzpcXHRcXHRcXHR9XFxuMzIwNDpcXHRcXG4zMjA1OlxcdFxcdFxcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcXG4zMjA2OlxcdFxcdFxcdGlmIChyZXQpXFxuMzIwNzpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjA4OlxcdFxcbjMyMDk6XFx0XFx0XFx0LyogUHJvdGVjdGlvbiBjaGFuZ2UgZm9yIHRoZSByYW5nZSBpcyBnb2luZyB0byBoYXBwZW4uICovXFxuMzIxMDpcXHRcXHRcXHRpZiAocC5hcmcuZmxhZ3MgXFx1MDAyNiBQTV9TQ0FOX1dQX01BVENISU5HKSB7XFxuMzIxMTpcXHRcXHRcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfUFJPVEVDVElPTl9WTUEsIDAsXFxuMzIxMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kKTtcXG4zMjEzOlxcdFxcdFxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuMzIxNDpcXHRcXHRcXHR9XFxuMzIxNTpcXHRcXG4zMjE2OlxcdFxcdFxcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kLFxcbjMyMTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBhZ2VtYXBfc2Nhbl9vcHMsIFxcdTAwMjZwKTtcXG4zMjE4OlxcdFxcbjMyMTk6XFx0XFx0XFx0aWYgKHAuYXJnLmZsYWdzIFxcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MzMuNTAxMzQ0MTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMzA4ODQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYGRvX3BhZ2VtYXBfc2NhbmAqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBkb19wYWdlbWFwX3NjYW5gIGlzIGJlaW5nIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgc2V0dGluZ3MsIGFzIGxvbmcgYXMgYGZzL3Byb2MvdGFza19tbXUuY2AgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXMsIHdoYXQgdHJpZ2dlcnMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGU/IE15IGltbWVkaWF0ZSBodW5jaCwgYW5kIHRoZSBvYnZpb3VzIG5leHQgc3RlcCwgaXMgdG8gY2hlY2sgdGhlIGBmcy9wcm9jL01ha2VmaWxlYC4gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBpdCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgcnVsZXMgZGljdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MzYuNzI0NDM0NDM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODYwMDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX21tdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICs9IHByb2Mub1xcbmZzL3Byb2MvTWFrZWZpbGUtNy1cXG5mcy9wcm9jL01ha2VmaWxlOjg6Q0ZMQUdTX3Rhc2tfbW11Lm9cXHQrPSAtV25vLW92ZXJyaWRlLWluaXRcXG5mcy9wcm9jL01ha2VmaWxlLTktcHJvYy15XFx0XFx0XFx0Oj0gbm9tbXUubyB0YXNrX25vbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVxcdDo9IHRhc2tfbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzozNi43OTMwNDU4NDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NjgxNTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGFza19tbXUub2Agb25seSBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19NTVVgIGlzIGFjdGl2ZSDigJMgdGhhdCdzIGV4cGVjdGVkLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkga25vdyB0aGF0IGBmcy9wcm9jYCByZXF1aXJlcyBgQ09ORklHX1BST0NfRlNgIHRvIGJlIGVuYWJsZWQsIGFuZCBJJ20gaW50ZXJlc3RlZCBpbiBwYWdlbWFwLiBJIHdvbmRlciwgZG9lcyBgUEFHRU1BUF9TQ0FOYCBoYXZlIGFueSBoaWRkZW4gcmVxdWlyZW1lbnRzPyBQZXJoYXBzIGl0IG5lZWRzIGBDT05GSUdfVVNFUkZBVUxURkRgIG9yIHNvbWUgb3RoZXIgb2JzY3VyZSBmbGFnIGVuYWJsZWQ/IEkgcmVjYWxsIHRoYXQgYFBBR0VNQVBfU0NBTmAgaXMgaW50ZXJ0d2luZWQgd2l0aCBgcGFnZW1hcF9yZWFkYCBhbmQgYHBhZ2VtYXBfY21kYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLiBMb29rcyBsaWtlIGBwYWdlbWFwX2NtZGAgaXMgZGVmaW5lZCBpbiBgZnMvcHJvYy90YXNrX21tdS5jYCwgd2hpY2ggbWFrZXMgdGhhdCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBMZXQncyBzZWUgd2hhdCB0aGF0IGNvZGUgcmV2ZWFscyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjQwLjY3OTg2MzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMjQwOlxcdFxcbjMyNDE6XFx0XFx0LyogVGhlIHdhbGtfZW5kIGlzbid0IHNldCB3aGVuIHJldCBpcyB6ZXJvICovXFxuMzI0MjpcXHRcXHRpZiAoIXAuYXJnLndhbGtfZW5kKVxcbjMyNDM6XFx0XFx0XFx0cC5hcmcud2Fsa19lbmQgPSBwLmFyZy5lbmQ7XFxuMzI0NDpcXHRcXHRpZiAocGFnZW1hcF9zY2FuX3dyaXRlYmFja19hcmdzKFxcdTAwMjZwLmFyZywgdWFyZykpXFxuMzI0NTpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjMyNDY6XFx0XFxuMzI0NzpcXHRcXHRrZnJlZShwLnZlY19idWYpO1xcbjMyNDg6XFx0XFx0cmV0dXJuIHJldDtcXG4zMjQ5OlxcdH1cXG4zMjUwOlxcdFxcbjMyNTE6XFx0c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuMzI1MjpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4zMjUzOlxcdHtcXG4zMjU0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjMyNTU6XFx0XFxuMzI1NjpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbjMyNTc6XFx0XFx0Y2FzZSBQQUdFTUFQX1NDQU46XFxuMzI1ODpcXHRcXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcbjMyNTk6XFx0XFxuMzI2MDpcXHRcXHRkZWZhdWx0OlxcbjMyNjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzI2MjpcXHRcXHR9XFxuMzI2MzpcXHR9XFxuMzI2NDpcXHRcXG4zMjY1OlxcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuMzI2NjpcXHRcXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssIC8qIGJvcnJvdyB0aGlzICovXFxuMzI2NzpcXHRcXHQucmVhZFxcdFxcdD0gcGFnZW1hcF9yZWFkLFxcbjMyNjg6XFx0XFx0Lm9wZW5cXHRcXHQ9IHBhZ2VtYXBfb3BlbixcXG4zMjY5OlxcdFxcdC5yZWxlYXNlXFx0PSBwYWdlbWFwX3JlbGVhc2UsXFxuMzI3MDpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSBkb19wYWdlbWFwX2NtZCxcXG4zMjcxOlxcdFxcdC5jb21wYXRfaW9jdGxcXHQ9IGRvX3BhZ2VtYXBfY21kLFxcbjMyNzI6XFx0fTtcXG4zMjczOlxcdCNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cXG4zMjc0OlxcdFxcbjMyNzU6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMzI3NjpcXHRcXG4zMjc3OlxcdHN0cnVjdCBudW1hX21hcHMge1xcbjMyNzg6XFx0XFx0dW5zaWduZWQgbG9uZyBwYWdlcztcXG4zMjc5OlxcdFxcdHVuc2lnbmVkIGxvbmcgYW5vbjtcXG4zMjgwOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWN0aXZlO1xcbjMyODE6XFx0XFx0dW5zaWduZWQgbG9uZyB3cml0ZWJhY2s7XFxuMzI4MjpcXHRcXHR1bnNpZ25lZCBsb25nIG1hcGNvdW50X21heDtcXG4zMjgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZGlydHk7XFxuMzI4NDpcXHRcXHR1bnNpZ25lZCBsb25nIHN3YXBjYWNoZTtcXG4zMjg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm9kZVtNQVhfTlVNTk9ERVNdO1xcbjMyODY6XFx0fTtcXG4zMjg3OlxcdFxcbjMyODg6XFx0c3RydWN0IG51bWFfbWFwc19wcml2YXRlIHtcXG4zMjg5OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSBwcm9jX21hcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjQwLjY4MDA0Mzg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc3NjYyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHNvIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AuLi4gdGhhdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgc2VlIGl0J3MgdHVja2VkIGF3YXkgdW5kZXIgYW4gYCNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9gLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5LCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gdGhlIHByb2Nlc3MgcGFnZSBtYXAsIGlzIG9ubHkgcHJlc2VudCBpZiBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyAqbm90KiBkZWZpbmVkLiBOb3csIHRoYXQncyBub3QgdGhlIG1vc3QgaW50dWl0aXZlIGFycmFuZ2VtZW50LiBVc3VhbGx5LCB5b3UnZCAqZXhwZWN0KiB0aGUgY29kZSB0byBiZSBwcmVzZW50ICppZiogdGhlIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4gQnV0IGhleSwgaXQgaGFwcGVucywgZXNwZWNpYWxseSBpbiBvbGRlciBjb2RlYmFzZXMgd2hlcmUgdGhpbmdzIG1pZ2h0IGhhdmUgZXZvbHZlZCBhIGJpdCBvZGRseS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uICp3aGVyZSogdGhlIGAjaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCB0aGF0IHN1cnJvdW5kcyB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgYWN0dWFsbHkgYmVnaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgc3Vycm91bmRpbmcgbG9naWMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aHkgdGhpcyBjb25kaXRpb25hbCBleGNsdXNpb24gZXhpc3RzLiBJcyB0aGlzIHNvbWUga2luZCBvZiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IElzIGl0IHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZSBvciBwbGF0Zm9ybT8gT3IgaXMgaXQgYSBkZXByZWNhdGVkIGZlYXR1cmU/IFVuZGVyc3RhbmRpbmcgdGhlICpzdGFydGluZyogcG9pbnQgb2YgdGhlIGAjaWZkZWZgIGlzIHRoZSBrZXkgdG8gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gVGltZSB0byB0cmFjayBkb3duIHRoYXQgYCNpZmRlZmAgYW5kIHNlZSB3aGF0IHRoZSBzdG9yeSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NDQuODY3ODEyMDQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz04NjM9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtODkwLVxcbmZzL3Byb2MvdGFza19tbXUuYzo4OTE6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvdGFza19tbXUuYy04OTItc3RydWN0IG1lbV9zaXplX3N0YXRzIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMjY1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3Mi19O1xcbmZzL3Byb2MvdGFza19tbXUuYzozMjczOiNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NDQuOTQwMTUxNTAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDg1OTEwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBQYWdlbWFwIGFuZCBVbnBvcHVsYXRlZCBQVEVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaW5nZXMgb24gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIGhlcmUsIGJ1dCBsZXQncyBhc3N1bWUgaXQncyB0aGUgbWFpbiBvbmUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgKmluc2lkZSogdGhlIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGJsb2NrLlxuXG5UaGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBpcyBzdWJ0bGU6IEluc3RlYWQgb2YgcmV0dXJuaW5nIDAgZm9yIHVucG9wdWxhdGVkIFBURXMgKHRob3NlIGluZGljYXRlZCBieSBgcHRlX25vbmUocHRlKWApLCB0aGUgY29kZSBub3cgcmV0dXJucyBgUEFHRV9JU19XUklUVEVOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCByZXBvcnRzIHRoZXNlIHVucG9wdWxhdGVkIGVudHJpZXMuIEVzc2VudGlhbGx5LCBpdCdzIGNoYW5naW5nIHRoZSBzZW1hbnRpY3Mgb2YgdGhhdCByZXBvcnQuXG5cbk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwg4oCTIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAsIGFuZCBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC4gSSB3YXMgcmlnaHQsIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGlzIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrLi4uIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgYnV0IGRvZXNuJ3QgbWFrZSBpdCBsZXNzIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEFuZCB5ZXMsIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCwgYW5kIGBkb19wYWdlbWFwX3NjYW5gIGFyZSBhbHNvIHN0YXRpYy4gYGRvX3BhZ2VtYXBfY21kYCBpcyBhbHNvIHN0YXRpYyEgSSBoYXZlIGEgc2V0IG9mIGNvcmUgZnVuY3Rpb24gc3ltYm9scyB0byBmb2N1cyBvbi5cblxuVGhlIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgaWYgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgbWFrZXMgdXNlIG9mIHRoZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBncmFwaCB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjUxLjA0ODc0NDcyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZW1hcF9zY2FuX3B0ZV9ob2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MzA0MD1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ni1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0NzpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ4LVxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMwNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNzYtXFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNzc6XFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc4LVxcdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjUxLjExMzM2OTY2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4MDQyNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLCBhbmQgdGhlIG5hbWUgZ2l2ZXMgYSBzdHJvbmcgY2x1ZS4gSXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGZpbmRpbmcgXCJob2xlc1wiIGluIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIG9yIFBURXMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgcGVyaGFwcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhvdyB0aGUga2VybmVsIG1hcHMgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5LiBTbywgSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaWRlbnRpZmllcyByZWdpb25zIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aGF0IGFyZW4ndCBjdXJyZW50bHkgbWFwcGVkIHRvIGFueSBwaHlzaWNhbCBwYWdlcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGVmZmljaWVudCBtZW1vcnkgYWxsb2NhdGlvbi5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgYWxnb3JpdGhtcyBhcmUgZW1wbG95ZWQgZm9yIHRoZSBzY2FubmluZyBwcm9jZXNzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIG9yIG9wdGltaXphdGlvbnMgcHJlc2VudC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGxvb2sgZm9yIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHNpemVzLCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgYW5kIHdoZXRoZXIgaXQncyBjb25jZXJuZWQgYWJvdXQgdGhpbmdzIGxpa2UgbWVtb3J5IHByb3RlY3Rpb24gb3IgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykuIEknbGwgbmVlZCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGxpa2UgdGhlIGJ1ZGR5IGFsbG9jYXRvciBvciB0aGUgc2xhYiBhbGxvY2F0b3IuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zPyBXaGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZD8gRG9lcyBpdCB1dGlsaXplIGFueSBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgYW5kIGlmIHNvLCBob3cgZG9lcyBpdCBtYW5hZ2UgdGhlbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3M/IElzIHRoZXJlIGFueSB1c2Ugb2YgcHJlZmV0Y2hpbmcgb3Igb3RoZXIgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXM/IFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBwZXJmb3JtcyBpdHMgZHV0eSwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NTQuNjIxNDEzODUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzA0MDpcXHRzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMzA0MTpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbjMwNDI6XFx0e1xcbjMwNDM6XFx0XFx0cmV0dXJuIDA7XFxuMzA0NDpcXHR9XFxuMzA0NTpcXHQjZW5kaWZcXG4zMDQ2OlxcdFxcbjMwNDc6XFx0c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4zMDQ4OlxcdFxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbjMwNDk6XFx0e1xcbjMwNTA6XFx0XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4zMDUxOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cXHUwMDNldm1hO1xcbjMwNTI6XFx0XFx0aW50IHJldCwgZXJyO1xcbjMwNTM6XFx0XFxuMzA1NDpcXHRcXHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCkpXFxuMzA1NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMDU2OlxcdFxcbjMwNTc6XFx0XFx0cmV0ID0gcGFnZW1hcF9zY2FuX291dHB1dChwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5LCBwLCBhZGRyLCBcXHUwMDI2ZW5kKTtcXG4zMDU4OlxcdFxcdGlmIChhZGRyID09IGVuZClcXG4zMDU5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzA2MDpcXHRcXG4zMDYxOlxcdFxcdGlmICh+cC1cXHUwMDNlYXJnLmZsYWdzIFxcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcXG4zMDYyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzA2MzpcXHRcXG4zMDY0OlxcdFxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG4zMDY1OlxcdFxcdFxcdGVyciA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aodm1hLCBhZGRyLCBlbmQpO1xcbjMwNjY6XFx0XFx0ZWxzZVxcbjMwNjc6XFx0XFx0XFx0ZXJyID0gdWZmZF93cF9yYW5nZSh2bWEsIGFkZHIsIGVuZCAtIGFkZHIsIHRydWUpO1xcbjMwNjg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMzA2OTpcXHRcXHRcXHRyZXQgPSBlcnI7XFxuMzA3MDpcXHRcXG4zMDcxOlxcdFxcdHJldHVybiByZXQ7XFxuMzA3MjpcXHR9XFxuMzA3MzpcXHRcXG4zMDc0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcGFnZW1hcF9zY2FuX29wcyA9IHtcXG4zMDc1OlxcdFxcdC50ZXN0X3dhbGsgPSBwYWdlbWFwX3NjYW5fdGVzdF93YWxrLFxcbjMwNzY6XFx0XFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuMzA3NzpcXHRcXHQucHRlX2hvbGUgPSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUsXFxuMzA3ODpcXHRcXHQuaHVnZXRsYl9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5LFxcbjMwNzk6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NTQuNjIxNTc2MjAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDI4NjQ0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgYW4gZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gUGFnZW1hcCBTY2FucyoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEkgd2FzIGp1c3QgdGhpbmtpbmcgYWJvdXQgdGhlIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaGFuZGxlcyBwYWdlIHRhYmxlIGVudHJpZXMuIEl0IHN0cnVjayBtZSB0aGF0LCBjdXJyZW50bHksIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZG9lc24ndCBzZWVtIHRvIG1ha2UgdXNlIG9mIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLiBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIHRoYXQgdmFyaWFibGUgYmVpbmcgdXNlZCBoZXJlIGluIHRoZSBzYW1lIHdheSBJJ20gYWNjdXN0b21lZCB0byBzZWVpbmcgaW4gc2ltaWxhciBmdW5jdGlvbnMuXG5cblRoZW4gSSBwYXVzZWQgYW5kIHJlbWVtYmVyZWQgYSByZWxhdGVkIHBvaW50LiBJIGtub3cgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAgKmlzKiBkZWZpbml0ZWx5IGVtcGxveWVkLCBhbmQgY3J1Y2lhbGx5LCBpdCdzIHVzZWQgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCBhbmQgYHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSdzIGEgZGlmZmVyZW5jZSBpbiBob3cgd2UncmUgY2F0ZWdvcml6aW5nIHBhZ2VzIGJhc2VkIG9uIGVudHJ5IHR5cGUsIHBvc3NpYmx5IHNvbWV0aGluZyB0aGF0IEkgc2hvdWxkIHJldmlzaXQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgZm9yIG9wdGltaXphdGlvbiBvciBpZiB0aGUgc2VwYXJhdGlvbiBvZiBwcm9jZXNzZXMgaXMgYWN0dWFsbHkgdGhlIHByZWZlcnJlZCBtZXRob2QuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBkaWZmZXJlbmNlIGluIHVzYWdlIGFjcm9zcyB0aGVzZSBmdW5jdGlvbnMgaXMgaW50ZW50aW9uYWwgYW5kIHBhcnQgb2YgdGhlIG92ZXJhbGwgZGVzaWduLCBvciBpZiB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpbmNvbnNpc3RlbmN5IHRoYXQgY291bGQgYmUgaW1wcm92ZWQgdXBvbi4gTmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0Mzo1OC4wNjQ0NDIzNzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTg5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VtYXBfcGFnZV9jYXRlZ29yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTI0MjE9c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDI4LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNDI5OnN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzAtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjgzND1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODk5LVxcdFxcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyA9IHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfFxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTAwOlxcdFxcdFxcdFxcdFxcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMS1cXHRcXHR1bnNpZ25lZCBsb25nIG5leHQgPSBhZGRyICsgUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0Mzo1OC4xMjQwMzc2NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzMTQwMDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCoqXG5cblJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBwaWVjZSBvZiBsb2dpYyBpcyBvbmx5IHJlZmVyZW5jZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIExldCdzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgIGFuZCBzZWUgd2hhdCBpdCdzIGFsbCBhYm91dC4gSSdsbCBuZWVkIHRvIHJlY29uc3RydWN0IHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgc3BlY2lmaWMgaW50ZXJhY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBhZ2UtbWFwIHNjYW5uaW5nIHByb2Nlc3MsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBtYW5hZ2VtZW50IG9mIHBhZ2UgdGFibGUgZW50cmllcy4gTGV0J3Mgc2VlIGlmIHRoaXMgY29udGV4dCByZXZlYWxzIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBhbmQgd2hhdCBjb25jZXJucyBtZSBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MDEuMDU1NDQwOTQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg4MDpcXHRcXHRcXHRcXHRpZiAoKHB0ZV9wcmVzZW50KHB0ZW50KSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZF93cChwdGVudCkpIHx8XFxuMjg4MTpcXHRcXHRcXHRcXHQgICAgcHRlX3N3cF91ZmZkX3dwX2FueShwdGVudCkpXFxuMjg4MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODgzOlxcdFxcdFxcdFxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQocC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IFBBR0VfSVNfV1JJVFRFTixcXG4yODg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcCwgYWRkciwgXFx1MDAyNm5leHQpO1xcbjI4ODU6XFx0XFx0XFx0XFx0aWYgKG5leHQgPT0gYWRkcilcXG4yODg2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4ODc6XFx0XFx0XFx0XFx0aWYgKH5wLVxcdTAwM2VhcmcuZmxhZ3MgXFx1MDAyNiBQTV9TQ0FOX1dQX01BVENISU5HKVxcbjI4ODg6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjg4OTpcXHRcXHRcXHRcXHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XFxuMjg5MDpcXHRcXHRcXHRcXHRpZiAoIWZsdXNoX2VuZClcXG4yODkxOlxcdFxcdFxcdFxcdFxcdHN0YXJ0ID0gYWRkcjtcXG4yODkyOlxcdFxcdFxcdFxcdGZsdXNoX2VuZCA9IG5leHQ7XFxuMjg5MzpcXHRcXHRcXHR9XFxuMjg5NDpcXHRcXHRcXHRnb3RvIGZsdXNoX2FuZF9yZXR1cm47XFxuMjg5NTpcXHRcXHR9XFxuMjg5NjpcXHRcXG4yODk3OlxcdFxcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyICE9IGVuZDsgcHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuMjg5ODpcXHRcXHRcXHRwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuMjg5OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG4yOTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcXG4yOTAxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IGFkZHIgKyBQQUdFX1NJWkU7XFxuMjkwMjpcXHRcXG4yOTAzOlxcdFxcdFxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuMjkwNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yOTA1OlxcdFxcbjI5MDY6XFx0XFx0XFx0cmV0ID0gcGFnZW1hcF9zY2FuX291dHB1dChjYXRlZ29yaWVzLCBwLCBhZGRyLCBcXHUwMDI2bmV4dCk7XFxuMjkwNzpcXHRcXHRcXHRpZiAobmV4dCA9PSBhZGRyKVxcbjI5MDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjkwOTpcXHRcXG4yOTEwOlxcdFxcdFxcdGlmICh+cC1cXHUwMDNlYXJnLmZsYWdzIFxcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcXG4yOTExOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI5MTI6XFx0XFx0XFx0aWYgKH5jYXRlZ29yaWVzIFxcdTAwMjYgUEFHRV9JU19XUklUVEVOKVxcbjI5MTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjkxNDpcXHRcXG4yOTE1OlxcdFxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG4yOTE2OlxcdFxcdFxcdGlmICghZmx1c2hfZW5kKVxcbjI5MTc6XFx0XFx0XFx0XFx0c3RhcnQgPSBhZGRyO1xcbjI5MTg6XFx0XFx0XFx0Zmx1c2hfZW5kID0gbmV4dDtcXG4yOTE5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MDEuMDU1NjgwMDg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzU1MDEzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIE1hcCBTY2FubmluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBwYWdlbWFwYCBjb2RlLiBJdCBsb29rcyBsaWtlIGBkb19wYWdlbWFwX3NjYW5gIGFuZCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhlIG1haW4gbG9naWMgZmxvdy4gSSByZW1lbWJlciBzZWVpbmcgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgbWVudGlvbmVkIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgZmVhdHVyZSwgc28gSSdtIGtlZXBpbmcgdGhhdCBpbiBtaW5kLiBXYWl0IGEgbWludXRlLi4uIEkgcmVjYWxsIHRoYXQgdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIGlzIGFjdHVhbGx5IGludm9sdmVkIHdpdGggdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdCB0cmFja2luZy4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBvciBpZiBpdCBpcyBzb21laG93IG9wdGlvbmFsLiBJJ20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgdG8gYHB0ZV91ZmZkX3dwYCBvciBgbWFrZV91ZmZkX3dwX3B0ZWAuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDowNC41MzExODM0NDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzUyNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ha2VfdWZmZF93cF9wdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQ4OC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQ4OTpzdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDkwLVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4NjQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjI4NjU6XFx0XFx0XFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODY2LVxcdFxcdFxcdGlmICghZmx1c2hfZW5kKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODgtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjI4ODk6XFx0XFx0XFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODkwLVxcdFxcdFxcdGlmICghZmx1c2hfZW5kKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MTQtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI5MTU6XFx0XFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTE2LVxcdFxcdGlmICghZmx1c2hfZW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDowNC42MzA5NDE0MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDg1NTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gYG1ha2VfdWZmZF93cF9wdGVgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlcmZhdWx0ZmQgKFVGRkQpIHdyaXRlIHByb3RlY3Rpb24gaXMgc2V0IHVwIGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGxldmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gcHJvY2Vzc2VzIGluIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1ha2VfdWZmZF93cF9wdGVgIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCB0aGUgY3J1Y2lhbCBiaXQpIG9mIHNldHRpbmcgdGhlIFVGRkQgd3JpdGUgcHJvdGVjdGlvbiBzaG91bGQgaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkyOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjA3LjU4MTc5OTU3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0ODA6XFx0XFx0XFx0XFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX0ZJTEU7XFxuMjQ4MTpcXHRcXG4yNDgyOlxcdFxcdFxcdGlmIChwdGVfc3dwX3NvZnRfZGlydHkocHRlKSlcXG4yNDgzOlxcdFxcdFxcdFxcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19TT0ZUX0RJUlRZO1xcbjI0ODQ6XFx0XFx0fVxcbjI0ODU6XFx0XFxuMjQ4NjpcXHRcXHRyZXR1cm4gY2F0ZWdvcmllcztcXG4yNDg3OlxcdH1cXG4yNDg4OlxcdFxcbjI0ODk6XFx0c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4yNDkwOlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudClcXG4yNDkxOlxcdHtcXG4yNDkyOlxcdFxcdGlmIChwdGVfcHJlc2VudChwdGVudCkpIHtcXG4yNDkzOlxcdFxcdFxcdHB0ZV90IG9sZF9wdGU7XFxuMjQ5NDpcXHRcXG4yNDk1OlxcdFxcdFxcdG9sZF9wdGUgPSBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlKTtcXG4yNDk2OlxcdFxcdFxcdHB0ZW50ID0gcHRlX21rdWZmZF93cChvbGRfcHRlKTtcXG4yNDk3OlxcdFxcdFxcdHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHZtYSwgYWRkciwgcHRlLCBvbGRfcHRlLCBwdGVudCk7XFxuMjQ5ODpcXHRcXHR9IGVsc2UgaWYgKHB0ZV9ub25lKHB0ZW50KSkge1xcbjI0OTk6XFx0XFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuMjUwMDpcXHRcXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuMjUwMTpcXHRcXHR9IGVsc2Uge1xcbjI1MDI6XFx0XFx0XFx0cHRlbnQgPSBwdGVfc3dwX21rdWZmZF93cChwdGVudCk7XFxuMjUwMzpcXHRcXHRcXHRzZXRfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbjI1MDQ6XFx0XFx0fVxcbjI1MDU6XFx0fVxcbjI1MDY6XFx0XFxuMjUwNzpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMjUwODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3RocF9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuMjUwOTpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI1MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90IHBtZClcXG4yNTExOlxcdHtcXG4yNTEyOlxcdFxcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyA9IFBBR0VfSVNfSFVHRTtcXG4yNTEzOlxcdFxcbjI1MTQ6XFx0XFx0aWYgKHBtZF9ub25lKHBtZCkpXFxuMjUxNTpcXHRcXHRcXHRyZXR1cm4gY2F0ZWdvcmllcztcXG4yNTE2OlxcdFxcbjI1MTc6XFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZCkpIHtcXG4yNTE4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjI1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjA3LjU4MTk2MzY4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE4OTk3NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipQVEVfTUFSS0VSX1VGRkRfV1AgSW5xdWlyeSoqXG5cbkhtbSwgc28gYFBURV9NQVJLRVJfVUZGRF9XUGAgaXMgaW4gcGxheSBoZXJlLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgbWFya2VyIGFsd2F5cyBhdmFpbGFibGUsIG9yIGlzIGl0IGNvbnRpbmdlbnQgb24gc29tZSBjb25maWd1cmF0aW9uIG9yIHNwZWNpZmljIGtlcm5lbCBidWlsZCBvcHRpb25zPyBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgcHJlc2VuY2UuXG5cbk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycywgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYGluY2x1ZGUvbGludXgvc3dhcG9wcy5oYCwgb3IgbWF5YmUgYSByZWxhdGVkIGZpbGUuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0aGlzIGtpbmQgb2YgZGVmaW5pdGlvbiB0byByZXNpZGUuIEEgcXVpY2sgZ3JlcCBtaWdodCBhbHNvIGJlIHVzZWZ1bCwgYnV0IGNoZWNraW5nIHRoZSBoZWFkZXIgaXMgdGhlIGRlZmluaXRpdmUgd2F5IHRvIGNvbmZpcm0gaXRzIHVuY29uZGl0aW9uYWwgYXZhaWxhYmlsaXR5IG9yIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpcyBwYXJhbW91bnQgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0IG9mIHRoaXMgbWFya2VyIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MTAuNjAwOTY0MjE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQxMTg5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRFX01BUktFUl9VRkZEX1dQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg9MTY9c3RhdGljIGlubGluZSBib29sIHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKHZvaWQpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xNy17XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcXHRyZXR1cm4gcGd0YWJsZV9zdXBwb3J0c191ZmZkX3dwKCkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ2MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NjE6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTU1PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBjb3B5X3B0ZV9tYXJrZXIoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU2Mi1cXHQvKiBPbmx5IGNvcHkgUFRFIG1hcmtlcnMgaWYgVUZGRCByZWdpc3RlciBtYXRjaGVzLiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlxcdGlmICgoc3JjbSBcXHUwMDI2IFBURV9NQVJLRVJfVUZGRF9XUCkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfd3AoZHN0X3ZtYSkpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjQ6XFx0XFx0ZHN0bSB8PSBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU4Mj1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MTQtXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo2MTU6XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNjE2LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MjgxPXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfbWFya2VyO1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI4Mi1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoyODM6I2RlZmluZSAgUFRFX01BUktFUl9VRkZEX1dQXFx0XFx0XFx0QklUKDApXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjg0LS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjExLjE5NTExMjIxNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxNTk3Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVGRkQgV3JpdGUgUHJvdGVjdGlvbiBSZWxldmFuY2UqKlxuXG5IbW0sIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYC4uLiB0aGF0IHNldHRpbmcgKmNvdWxkKiBiZSByZWxldmFudCB0byB3aGF0IEknbSB3b3JraW5nIG9uLiBJIG5lZWQgdG8gZ2V0IG1vcmUgY29udGV4dCBhbmQgc2VlIGlmIGl0J3MgYXBwbGljYWJsZS4gTGV0IG1lIGNoZWNrIHdoZXJlIGl0J3MgZGVmaW5lZC4gUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAgYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIGxvb2sgZm9yIGl0cyBkZXNjcmlwdGlvbiwgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBjb3VsZCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgaW5mb3JtYXRpb24gSSdtIGxvb2tpbmcgZm9yIGFuZCBsZWFkIG1lIGRvd24gdGhlIHJpZ2h0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MTQuNzk2NzExNjg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4OTMyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTY9aWYgVVNFUkZBVUxURkRcXG5tbS9LY29uZmlnOjEzOTc6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5OC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MTYuNTE1NjUwNTMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTY4MTkwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgSW5kZXBlbmRlbmNlIG9mIFBBR0VNQVBfU0NBTiBhbmQgVVNFUkZBVUxURkQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJdCdzIGRhd25pbmcgb24gbWUg4oCTIGNvdWxkIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IG9wZXJhdGUgaW5kZXBlbmRlbnRseSBvZiBgVVNFUkZBVUxURkRgPyBUaGF0IHdvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvci4uLiB3ZWxsLCBmb3Igc2V2ZXJhbCB0aGluZ3MgSSdtIHdvcmtpbmcgb24gcmlnaHQgbm93LiBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBQQUdFTUFQX1NDQU5gIGFuZCBgQ09ORklHX1VTRVJGQVVMVEZEYCBhcmUgaW5oZXJlbnRseSBsaW5rZWQgaW4gdGhlIGNvZGUuIEknbSBsb29raW5nIGZvciBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmaW5kIGluc3RhbmNlcyB3aGVyZSBgUEFHRU1BUF9TQ0FOYCBpcyBlbmFibGVkIG9yIHVzZWQgZXZlbiAqd2l0aG91dCogYENPTkZJR19VU0VSRkFVTFRGRGAgYmVpbmcgZGVmaW5lZD8gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGFuZCBjb250cm9sIGZsb3cuXG5cbldoaWxlIEknbSBoZXJlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGRvdWJsZS1jaGVjayB0aGUgYG1ha2VfdWZmZF93cF9wdGVgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3cml0ZSBwcm90ZWN0aW9uIHBhZ2UgdGFibGUgZW50cmllcyBhcmUgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gdGhlc2UgdHdvIGZlYXR1cmVzLiBLbm93aW5nIGhvdyB0aGVzZSBjb21wb25lbnRzIGludGVyYWN0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MjAuMjMyNDcxNDQ3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDk1NjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWtlX3VmZmRfd3BfcHRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MjQyOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0ODgtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI0ODk6c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQ5MC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgcHRlX3QgcHRlbnQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjgzND1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODY0LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyODY1OlxcdFxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg2Ni1cXHRcXHRcXHRpZiAoIWZsdXNoX2VuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODg4LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyODg5OlxcdFxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg5MC1cXHRcXHRcXHRpZiAoIWZsdXNoX2VuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTE0LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTE1OlxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkxNi1cXHRcXHRpZiAoIWZsdXNoX2VuZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MjAuMjk3NDMzMDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTc3Nzg4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb2xlIG9mIGBtYWtlX3VmZmRfd3BfcHRlYCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gYG1ha2VfdWZmZF93cF9wdGVgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoeT8gV2hhdCdzIGl0cyBwdXJwb3NlP1wiIFRoZW4gSSBzZWUgdGhlIHVzYWdlIG9mIGBwdGVfbWt1ZmZkX3dwYCBhbmQgYHB0ZV9zd3BfbWt1ZmZkX3dwYC4gVGhlc2Ugc291bmQgbGlrZSB0aGV5J3JlIHJlbGF0ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9ucyBoZXJlLiBJIHN1c3BlY3QgdGhpcyBpcyBhbGwgdGllZCB0byB1c2VyZmF1bHRmZCwgYnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGBVU0VSRkFVTFRGRGAgaXMsIGluIGZhY3QsIGVzc2VudGlhbCBmb3IgYFBBR0VNQVBfU0NBTmAgdG8gYWN0dWFsbHkgYmUgdXNlZnVsLlxuXG5JIGtub3cgYFBBR0VNQVBfU0NBTmAgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgYW5kL29yIGNsZWFyaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnLCBhIHZlcnkgY29tbW9uIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhpbmtpbmcgYmFjaywgdGhlIGBQQUdFX0lTX1dSSVRURU5gIGZsYWcgaXMsIGFzIEkgcmVjYWxsLCB0cmFja2VkIHV0aWxpemluZyBgdWZmZF93cGAgbWFya2Vycy4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgKmhvdyogdGhhdCBzY2FuIGludGVyYWN0cyB3aXRoIHRob3NlIG1hcmtlcnMuIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWxsb3dlZCBmbGFncywgc28gSSdsbCBuZXh0IGV4YW1pbmUgYHBhZ2VtYXBfc2Nhbl9nZXRfYXJnc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjI0LjUxNTIxNDg2OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODA6XFx0XFxuMzA4MTpcXHRzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9nZXRfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcXG4zMDgyOlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHVhcmcpXFxuMzA4MzpcXHR7XFxuMzA4NDpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoYXJnLCAodm9pZCBfX3VzZXIgKil1YXJnLCBzaXplb2YoKmFyZykpKVxcbjMwODU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzA4NjpcXHRcXG4zMDg3OlxcdFxcdGlmIChhcmctXFx1MDAzZXNpemUgIT0gc2l6ZW9mKHN0cnVjdCBwbV9zY2FuX2FyZykpXFxuMzA4ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDg5OlxcdFxcbjMwOTA6XFx0XFx0LyogVmFsaWRhdGUgcmVxdWVzdGVkIGZlYXR1cmVzICovXFxuMzA5MTpcXHRcXHRpZiAoYXJnLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5QTV9TQ0FOX0ZMQUdTKVxcbjMwOTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzA5MzpcXHRcXHRpZiAoKGFyZy1cXHUwMDNlY2F0ZWdvcnlfaW52ZXJ0ZWQgfCBhcmctXFx1MDAzZWNhdGVnb3J5X21hc2sgfFxcbjMwOTQ6XFx0XFx0ICAgICBhcmctXFx1MDAzZWNhdGVnb3J5X2FueW9mX21hc2sgfCBhcmctXFx1MDAzZXJldHVybl9tYXNrKSBcXHUwMDI2IH5QTV9TQ0FOX0NBVEVHT1JJRVMpXFxuMzA5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDk2OlxcdFxcbjMwOTc6XFx0XFx0YXJnLVxcdTAwM2VzdGFydCA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVxcdTAwM2VzdGFydCk7XFxuMzA5ODpcXHRcXHRhcmctXFx1MDAzZWVuZCA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVxcdTAwM2VlbmQpO1xcbjMwOTk6XFx0XFx0YXJnLVxcdTAwM2V2ZWMgPSB1bnRhZ2dlZF9hZGRyKCh1bnNpZ25lZCBsb25nKWFyZy1cXHUwMDNldmVjKTtcXG4zMTAwOlxcdFxcbjMxMDE6XFx0XFx0LyogVmFsaWRhdGUgbWVtb3J5IHBvaW50ZXJzICovXFxuMzEwMjpcXHRcXHRpZiAoIUlTX0FMSUdORUQoYXJnLVxcdTAwM2VzdGFydCwgUEFHRV9TSVpFKSlcXG4zMTAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMDQ6XFx0XFx0aWYgKCFhY2Nlc3Nfb2soKHZvaWQgX191c2VyICopKGxvbmcpYXJnLVxcdTAwM2VzdGFydCwgYXJnLVxcdTAwM2VlbmQgLSBhcmctXFx1MDAzZXN0YXJ0KSlcXG4zMTA1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjMxMDY6XFx0XFx0aWYgKCFhcmctXFx1MDAzZXZlYyBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZXZlY19sZW4pXFxuMzEwNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTA4OlxcdFxcdGlmIChVSU5UX01BWCA9PSBTSVpFX01BWCBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZXZlY19sZW4gXFx1MDAzZSBTSVpFX01BWClcXG4zMTA5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMTA6XFx0XFx0aWYgKGFyZy1cXHUwMDNldmVjIFxcdTAwMjZcXHUwMDI2ICFhY2Nlc3Nfb2soKHZvaWQgX191c2VyICopKGxvbmcpYXJnLVxcdTAwM2V2ZWMsXFxuMzExMTpcXHRcXHRcXHRcXHRcXHQgICBzaXplX211bChhcmctXFx1MDAzZXZlY19sZW4sIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKSkpXFxuMzExMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMTEzOlxcdFxcbjMxMTQ6XFx0XFx0LyogRml4dXAgZGVmYXVsdCB2YWx1ZXMgKi9cXG4zMTE1OlxcdFxcdGFyZy1cXHUwMDNlZW5kID0gQUxJR04oYXJnLVxcdTAwM2VlbmQsIFBBR0VfU0laRSk7XFxuMzExNjpcXHRcXHRhcmctXFx1MDAzZXdhbGtfZW5kID0gMDtcXG4zMTE3OlxcdFxcdGlmICghYXJnLVxcdTAwM2VtYXhfcGFnZXMpXFxuMzExODpcXHRcXHRcXHRhcmctXFx1MDAzZW1heF9wYWdlcyA9IFVMT05HX01BWDtcXG4zMTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDoyNC41MTUzODk1NTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDQ1NTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwYWdlbWFwX2lvY3RsLmNgIFNlbGYtVGVzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2VsZi10ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGRlc2lnbmVkIHRvIHNwZWNpZmljYWxseSB0ZXN0IGBwYWdlbWFwX2lvY3RsYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXTigJlzIGEgZm9jdXNlZCB0ZXN0LCBhIGdvb2QgYXBwcm9hY2guIE5vdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSB0ZXN0IGl0c2VsZiB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgdGVzdGluZyBgcGFnZW1hcF9pb2N0bGAuIEEgcXVpY2sgc2VhcmNoIGZvciBgd3BfaW5pdGAgd2l0aGluIHRoYXQgZmlsZSBzaG91bGQgcmV2ZWFsIHRoZSBzcGVjaWZpYyBtZWNoYW5pc21zIGl0J3MgZW1wbG95aW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGlvY3RsIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGFzcGVjdCDigJMgdGhhdCdzIG9mdGVuIGEga2V5IGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIExldCBtZSBzZWUgd2hhdCB0aGV54oCZcmUgZG9pbmcgd2l0aCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwOCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MjcuNzQ1ODQ3OTM2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1MDpcXHRcXG4xMDUxOlxcdFxcdGtzZnRfdGVzdF9yZXN1bHQoaSA9PSBURVNUX0lURVJBVElPTlMsIFxcXCJUZXN0ICVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTA1MjpcXHR9XFxuMTA1MzpcXHRcXG4xMDU0OlxcdC8qXFxuMTA1NTpcXHQgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJ2QgaXMgZ2VudWluZSBwdGVfbm9uZVxcbjEwNTY6XFx0ICogd2l0aCBubyB1ZmZkLXdwIG1hcmtlci4gU3VjaCBhIHB0ZSBtdXN0IHJlYWQgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGljaFxcbjEwNTc6XFx0ICogUEFHRU1BUF9TQ0FOIHBhdGggc2VydmVzIHRoZSByZXF1ZXN0OiBib3RoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdCBwYXRoIGFuZFxcbjEwNTg6XFx0ICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxcbjEwNTk6XFx0ICogcGFnZSB3cml0dGVuLlxcbjEwNjA6XFx0ICovXFxuMTA2MTpcXHRzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcXG4xMDYyOlxcdHtcXG4xMDYzOlxcdFxcdGludCBucGFnZXMgPSAxNiwgaTtcXG4xMDY0OlxcdFxcdGxvbmcgbWVtX3NpemUgPSBucGFnZXMgKiBwYWdlX3NpemU7XFxuMTA2NTpcXHRcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gcmVnaW9uc1sxNl07XFxuMTA2NjpcXHRcXHRsb25nIGZhc3QgPSAwLCBzbG93ID0gMCwgcmV0O1xcbjEwNjc6XFx0XFx0Y2hhciAqbWVtO1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRtZW0gPSBtbWFwKE5VTEwsIG1lbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbjEwNzA6XFx0XFx0XFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuMTA3MTpcXHRcXHRpZiAobWVtID09IE1BUF9GQUlMRUQpXFxuMTA3MjpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIG1tYXAgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTA3MzpcXHRcXG4xMDc0OlxcdFxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxuMTA3NTpcXHRcXG4xMDc2OlxcdFxcdC8qIFBvcHVsYXRlLCB0aGVuIGRyb3A6IHRoZSBwdGVzIGJlY29tZSBwdGVfbm9uZSB3aXRob3V0IGEgbWFya2VyLiAqL1xcbjEwNzc6XFx0XFx0bWVtc2V0KG1lbSwgMSwgbWVtX3NpemUpO1xcbjEwNzg6XFx0XFx0aWYgKG1hZHZpc2UobWVtLCBtZW1fc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuMTA3OTpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTA4MDpcXHRcXG4xMDgxOlxcdFxcdC8qIEZhc3QgcGF0aDogY2F0ZWdvcnlfbWFzayA9PSByZXR1cm5fbWFzayA9PSBQQUdFX0lTX1dSSVRURU4uICovXFxuMTA4MjpcXHRcXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcXG4xMDgzOlxcdFxcdFxcdFxcdCAgICBQQUdFX0lTX1dSSVRURU4sIDAsIDAsIFBBR0VfSVNfV1JJVFRFTik7XFxuMTA4NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMDg1OlxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgZmFzdCBzY2FuIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjEwODY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJldDsgaSsrKVxcbjEwODc6XFx0XFx0XFx0ZmFzdCArPSBMRU4ocmVnaW9uc1tpXSk7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdC8qIEdlbmVyaWMgcGF0aDogc2FtZSBxdWVyeSBleHByZXNzZWQgdmlhIGNhdGVnb3J5X2FueW9mX21hc2suICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjI3Ljc0NjA0OTg3NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQzMzgyMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcGFnZW1hcF9pb2N0bC5jYCBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgU2VsZi1UZXN0cyoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWUga2VybmVsIGludGVybmFscy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgd3BfaW5pdGAgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZWxmLXRlc3RzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB2aWEgdGhlIHBhZ2VtYXAgSU9DVEwuIFRoZXJlIGFyZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhc3BlY3RzIG9mIHRoZSB0ZXN0IHNldHVwIGluIGB3cF9pbml0YCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IGF2ZW51ZXMgb2YgZXhwbG9yYXRpb24uIFRoZSBpbml0aWFsIHNldHVwIGlzIGtleSB0byB0aGUgdGVzdGluZywgYW5kIHRodXMgSSB3aWxsIGZvY3VzIG15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MzAuNjg5NDM0ODYzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc5MDE4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3BfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTk1PWludCBpbml0X3VmZmQodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExODppbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM9MTg4PWludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE5Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTk4OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE5OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0yMzk9aW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTI2My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MjY0OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTI2NS1cXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6NDExOlxcdHdwX2luaXQobVswXSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo0MTI6XFx0d3BfaW5pdChtWzFdLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQxMy1cXHR3cF9hZGRyX3JhbmdlKG1bMF0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy00NDgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjQ0OTpcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy00NTAtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01MDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjUwNDpcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01MDUtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01NTMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjU1NDpcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01NTUtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz04MDM9aW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04MTgtXFx0aWYgKG1hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo4MTk6XFx0XFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODIwLVxcdFxcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODU1LVxcdFxcdG1hcCA9IGdldGh1Z2VwYWdlKG1hcF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6ODU2OlxcdFxcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTg1Ny1cXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTg3OS1cXHRpZiAobWFwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjg4MDpcXHRcXHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04ODEtXFx0XFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05MDMtXFx0aWYgKG1hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo5MDQ6XFx0XFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTA1LVxcdFxcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTMzLVxcdGlmIChtYXApIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6OTM0OlxcdFxcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTkzNS1cXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTk2MC1cXHRpZiAobWFwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjk2MTpcXHRcXHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05NjItXFx0XFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDE2PXN0YXRpYyB2b2lkIHRlc3Rfc2ltcGxlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTAyNjpcXHR3cF9pbml0KG1hcCwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNy1cXHR3cF9hZGRyX3JhbmdlKG1hcCwgcGFnZV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDYxPXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEwNzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwNzQ6XFx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTA3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMTA1PWludCBzYW5pdHlfdGVzdHModm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTIxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTIyOlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExMjMtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTQ4LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTQ5OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExNTAtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTk0LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTk1OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOTYtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMjUyOlxcdHdwX2luaXQoZm1lbSwgYnVmX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUzLVxcdHdwX2FkZHJfcmFuZ2UoZm1lbSwgYnVmX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTEyNzc9aW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTI5Mi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImVycm9yIG5vbWVtXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTI5MzpcXHR3cF9pbml0KG1lbSwgMiAqIHBhZ2Vfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEyOTQtXFx0d3BfYWRkcl9yYW5nZShtZW0sIDIgKiBwYWdlX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEzMTctXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJlcnJvciBub21lbVxcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEzMTg6XFx0d3BfaW5pdChtZW0yLCBwYWdlX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMzE5LVxcdHdwX2FkZHJfcmFuZ2UobWVtMiwgcGFnZV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xNDQzPXN0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3QoaW50IHBhZ2Vfc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNDYxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNDYyOlxcdHdwX2luaXQobWVtLCAweDEwMDAgKiBudGhyZWFkcyAqIHBhZ2VzX3Blcl90aHJlYWQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNDYzLVxcdHdwX2FkZHJfcmFuZ2UobWVtLCAweDEwMDAgKiBudGhyZWFkcyAqIHBhZ2VzX3Blcl90aHJlYWQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTE1OTY9aW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjI5LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNjMwOlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2MzEtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjQyLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNjQzOlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NDQtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjUzLVxcdGlmIChtYXApIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY1NDpcXHRcXHR3cF9pbml0KG1hcCwgaHBhZ2Vfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NTUtXFx0XFx0d3BfYWRkcl9yYW5nZShtYXAsIGhwYWdlX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NjYtXFx0aWYgKG1lbSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNjY3OlxcdFxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NjgtXFx0XFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjgwLVxcdGlmIChtZW0pIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY4MTpcXHRcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjgyLVxcdFxcdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY5Ny1cXHRpZiAobWVtICE9IE1BUF9GQUlMRUQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY5ODpcXHRcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjk5LVxcdFxcdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTcyOS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTczMDpcXHR3cF9pbml0KGZtZW0sIHNidWYuc3Rfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3MzEtXFx0d3BfYWRkcl9yYW5nZShmbWVtLCBzYnVmLnN0X3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE3NTg6XFx0d3BfaW5pdChmbWVtLCBidWZfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTktXFx0d3BfYWRkcl9yYW5nZShmbWVtLCBidWZfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjMxLjE2NzM0MTkzMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY3NDgwODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyBgaW5pdF91ZmZkYCBpbiBgcGFnZW1hcF9pb2N0bC5jYCBmb3IgU2VsZnRlc3RzKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBpbml0X3VmZmRgIHdpdGhpbiB0aGF0IGBwYWdlbWFwX2lvY3RsLmNgIGZpbGUsIG5lc3RsZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tYC4gVGhhdCBtZWFucyB0aGlzIGlzIGEgdGVzdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgYHBhZ2VtYXBfaW9jdGxgIHN5c3RlbSBjYWxscy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCBgaW5pdF91ZmZkYCBsaWtlbHkgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgb2YgYSB1c2VyZmF1bHRmZCwgb3IgVUZGRCwgaW5zdGFuY2UgZm9yIHVzZSB3aXRoaW4gdGhlc2UgdGVzdHMuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgaW5kaWNhdGl2ZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBcInNlbGZ0ZXN0LFwiIGl0IGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBlbnZpcm9ubWVudCByZWFkeSB0byBleGVyY2lzZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGFnZSBtYXAgSU9DVExzLiBTbywgcHJvYmFibHkgc2V0cyB1cCBzb21lIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIGNvbmZpZ3VyZXMgdGhlIFVGRkQgdG8gdHJpZ2dlciBvbiBzcGVjaWZpYyBldmVudHMsIGFuZCBnZW5lcmFsbHkgZG9lcyB0aGUgaGVhdnkgbGlmdGluZyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXN0aW5nIG9mIHRoZSBJT0NUTHMgdGhlbXNlbHZlcyBjYW4gY29tbWVuY2UuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IG1pbmQncyBleWUgc2VlcyBhIGZ1bmN0aW9uIHByZXBhcmluZyB0aGUgc3RhZ2UgZm9yIHRoZSBtYWluIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc0MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjM0LjUzNDgyNTY1N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdGludCBpbml0X3VmZmQodm9pZClcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdHN0cnVjdCB1ZmZkaW9fYXBpIHVmZmRpb19hcGk7XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKTtcXG4gMTAwOlxcdFxcdGlmICh1ZmZkID09IC0xKVxcbiAxMDE6XFx0XFx0XFx0cmV0dXJuIHVmZmQ7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdHVmZmRpb19hcGkuYXBpID0gVUZGRF9BUEk7XFxuIDEwNDpcXHRcXHR1ZmZkaW9fYXBpLmZlYXR1cmVzID0gVUZGRF9GRUFUVVJFX1dQX1VOUE9QVUxBVEVEIHwgVUZGRF9GRUFUVVJFX1dQX0FTWU5DIHxcXG4gMTA1OlxcdFxcdFxcdFxcdCAgICAgIFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU07XFxuIDEwNjpcXHRcXHRpZiAoaW9jdGwodWZmZCwgVUZGRElPX0FQSSwgXFx1MDAyNnVmZmRpb19hcGkpKVxcbiAxMDc6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRpZiAoISh1ZmZkaW9fYXBpLmFwaSBcXHUwMDI2IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQKSB8fFxcbiAxMTA6XFx0XFx0ICAgICEodWZmZGlvX2FwaS5mZWF0dXJlcyBcXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9VTlBPUFVMQVRFRCkgfHxcXG4gMTExOlxcdFxcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXFx1MDAyNiBVRkZEX0ZFQVRVUkVfV1BfQVNZTkMpIHx8XFxuIDExMjpcXHRcXHQgICAgISh1ZmZkaW9fYXBpLmZlYXR1cmVzIFxcdTAwMjYgVUZGRF9GRUFUVVJFX1dQX0hVR0VUTEJGU19TSE1FTSkpXFxuIDExMzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdHJldHVybiAwO1xcbiAxMTY6XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuIDExOTpcXHR7XFxuIDEyMDpcXHRcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcXG4gMTIxOlxcdFxcdHN0cnVjdCB1ZmZkaW9fd3JpdGVwcm90ZWN0IHdwO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHR1ZmZkaW9fcmVnaXN0ZXIucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylhZGRyO1xcbiAxMjQ6XFx0XFx0dWZmZGlvX3JlZ2lzdGVyLnJhbmdlLmxlbiA9IHNpemU7XFxuIDEyNTpcXHRcXHR1ZmZkaW9fcmVnaXN0ZXIubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQO1xcbiAxMjY6XFx0XFx0aWYgKGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgXFx1MDAyNnVmZmRpb19yZWdpc3RlcikpXFxuIDEyNzpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImlvY3RsKFVGRkRJT19SRUdJU1RFUikgJWQgJXNcXFxcblxcXCIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRpZiAoISh1ZmZkaW9fcmVnaXN0ZXIuaW9jdGxzIFxcdTAwMjYgVUZGRElPX1dSSVRFUFJPVEVDVCkpXFxuIDEzMDpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImlvY3RsIHNldCBpcyBpbmNvcnJlY3RcXFxcblxcXCIpO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHR3cC5yYW5nZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuIDEzMzpcXHRcXHR3cC5yYW5nZS5sZW4gPSBzaXplO1xcbiAxMzQ6XFx0XFx0d3AubW9kZSA9IFVGRkRJT19XUklURVBST1RFQ1RfTU9ERV9XUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MzQuNTM0OTkzMjU3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjEwMjMxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgV3JpdGUgUHJvdGVjdGlvbiB3aXRoIFVzZXJmYXVsdGZkKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBgUEFHRU1BUF9TQ0FOYCB3b3JrcywgYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCdzIGRlZXBseSBjb25uZWN0ZWQgdG8gYFVTRVJGQVVMVEZEYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBVRkZEX0ZFQVRVUkVfV1BfVU5QT1BVTEFURURgIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHNvbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHRvIGdldCB0aGUgbW9zdCBvdXQgb2YgdGhpcy5cblxuSXQncyBwcmV0dHkgb2J2aW91cyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIHRoZSBmaXJzdCBzdGVwLiBUaGF0J3MgYSBuby1icmFpbmVyLiBCdXQgSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNydWNpYWwgcGllY2UgZm9yIG1hbmFnaW5nIHdyaXRlIHByb3RlY3Rpb24gdXNpbmcgdXNlcmZhdWx0ZmQgZWZmZWN0aXZlbHkuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IEkndmUgY2hvc2VuIHRoZSByaWdodCBjb25maWcgaGVyZSB0byBnZXQgdGhlIGludGVuZGVkIHJlc3VsdHMsIG9mIGNvdXJzZSwgYmVjYXVzZSBhbiBpbmNvcnJlY3QgY29uZmlnIGNob2ljZSBjb3VsZCBsZWFkIHRvIHNvbWUgc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjM3LjU5NjAxODY1NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMDU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Nj1pZiBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWc6MTM5Nzpjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxubW0vS2NvbmZpZy0xMzk4LVxcdGJvb2wgXFxcIlVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDozNy42NTkzMjkwMDRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0NDkzNzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJhdmVsaW5nIFBURSBNYXJrZXJzIGFuZCBVRkZEKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYC4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCdzIHNwZWNpZmljYWxseSBmb3Igc2hhcmVkIG1lbW9yeSBvciBodWdldGxiZnMsIGJ1dCB0aGVuIGl0IGhpdCBtZTogYFBURV9NQVJLRVJfVUZGRF9XUGAgaXRzZWxmIGlzIHVzZWQgZm9yIGFsbCB1bnBvcHVsYXRlZCBQVEVzLiBOb3csIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGJlIHByZWNpc2UuXG5cbldhaXQgYSBzZWNvbmQsIHdhc24ndCBgUFRFX01BUktFUl9VRkZEX1dQYCB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBhcyBgQklUKDApYCBpbiBgaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhgPyBUaGF0J3MgYSBjcnVjaWFsIGRldGFpbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS5cblxuTm93IEknbSB3b25kZXJpbmcgaWYgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgIG1pZ2h0IHN0aWxsIGJlIG5lZWRlZCBmb3IgY2VydGFpbiBmZWF0dXJlcy4gSXQgZmVlbHMgbGlrZSB0aGVyZSBtaWdodCBiZSBhIGRlcGVuZGVuY3kgb3IgcmVsYXRpb25zaGlwIEknbSBvdmVybG9va2luZyBoZXJlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbkxldCdzIGNoZWNrIGBDT05GSUdfVVNFUkZBVUxURkRgLiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTcxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjQxLjUwNDI2OTE5OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NjczNjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDo0MS41NjU5NDQxNjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAxNjAxOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBVU0VSRkFVTFRGRGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gU28sIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVjayBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AgZm9yIGBVU0VSRkFVTFRGRGAuXCIgVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIGZpbmQgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVjbGFyZWQsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS4gS25vd2luZyB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIHVzZSBvZiB0aGlzIGZsYWcgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTYxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6NDkuNTgxOTY1NDk1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE4Mjg5NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6NTguMTAwMjYzMTVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzk1OTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyB1c2VyZmF1bHRmZC4gSSBzZWUgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgZGVmaW5lZCBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQncyBhIGdvb2Qgc3RhcnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIGVuYWJsZWQuIEFsc28sIEkga25vdyB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHJlbGV2YW50IHRvIHRoaXMgYXMgd2VsbCwgc28gSSBzaG91bGQgbGlzdCB0aGF0IGFzIHdlbGwuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJIHJlbWVtYmVyIHNlZWluZyBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBiZWluZyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYSBsb3Qgb2YgYmFzZSBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBTdGlsbCwgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgZXhwbGljaXRseSBzdGF0ZSB0aGUgc2V0dGluZywgc28gbGV0J3MgZG9jdW1lbnQgdGhhdC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyBhbHNvIGRlZmluZWQgaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODQ4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDU6MDEuOTA4MjI0NTQ0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNjQzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfUEFHRV9NT05JVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWc9ODM9Y29uZmlnIFBST0NfU1lTQ1RMXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTAxLVxcbmZzL3Byb2MvS2NvbmZpZzoxMDI6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXFxuZnMvcHJvYy9LY29uZmlnLTEwMy0gXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ1OjAyLjAxNTQ5MzcxNFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTAyNDM4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBjaGFuZ2VzIGhvdyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCB0byByZXR1cm4gYFBBR0VfSVNfV1JJVFRFTmAgd2hlbiBpdCBlbmNvdW50ZXJzIGBwdGVfbm9uZShwdGUpYC4gVGhhdCdzIGEgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcm9jZnMgY29kZS4gSXQncyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgdG8gZml4IGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMsIG1ha2luZyBzdXJlIHVucG9wdWxhdGVkIFBURXMgYXJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHdyaXR0ZW4uIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy5cblxuTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCwgYGRvX3BhZ2VtYXBfc2NhbmAsIGFuZCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBBR0VNQVBfU0NBTmAgaXNuJ3Qgc29sZWx5IGRlcGVuZGVudCBvbiBgVVNFUkZBVUxURkRgLCBzaW5jZSB0aGUgcGF0Y2ggbWVudGlvbnMgaXRzIG1vZGlmaWNhdGlvbi4gSG1tLCBhZnRlciBhIHF1aWNrIGludmVzdGlnYXRpb24sIGl0IHNlZW1zIHlvdSAqY2FuKiB1c2UgYFBBR0VNQVBfU0NBTmAgdG8gcXVlcnkgcGFnZSBjYXRlZ29yaWVzIHdpdGhvdXQgYFVTRVJGQVVMVEZEYCwgYnV0IHRoZSB0ZXN0IHV0aWxpemVzIGl0IGZvciB3cml0ZSBwcm90ZWN0aW9uIGZpcnN0LiBTbywgdGhlIHRlc3QgaW4gdGhlIHBhdGNoIHVzZXMgYSBzZXR1cCB3aGVyZSBpdCBpbml0aWFsaXplcywgd3JpdGVzIHRvLCBhbmQgdGhlbiBhZHZpc2VzIG1lbW9yeSBhcyBgTUFEVl9ET05UTkVFRGAuIFRoYXQgZGVmaW5pdGVseSBtZWFucyBJIHNob3VsZCBpbmNsdWRlIGBVU0VSRkFVTFRGRGAgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gTm9wZSwgaXQncyBqdXN0IGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLiBHaXZlbiB0aGlzLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcywgSSBzdXNwZWN0LlxuXG5TbywgdG8gc3VtbWFyaXplLCBteSBmb2N1cyBpcyBub3cgb24gdGhlc2Ugc3ltYm9sczogYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBhbmQgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLCBhbmQgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvbiB0aGUgaW1wbGljYXRpb25zIGZvciB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLiBNeSByZWxldmFudCBjb25maWd1cmF0aW9uIGZsYWdzIHdpbGwgYmUgYFVTRVJGQVVMVEZEYCBhbmQgYFBST0NfUEFHRV9NT05JVE9SYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMzAsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ1OjEwLjExNzkzNTA0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwMjkwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfcGFnZV9jYXRlZ29yeVwiLFxuICAgIFwiZG9fcGFnZW1hcF9zY2FuXCIsXG4gICAgXCJwYWdlbWFwX3NjYW5fcG1kX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBiZWhhdmlvciBmb3IgdW5wb3B1bGF0ZWQgUFRFcyAocHRlX25vbmUpIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlbSBhcyBQQUdFX0lTX1dSSVRURU4uIFRoaXMgZml4ZXMgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgICBcImRvX3BhZ2VtYXBfc2NhblwiLFxuICAgIFwicGFnZW1hcF9zY2FuX3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 00:30:49 +0000 UTC FinishedAt: 2026-07-08 00:45:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PROC_PAGE_MONITOR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "PROC_PAGE_MONITOR" ], "series_id": "b95d30f9-8023-455c-8666-e5fbc36bd87c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "pagemap_page_category", "do_pagemap_scan", "pagemap_scan_pmd_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9wYWdlX2NhdGVnb3J5JiMzNDssCiAgICAmIzM0O2RvX3BhZ2VtYXBfc2NhbiYjMzQ7LAogICAgJiMzNDtwYWdlbWFwX3NjYW5fcG1kX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNmUzMzg1YjdjZDZhNTY0MTc5MDI2YjdlY2E3MGFmMGEzYTkzZTljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwMDo0MzowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi5kNDVjNzI5YWI2YmIzMyAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy90YXNrX21tdS5jXG5AQCAtMjQzMiw4ICYjNDM7MjQzMiwxOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcztcbiBcbi1cdGlmIChwdGVfbm9uZShwdGUpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAocHRlX25vbmUocHRlKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIHVucG9wdWxhdGVkIHB0ZSBjYXJyaWVzIG5vIHVmZmQtd3AgbWFya2VyLCBpLmUuIGl0IGlzIG5vdFxuJiM0MztcdFx0ICogd3JpdGUtcHJvdGVjdGVkLCB0aGUgc2FtZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlIHByZXNlbnRcbiYjNDM7XHRcdCAqIGFuZCBzd2FwIGNhc2VzIGJlbG93IHJlcG9ydCBQQUdFX0lTX1dSSVRURU4uIFJlcG9ydCBpdCBoZXJlXG4mIzQzO1x0XHQgKiB0b28gc28gdGhpcyBnZW5lcmljIHBhdGggYWdyZWVzIHdpdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0XG4mIzQzO1x0XHQgKiBwYXRoIGluIHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkoKSwgd2hpY2ggcmVwb3J0cyBwdGVfbm9uZSBhc1xuJiM0MztcdFx0ICogd3JpdHRlbiBhbmQsIHVuZGVyIFBNX1NDQU5fV1BfTUFUQ0hJTkcsIGFybXMgYSBtYXJrZXIuIFRoZVxuJiM0MztcdFx0ICogZmFzdCBwYXRoIGFwcGxpZXMgbm8gVk1BIHRlc3QsIHNvIG5laXRoZXIgZG9lcyB0aGlzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gUEFHRV9JU19XUklUVEVOO1xuJiM0MztcdH1cbiBcbiBcdGlmIChwdGVfcHJlc2VudChwdGUpKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggNzYyMzA2MTc3YWQ4MTMuLjU1MGQxZjJjMDU5YjM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDUxLDYgJiM0MzsxMDUxLDU3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2ltcGxlKHZvaWQpXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0KGkgPT0gVEVTVF9JVEVSQVRJT05TLCBcJiMzNDtUZXN0ICVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJiMzOTtkIGlzIGdlbnVpbmUgcHRlX25vbmVcbiYjNDM7ICogd2l0aCBubyB1ZmZkLXdwIG1hcmtlci4gU3VjaCBhIHB0ZSBtdXN0IHJlYWQgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGljaFxuJiM0MzsgKiBQQUdFTUFQX1NDQU4gcGF0aCBzZXJ2ZXMgdGhlIHJlcXVlc3Q6IGJvdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0IHBhdGggYW5kXG4mIzQzOyAqIHRoZSBnZW5lcmljIHBhdGggKHJlYWNoZWQgZS5nLiB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzaykgbXVzdCByZXBvcnQgZXZlcnlcbiYjNDM7ICogcGFnZSB3cml0dGVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbnBhZ2VzID0gMTYsIGk7XG4mIzQzO1x0bG9uZyBtZW1fc2l6ZSA9IG5wYWdlcyAqIHBhZ2Vfc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9yZWdpb24gcmVnaW9uc1sxNl07XG4mIzQzO1x0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbiYjNDM7XHRjaGFyICptZW07XG4mIzQzO1xuJiM0MztcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbiYjNDM7XHRpZiAobWVtID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgbW1hcCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XG4mIzQzO1x0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0LyogUG9wdWxhdGUsIHRoZW4gZHJvcDogdGhlIHB0ZXMgYmVjb21lIHB0ZV9ub25lIHdpdGhvdXQgYSBtYXJrZXIuICovXG4mIzQzO1x0bWVtc2V0KG1lbSwgMSwgbWVtX3NpemUpO1xuJiM0MztcdGlmIChtYWR2aXNlKG1lbSwgbWVtX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1xuJiM0MztcdC8qIEZhc3QgcGF0aDogY2F0ZWdvcnlfbWFzayA9PSByZXR1cm5fbWFzayA9PSBQQUdFX0lTX1dSSVRURU4uICovXG4mIzQzO1x0cmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsXG4mIzQzO1x0XHRcdCAgICBQQUdFX0lTX1dSSVRURU4sIDAsIDAsIFBBR0VfSVNfV1JJVFRFTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyBmYXN0IHNjYW4gZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGZhc3QgJiM0Mzs9IExFTihyZWdpb25zW2ldKTtcbiYjNDM7XG4mIzQzO1x0LyogR2VuZXJpYyBwYXRoOiBzYW1lIHF1ZXJ5IGV4cHJlc3NlZCB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzay4gKi9cbiYjNDM7XHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcbiYjNDM7XHRcdFx0ICAgIDAsIFBBR0VfSVNfV1JJVFRFTiwgMCwgUEFHRV9JU19XUklUVEVOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIGdlbmVyaWMgc2NhbiBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2xvdyAmIzQzOz0gTEVOKHJlZ2lvbnNbaV0pO1xuJiM0MztcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGZhc3QgPT0gbnBhZ2VzIFx1MDAyNlx1MDAyNiBzbG93ID09IG5wYWdlcyxcbiYjNDM7XHRcdFx0IFwmIzM0OyVzIHVucG9wdWxhdGVkIHB0ZXMgcmVwb3J0ZWQgd3JpdHRlbiBieSBib3RoIHBhdGhzICglbGQsICVsZCBvZiAlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBfX2Z1bmNfXywgZmFzdCwgc2xvdywgbnBhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0d3BfZnJlZShtZW0sIG1lbV9zaXplKTtcbiYjNDM7XHRtdW5tYXAobWVtLCBtZW1fc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XG5AQCAtMTU1OSw3ICYjNDM7MTYxMCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdCg0KSlcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7SHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxcblwmIzM0Oyk7XG4gXG4tXHRrc2Z0X3NldF9wbGFuKDExNyk7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbigxMTgpO1xuIFxuIFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuQEAgLTE3MzcsNiAmIzQzOzE3ODgsOSBAQCBpbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuIFx0LyogMTcuIFpFUk9QRk4gdGVzdHMgKi9cbiBcdHplcm9wZm5fdGVzdHMoKTtcbiBcbiYjNDM7XHQvKiAxOC4gVW5wb3B1bGF0ZWQgcHRlIHNjYW4tcGF0aCBjb25zaXN0ZW5jeSAqL1xuJiM0MztcdHVucG9wdWxhdGVkX3NjYW5fdGVzdCgpO1xuJiM0MztcbiBcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuIFx0a3NmdF9maW5pc2hlZCgpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VtYXBfcGFnZV9jYXRlZ29yeSYjMzQ7LAogICAgJiMzNDtkb19wYWdlbWFwX3NjYW4mIzM0OywKICAgICYjMzQ7cGFnZW1hcF9zY2FuX3BtZF9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIGJlaGF2aW9yIGZvciB1bnBvcHVsYXRlZCBQVEVzIChwdGVfbm9uZSkgdG8gY29ycmVjdGx5IHJlcG9ydCB0aGVtIGFzIFBBR0VfSVNfV1JJVFRFTi4gVGhpcyBmaXhlcyBhbiBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIGZhc3QgYW5kIGdlbmVyaWMgc2NhbiBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcm9jZnMgY29kZSwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgUEFHRU1BUF9TQ0FOIGlvY3RsIG9uIC9wcm9jL3BpZC9wYWdlbWFwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNmUzMzg1YjdjZDZhNTY0MTc5MDI2YjdlY2E3MGFmMGEzYTkzZTljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAwMDo0MzowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCBkMzI0MDhmN2NkNWVkMi4uZDQ1YzcyOWFiNmJiMzMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTI0MzIsOCAmIzQzOzI0MzIsMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wYWdlX2NhdGVnb3J5KHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCwKIHsKIAl1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXM7CiAKLQlpZiAocHRlX25vbmUocHRlKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmIChwdGVfbm9uZShwdGUpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQW4gdW5wb3B1bGF0ZWQgcHRlIGNhcnJpZXMgbm8gdWZmZC13cCBtYXJrZXIsIGkuZS4gaXQgaXMgbm90CiYjNDM7CQkgKiB3cml0ZS1wcm90ZWN0ZWQsIHRoZSBzYW1lIGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGUgcHJlc2VudAomIzQzOwkJICogYW5kIHN3YXAgY2FzZXMgYmVsb3cgcmVwb3J0IFBBR0VfSVNfV1JJVFRFTi4gUmVwb3J0IGl0IGhlcmUKJiM0MzsJCSAqIHRvbyBzbyB0aGlzIGdlbmVyaWMgcGF0aCBhZ3JlZXMgd2l0aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3QKJiM0MzsJCSAqIHBhdGggaW4gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSgpLCB3aGljaCByZXBvcnRzIHB0ZV9ub25lIGFzCiYjNDM7CQkgKiB3cml0dGVuIGFuZCwgdW5kZXIgUE1fU0NBTl9XUF9NQVRDSElORywgYXJtcyBhIG1hcmtlci4gVGhlCiYjNDM7CQkgKiBmYXN0IHBhdGggYXBwbGllcyBubyBWTUEgdGVzdCwgc28gbmVpdGhlciBkb2VzIHRoaXMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBQQUdFX0lTX1dSSVRURU47CiYjNDM7CX0KIAogCWlmIChwdGVfcHJlc2VudChwdGUpKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCmluZGV4IDc2MjMwNjE3N2FkODEzLi41NTBkMWYyYzA1OWIzNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMTA1MSw2ICYjNDM7MTA1MSw1NyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKQogCWtzZnRfdGVzdF9yZXN1bHQoaSA9PSBURVNUX0lURVJBVElPTlMsICYjMzQ7VGVzdCAlc1xuJiMzNDssIF9fZnVuY19fKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSByYW5nZSB0aGF0IHdhcyBwb3B1bGF0ZWQgYW5kIHRoZW4gTUFEVl9ET05UTkVFRCYjMzk7ZCBpcyBnZW51aW5lIHB0ZV9ub25lCiYjNDM7ICogd2l0aCBubyB1ZmZkLXdwIG1hcmtlci4gU3VjaCBhIHB0ZSBtdXN0IHJlYWQgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGljaAomIzQzOyAqIFBBR0VNQVBfU0NBTiBwYXRoIHNlcnZlcyB0aGUgcmVxdWVzdDogYm90aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3QgcGF0aCBhbmQKJiM0MzsgKiB0aGUgZ2VuZXJpYyBwYXRoIChyZWFjaGVkIGUuZy4gdmlhIGNhdGVnb3J5X2FueW9mX21hc2spIG11c3QgcmVwb3J0IGV2ZXJ5CiYjNDM7ICogcGFnZSB3cml0dGVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IG5wYWdlcyA9IDE2LCBpOwomIzQzOwlsb25nIG1lbV9zaXplID0gbnBhZ2VzICogcGFnZV9zaXplOwomIzQzOwlzdHJ1Y3QgcGFnZV9yZWdpb24gcmVnaW9uc1sxNl07CiYjNDM7CWxvbmcgZmFzdCA9IDAsIHNsb3cgPSAwLCByZXQ7CiYjNDM7CWNoYXIgKm1lbTsKJiM0MzsKJiM0MzsJbWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlpZiAobWVtID09IE1BUF9GQUlMRUQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBtbWFwIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsKJiM0MzsJd3BfaW5pdChtZW0sIG1lbV9zaXplKTsKJiM0MzsKJiM0MzsJLyogUG9wdWxhdGUsIHRoZW4gZHJvcDogdGhlIHB0ZXMgYmVjb21lIHB0ZV9ub25lIHdpdGhvdXQgYSBtYXJrZXIuICovCiYjNDM7CW1lbXNldChtZW0sIDEsIG1lbV9zaXplKTsKJiM0MzsJaWYgKG1hZHZpc2UobWVtLCBtZW1fc2l6ZSwgTUFEVl9ET05UTkVFRCkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBNQURWX0RPTlRORUVEIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsKJiM0MzsJLyogRmFzdCBwYXRoOiBjYXRlZ29yeV9tYXNrID09IHJldHVybl9tYXNrID09IFBBR0VfSVNfV1JJVFRFTi4gKi8KJiM0MzsJcmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsCiYjNDM7CQkJICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBmYXN0IHNjYW4gZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmV0OyBpJiM0MzsmIzQzOykKJiM0MzsJCWZhc3QgJiM0Mzs9IExFTihyZWdpb25zW2ldKTsKJiM0MzsKJiM0MzsJLyogR2VuZXJpYyBwYXRoOiBzYW1lIHF1ZXJ5IGV4cHJlc3NlZCB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzay4gKi8KJiM0MzsJcmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsCiYjNDM7CQkJICAgIDAsIFBBR0VfSVNfV1JJVFRFTiwgMCwgUEFHRV9JU19XUklUVEVOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBnZW5lcmljIHNjYW4gZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmV0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXNsb3cgJiM0Mzs9IExFTihyZWdpb25zW2ldKTsKJiM0MzsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdChmYXN0ID09IG5wYWdlcyAmYW1wOyZhbXA7IHNsb3cgPT0gbnBhZ2VzLAomIzQzOwkJCSAmIzM0OyVzIHVucG9wdWxhdGVkIHB0ZXMgcmVwb3J0ZWQgd3JpdHRlbiBieSBib3RoIHBhdGhzICglbGQsICVsZCBvZiAlZClcbiYjMzQ7LAomIzQzOwkJCSBfX2Z1bmNfXywgZmFzdCwgc2xvdywgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJd3BfZnJlZShtZW0sIG1lbV9zaXplKTsKJiM0MzsJbXVubWFwKG1lbSwgbWVtX3NpemUpOwomIzQzO30KJiM0MzsKIGludCBzYW5pdHlfdGVzdHModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NpemUsIHZlY19zaXplOwpAQCAtMTU1OSw3ICYjNDM7MTYxMCw3IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SHVnZVRMQiB0ZXN0IHdpbGwgYmUgc2tpcHBlZFxuJiMzNDspOwogCi0Ja3NmdF9zZXRfcGxhbigxMTcpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDExOCk7CiAKIAlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwogCWhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpOwpAQCAtMTczNyw2ICYjNDM7MTc4OCw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pCiAJLyogMTcuIFpFUk9QRk4gdGVzdHMgKi8KIAl6ZXJvcGZuX3Rlc3RzKCk7CiAKJiM0MzsJLyogMTguIFVucG9wdWxhdGVkIHB0ZSBzY2FuLXBhdGggY29uc2lzdGVuY3kgKi8KJiM0MzsJdW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KCk7CiYjNDM7CiAJY2xvc2UocGFnZW1hcF9mZCk7CiAJa3NmdF9maW5pc2hlZCgpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBNTVUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIHR3ZWFrIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiB3aGVuIHRoZSBQYWdlIFRhYmxlIEVudHJ5IGlzIGNvbnNpZGVyZWQgJiMzNDtub25lJiMzNDsgKGkuZS4sIGBwdGVfbm9uZShwdGUpYCBpcyB0cnVlKSwgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGBQQUdFX0lTX1dSSVRURU5gIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGRlZmF1bHQgb2YgYDBgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBmZWVscyBsaWtlIGEgdmVyeSBzcGVjaWZpYyBlZGdlIGNhc2UuIFRoZW4gdGhlcmUgaXMgYW4gYWNjb21wYW55aW5nIHRlc3QgYWRkZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFNlZW1zIGxpa2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgYW5kIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCwgd2hpY2ggc3VnZ2VzdHMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcGFnZSB0YWJsZSB0cmF2ZXJzYWwgYW5kIHJlcG9ydGluZy4gU28sIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggaXMgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsIHVzZXMgb2YgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAgdG8gc2VlICp3aHkqIHRoaXMgcGFydGljdWxhciByZXR1cm4gdmFsdWUgaGFzIGJlZW4gYWx0ZXJlZC4gSSYjMzk7bGwgYWxzbyBjaGVjayBhbGwgdXNlcyBvZiBgUEFHRV9JU19XUklUVEVOYCwgdG8gZ2FpbiBpbnNpZ2h0IGludG8gd2hhdCB0aGlzIHZhbHVlIHJlcHJlc2VudHMuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IGltcG9ydGFudCwgc3VidGxlIGNoYW5nZSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGFuZCByZXBvcnRzIG9uIGVtcHR5IFBURXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9wYWdlX2NhdGVnb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNDIxPXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MjgtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzAtXHRcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODk5LVx0XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfFxuZnMvcHJvYy90YXNrX21tdS5jOjI5MDA6XHRcdFx0XHRcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTAxLVx0XHR1bnNpZ25lZCBsb25nIG5leHQgPSBhZGRyICYjNDM7IFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZnMvcHJvYy90YXNrX21tdS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgY3VycmVudCBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgYXNwZWN0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IHNlZW1zIHRvIGJlIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCBhcm91bmQgbGluZSAyNDI5LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHRvIHVucmF2ZWwgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcuIFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aGUgdGFzayYjMzk7cyBtZW1vcnkgbWFwPyBJcyBpdCByZWxhdGVkIHRvIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6YXRpb24/IE9yIG1heWJlIHRyYWNraW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucz8gR290dGEga2VlcCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0IGluIG1pbmQgaGVyZSBhcyBJIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDIwOlx0XG4yNDIxOlx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlIHtcbjI0MjI6XHRcdHN0cnVjdCBwbV9zY2FuX2FyZyBhcmc7XG4yNDIzOlx0XHR1bnNpZ25lZCBsb25nIG1hc2tzX29mX2ludGVyZXN0LCBjdXJfdm1hX2NhdGVnb3J5O1xuMjQyNDpcdFx0c3RydWN0IHBhZ2VfcmVnaW9uICp2ZWNfYnVmO1xuMjQyNTpcdFx0dW5zaWduZWQgbG9uZyB2ZWNfYnVmX2xlbiwgdmVjX2J1Zl9pbmRleCwgZm91bmRfcGFnZXM7XG4yNDI2Olx0XHRzdHJ1Y3QgcGFnZV9yZWdpb24gX191c2VyICp2ZWNfb3V0O1xuMjQyNzpcdH07XG4yNDI4Olx0XG4yNDI5Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wYWdlX2NhdGVnb3J5KHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbjI0MzA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yNDMxOlx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuMjQzMjpcdHtcbjI0MzM6XHRcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcztcbjI0MzQ6XHRcbjI0MzU6XHRcdGlmIChwdGVfbm9uZShwdGUpKSB7XG4yNDM2Olx0XHRcdC8qXG4yNDM3Olx0XHRcdCAqIEFuIHVucG9wdWxhdGVkIHB0ZSBjYXJyaWVzIG5vIHVmZmQtd3AgbWFya2VyLCBpLmUuIGl0IGlzIG5vdFxuMjQzODpcdFx0XHQgKiB3cml0ZS1wcm90ZWN0ZWQsIHRoZSBzYW1lIGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGUgcHJlc2VudFxuMjQzOTpcdFx0XHQgKiBhbmQgc3dhcCBjYXNlcyBiZWxvdyByZXBvcnQgUEFHRV9JU19XUklUVEVOLiBSZXBvcnQgaXQgaGVyZVxuMjQ0MDpcdFx0XHQgKiB0b28gc28gdGhpcyBnZW5lcmljIHBhdGggYWdyZWVzIHdpdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0XG4yNDQxOlx0XHRcdCAqIHBhdGggaW4gcGFnZW1hcF9zY2FuX3BtZF9lbnRyeSgpLCB3aGljaCByZXBvcnRzIHB0ZV9ub25lIGFzXG4yNDQyOlx0XHRcdCAqIHdyaXR0ZW4gYW5kLCB1bmRlciBQTV9TQ0FOX1dQX01BVENISU5HLCBhcm1zIGEgbWFya2VyLiBUaGVcbjI0NDM6XHRcdFx0ICogZmFzdCBwYXRoIGFwcGxpZXMgbm8gVk1BIHRlc3QsIHNvIG5laXRoZXIgZG9lcyB0aGlzLlxuMjQ0NDpcdFx0XHQgKi9cbjI0NDU6XHRcdFx0cmV0dXJuIFBBR0VfSVNfV1JJVFRFTjtcbjI0NDY6XHRcdH1cbjI0NDc6XHRcbjI0NDg6XHRcdGlmIChwdGVfcHJlc2VudChwdGUpKSB7XG4yNDQ5Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMjQ1MDpcdFxuMjQ1MTpcdFx0XHRjYXRlZ29yaWVzID0gUEFHRV9JU19QUkVTRU5UO1xuMjQ1MjpcdFxuMjQ1MzpcdFx0XHRpZiAoIXB0ZV91ZmZkX3dwKHB0ZSkpXG4yNDU0Olx0XHRcdFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1dSSVRURU47XG4yNDU1Olx0XG4yNDU2Olx0XHRcdGlmIChwLVx1MDAzZW1hc2tzX29mX2ludGVyZXN0IFx1MDAyNiBQQUdFX0lTX0ZJTEUpIHtcbjI0NTc6XHRcdFx0XHRwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGUpO1xuMjQ1ODpcdFx0XHRcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiAhUGFnZUFub24ocGFnZSkpXG4yNDU5Olx0XHRcdFx0XHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfRklMRTtcbjI0NjA6XHRcdFx0fVxuMjQ2MTpcdFxuMjQ2MjpcdFx0XHRpZiAoaXNfemVyb19wZm4ocHRlX3BmbihwdGUpKSlcbjI0NjM6XHRcdFx0XHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfUEZOWkVSTztcbjI0NjQ6XHRcdFx0aWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZSkpXG4yNDY1Olx0XHRcdFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1NPRlRfRElSVFk7XG4yNDY2Olx0XHR9IGVsc2Uge1xuMjQ2NzpcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuMjQ2ODpcdFxuMjQ2OTpcdFx0XHRjYXRlZ29yaWVzID0gUEFHRV9JU19TV0FQUEVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQUdFTUFQX1NDQU4gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIHNwZWNpZmljYWxseSBpdHMgdXNlIHdpdGhpbiBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgdGhlIG1lbnRhbCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2MvcGlkL3BhZ2VtYXBgIGludGVyZmFjZS4gQnV0IGl0JiMzOTtzIG5vdCB0aGUgZmlsZSBpdHNlbGYsIGl0IGlzIGFuIGBpb2N0bGAgb24gYSBmaWxlIGRlc2NyaXB0b3IsIGBwYWdlbWFwX2ZkYCwgd2hpY2ggaXMgKmRlcml2ZWQqIGZyb20gb3BlbmluZyB0aGUgZmlsZSEgU28sIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNjYW5uaW5nIHRoZSBwYWdlIG1hcCBkYXRhIHRocm91Z2ggYSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuCgpPa2F5LCB0aW1lIHRvIHplcm8gaW46IHdoZXJlIGlzIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IGhhbmRsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYHBhZ2VtYXBgIHN1YnN5c3RlbS4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFTUFQX1NDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMyNTE9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXHRzd2l0Y2ggKGNtZCkge1xuZnMvcHJvYy90YXNrX21tdS5jOjMyNTc6XHRjYXNlIFBBR0VNQVBfU0NBTjpcbmZzL3Byb2MvdGFza19tbXUuYy0zMjU4LVx0XHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgUEFHRU1BUF9TQ0FOYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgZG9fcGFnZW1hcF9jbWRgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBgUEFHRU1BUF9TQ0FOYCwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QuIFRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwsIG1ha2luZyBpdCBhIGNyaXRpY2FsIHBvaW50IHRvIGF1ZGl0LiBDb25zaWRlcmluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0IHRyYWNraW5nIGFuZCByZWxhdGVkIGZlYXR1cmVzIHVzZSB0aGlzLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYW4gaW1wb3J0YW50IGFyZWEgZm9yIG1lIHRvIGNoZWNrLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBjb2RlIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBiYXNlbGluZS4gQnV0LCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZCBmb3IgYFBBR0VNQVBfU0NBTmAgZnVuY3Rpb25hbGl0eSB0byBiZSBwcmVzZW50PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYXJlIG1ldCB0byBlbnN1cmUgdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBhbmQgd2l0aG91dCB1bmZvcmVzZWVuIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRU1BUF9TQ0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMyNTE9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXHRzd2l0Y2ggKGNtZCkge1xuZnMvcHJvYy90YXNrX21tdS5jOjMyNTc6XHRjYXNlIFBBR0VNQVBfU0NBTjpcbmZzL3Byb2MvdGFza19tbXUuYy0zMjU4LVx0XHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGBkb19wYWdlbWFwX3NjYW5gIGZ1bmN0aW9uLCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkLCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGRlcGVuZGVudCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gZmxhZyBvciBzeXN0ZW0gZGVmaW5pdGlvbi4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgaXQgd2lsbCBzZXZlcmVseSBpbXBhY3QgaG93IEkgaW50ZXJwcmV0IGl0cyBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSwgYW5kIGlmIEkgY2FuIGV2ZW4gcmVseSBvbiBpdHMgcHJlc2VuY2UgaW4gYWxsIHNjZW5hcmlvcy4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBzaW1pbGFyIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhvc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19wYWdlbWFwX3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMxNTE9c3RhdGljIGxvbmcgcGFnZW1hcF9zY2FuX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnApXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzctXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzE3ODpzdGF0aWMgbG9uZyBkb19wYWdlbWFwX3NjYW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdWFyZylcbmZzL3Byb2MvdGFza19tbXUuYy0zMTc5LXtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MzI1MT1zdGF0aWMgbG9uZyBkb19wYWdlbWFwX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1Ny1cdGNhc2UgUEFHRU1BUF9TQ0FOOlxuZnMvcHJvYy90YXNrX21tdS5jOjMyNTg6XHRcdHJldHVybiBkb19wYWdlbWFwX3NjYW4obW0sIGFyZyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRvX3BhZ2VtYXBfc2NhbmAgZnVuY3Rpb24gYmV0dGVyLCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9jIGZpbGVzeXN0ZW0mIzM5O3MgdGFzayBtZW1vcnkgbWFwcy4gVGltZSB0byB6ZXJvIGluIG9uIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXM/IFRob3NlIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIGBkb19wYWdlbWFwX3NjYW5gLiBJIHdhbnQgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5ICplbmFibGUqIG9yICpkaXNhYmxlKiB0aGlzIGNvZGUgcGF0aC4gSSBleHBlY3QgdGhlcmUgbWlnaHQgYmUgY29tcGlsZS10aW1lIGNob2ljZXMgcmVsYXRlZCB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IHBhZ2UgdGFibGUgYXJjaGl0ZWN0dXJlcywgTlVNQSBzdXBwb3J0LCBvciBldmVuIHNwZWNpZmljIHNlY3VyaXR5IGhhcmRlbmluZyBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZW4gYGRvX3BhZ2VtYXBfc2NhbmAgaXMgKmF2YWlsYWJsZSogYW5kIHRoZXJlZm9yZSB3aGVuIHRoZSBwcm9jIGZpbGVzeXN0ZW0gd2lsbCBleHBvc2UgdGhpcyBpbmZvcm1hdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uc3RyYWludHMuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IHJlcG9ydGluZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNzA6XHRcbjMxNzE6XHRcdHAtXHUwMDNldmVjX2J1Zl9pbmRleCA9IDA7XG4zMTcyOlx0XHRwLVx1MDAzZXZlY19idWZfbGVuID0gbWluX3Qoc2l6ZV90LCBwLVx1MDAzZXZlY19idWZfbGVuLCBwLVx1MDAzZWFyZy52ZWNfbGVuKTtcbjMxNzM6XHRcdHAtXHUwMDNldmVjX2J1Zi1cdTAwM2VzdGFydCA9IHAtXHUwMDNldmVjX2J1Zi1cdTAwM2VlbmQgPSAwO1xuMzE3NDpcdFxuMzE3NTpcdFx0cmV0dXJuIG47XG4zMTc2Olx0fVxuMzE3NzpcdFxuMzE3ODpcdHN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfc2NhbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB1YXJnKVxuMzE3OTpcdHtcbjMxODA6XHRcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSBwID0gezB9O1xuMzE4MTpcdFx0dW5zaWduZWQgbG9uZyB3YWxrX3N0YXJ0O1xuMzE4MjpcdFx0c2l6ZV90IG5fcmFuZ2VzX291dCA9IDA7XG4zMTgzOlx0XHRpbnQgcmV0O1xuMzE4NDpcdFxuMzE4NTpcdFx0cmV0ID0gcGFnZW1hcF9zY2FuX2dldF9hcmdzKFx1MDAyNnAuYXJnLCB1YXJnKTtcbjMxODY6XHRcdGlmIChyZXQpXG4zMTg3Olx0XHRcdHJldHVybiByZXQ7XG4zMTg4Olx0XG4zMTg5Olx0XHRwLm1hc2tzX29mX2ludGVyZXN0ID0gcC5hcmcuY2F0ZWdvcnlfbWFzayB8IHAuYXJnLmNhdGVnb3J5X2FueW9mX21hc2sgfFxuMzE5MDpcdFx0XHRcdCAgICAgIHAuYXJnLnJldHVybl9tYXNrO1xuMzE5MTpcdFx0cmV0ID0gcGFnZW1hcF9zY2FuX2luaXRfYm91bmNlX2J1ZmZlcihcdTAwMjZwKTtcbjMxOTI6XHRcdGlmIChyZXQpXG4zMTkzOlx0XHRcdHJldHVybiByZXQ7XG4zMTk0Olx0XG4zMTk1Olx0XHRmb3IgKHdhbGtfc3RhcnQgPSBwLmFyZy5zdGFydDsgd2Fsa19zdGFydCBcdTAwM2MgcC5hcmcuZW5kO1xuMzE5NjpcdFx0XHRcdHdhbGtfc3RhcnQgPSBwLmFyZy53YWxrX2VuZCkge1xuMzE5NzpcdFx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMzE5ODpcdFx0XHRsb25nIG5fb3V0O1xuMzE5OTpcdFxuMzIwMDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjMyMDE6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4zMjAyOlx0XHRcdFx0YnJlYWs7XG4zMjAzOlx0XHRcdH1cbjMyMDQ6XHRcbjMyMDU6XHRcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pO1xuMzIwNjpcdFx0XHRpZiAocmV0KVxuMzIwNzpcdFx0XHRcdGJyZWFrO1xuMzIwODpcdFxuMzIwOTpcdFx0XHQvKiBQcm90ZWN0aW9uIGNoYW5nZSBmb3IgdGhlIHJhbmdlIGlzIGdvaW5nIHRvIGhhcHBlbi4gKi9cbjMyMTA6XHRcdFx0aWYgKHAuYXJnLmZsYWdzIFx1MDAyNiBQTV9TQ0FOX1dQX01BVENISU5HKSB7XG4zMjExOlx0XHRcdFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfUFJPVEVDVElPTl9WTUEsIDAsXG4zMjEyOlx0XHRcdFx0XHRcdFx0bW0sIHdhbGtfc3RhcnQsIHAuYXJnLmVuZCk7XG4zMjEzOlx0XHRcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMzIxNDpcdFx0XHR9XG4zMjE1Olx0XG4zMjE2Olx0XHRcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kLFxuMzIxNzpcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGFnZW1hcF9zY2FuX29wcywgXHUwMDI2cCk7XG4zMjE4Olx0XG4zMjE5Olx0XHRcdGlmIChwLmFyZy5mbGFncyBcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBkb19wYWdlbWFwX3NjYW5gKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGRvX3BhZ2VtYXBfc2NhbmAgaXMgYmVpbmcgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiBvdGhlciBzZXR0aW5ncywgYXMgbG9uZyBhcyBgZnMvcHJvYy90YXNrX21tdS5jYCBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgd2hhdCB0cmlnZ2VycyB0aGUgY29tcGlsYXRpb24gb2YgdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZT8gTXkgaW1tZWRpYXRlIGh1bmNoLCBhbmQgdGhlIG9idmlvdXMgbmV4dCBzdGVwLCBpcyB0byBjaGVjayB0aGUgYGZzL3Byb2MvTWFrZWZpbGVgLiBJJiMzOTttIHByZXR0eSBzdXJlIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBpdCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgcnVsZXMgZGljdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFza19tbXUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICYjNDM7PSBwcm9jLm9cbmZzL3Byb2MvTWFrZWZpbGUtNy1cbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1x0JiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVx0XHRcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVx0Oj0gdGFza19tbXUub1xuZnMvcHJvYy9NYWtlZmlsZS0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg5MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHRhc2tfbW11Lm9gIG9ubHkgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfTU1VYCBpcyBhY3RpdmUg4oCTIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIE15IGZpcnN0IHRob3VnaHQgaXM6IGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IHRoYXQgYGZzL3Byb2NgIHJlcXVpcmVzIGBDT05GSUdfUFJPQ19GU2AgdG8gYmUgZW5hYmxlZCwgYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBwYWdlbWFwLiBJIHdvbmRlciwgZG9lcyBgUEFHRU1BUF9TQ0FOYCBoYXZlIGFueSBoaWRkZW4gcmVxdWlyZW1lbnRzPyBQZXJoYXBzIGl0IG5lZWRzIGBDT05GSUdfVVNFUkZBVUxURkRgIG9yIHNvbWUgb3RoZXIgb2JzY3VyZSBmbGFnIGVuYWJsZWQ/IEkgcmVjYWxsIHRoYXQgYFBBR0VNQVBfU0NBTmAgaXMgaW50ZXJ0d2luZWQgd2l0aCBgcGFnZW1hcF9yZWFkYCBhbmQgYHBhZ2VtYXBfY21kYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLiBMb29rcyBsaWtlIGBwYWdlbWFwX2NtZGAgaXMgZGVmaW5lZCBpbiBgZnMvcHJvYy90YXNrX21tdS5jYCwgd2hpY2ggbWFrZXMgdGhhdCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNDA6XHRcbjMyNDE6XHRcdC8qIFRoZSB3YWxrX2VuZCBpc24mIzM5O3Qgc2V0IHdoZW4gcmV0IGlzIHplcm8gKi9cbjMyNDI6XHRcdGlmICghcC5hcmcud2Fsa19lbmQpXG4zMjQzOlx0XHRcdHAuYXJnLndhbGtfZW5kID0gcC5hcmcuZW5kO1xuMzI0NDpcdFx0aWYgKHBhZ2VtYXBfc2Nhbl93cml0ZWJhY2tfYXJncyhcdTAwMjZwLmFyZywgdWFyZykpXG4zMjQ1Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4zMjQ2Olx0XG4zMjQ3Olx0XHRrZnJlZShwLnZlY19idWYpO1xuMzI0ODpcdFx0cmV0dXJuIHJldDtcbjMyNDk6XHR9XG4zMjUwOlx0XG4zMjUxOlx0c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4zMjUyOlx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4zMjUzOlx0e1xuMzI1NDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjMyNTU6XHRcbjMyNTY6XHRcdHN3aXRjaCAoY21kKSB7XG4zMjU3Olx0XHRjYXNlIFBBR0VNQVBfU0NBTjpcbjMyNTg6XHRcdFx0cmV0dXJuIGRvX3BhZ2VtYXBfc2NhbihtbSwgYXJnKTtcbjMyNTk6XHRcbjMyNjA6XHRcdGRlZmF1bHQ6XG4zMjYxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzI2MjpcdFx0fVxuMzI2MzpcdH1cbjMyNjQ6XHRcbjMyNjU6XHRjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zID0ge1xuMzI2NjpcdFx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlaywgLyogYm9ycm93IHRoaXMgKi9cbjMyNjc6XHRcdC5yZWFkXHRcdD0gcGFnZW1hcF9yZWFkLFxuMzI2ODpcdFx0Lm9wZW5cdFx0PSBwYWdlbWFwX29wZW4sXG4zMjY5Olx0XHQucmVsZWFzZVx0PSBwYWdlbWFwX3JlbGVhc2UsXG4zMjcwOlx0XHQudW5sb2NrZWRfaW9jdGwgPSBkb19wYWdlbWFwX2NtZCxcbjMyNzE6XHRcdC5jb21wYXRfaW9jdGxcdD0gZG9fcGFnZW1hcF9jbWQsXG4zMjcyOlx0fTtcbjMyNzM6XHQjZW5kaWYgLyogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SICovXG4zMjc0Olx0XG4zMjc1Olx0I2lmZGVmIENPTkZJR19OVU1BXG4zMjc2Olx0XG4zMjc3Olx0c3RydWN0IG51bWFfbWFwcyB7XG4zMjc4Olx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzO1xuMzI3OTpcdFx0dW5zaWduZWQgbG9uZyBhbm9uO1xuMzI4MDpcdFx0dW5zaWduZWQgbG9uZyBhY3RpdmU7XG4zMjgxOlx0XHR1bnNpZ25lZCBsb25nIHdyaXRlYmFjaztcbjMyODI6XHRcdHVuc2lnbmVkIGxvbmcgbWFwY291bnRfbWF4O1xuMzI4MzpcdFx0dW5zaWduZWQgbG9uZyBkaXJ0eTtcbjMyODQ6XHRcdHVuc2lnbmVkIGxvbmcgc3dhcGNhY2hlO1xuMzI4NTpcdFx0dW5zaWduZWQgbG9uZyBub2RlW01BWF9OVU1OT0RFU107XG4zMjg2Olx0fTtcbjMyODc6XHRcbjMyODg6XHRzdHJ1Y3QgbnVtYV9tYXBzX3ByaXZhdGUge1xuMzI4OTpcdFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlIHByb2NfbWFwcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AmIzM5O3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AuLi4gdGhhdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJIHNlZSBpdCYjMzk7cyB0dWNrZWQgYXdheSB1bmRlciBhbiBgI2VuZGlmIC8qIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiAqL2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHksIHByZXN1bWFibHkgcmVsYXRlZCB0byB0aGUgcHJvY2VzcyBwYWdlIG1hcCwgaXMgb25seSBwcmVzZW50IGlmIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzICpub3QqIGRlZmluZWQuIE5vdywgdGhhdCYjMzk7cyBub3QgdGhlIG1vc3QgaW50dWl0aXZlIGFycmFuZ2VtZW50LiBVc3VhbGx5LCB5b3UmIzM5O2QgKmV4cGVjdCogdGhlIGNvZGUgdG8gYmUgcHJlc2VudCAqaWYqIHRoZSBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuIEJ1dCBoZXksIGl0IGhhcHBlbnMsIGVzcGVjaWFsbHkgaW4gb2xkZXIgY29kZWJhc2VzIHdoZXJlIHRoaW5ncyBtaWdodCBoYXZlIGV2b2x2ZWQgYSBiaXQgb2RkbHkuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gKndoZXJlKiB0aGUgYCNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIHRoYXQgc3Vycm91bmRzIHRoaXMgcGFydGljdWxhciBibG9jayBhY3R1YWxseSBiZWdpbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoeSB0aGlzIGNvbmRpdGlvbmFsIGV4Y2x1c2lvbiBleGlzdHMuIElzIHRoaXMgc29tZSBraW5kIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlIG9yIHBsYXRmb3JtPyBPciBpcyBpdCBhIGRlcHJlY2F0ZWQgZmVhdHVyZT8gVW5kZXJzdGFuZGluZyB0aGUgKnN0YXJ0aW5nKiBwb2ludCBvZiB0aGUgYCNpZmRlZmAgaXMgdGhlIGtleSB0byBnZXR0aW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhhdCBgI2lmZGVmYCBhbmQgc2VlIHdoYXQgdGhlIHN0b3J5IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfUFJPQ19QQUdFX01PTklUT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTg2Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX21hcHNfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtODkwLVxuZnMvcHJvYy90YXNrX21tdS5jOjg5MTojaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL3Rhc2tfbW11LmMtODkyLXN0cnVjdCBtZW1fc2l6ZV9zdGF0cyB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMyNjU9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3Mi19O1xuZnMvcHJvYy90YXNrX21tdS5jOjMyNzM6I2VuZGlmIC8qIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiAqL1xuZnMvcHJvYy90YXNrX21tdS5jLTMyNzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBQYWdlbWFwIGFuZCBVbnBvcHVsYXRlZCBQVEVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGluZ2VzIG9uIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIGhlcmUsIGJ1dCBsZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIHRoZSBtYWluIG9uZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCAqaW5zaWRlKiB0aGUgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgYmxvY2suCgpUaGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBpcyBzdWJ0bGU6IEluc3RlYWQgb2YgcmV0dXJuaW5nIDAgZm9yIHVucG9wdWxhdGVkIFBURXMgKHRob3NlIGluZGljYXRlZCBieSBgcHRlX25vbmUocHRlKWApLCB0aGUgY29kZSBub3cgcmV0dXJucyBgUEFHRV9JU19XUklUVEVOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCByZXBvcnRzIHRoZXNlIHVucG9wdWxhdGVkIGVudHJpZXMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgc2VtYW50aWNzIG9mIHRoYXQgcmVwb3J0LgoKTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwg4oCTIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAsIGFuZCBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC4gSSB3YXMgcmlnaHQsIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGlzIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uLgoKQWxyaWdodCwgYSBxdWljayBjaGVjay4uLiBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIGJ1dCBkb2VzbiYjMzk7dCBtYWtlIGl0IGxlc3MgaW1wb3J0YW50IGluIHRoaXMgY29udGV4dC4gQW5kIHllcywgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLCBhbmQgYGRvX3BhZ2VtYXBfc2NhbmAgYXJlIGFsc28gc3RhdGljLiBgZG9fcGFnZW1hcF9jbWRgIGlzIGFsc28gc3RhdGljISBJIGhhdmUgYSBzZXQgb2YgY29yZSBmdW5jdGlvbiBzeW1ib2xzIHRvIGZvY3VzIG9uLgoKVGhlIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgaWYgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgbWFrZXMgdXNlIG9mIHRoZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBncmFwaCB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlbWFwX3NjYW5fcHRlX2hvbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTMwNDA9c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ2LVxuZnMvcHJvYy90YXNrX21tdS5jOjMwNDc6c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ4LVx0XHRcdFx0IGludCBkZXB0aCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMwNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zMDc2LVx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA3NzpcdC5wdGVfaG9sZSA9IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc4LVx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUsIGFuZCB0aGUgbmFtZSBnaXZlcyBhIHN0cm9uZyBjbHVlLiBJdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZpbmRpbmcgJiMzNDtob2xlcyYjMzQ7IGluIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIG9yIFBURXMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgcGVyaGFwcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhvdyB0aGUga2VybmVsIG1hcHMgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5LiBTbywgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGlkZW50aWZpZXMgcmVnaW9ucyBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdGhhdCBhcmVuJiMzOTt0IGN1cnJlbnRseSBtYXBwZWQgdG8gYW55IHBoeXNpY2FsIHBhZ2VzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgZWZmaWNpZW50IG1lbW9yeSBhbGxvY2F0aW9uLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB3aGF0IGFsZ29yaXRobXMgYXJlIGVtcGxveWVkIGZvciB0aGUgc2Nhbm5pbmcgcHJvY2VzcywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciBvcHRpbWl6YXRpb25zIHByZXNlbnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbG9vayBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMsIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLCBhbmQgd2hldGhlciBpdCYjMzk7cyBjb25jZXJuZWQgYWJvdXQgdGhpbmdzIGxpa2UgbWVtb3J5IHByb3RlY3Rpb24gb3IgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBsaWtlIHRoZSBidWRkeSBhbGxvY2F0b3Igb3IgdGhlIHNsYWIgYWxsb2NhdG9yLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQ/IERvZXMgaXQgdXRpbGl6ZSBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGFuZCBpZiBzbywgaG93IGRvZXMgaXQgbWFuYWdlIHRoZW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzPyBJcyB0aGVyZSBhbnkgdXNlIG9mIHByZWZldGNoaW5nIG9yIG90aGVyIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzPyBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgcGVyZm9ybXMgaXRzIGR1dHksIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Yga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA0MDpcdHN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfaG9sZV93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjMwNDE6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcbjMwNDI6XHR7XG4zMDQzOlx0XHRyZXR1cm4gMDtcbjMwNDQ6XHR9XG4zMDQ1Olx0I2VuZGlmXG4zMDQ2Olx0XG4zMDQ3Olx0c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbjMwNDg6XHRcdFx0XHRcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuMzA0OTpcdHtcbjMwNTA6XHRcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbjMwNTE6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cdTAwM2V2bWE7XG4zMDUyOlx0XHRpbnQgcmV0LCBlcnI7XG4zMDUzOlx0XG4zMDU0Olx0XHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5LCBwKSlcbjMwNTU6XHRcdFx0cmV0dXJuIDA7XG4zMDU2Olx0XG4zMDU3Olx0XHRyZXQgPSBwYWdlbWFwX3NjYW5fb3V0cHV0KHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCwgYWRkciwgXHUwMDI2ZW5kKTtcbjMwNTg6XHRcdGlmIChhZGRyID09IGVuZClcbjMwNTk6XHRcdFx0cmV0dXJuIHJldDtcbjMwNjA6XHRcbjMwNjE6XHRcdGlmICh+cC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpXG4zMDYyOlx0XHRcdHJldHVybiByZXQ7XG4zMDYzOlx0XG4zMDY0Olx0XHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG4zMDY1Olx0XHRcdGVyciA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aodm1hLCBhZGRyLCBlbmQpO1xuMzA2NjpcdFx0ZWxzZVxuMzA2NzpcdFx0XHRlcnIgPSB1ZmZkX3dwX3JhbmdlKHZtYSwgYWRkciwgZW5kIC0gYWRkciwgdHJ1ZSk7XG4zMDY4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzA2OTpcdFx0XHRyZXQgPSBlcnI7XG4zMDcwOlx0XG4zMDcxOlx0XHRyZXR1cm4gcmV0O1xuMzA3MjpcdH1cbjMwNzM6XHRcbjMwNzQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHBhZ2VtYXBfc2Nhbl9vcHMgPSB7XG4zMDc1Olx0XHQudGVzdF93YWxrID0gcGFnZW1hcF9zY2FuX3Rlc3Rfd2FsayxcbjMwNzY6XHRcdC5wbWRfZW50cnkgPSBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5LFxuMzA3NzpcdFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxuMzA3ODpcdFx0Lmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX3NjYW5faHVnZXRsYl9lbnRyeSxcbjMwNzk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKlJlZmxlY3Rpbmcgb24gUGFnZW1hcCBTY2FucyoqCgpIbW0sIGludGVyZXN0aW5nLiBJIHdhcyBqdXN0IHRoaW5raW5nIGFib3V0IHRoZSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgcGFnZSB0YWJsZSBlbnRyaWVzLiBJdCBzdHJ1Y2sgbWUgdGhhdCwgY3VycmVudGx5LCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHNlZW0gdG8gbWFrZSB1c2Ugb2YgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgdGhhdCB2YXJpYWJsZSBiZWluZyB1c2VkIGhlcmUgaW4gdGhlIHNhbWUgd2F5IEkmIzM5O20gYWNjdXN0b21lZCB0byBzZWVpbmcgaW4gc2ltaWxhciBmdW5jdGlvbnMuCgpUaGVuIEkgcGF1c2VkIGFuZCByZW1lbWJlcmVkIGEgcmVsYXRlZCBwb2ludC4gSSBrbm93IGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgICppcyogZGVmaW5pdGVseSBlbXBsb3llZCwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3MgdXNlZCB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgIGFuZCBgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnlgLiBUaGlzIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW5jZSBpbiBob3cgd2UmIzM5O3JlIGNhdGVnb3JpemluZyBwYWdlcyBiYXNlZCBvbiBlbnRyeSB0eXBlLCBwb3NzaWJseSBzb21ldGhpbmcgdGhhdCBJIHNob3VsZCByZXZpc2l0IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhcmVhIGZvciBvcHRpbWl6YXRpb24gb3IgaWYgdGhlIHNlcGFyYXRpb24gb2YgcHJvY2Vzc2VzIGlzIGFjdHVhbGx5IHRoZSBwcmVmZXJyZWQgbWV0aG9kLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGRpZmZlcmVuY2UgaW4gdXNhZ2UgYWNyb3NzIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbnRlbnRpb25hbCBhbmQgcGFydCBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24sIG9yIGlmIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGluY29uc2lzdGVuY3kgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZCB1cG9uLiBOZWVkIHRvIGludmVzdGlnYXRlIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9wYWdlX2NhdGVnb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNDIxPXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0MjgtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzAtXHRcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODk5LVx0XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfFxuZnMvcHJvYy90YXNrX21tdS5jOjI5MDA6XHRcdFx0XHRcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTAxLVx0XHR1bnNpZ25lZCBsb25nIG5leHQgPSBhZGRyICYjNDM7IFBBR0VfU0laRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgKioKClJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBwaWVjZSBvZiBsb2dpYyBpcyBvbmx5IHJlZmVyZW5jZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGFsbCBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byByZWNvbnN0cnVjdCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGlzIHNwZWNpZmljIGludGVyYWN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwYWdlLW1hcCBzY2FubmluZyBwcm9jZXNzLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbWFuYWdlbWVudCBvZiBwYWdlIHRhYmxlIGVudHJpZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb250ZXh0IHJldmVhbHMgdGhlIHNwZWNpZmljIHVzZSBjYXNlIGFuZCB3aGF0IGNvbmNlcm5zIG1lIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4ODA6XHRcdFx0XHRpZiAoKHB0ZV9wcmVzZW50KHB0ZW50KSBcdTAwMjZcdTAwMjYgcHRlX3VmZmRfd3AocHRlbnQpKSB8fFxuMjg4MTpcdFx0XHRcdCAgICBwdGVfc3dwX3VmZmRfd3BfYW55KHB0ZW50KSlcbjI4ODI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjg4MzpcdFx0XHRcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQocC1cdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHwgUEFHRV9JU19XUklUVEVOLFxuMjg4NDpcdFx0XHRcdFx0XHRcdCAgcCwgYWRkciwgXHUwMDI2bmV4dCk7XG4yODg1Olx0XHRcdFx0aWYgKG5leHQgPT0gYWRkcilcbjI4ODY6XHRcdFx0XHRcdGJyZWFrO1xuMjg4NzpcdFx0XHRcdGlmICh+cC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpXG4yODg4Olx0XHRcdFx0XHRjb250aW51ZTtcbjI4ODk6XHRcdFx0XHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XG4yODkwOlx0XHRcdFx0aWYgKCFmbHVzaF9lbmQpXG4yODkxOlx0XHRcdFx0XHRzdGFydCA9IGFkZHI7XG4yODkyOlx0XHRcdFx0Zmx1c2hfZW5kID0gbmV4dDtcbjI4OTM6XHRcdFx0fVxuMjg5NDpcdFx0XHRnb3RvIGZsdXNoX2FuZF9yZXR1cm47XG4yODk1Olx0XHR9XG4yODk2Olx0XG4yODk3Olx0XHRmb3IgKGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuMjg5ODpcdFx0XHRwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4yODk5Olx0XHRcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyA9IHAtXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8XG4yOTAwOlx0XHRcdFx0XHRcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcbjI5MDE6XHRcdFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciAmIzQzOyBQQUdFX1NJWkU7XG4yOTAyOlx0XG4yOTAzOlx0XHRcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXG4yOTA0Olx0XHRcdFx0Y29udGludWU7XG4yOTA1Olx0XG4yOTA2Olx0XHRcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQoY2F0ZWdvcmllcywgcCwgYWRkciwgXHUwMDI2bmV4dCk7XG4yOTA3Olx0XHRcdGlmIChuZXh0ID09IGFkZHIpXG4yOTA4Olx0XHRcdFx0YnJlYWs7XG4yOTA5Olx0XG4yOTEwOlx0XHRcdGlmICh+cC1cdTAwM2VhcmcuZmxhZ3MgXHUwMDI2IFBNX1NDQU5fV1BfTUFUQ0hJTkcpXG4yOTExOlx0XHRcdFx0Y29udGludWU7XG4yOTEyOlx0XHRcdGlmICh+Y2F0ZWdvcmllcyBcdTAwMjYgUEFHRV9JU19XUklUVEVOKVxuMjkxMzpcdFx0XHRcdGNvbnRpbnVlO1xuMjkxNDpcdFxuMjkxNTpcdFx0XHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XG4yOTE2Olx0XHRcdGlmICghZmx1c2hfZW5kKVxuMjkxNzpcdFx0XHRcdHN0YXJ0ID0gYWRkcjtcbjI5MTg6XHRcdFx0Zmx1c2hfZW5kID0gbmV4dDtcbjI5MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIE1hcCBTY2FubmluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHBhZ2VtYXBgIGNvZGUuIEl0IGxvb2tzIGxpa2UgYGRvX3BhZ2VtYXBfc2NhbmAgYW5kIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1haW4gbG9naWMgZmxvdy4gSSByZW1lbWJlciBzZWVpbmcgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgbWVudGlvbmVkIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgZmVhdHVyZSwgc28gSSYjMzk7bSBrZWVwaW5nIHRoYXQgaW4gbWluZC4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlY2FsbCB0aGF0IHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCBpcyBhY3R1YWxseSBpbnZvbHZlZCB3aXRoIHVzZXJmYXVsdGZkIHdyaXRlLXByb3RlY3QgdHJhY2tpbmcuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IG9yIGlmIGl0IGlzIHNvbWVob3cgb3B0aW9uYWwuIEkmIzM5O20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgdG8gYHB0ZV91ZmZkX3dwYCBvciBgbWFrZV91ZmZkX3dwX3B0ZWAuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFrZV91ZmZkX3dwX3B0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MjQyOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNDg4LVxuZnMvcHJvYy90YXNrX21tdS5jOjI0ODk6c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDkwLVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjgzND1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg2NC1cdFx0XHRcdGNvbnRpbnVlO1xuZnMvcHJvYy90YXNrX21tdS5jOjI4NjU6XHRcdFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4NjYtXHRcdFx0aWYgKCFmbHVzaF9lbmQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODgtXHRcdFx0XHRjb250aW51ZTtcbmZzL3Byb2MvdGFza19tbXUuYzoyODg5Olx0XHRcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yODkwLVx0XHRcdGlmICghZmx1c2hfZW5kKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTE0LVxuZnMvcHJvYy90YXNrX21tdS5jOjI5MTU6XHRcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcbmZzL3Byb2MvdGFza19tbXUuYy0yOTE2LVx0XHRpZiAoIWZsdXNoX2VuZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBgbWFrZV91ZmZkX3dwX3B0ZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlcmZhdWx0ZmQgKFVGRkQpIHdyaXRlIHByb3RlY3Rpb24gaXMgc2V0IHVwIGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGxldmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBwcm9jZXNzZXMgaW4gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG1ha2VfdWZmZF93cF9wdGVgIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCB0aGUgY3J1Y2lhbCBiaXQpIG9mIHNldHRpbmcgdGhlIFVGRkQgd3JpdGUgcHJvdGVjdGlvbiBzaG91bGQgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ4MDpcdFx0XHRcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19GSUxFO1xuMjQ4MTpcdFxuMjQ4MjpcdFx0XHRpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpXG4yNDgzOlx0XHRcdFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1NPRlRfRElSVFk7XG4yNDg0Olx0XHR9XG4yNDg1Olx0XG4yNDg2Olx0XHRyZXR1cm4gY2F0ZWdvcmllcztcbjI0ODc6XHR9XG4yNDg4Olx0XG4yNDg5Olx0c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI0OTA6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgcHRlX3QgcHRlbnQpXG4yNDkxOlx0e1xuMjQ5MjpcdFx0aWYgKHB0ZV9wcmVzZW50KHB0ZW50KSkge1xuMjQ5MzpcdFx0XHRwdGVfdCBvbGRfcHRlO1xuMjQ5NDpcdFxuMjQ5NTpcdFx0XHRvbGRfcHRlID0gcHRlcF9tb2RpZnlfcHJvdF9zdGFydCh2bWEsIGFkZHIsIHB0ZSk7XG4yNDk2Olx0XHRcdHB0ZW50ID0gcHRlX21rdWZmZF93cChvbGRfcHRlKTtcbjI0OTc6XHRcdFx0cHRlcF9tb2RpZnlfcHJvdF9jb21taXQodm1hLCBhZGRyLCBwdGUsIG9sZF9wdGUsIHB0ZW50KTtcbjI0OTg6XHRcdH0gZWxzZSBpZiAocHRlX25vbmUocHRlbnQpKSB7XG4yNDk5Olx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG4yNTAwOlx0XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xuMjUwMTpcdFx0fSBlbHNlIHtcbjI1MDI6XHRcdFx0cHRlbnQgPSBwdGVfc3dwX21rdWZmZF93cChwdGVudCk7XG4yNTAzOlx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIHB0ZW50KTtcbjI1MDQ6XHRcdH1cbjI1MDU6XHR9XG4yNTA2Olx0XG4yNTA3Olx0I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuMjUwODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfdGhwX2NhdGVnb3J5KHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSAqcCxcbjI1MDk6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI1MTA6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90IHBtZClcbjI1MTE6XHR7XG4yNTEyOlx0XHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBQQUdFX0lTX0hVR0U7XG4yNTEzOlx0XG4yNTE0Olx0XHRpZiAocG1kX25vbmUocG1kKSlcbjI1MTU6XHRcdFx0cmV0dXJuIGNhdGVnb3JpZXM7XG4yNTE2Olx0XG4yNTE3Olx0XHRpZiAocG1kX3ByZXNlbnQocG1kKSkge1xuMjUxODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjI1MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipQVEVfTUFSS0VSX1VGRkRfV1AgSW5xdWlyeSoqCgpIbW0sIHNvIGBQVEVfTUFSS0VSX1VGRkRfV1BgIGlzIGluIHBsYXkgaGVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGlzIG1hcmtlciBhbHdheXMgYXZhaWxhYmxlLCBvciBpcyBpdCBjb250aW5nZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbiBvciBzcGVjaWZpYyBrZXJuZWwgYnVpbGQgb3B0aW9ucz8gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIHByZXNlbmNlLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycywgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYGluY2x1ZGUvbGludXgvc3dhcG9wcy5oYCwgb3IgbWF5YmUgYSByZWxhdGVkIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdGhpcyBraW5kIG9mIGRlZmluaXRpb24gdG8gcmVzaWRlLiBBIHF1aWNrIGdyZXAgbWlnaHQgYWxzbyBiZSB1c2VmdWwsIGJ1dCBjaGVja2luZyB0aGUgaGVhZGVyIGlzIHRoZSBkZWZpbml0aXZlIHdheSB0byBjb25maXJtIGl0cyB1bmNvbmRpdGlvbmFsIGF2YWlsYWJpbGl0eSBvciBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgaXRzIGRlZmluaXRpb24gYW5kIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb24gaXMgcGFyYW1vdW50IGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dCBvZiB0aGlzIG1hcmtlciBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFRFX01BUktFUl9VRkZEX1dQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaD0xNj1zdGF0aWMgaW5saW5lIGJvb2wgdWZmZF9zdXBwb3J0c193cF9tYXJrZXIodm9pZClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcdHJldHVybiBwZ3RhYmxlX3N1cHBvcnRzX3VmZmRfd3AoKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTktfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NjE6XHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVx0LyogT25seSBjb3B5IFBURSBtYXJrZXJzIGlmIFVGRkQgcmVnaXN0ZXIgbWF0Y2hlcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlx0aWYgKChzcmNtIFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1ApIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTY0Olx0XHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTY1LVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTgyPXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MTQtXHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjYxNTpcdFx0XHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTYxNi1cdFx0cmV0dXJuIHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MjgxPXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfbWFya2VyO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MjgzOiNkZWZpbmUgIFBURV9NQVJLRVJfVUZGRF9XUFx0XHRcdEJJVCgwKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjg0LS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Njc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBVRkZEIFdyaXRlIFByb3RlY3Rpb24gUmVsZXZhbmNlKioKCkhtbSwgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgLi4uIHRoYXQgc2V0dGluZyAqY291bGQqIGJlIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLiBJIG5lZWQgdG8gZ2V0IG1vcmUgY29udGV4dCBhbmQgc2VlIGlmIGl0JiMzOTtzIGFwcGxpY2FibGUuIExldCBtZSBjaGVjayB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBhY3R1YWxseSAqZG9lcyouIEkmIzM5O2xsIGxvb2sgZm9yIGl0cyBkZXNjcmlwdGlvbiwgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBjb3VsZCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgaW5mb3JtYXRpb24gSSYjMzk7bSBsb29raW5nIGZvciBhbmQgbGVhZCBtZSBkb3duIHRoZSByaWdodCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFRFX01BUktFUl9VRkZEX1dQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTY9aWYgVVNFUkZBVUxURkRcbm1tL0tjb25maWc6MTM5Nzpjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG5tbS9LY29uZmlnLTEzOTgtXHRib29sIFwmIzM0O1VzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEluZGVwZW5kZW5jZSBvZiBQQUdFTUFQX1NDQU4gYW5kIFVTRVJGQVVMVEZEKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEl0JiMzOTtzIGRhd25pbmcgb24gbWUg4oCTIGNvdWxkIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IG9wZXJhdGUgaW5kZXBlbmRlbnRseSBvZiBgVVNFUkZBVUxURkRgPyBUaGF0IHdvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvci4uLiB3ZWxsLCBmb3Igc2V2ZXJhbCB0aGluZ3MgSSYjMzk7bSB3b3JraW5nIG9uIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0LgoKUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBQQUdFTUFQX1NDQU5gIGFuZCBgQ09ORklHX1VTRVJGQVVMVEZEYCBhcmUgaW5oZXJlbnRseSBsaW5rZWQgaW4gdGhlIGNvZGUuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIAoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGNhbiBJIGZpbmQgaW5zdGFuY2VzIHdoZXJlIGBQQUdFTUFQX1NDQU5gIGlzIGVuYWJsZWQgb3IgdXNlZCBldmVuICp3aXRob3V0KiBgQ09ORklHX1VTRVJGQVVMVEZEYCBiZWluZyBkZWZpbmVkPyBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGFuZCBjb250cm9sIGZsb3cuCgpXaGlsZSBJJiMzOTttIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZG91YmxlLWNoZWNrIHRoZSBgbWFrZV91ZmZkX3dwX3B0ZWAgZnVuY3Rpb24gaW4gdGhlIHNhbWUgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdyaXRlIHByb3RlY3Rpb24gcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byB0aGVzZSB0d28gZmVhdHVyZXMuIEtub3dpbmcgaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWtlX3VmZmRfd3BfcHRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yNDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI0ODgtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQ4OTpzdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuZnMvcHJvYy90YXNrX21tdS5jLTI0OTAtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUsIHB0ZV90IHB0ZW50KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yODY0LVx0XHRcdFx0Y29udGludWU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6Mjg2NTpcdFx0XHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg2Ni1cdFx0XHRpZiAoIWZsdXNoX2VuZClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg4OC1cdFx0XHRcdGNvbnRpbnVlO1xuZnMvcHJvYy90YXNrX21tdS5jOjI4ODk6XHRcdFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4OTAtXHRcdFx0aWYgKCFmbHVzaF9lbmQpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI5MTQtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkxNTpcdFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MTYtXHRcdGlmICghZmx1c2hfZW5kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJvbGUgb2YgYG1ha2VfdWZmZF93cF9wdGVgIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gYG1ha2VfdWZmZF93cF9wdGVgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeT8gV2hhdCYjMzk7cyBpdHMgcHVycG9zZT8mIzM0OyBUaGVuIEkgc2VlIHRoZSB1c2FnZSBvZiBgcHRlX21rdWZmZF93cGAgYW5kIGBwdGVfc3dwX21rdWZmZF93cGAuIFRoZXNlIHNvdW5kIGxpa2UgdGhleSYjMzk7cmUgcmVsYXRlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb25zIGhlcmUuIEkgc3VzcGVjdCB0aGlzIGlzIGFsbCB0aWVkIHRvIHVzZXJmYXVsdGZkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYFVTRVJGQVVMVEZEYCBpcywgaW4gZmFjdCwgZXNzZW50aWFsIGZvciBgUEFHRU1BUF9TQ0FOYCB0byBhY3R1YWxseSBiZSB1c2VmdWwuCgpJIGtub3cgYFBBR0VNQVBfU0NBTmAgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgYW5kL29yIGNsZWFyaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnLCBhIHZlcnkgY29tbW9uIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhpbmtpbmcgYmFjaywgdGhlIGBQQUdFX0lTX1dSSVRURU5gIGZsYWcgaXMsIGFzIEkgcmVjYWxsLCB0cmFja2VkIHV0aWxpemluZyBgdWZmZF93cGAgbWFya2Vycy4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3cgSSBuZWVkIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoYXQgc2NhbiBpbnRlcmFjdHMgd2l0aCB0aG9zZSBtYXJrZXJzLiBJIHNob3VsZCBkaXZlIGludG8gdGhlIGFsbG93ZWQgZmxhZ3MsIHNvIEkmIzM5O2xsIG5leHQgZXhhbWluZSBgcGFnZW1hcF9zY2FuX2dldF9hcmdzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcbjMwODE6XHRzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9nZXRfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcbjMwODI6XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHVhcmcpXG4zMDgzOlx0e1xuMzA4NDpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGFyZywgKHZvaWQgX191c2VyICopdWFyZywgc2l6ZW9mKCphcmcpKSlcbjMwODU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMDg2Olx0XG4zMDg3Olx0XHRpZiAoYXJnLVx1MDAzZXNpemUgIT0gc2l6ZW9mKHN0cnVjdCBwbV9zY2FuX2FyZykpXG4zMDg4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzA4OTpcdFxuMzA5MDpcdFx0LyogVmFsaWRhdGUgcmVxdWVzdGVkIGZlYXR1cmVzICovXG4zMDkxOlx0XHRpZiAoYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiB+UE1fU0NBTl9GTEFHUylcbjMwOTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDkzOlx0XHRpZiAoKGFyZy1cdTAwM2VjYXRlZ29yeV9pbnZlcnRlZCB8IGFyZy1cdTAwM2VjYXRlZ29yeV9tYXNrIHxcbjMwOTQ6XHRcdCAgICAgYXJnLVx1MDAzZWNhdGVnb3J5X2FueW9mX21hc2sgfCBhcmctXHUwMDNlcmV0dXJuX21hc2spIFx1MDAyNiB+UE1fU0NBTl9DQVRFR09SSUVTKVxuMzA5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwOTY6XHRcbjMwOTc6XHRcdGFyZy1cdTAwM2VzdGFydCA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVx1MDAzZXN0YXJ0KTtcbjMwOTg6XHRcdGFyZy1cdTAwM2VlbmQgPSB1bnRhZ2dlZF9hZGRyKCh1bnNpZ25lZCBsb25nKWFyZy1cdTAwM2VlbmQpO1xuMzA5OTpcdFx0YXJnLVx1MDAzZXZlYyA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVx1MDAzZXZlYyk7XG4zMTAwOlx0XG4zMTAxOlx0XHQvKiBWYWxpZGF0ZSBtZW1vcnkgcG9pbnRlcnMgKi9cbjMxMDI6XHRcdGlmICghSVNfQUxJR05FRChhcmctXHUwMDNlc3RhcnQsIFBBR0VfU0laRSkpXG4zMTAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEwNDpcdFx0aWYgKCFhY2Nlc3Nfb2soKHZvaWQgX191c2VyICopKGxvbmcpYXJnLVx1MDAzZXN0YXJ0LCBhcmctXHUwMDNlZW5kIC0gYXJnLVx1MDAzZXN0YXJ0KSlcbjMxMDU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMTA2Olx0XHRpZiAoIWFyZy1cdTAwM2V2ZWMgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2V2ZWNfbGVuKVxuMzEwNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMDg6XHRcdGlmIChVSU5UX01BWCA9PSBTSVpFX01BWCBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZXZlY19sZW4gXHUwMDNlIFNJWkVfTUFYKVxuMzEwOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMTA6XHRcdGlmIChhcmctXHUwMDNldmVjIFx1MDAyNlx1MDAyNiAhYWNjZXNzX29rKCh2b2lkIF9fdXNlciAqKShsb25nKWFyZy1cdTAwM2V2ZWMsXG4zMTExOlx0XHRcdFx0XHQgICBzaXplX211bChhcmctXHUwMDNldmVjX2xlbiwgc2l6ZW9mKHN0cnVjdCBwYWdlX3JlZ2lvbikpKSlcbjMxMTI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMTEzOlx0XG4zMTE0Olx0XHQvKiBGaXh1cCBkZWZhdWx0IHZhbHVlcyAqL1xuMzExNTpcdFx0YXJnLVx1MDAzZWVuZCA9IEFMSUdOKGFyZy1cdTAwM2VlbmQsIFBBR0VfU0laRSk7XG4zMTE2Olx0XHRhcmctXHUwMDNld2Fsa19lbmQgPSAwO1xuMzExNzpcdFx0aWYgKCFhcmctXHUwMDNlbWF4X3BhZ2VzKVxuMzExODpcdFx0XHRhcmctXHUwMDNlbWF4X3BhZ2VzID0gVUxPTkdfTUFYO1xuMzExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAwOAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHBhZ2VtYXBfaW9jdGwuY2AgU2VsZi1UZXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlbGYtdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHNwZWNpZmljYWxseSB0ZXN0IGBwYWdlbWFwX2lvY3RsYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXTigJlzIGEgZm9jdXNlZCB0ZXN0LCBhIGdvb2QgYXBwcm9hY2guIE5vdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSB0ZXN0IGl0c2VsZiB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIHRlc3RpbmcgYHBhZ2VtYXBfaW9jdGxgLiBBIHF1aWNrIHNlYXJjaCBmb3IgYHdwX2luaXRgIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIHJldmVhbCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyBpdCYjMzk7cyBlbXBsb3lpbmcgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaW9jdGwgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIHdyaXRlIHByb3RlY3Rpb24gYXNwZWN0IOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEga2V5IGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIExldCBtZSBzZWUgd2hhdCB0aGV54oCZcmUgZG9pbmcgd2l0aCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1MDpcdFxuMTA1MTpcdFx0a3NmdF90ZXN0X3Jlc3VsdChpID09IFRFU1RfSVRFUkFUSU9OUywgXCYjMzQ7VGVzdCAlc1xcblwmIzM0OywgX19mdW5jX18pO1xuMTA1MjpcdH1cbjEwNTM6XHRcbjEwNTQ6XHQvKlxuMTA1NTpcdCAqIEEgcmFuZ2UgdGhhdCB3YXMgcG9wdWxhdGVkIGFuZCB0aGVuIE1BRFZfRE9OVE5FRUQmIzM5O2QgaXMgZ2VudWluZSBwdGVfbm9uZVxuMTA1NjpcdCAqIHdpdGggbm8gdWZmZC13cCBtYXJrZXIuIFN1Y2ggYSBwdGUgbXVzdCByZWFkIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2hcbjEwNTc6XHQgKiBQQUdFTUFQX1NDQU4gcGF0aCBzZXJ2ZXMgdGhlIHJlcXVlc3Q6IGJvdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0IHBhdGggYW5kXG4xMDU4Olx0ICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxuMTA1OTpcdCAqIHBhZ2Ugd3JpdHRlbi5cbjEwNjA6XHQgKi9cbjEwNjE6XHRzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcbjEwNjI6XHR7XG4xMDYzOlx0XHRpbnQgbnBhZ2VzID0gMTYsIGk7XG4xMDY0Olx0XHRsb25nIG1lbV9zaXplID0gbnBhZ2VzICogcGFnZV9zaXplO1xuMTA2NTpcdFx0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xuMTA2NjpcdFx0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbjEwNjc6XHRcdGNoYXIgKm1lbTtcbjEwNjg6XHRcbjEwNjk6XHRcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4xMDcwOlx0XHRcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuMTA3MTpcdFx0aWYgKG1lbSA9PSBNQVBfRkFJTEVEKVxuMTA3MjpcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgbW1hcCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbjEwNzM6XHRcbjEwNzQ6XHRcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG4xMDc1Olx0XG4xMDc2Olx0XHQvKiBQb3B1bGF0ZSwgdGhlbiBkcm9wOiB0aGUgcHRlcyBiZWNvbWUgcHRlX25vbmUgd2l0aG91dCBhIG1hcmtlci4gKi9cbjEwNzc6XHRcdG1lbXNldChtZW0sIDEsIG1lbV9zaXplKTtcbjEwNzg6XHRcdGlmIChtYWR2aXNlKG1lbSwgbWVtX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxuMTA3OTpcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXMgTUFEVl9ET05UTkVFRCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbjEwODA6XHRcbjEwODE6XHRcdC8qIEZhc3QgcGF0aDogY2F0ZWdvcnlfbWFzayA9PSByZXR1cm5fbWFzayA9PSBQQUdFX0lTX1dSSVRURU4uICovXG4xMDgyOlx0XHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcbjEwODM6XHRcdFx0XHQgICAgUEFHRV9JU19XUklUVEVOLCAwLCAwLCBQQUdFX0lTX1dSSVRURU4pO1xuMTA4NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwODU6XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIGZhc3Qgc2NhbiBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbjEwODY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldDsgaSYjNDM7JiM0MzspXG4xMDg3Olx0XHRcdGZhc3QgJiM0Mzs9IExFTihyZWdpb25zW2ldKTtcbjEwODg6XHRcbjEwODk6XHRcdC8qIEdlbmVyaWMgcGF0aDogc2FtZSBxdWVyeSBleHByZXNzZWQgdmlhIGNhdGVnb3J5X2FueW9mX21hc2suICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDM0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHBhZ2VtYXBfaW9jdGwuY2AgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IFNlbGYtVGVzdHMqKgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gc29tZSBrZXJuZWwgaW50ZXJuYWxzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgd3BfaW5pdGAgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZWxmLXRlc3RzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB2aWEgdGhlIHBhZ2VtYXAgSU9DVEwuIFRoZXJlIGFyZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhc3BlY3RzIG9mIHRoZSB0ZXN0IHNldHVwIGluIGB3cF9pbml0YCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IGF2ZW51ZXMgb2YgZXhwbG9yYXRpb24uIFRoZSBpbml0aWFsIHNldHVwIGlzIGtleSB0byB0aGUgdGVzdGluZywgYW5kIHRodXMgSSB3aWxsIGZvY3VzIG15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz05NT1pbnQgaW5pdF91ZmZkKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExNy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTg6aW50IHdwX2luaXQodm9pZCAqYWRkciwgbG9uZyBzaXplKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOS17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTE4OD1pbnQgdXNlcmZhdWx0ZmRfdGVzdHModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTk3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE5ODpcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTk5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0yMzk9aW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0yNjMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MjY0Olx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0yNjUtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy00MTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6NDExOlx0d3BfaW5pdChtWzBdLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6NDEyOlx0d3BfaW5pdChtWzFdLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtNDEzLVx0d3BfYWRkcl9yYW5nZShtWzBdLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQ0OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo0NDk6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQ1MC1cdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTUwMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo1MDQ6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTUwNS1cdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTU1My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo1NTQ6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTU1NS1cdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTgwMz1pbnQgaHBhZ2VfdW5pdF90ZXN0cyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04MTgtXHRpZiAobWFwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6ODE5Olx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTgyMC1cdFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODU1LVx0XHRtYXAgPSBnZXRodWdlcGFnZShtYXBfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6ODU2Olx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTg1Ny1cdFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODc5LVx0aWYgKG1hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjg4MDpcdFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04ODEtXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTkwMy1cdGlmIChtYXApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo5MDQ6XHRcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTA1LVx0XHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05MzMtXHRpZiAobWFwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6OTM0Olx0XHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTkzNS1cdFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTYwLVx0aWYgKG1hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjk2MTpcdFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05NjItXHRcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTEwMTY9c3RhdGljIHZvaWQgdGVzdF9zaW1wbGUodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMDI2Olx0d3BfaW5pdChtYXAsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNy1cdHdwX2FkZHJfcmFuZ2UobWFwLCBwYWdlX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDYxPXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMDczLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwNzQ6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEwNzUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTExMDU9aW50IHNhbml0eV90ZXN0cyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTIxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExMjI6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExMjMtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTQ4LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExNDk6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExNTAtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTk0LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExOTU6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOTYtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEyNTI6XHR3cF9pbml0KGZtZW0sIGJ1Zl9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUzLVx0d3BfYWRkcl9yYW5nZShmbWVtLCBidWZfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTEyNzc9aW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEyOTItXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtlcnJvciBub21lbVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTI5MzpcdHdwX2luaXQobWVtLCAyICogcGFnZV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjk0LVx0d3BfYWRkcl9yYW5nZShtZW0sIDIgKiBwYWdlX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMzE3LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEzMTg6XHR3cF9pbml0KG1lbTIsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTMxOS1cdHdwX2FkZHJfcmFuZ2UobWVtMiwgcGFnZV9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM9MTQ0Mz1zdGF0aWMgdm9pZCB0cmFuc2FjdF90ZXN0KGludCBwYWdlX3NpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE0NjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTQ2MjpcdHdwX2luaXQobWVtLCAweDEwMDAgKiBudGhyZWFkcyAqIHBhZ2VzX3Blcl90aHJlYWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE0NjMtXHR3cF9hZGRyX3JhbmdlKG1lbSwgMHgxMDAwICogbnRocmVhZHMgKiBwYWdlc19wZXJfdGhyZWFkKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM9MTU5Nj1pbnQgbWFpbihpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjI5LVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2MzA6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2MzEtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjQyLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7ZXJyb3Igbm9tZW1cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2NDM6XHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NDQtXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjUzLVx0aWYgKG1hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2NTQ6XHRcdHdwX2luaXQobWFwLCBocGFnZV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjU1LVx0XHR3cF9hZGRyX3JhbmdlKG1hcCwgaHBhZ2Vfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NjYtXHRpZiAobWVtKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY2NzpcdFx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjY4LVx0XHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjgwLVx0aWYgKG1lbSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2ODE6XHRcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY4Mi1cdFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY5Ny1cdGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE2OTg6XHRcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY5OS1cdFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTcyOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNzMwOlx0d3BfaW5pdChmbWVtLCBzYnVmLnN0X3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3MzEtXHR3cF9hZGRyX3JhbmdlKGZtZW0sIHNidWYuc3Rfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTc1ODpcdHdwX2luaXQoZm1lbSwgYnVmX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTktXHR3cF9hZGRyX3JhbmdlKGZtZW0sIGJ1Zl9zaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NDIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipBbmFseXppbmcgYGluaXRfdWZmZGAgaW4gYHBhZ2VtYXBfaW9jdGwuY2AgZm9yIFNlbGZ0ZXN0cyoqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBpbml0X3VmZmRgIHdpdGhpbiB0aGF0IGBwYWdlbWFwX2lvY3RsLmNgIGZpbGUsIG5lc3RsZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tYC4gVGhhdCBtZWFucyB0aGlzIGlzIGEgdGVzdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgYHBhZ2VtYXBfaW9jdGxgIHN5c3RlbSBjYWxscy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCBgaW5pdF91ZmZkYCBsaWtlbHkgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgb2YgYSB1c2VyZmF1bHRmZCwgb3IgVUZGRCwgaW5zdGFuY2UgZm9yIHVzZSB3aXRoaW4gdGhlc2UgdGVzdHMuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgaW5kaWNhdGl2ZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSAmIzM0O3NlbGZ0ZXN0LCYjMzQ7IGl0IGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBlbnZpcm9ubWVudCByZWFkeSB0byBleGVyY2lzZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGFnZSBtYXAgSU9DVExzLiBTbywgcHJvYmFibHkgc2V0cyB1cCBzb21lIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIGNvbmZpZ3VyZXMgdGhlIFVGRkQgdG8gdHJpZ2dlciBvbiBzcGVjaWZpYyBldmVudHMsIGFuZCBnZW5lcmFsbHkgZG9lcyB0aGUgaGVhdnkgbGlmdGluZyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXN0aW5nIG9mIHRoZSBJT0NUTHMgdGhlbXNlbHZlcyBjYW4gY29tbWVuY2UuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzLiBNeSBtaW5kJiMzOTtzIGV5ZSBzZWVzIGEgZnVuY3Rpb24gcHJlcGFyaW5nIHRoZSBzdGFnZSBmb3IgdGhlIG1haW4gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdGludCBpbml0X3VmZmQodm9pZClcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgdWZmZGlvX2FwaSB1ZmZkaW9fYXBpO1xuICA5ODpcdFxuICA5OTpcdFx0dWZmZCA9IHN5c2NhbGwoX19OUl91c2VyZmF1bHRmZCwgT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpO1xuIDEwMDpcdFx0aWYgKHVmZmQgPT0gLTEpXG4gMTAxOlx0XHRcdHJldHVybiB1ZmZkO1xuIDEwMjpcdFxuIDEwMzpcdFx0dWZmZGlvX2FwaS5hcGkgPSBVRkZEX0FQSTtcbiAxMDQ6XHRcdHVmZmRpb19hcGkuZmVhdHVyZXMgPSBVRkZEX0ZFQVRVUkVfV1BfVU5QT1BVTEFURUQgfCBVRkZEX0ZFQVRVUkVfV1BfQVNZTkMgfFxuIDEwNTpcdFx0XHRcdCAgICAgIFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU07XG4gMTA2Olx0XHRpZiAoaW9jdGwodWZmZCwgVUZGRElPX0FQSSwgXHUwMDI2dWZmZGlvX2FwaSkpXG4gMTA3Olx0XHRcdHJldHVybiAtMTtcbiAxMDg6XHRcbiAxMDk6XHRcdGlmICghKHVmZmRpb19hcGkuYXBpIFx1MDAyNiBVRkZESU9fUkVHSVNURVJfTU9ERV9XUCkgfHxcbiAxMTA6XHRcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9VTlBPUFVMQVRFRCkgfHxcbiAxMTE6XHRcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9BU1lOQykgfHxcbiAxMTI6XHRcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU0pKVxuIDExMzpcdFx0XHRyZXR1cm4gLTE7XG4gMTE0Olx0XG4gMTE1Olx0XHRyZXR1cm4gMDtcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0aW50IHdwX2luaXQodm9pZCAqYWRkciwgbG9uZyBzaXplKVxuIDExOTpcdHtcbiAxMjA6XHRcdHN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyO1xuIDEyMTpcdFx0c3RydWN0IHVmZmRpb193cml0ZXByb3RlY3Qgd3A7XG4gMTIyOlx0XG4gMTIzOlx0XHR1ZmZkaW9fcmVnaXN0ZXIucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuIDEyNDpcdFx0dWZmZGlvX3JlZ2lzdGVyLnJhbmdlLmxlbiA9IHNpemU7XG4gMTI1Olx0XHR1ZmZkaW9fcmVnaXN0ZXIubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQO1xuIDEyNjpcdFx0aWYgKGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgXHUwMDI2dWZmZGlvX3JlZ2lzdGVyKSlcbiAxMjc6XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2lvY3RsKFVGRkRJT19SRUdJU1RFUikgJWQgJXNcXG5cJiMzNDssIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIDEyODpcdFxuIDEyOTpcdFx0aWYgKCEodWZmZGlvX3JlZ2lzdGVyLmlvY3RscyBcdTAwMjYgVUZGRElPX1dSSVRFUFJPVEVDVCkpXG4gMTMwOlx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtpb2N0bCBzZXQgaXMgaW5jb3JyZWN0XFxuXCYjMzQ7KTtcbiAxMzE6XHRcbiAxMzI6XHRcdHdwLnJhbmdlLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbiAxMzM6XHRcdHdwLnJhbmdlLmxlbiA9IHNpemU7XG4gMTM0Olx0XHR3cC5tb2RlID0gVUZGRElPX1dSSVRFUFJPVEVDVF9NT0RFX1dQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIFdyaXRlIFByb3RlY3Rpb24gd2l0aCBVc2VyZmF1bHRmZCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBgUEFHRU1BUF9TQ0FOYCB3b3JrcywgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZGVlcGx5IGNvbm5lY3RlZCB0byBgVVNFUkZBVUxURkRgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYFVGRkRfRkVBVFVSRV9XUF9VTlBPUFVMQVRFRGAgZmVhdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc29tZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gZ2V0IHRoZSBtb3N0IG91dCBvZiB0aGlzLgoKSXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCBlbmFibGluZyBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyB0aGUgZmlyc3Qgc3RlcC4gVGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuIEJ1dCBJIG5lZWQgdG8gYWxzbyBjb25zaWRlciBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAuIFRoaXMgc2VlbXMgbGlrZSB0aGUgY3J1Y2lhbCBwaWVjZSBmb3IgbWFuYWdpbmcgd3JpdGUgcHJvdGVjdGlvbiB1c2luZyB1c2VyZmF1bHRmZCBlZmZlY3RpdmVseS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgSSYjMzk7dmUgY2hvc2VuIHRoZSByaWdodCBjb25maWcgaGVyZSB0byBnZXQgdGhlIGludGVuZGVkIHJlc3VsdHMsIG9mIGNvdXJzZSwgYmVjYXVzZSBhbiBpbmNvcnJlY3QgY29uZmlnIGNob2ljZSBjb3VsZCBsZWFkIHRvIHNvbWUgc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzk2PWlmIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnOjEzOTc6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxubW0vS2NvbmZpZy0xMzk4LVx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJhdmVsaW5nIFBURSBNYXJrZXJzIGFuZCBVRkZEKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0JiMzOTtzIHNwZWNpZmljYWxseSBmb3Igc2hhcmVkIG1lbW9yeSBvciBodWdldGxiZnMsIGJ1dCB0aGVuIGl0IGhpdCBtZTogYFBURV9NQVJLRVJfVUZGRF9XUGAgaXRzZWxmIGlzIHVzZWQgZm9yIGFsbCB1bnBvcHVsYXRlZCBQVEVzLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBiZSBwcmVjaXNlLgoKV2FpdCBhIHNlY29uZCwgd2FzbiYjMzk7dCBgUFRFX01BUktFUl9VRkZEX1dQYCB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBhcyBgQklUKDApYCBpbiBgaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhgPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLgoKTm93IEkmIzM5O20gd29uZGVyaW5nIGlmIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBtaWdodCBzdGlsbCBiZSBuZWVkZWQgZm9yIGNlcnRhaW4gZmVhdHVyZXMuIEl0IGZlZWxzIGxpa2UgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IG9yIHJlbGF0aW9uc2hpcCBJJiMzOTttIG92ZXJsb29raW5nIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4KCkxldCYjMzk7cyBjaGVjayBgQ09ORklHX1VTRVJGQVVMVEZEYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSRkFVTFRGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU2MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBVU0VSRkFVTFRGRGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdHVyZSwgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBhcmUgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBTbywgSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgIGZvciBgVVNFUkZBVUxURkRgLiYjMzQ7IFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byBmaW5kIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlY2xhcmVkLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaXRzIGRlZmF1bHQgdmFsdWUuIEtub3dpbmcgdGhlIEtjb25maWcgZmlsZSB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSB1c2Ugb2YgdGhpcyBmbGFnIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNFUkZBVUxURkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzODgtXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxubW0vS2NvbmZpZy0xMzkwLVx0Ym9vbCBcJiMzNDtFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlY2lzaW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgZW5hYmxpbmcgdXNlcmZhdWx0ZmQuIEkgc2VlIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGRlZmluZWQgaW4gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQuIEFsc28sIEkga25vdyB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHJlbGV2YW50IHRvIHRoaXMgYXMgd2VsbCwgc28gSSBzaG91bGQgbGlzdCB0aGF0IGFzIHdlbGwuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgYmVpbmcgZW5hYmxlZCBieSBkZWZhdWx0IGluIGEgbG90IG9mIGJhc2UgY29uZmlndXJhdGlvbnMgYWxyZWFkeS4gU3RpbGwsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIGFuZCBleHBsaWNpdGx5IHN0YXRlIHRoZSBzZXR0aW5nLCBzbyBsZXQmIzM5O3MgZG9jdW1lbnQgdGhhdC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyBhbHNvIGRlZmluZWQgaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWc9ODM9Y29uZmlnIFBST0NfU1lTQ1RMXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwMS1cbmZzL3Byb2MvS2NvbmZpZzoxMDI6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL0tjb25maWctMTAzLSBcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIzMAoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBjaGFuZ2VzIGhvdyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCB0byByZXR1cm4gYFBBR0VfSVNfV1JJVFRFTmAgd2hlbiBpdCBlbmNvdW50ZXJzIGBwdGVfbm9uZShwdGUpYC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUuIEl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgdG8gZml4IGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMsIG1ha2luZyBzdXJlIHVucG9wdWxhdGVkIFBURXMgYXJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHdyaXR0ZW4uIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4KCk15IGluaXRpYWwgZm9jdXMgc3ltYm9scyBhcmUgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBhbmQgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUEFHRU1BUF9TQ0FOYCBpc24mIzM5O3Qgc29sZWx5IGRlcGVuZGVudCBvbiBgVVNFUkZBVUxURkRgLCBzaW5jZSB0aGUgcGF0Y2ggbWVudGlvbnMgaXRzIG1vZGlmaWNhdGlvbi4gSG1tLCBhZnRlciBhIHF1aWNrIGludmVzdGlnYXRpb24sIGl0IHNlZW1zIHlvdSAqY2FuKiB1c2UgYFBBR0VNQVBfU0NBTmAgdG8gcXVlcnkgcGFnZSBjYXRlZ29yaWVzIHdpdGhvdXQgYFVTRVJGQVVMVEZEYCwgYnV0IHRoZSB0ZXN0IHV0aWxpemVzIGl0IGZvciB3cml0ZSBwcm90ZWN0aW9uIGZpcnN0LiBTbywgdGhlIHRlc3QgaW4gdGhlIHBhdGNoIHVzZXMgYSBzZXR1cCB3aGVyZSBpdCBpbml0aWFsaXplcywgd3JpdGVzIHRvLCBhbmQgdGhlbiBhZHZpc2VzIG1lbW9yeSBhcyBgTUFEVl9ET05UTkVFRGAuIFRoYXQgZGVmaW5pdGVseSBtZWFucyBJIHNob3VsZCBpbmNsdWRlIGBVU0VSRkFVTFRGRGAgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIE5vcGUsIGl0JiMzOTtzIGp1c3QgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuIEdpdmVuIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcywgSSBzdXNwZWN0LgoKU28sIHRvIHN1bW1hcml6ZSwgbXkgZm9jdXMgaXMgbm93IG9uIHRoZXNlIHN5bWJvbHM6IGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLCBgZG9fcGFnZW1hcF9zY2FuYCwgYW5kIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCwgYW5kIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuIE15IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3Mgd2lsbCBiZSBgVVNFUkZBVUxURkRgIGFuZCBgUFJPQ19QQUdFX01PTklUT1JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkmIzM0OywKICAgICYjMzQ7ZG9fcGFnZW1hcF9zY2FuJiMzNDssCiAgICAmIzM0O3BhZ2VtYXBfc2Nhbl9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBiZWhhdmlvciBmb3IgdW5wb3B1bGF0ZWQgUFRFcyAocHRlX25vbmUpIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlbSBhcyBQQUdFX0lTX1dSSVRURU4uIFRoaXMgZml4ZXMgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkmIzM0OywKICAgICYjMzQ7ZG9fcGFnZW1hcF9zY2FuJiMzNDssCiAgICAmIzM0O3BhZ2VtYXBfc2Nhbl9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBiZWhhdmlvciBmb3IgdW5wb3B1bGF0ZWQgUFRFcyAocHRlX25vbmUpIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlbSBhcyBQQUdFX0lTX1dSSVRURU4uIFRoaXMgZml4ZXMgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjA2LjE0MjA0OTc3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA1MDk0MTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgICBcImRvX3BhZ2VtYXBfc2NhblwiLFxuICAgIFwicGFnZW1hcF9zY2FuX3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjA2LjE0MjA1NDM0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3MDQ0MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZlMzM4NWI3Y2Q2YTU2NDE3OTAyNmI3ZWNhNzBhZjBhM2E5M2U5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDAwOjQzOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi5kNDVjNzI5YWI2YmIzMyAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5AQCAtMjQzMiw4ICsyNDMyLDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xcbiBcXG4tXFx0aWYgKHB0ZV9ub25lKHB0ZSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAocHRlX25vbmUocHRlKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbiB1bnBvcHVsYXRlZCBwdGUgY2FycmllcyBubyB1ZmZkLXdwIG1hcmtlciwgaS5lLiBpdCBpcyBub3RcXG4rXFx0XFx0ICogd3JpdGUtcHJvdGVjdGVkLCB0aGUgc2FtZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlIHByZXNlbnRcXG4rXFx0XFx0ICogYW5kIHN3YXAgY2FzZXMgYmVsb3cgcmVwb3J0IFBBR0VfSVNfV1JJVFRFTi4gUmVwb3J0IGl0IGhlcmVcXG4rXFx0XFx0ICogdG9vIHNvIHRoaXMgZ2VuZXJpYyBwYXRoIGFncmVlcyB3aXRoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdFxcbitcXHRcXHQgKiBwYXRoIGluIHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkoKSwgd2hpY2ggcmVwb3J0cyBwdGVfbm9uZSBhc1xcbitcXHRcXHQgKiB3cml0dGVuIGFuZCwgdW5kZXIgUE1fU0NBTl9XUF9NQVRDSElORywgYXJtcyBhIG1hcmtlci4gVGhlXFxuK1xcdFxcdCAqIGZhc3QgcGF0aCBhcHBsaWVzIG5vIFZNQSB0ZXN0LCBzbyBuZWl0aGVyIGRvZXMgdGhpcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiBQQUdFX0lTX1dSSVRURU47XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChwdGVfcHJlc2VudChwdGUpKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCA3NjIzMDYxNzdhZDgxMy4uNTUwZDFmMmMwNTliMzYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTEwNTEsNiArMTA1MSw1NyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxcbiBcXHRrc2Z0X3Rlc3RfcmVzdWx0KGkgPT0gVEVTVF9JVEVSQVRJT05TLCBcXFwiVGVzdCAlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJ2QgaXMgZ2VudWluZSBwdGVfbm9uZVxcbisgKiB3aXRoIG5vIHVmZmQtd3AgbWFya2VyLiBTdWNoIGEgcHRlIG11c3QgcmVhZCB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdoaWNoXFxuKyAqIFBBR0VNQVBfU0NBTiBwYXRoIHNlcnZlcyB0aGUgcmVxdWVzdDogYm90aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3QgcGF0aCBhbmRcXG4rICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxcbisgKiBwYWdlIHdyaXR0ZW4uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcXG4re1xcbitcXHRpbnQgbnBhZ2VzID0gMTYsIGk7XFxuK1xcdGxvbmcgbWVtX3NpemUgPSBucGFnZXMgKiBwYWdlX3NpemU7XFxuK1xcdHN0cnVjdCBwYWdlX3JlZ2lvbiByZWdpb25zWzE2XTtcXG4rXFx0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcXG4rXFx0Y2hhciAqbWVtO1xcbitcXG4rXFx0bWVtID0gbW1hcChOVUxMLCBtZW1fc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdGlmIChtZW0gPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBtbWFwIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXG4rXFx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcXG4rXFxuK1xcdC8qIFBvcHVsYXRlLCB0aGVuIGRyb3A6IHRoZSBwdGVzIGJlY29tZSBwdGVfbm9uZSB3aXRob3V0IGEgbWFya2VyLiAqL1xcbitcXHRtZW1zZXQobWVtLCAxLCBtZW1fc2l6ZSk7XFxuK1xcdGlmIChtYWR2aXNlKG1lbSwgbWVtX3NpemUsIE1BRFZfRE9OVE5FRUQpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcbitcXHQvKiBGYXN0IHBhdGg6IGNhdGVnb3J5X21hc2sgPT0gcmV0dXJuX21hc2sgPT0gUEFHRV9JU19XUklUVEVOLiAqL1xcbitcXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcXG4rXFx0XFx0XFx0ICAgIFBBR0VfSVNfV1JJVFRFTiwgMCwgMCwgUEFHRV9JU19XUklUVEVOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgZmFzdCBzY2FuIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmV0OyBpKyspXFxuK1xcdFxcdGZhc3QgKz0gTEVOKHJlZ2lvbnNbaV0pO1xcbitcXG4rXFx0LyogR2VuZXJpYyBwYXRoOiBzYW1lIHF1ZXJ5IGV4cHJlc3NlZCB2aWEgY2F0ZWdvcnlfYW55b2ZfbWFzay4gKi9cXG4rXFx0cmV0ID0gcGFnZW1hcF9pb2N0bChtZW0sIG1lbV9zaXplLCByZWdpb25zLCBucGFnZXMsIDAsIDAsXFxuK1xcdFxcdFxcdCAgICAwLCBQQUdFX0lTX1dSSVRURU4sIDAsIFBBR0VfSVNfV1JJVFRFTik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIGdlbmVyaWMgc2NhbiBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJldDsgaSsrKVxcbitcXHRcXHRzbG93ICs9IExFTihyZWdpb25zW2ldKTtcXG4rXFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoZmFzdCA9PSBucGFnZXMgXFx1MDAyNlxcdTAwMjYgc2xvdyA9PSBucGFnZXMsXFxuK1xcdFxcdFxcdCBcXFwiJXMgdW5wb3B1bGF0ZWQgcHRlcyByZXBvcnRlZCB3cml0dGVuIGJ5IGJvdGggcGF0aHMgKCVsZCwgJWxkIG9mICVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IF9fZnVuY19fLCBmYXN0LCBzbG93LCBucGFnZXMpO1xcbitcXG4rXFx0d3BfZnJlZShtZW0sIG1lbV9zaXplKTtcXG4rXFx0bXVubWFwKG1lbSwgbWVtX3NpemUpO1xcbit9XFxuK1xcbiBpbnQgc2FuaXR5X3Rlc3RzKHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaXplLCB2ZWNfc2l6ZTtcXG5AQCAtMTU1OSw3ICsxNjEwLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoNCkpXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJIdWdlVExCIHRlc3Qgd2lsbCBiZSBza2lwcGVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGtzZnRfc2V0X3BsYW4oMTE3KTtcXG4rXFx0a3NmdF9zZXRfcGxhbigxMTgpO1xcbiBcXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuQEAgLTE3MzcsNiArMTc4OCw5IEBAIGludCBtYWluKGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdC8qIDE3LiBaRVJPUEZOIHRlc3RzICovXFxuIFxcdHplcm9wZm5fdGVzdHMoKTtcXG4gXFxuK1xcdC8qIDE4LiBVbnBvcHVsYXRlZCBwdGUgc2Nhbi1wYXRoIGNvbnNpc3RlbmN5ICovXFxuK1xcdHVucG9wdWxhdGVkX3NjYW5fdGVzdCgpO1xcbitcXG4gXFx0Y2xvc2UocGFnZW1hcF9mZCk7XFxuIFxcdGtzZnRfZmluaXNoZWQoKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzowNi43MTk3OTE4NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzQ3MzE3NjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgICBcImRvX3BhZ2VtYXBfc2NhblwiLFxuICAgIFwicGFnZW1hcF9zY2FuX3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZlMzM4NWI3Y2Q2YTU2NDE3OTAyNmI3ZWNhNzBhZjBhM2E5M2U5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDA6NDM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi5kNDVjNzI5YWI2YmIzMyAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXG5AQCAtMjQzMiw4ICsyNDMyLDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBjYXRlZ29yaWVzO1xuIFxuLVx0aWYgKHB0ZV9ub25lKHB0ZSkpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKHB0ZV9ub25lKHB0ZSkpIHtcbitcdFx0LypcbitcdFx0ICogQW4gdW5wb3B1bGF0ZWQgcHRlIGNhcnJpZXMgbm8gdWZmZC13cCBtYXJrZXIsIGkuZS4gaXQgaXMgbm90XG4rXHRcdCAqIHdyaXRlLXByb3RlY3RlZCwgdGhlIHNhbWUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZSBwcmVzZW50XG4rXHRcdCAqIGFuZCBzd2FwIGNhc2VzIGJlbG93IHJlcG9ydCBQQUdFX0lTX1dSSVRURU4uIFJlcG9ydCBpdCBoZXJlXG4rXHRcdCAqIHRvbyBzbyB0aGlzIGdlbmVyaWMgcGF0aCBhZ3JlZXMgd2l0aCB0aGUgUEFHRV9JU19XUklUVEVOIGZhc3RcbitcdFx0ICogcGF0aCBpbiBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KCksIHdoaWNoIHJlcG9ydHMgcHRlX25vbmUgYXNcbitcdFx0ICogd3JpdHRlbiBhbmQsIHVuZGVyIFBNX1NDQU5fV1BfTUFUQ0hJTkcsIGFybXMgYSBtYXJrZXIuIFRoZVxuK1x0XHQgKiBmYXN0IHBhdGggYXBwbGllcyBubyBWTUEgdGVzdCwgc28gbmVpdGhlciBkb2VzIHRoaXMuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gUEFHRV9JU19XUklUVEVOO1xuK1x0fVxuIFxuIFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCA3NjIzMDYxNzdhZDgxMy4uNTUwZDFmMmMwNTliMzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTEwNTEsNiArMTA1MSw1NyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpbXBsZSh2b2lkKVxuIFx0a3NmdF90ZXN0X3Jlc3VsdChpID09IFRFU1RfSVRFUkFUSU9OUywgXCJUZXN0ICVzXFxuXCIsIF9fZnVuY19fKTtcbiB9XG4gXG4rLypcbisgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJ2QgaXMgZ2VudWluZSBwdGVfbm9uZVxuKyAqIHdpdGggbm8gdWZmZC13cCBtYXJrZXIuIFN1Y2ggYSBwdGUgbXVzdCByZWFkIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2hcbisgKiBQQUdFTUFQX1NDQU4gcGF0aCBzZXJ2ZXMgdGhlIHJlcXVlc3Q6IGJvdGggdGhlIFBBR0VfSVNfV1JJVFRFTiBmYXN0IHBhdGggYW5kXG4rICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxuKyAqIHBhZ2Ugd3JpdHRlbi5cbisgKi9cbitzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcbit7XG4rXHRpbnQgbnBhZ2VzID0gMTYsIGk7XG4rXHRsb25nIG1lbV9zaXplID0gbnBhZ2VzICogcGFnZV9zaXplO1xuK1x0c3RydWN0IHBhZ2VfcmVnaW9uIHJlZ2lvbnNbMTZdO1xuK1x0bG9uZyBmYXN0ID0gMCwgc2xvdyA9IDAsIHJldDtcbitcdGNoYXIgKm1lbTtcbitcbitcdG1lbSA9IG1tYXAoTlVMTCwgbWVtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0aWYgKG1lbSA9PSBNQVBfRkFJTEVEKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBtbWFwIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXG4rXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xuK1xuK1x0LyogUG9wdWxhdGUsIHRoZW4gZHJvcDogdGhlIHB0ZXMgYmVjb21lIHB0ZV9ub25lIHdpdGhvdXQgYSBtYXJrZXIuICovXG4rXHRtZW1zZXQobWVtLCAxLCBtZW1fc2l6ZSk7XG4rXHRpZiAobWFkdmlzZShtZW0sIG1lbV9zaXplLCBNQURWX0RPTlRORUVEKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgTUFEVl9ET05UTkVFRCBmYWlsZWRcXG5cIiwgX19mdW5jX18pO1xuK1xuK1x0LyogRmFzdCBwYXRoOiBjYXRlZ29yeV9tYXNrID09IHJldHVybl9tYXNrID09IFBBR0VfSVNfV1JJVFRFTi4gKi9cbitcdHJldCA9IHBhZ2VtYXBfaW9jdGwobWVtLCBtZW1fc2l6ZSwgcmVnaW9ucywgbnBhZ2VzLCAwLCAwLFxuK1x0XHRcdCAgICBQQUdFX0lTX1dSSVRURU4sIDAsIDAsIFBBR0VfSVNfV1JJVFRFTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBmYXN0IHNjYW4gZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJldDsgaSsrKVxuK1x0XHRmYXN0ICs9IExFTihyZWdpb25zW2ldKTtcbitcbitcdC8qIEdlbmVyaWMgcGF0aDogc2FtZSBxdWVyeSBleHByZXNzZWQgdmlhIGNhdGVnb3J5X2FueW9mX21hc2suICovXG4rXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcbitcdFx0XHQgICAgMCwgUEFHRV9JU19XUklUVEVOLCAwLCBQQUdFX0lTX1dSSVRURU4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgZ2VuZXJpYyBzY2FuIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXQ7IGkrKylcbitcdFx0c2xvdyArPSBMRU4ocmVnaW9uc1tpXSk7XG4rXG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGZhc3QgPT0gbnBhZ2VzIFx1MDAyNlx1MDAyNiBzbG93ID09IG5wYWdlcyxcbitcdFx0XHQgXCIlcyB1bnBvcHVsYXRlZCBwdGVzIHJlcG9ydGVkIHdyaXR0ZW4gYnkgYm90aCBwYXRocyAoJWxkLCAlbGQgb2YgJWQpXFxuXCIsXG4rXHRcdFx0IF9fZnVuY19fLCBmYXN0LCBzbG93LCBucGFnZXMpO1xuK1xuK1x0d3BfZnJlZShtZW0sIG1lbV9zaXplKTtcbitcdG11bm1hcChtZW0sIG1lbV9zaXplKTtcbit9XG4rXG4gaW50IHNhbml0eV90ZXN0cyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2l6ZSwgdmVjX3NpemU7XG5AQCAtMTU1OSw3ICsxNjEwLDcgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KDQpKVxuIFx0XHRrc2Z0X3ByaW50X21zZyhcIkh1Z2VUTEIgdGVzdCB3aWxsIGJlIHNraXBwZWRcXG5cIik7XG4gXG4tXHRrc2Z0X3NldF9wbGFuKDExNyk7XG4rXHRrc2Z0X3NldF9wbGFuKDExOCk7XG4gXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFx0aHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG5AQCAtMTczNyw2ICsxNzg4LDkgQEAgaW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdC8qIDE3LiBaRVJPUEZOIHRlc3RzICovXG4gXHR6ZXJvcGZuX3Rlc3RzKCk7XG4gXG4rXHQvKiAxOC4gVW5wb3B1bGF0ZWQgcHRlIHNjYW4tcGF0aCBjb25zaXN0ZW5jeSAqL1xuK1x0dW5wb3B1bGF0ZWRfc2Nhbl90ZXN0KCk7XG4rXG4gXHRjbG9zZShwYWdlbWFwX2ZkKTtcbiBcdGtzZnRfZmluaXNoZWQoKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzowNi43MTk3OTMyMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE1ODQ2NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBNTVUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byB0d2VhayBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpczogd2hlbiB0aGUgUGFnZSBUYWJsZSBFbnRyeSBpcyBjb25zaWRlcmVkIFwibm9uZVwiIChpLmUuLCBgcHRlX25vbmUocHRlKWAgaXMgdHJ1ZSksIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgUEFHRV9JU19XUklUVEVOYCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBkZWZhdWx0IG9mIGAwYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBmZWVscyBsaWtlIGEgdmVyeSBzcGVjaWZpYyBlZGdlIGNhc2UuIFRoZW4gdGhlcmUgaXMgYW4gYWNjb21wYW55aW5nIHRlc3QgYWRkZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFNlZW1zIGxpa2UgaXQncyBpbnZvbHZlZCBpbiBmdW5jdGlvbnMgbGlrZSBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBhbmQgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLCB3aGljaCBzdWdnZXN0cyB3ZSdyZSB0YWxraW5nIGFib3V0IHBhZ2UgdGFibGUgdHJhdmVyc2FsIGFuZCByZXBvcnRpbmcuIFNvLCB0aGUgZnVuY3Rpb24gd2UncmUgY29uY2VybmVkIHdpdGggaXMgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBncmVwcGVyYCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJJ2xsIHNlYXJjaCBmb3IgYWxsIHVzZXMgb2YgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAgdG8gc2VlICp3aHkqIHRoaXMgcGFydGljdWxhciByZXR1cm4gdmFsdWUgaGFzIGJlZW4gYWx0ZXJlZC4gSSdsbCBhbHNvIGNoZWNrIGFsbCB1c2VzIG9mIGBQQUdFX0lTX1dSSVRURU5gLCB0byBnYWluIGluc2lnaHQgaW50byB3aGF0IHRoaXMgdmFsdWUgcmVwcmVzZW50cy4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBzdWJ0bGUgY2hhbmdlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYW5kIHJlcG9ydHMgb24gZW1wdHkgUFRFcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjEzLjMzNTY1MTY4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQyMDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNDIxPXN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQyOC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQyOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDMwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI4MzQ9c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg5OS1cXHRcXHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkwMDpcXHRcXHRcXHRcXHRcXHQgICBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkocCwgdm1hLCBhZGRyLCBwdGVudCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MDEtXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0ID0gYWRkciArIFBBR0VfU0laRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MTMuMzk4MDc3NzUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDUwNDg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZnMvcHJvYy90YXNrX21tdS5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBjdXJyZW50IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiB0aGUgbW9zdCByZWxldmFudCBwbGFjZSB0byBzdGFydCBzZWVtcyB0byBiZSBgZnMvcHJvYy90YXNrX21tdS5jYCwgYXJvdW5kIGxpbmUgMjQyOS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHRvIHVucmF2ZWwgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZy4gV2hhdCdzIGl0IGRvaW5nIHdpdGggdGhlIHRhc2sncyBtZW1vcnkgbWFwPyBJcyBpdCByZWxhdGVkIHRvIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6YXRpb24/IE9yIG1heWJlIHRyYWNraW5nIHNoYXJlZCBtZW1vcnkgcmVnaW9ucz8gR290dGEga2VlcCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0IGluIG1pbmQgaGVyZSBhcyBJIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MTYuNTI4NTg0MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MjA6XFx0XFxuMjQyMTpcXHRzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUge1xcbjI0MjI6XFx0XFx0c3RydWN0IHBtX3NjYW5fYXJnIGFyZztcXG4yNDIzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFza3Nfb2ZfaW50ZXJlc3QsIGN1cl92bWFfY2F0ZWdvcnk7XFxuMjQyNDpcXHRcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gKnZlY19idWY7XFxuMjQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHZlY19idWZfbGVuLCB2ZWNfYnVmX2luZGV4LCBmb3VuZF9wYWdlcztcXG4yNDI2OlxcdFxcdHN0cnVjdCBwYWdlX3JlZ2lvbiBfX3VzZXIgKnZlY19vdXQ7XFxuMjQyNzpcXHR9O1xcbjI0Mjg6XFx0XFxuMjQyOTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbjI0MzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjQzMTpcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcXG4yNDMyOlxcdHtcXG4yNDMzOlxcdFxcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcztcXG4yNDM0OlxcdFxcbjI0MzU6XFx0XFx0aWYgKHB0ZV9ub25lKHB0ZSkpIHtcXG4yNDM2OlxcdFxcdFxcdC8qXFxuMjQzNzpcXHRcXHRcXHQgKiBBbiB1bnBvcHVsYXRlZCBwdGUgY2FycmllcyBubyB1ZmZkLXdwIG1hcmtlciwgaS5lLiBpdCBpcyBub3RcXG4yNDM4OlxcdFxcdFxcdCAqIHdyaXRlLXByb3RlY3RlZCwgdGhlIHNhbWUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZSBwcmVzZW50XFxuMjQzOTpcXHRcXHRcXHQgKiBhbmQgc3dhcCBjYXNlcyBiZWxvdyByZXBvcnQgUEFHRV9JU19XUklUVEVOLiBSZXBvcnQgaXQgaGVyZVxcbjI0NDA6XFx0XFx0XFx0ICogdG9vIHNvIHRoaXMgZ2VuZXJpYyBwYXRoIGFncmVlcyB3aXRoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdFxcbjI0NDE6XFx0XFx0XFx0ICogcGF0aCBpbiBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5KCksIHdoaWNoIHJlcG9ydHMgcHRlX25vbmUgYXNcXG4yNDQyOlxcdFxcdFxcdCAqIHdyaXR0ZW4gYW5kLCB1bmRlciBQTV9TQ0FOX1dQX01BVENISU5HLCBhcm1zIGEgbWFya2VyLiBUaGVcXG4yNDQzOlxcdFxcdFxcdCAqIGZhc3QgcGF0aCBhcHBsaWVzIG5vIFZNQSB0ZXN0LCBzbyBuZWl0aGVyIGRvZXMgdGhpcy5cXG4yNDQ0OlxcdFxcdFxcdCAqL1xcbjI0NDU6XFx0XFx0XFx0cmV0dXJuIFBBR0VfSVNfV1JJVFRFTjtcXG4yNDQ2OlxcdFxcdH1cXG4yNDQ3OlxcdFxcbjI0NDg6XFx0XFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcXG4yNDQ5OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRcXHRjYXRlZ29yaWVzID0gUEFHRV9JU19QUkVTRU5UO1xcbjI0NTI6XFx0XFxuMjQ1MzpcXHRcXHRcXHRpZiAoIXB0ZV91ZmZkX3dwKHB0ZSkpXFxuMjQ1NDpcXHRcXHRcXHRcXHRjYXRlZ29yaWVzIHw9IFBBR0VfSVNfV1JJVFRFTjtcXG4yNDU1OlxcdFxcbjI0NTY6XFx0XFx0XFx0aWYgKHAtXFx1MDAzZW1hc2tzX29mX2ludGVyZXN0IFxcdTAwMjYgUEFHRV9JU19GSUxFKSB7XFxuMjQ1NzpcXHRcXHRcXHRcXHRwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGUpO1xcbjI0NTg6XFx0XFx0XFx0XFx0aWYgKHBhZ2UgXFx1MDAyNlxcdTAwMjYgIVBhZ2VBbm9uKHBhZ2UpKVxcbjI0NTk6XFx0XFx0XFx0XFx0XFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX0ZJTEU7XFxuMjQ2MDpcXHRcXHRcXHR9XFxuMjQ2MTpcXHRcXG4yNDYyOlxcdFxcdFxcdGlmIChpc196ZXJvX3BmbihwdGVfcGZuKHB0ZSkpKVxcbjI0NjM6XFx0XFx0XFx0XFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX1BGTlpFUk87XFxuMjQ2NDpcXHRcXHRcXHRpZiAocHRlX3NvZnRfZGlydHkocHRlKSlcXG4yNDY1OlxcdFxcdFxcdFxcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19TT0ZUX0RJUlRZO1xcbjI0NjY6XFx0XFx0fSBlbHNlIHtcXG4yNDY3OlxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuMjQ2ODpcXHRcXG4yNDY5OlxcdFxcdFxcdGNhdGVnb3JpZXMgPSBQQUdFX0lTX1NXQVBQRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjE2LjUyODc0OTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NDM4NTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBBR0VNQVBfU0NBTiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLCBzcGVjaWZpY2FsbHkgaXRzIHVzZSB3aXRoaW4gYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRoZSBtZW50YWwgYXNzb2NpYXRpb24gd2l0aCB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2MvcGlkL3BhZ2VtYXBgIGludGVyZmFjZS4gQnV0IGl0J3Mgbm90IHRoZSBmaWxlIGl0c2VsZiwgaXQgaXMgYW4gYGlvY3RsYCBvbiBhIGZpbGUgZGVzY3JpcHRvciwgYHBhZ2VtYXBfZmRgLCB3aGljaCBpcyAqZGVyaXZlZCogZnJvbSBvcGVuaW5nIHRoZSBmaWxlISBTbywgd2UncmUgdGFsa2luZyBhYm91dCBzY2FubmluZyB0aGUgcGFnZSBtYXAgZGF0YSB0aHJvdWdoIGEgc3lzdGVtIGNhbGwgaW50ZXJmYWNlLlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW46IHdoZXJlIGlzIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IGhhbmRsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYHBhZ2VtYXBgIHN1YnN5c3RlbS4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjIwLjQ3MzEzNTk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU1OTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFTUFQX1NDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMjUxPXN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXFx0c3dpdGNoIChjbWQpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI1NzpcXHRjYXNlIFBBR0VNQVBfU0NBTjpcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1OC1cXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyMC41Mjc3MDAwNjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjEzMjAwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYFBBR0VNQVBfU0NBTmAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgZG9fcGFnZW1hcF9jbWRgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBgUEFHRU1BUF9TQ0FOYCwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QuIFRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB1c2luZyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwsIG1ha2luZyBpdCBhIGNyaXRpY2FsIHBvaW50IHRvIGF1ZGl0LiBDb25zaWRlcmluZyB1c2VyZmF1bHRmZCB3cml0ZS1wcm90ZWN0IHRyYWNraW5nIGFuZCByZWxhdGVkIGZlYXR1cmVzIHVzZSB0aGlzLCB0aGF0J3MgZGVmaW5pdGVseSBhbiBpbXBvcnRhbnQgYXJlYSBmb3IgbWUgdG8gY2hlY2suXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBjb2RlIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBiYXNlbGluZS4gQnV0LCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBzZXQgb3IgZW5hYmxlZCBmb3IgYFBBR0VNQVBfU0NBTmAgZnVuY3Rpb25hbGl0eSB0byBiZSBwcmVzZW50PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYXJlIG1ldCB0byBlbnN1cmUgdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBhbmQgd2l0aG91dCB1bmZvcmVzZWVuIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyNi4xNDA5MDI3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2OTk4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRU1BUF9TQ0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMjUxPXN0YXRpYyBsb25nIGRvX3BhZ2VtYXBfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyNTYtXFx0c3dpdGNoIChjbWQpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI1NzpcXHRjYXNlIFBBR0VNQVBfU0NBTjpcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1OC1cXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyNi4yMTY2MDcyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNTA0MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgZG9fcGFnZW1hcF9zY2FuYCBmdW5jdGlvbiwgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0J3MgcG90ZW50aWFsbHkgZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkLCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGRlcGVuZGVudCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gZmxhZyBvciBzeXN0ZW0gZGVmaW5pdGlvbi4gSWYgaXQgKmlzKiBjb25kaXRpb25hbCwgaXQgd2lsbCBzZXZlcmVseSBpbXBhY3QgaG93IEkgaW50ZXJwcmV0IGl0cyBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSwgYW5kIGlmIEkgY2FuIGV2ZW4gcmVseSBvbiBpdHMgcHJlc2VuY2UgaW4gYWxsIHNjZW5hcmlvcy4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBzaW1pbGFyIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIEknbGwgc2VhcmNoIGZvciB0aG9zZSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyOS4zNzgxMTI3NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NzQwNzMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19wYWdlbWFwX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0zMTUxPXN0YXRpYyBsb25nIHBhZ2VtYXBfc2Nhbl9mbHVzaF9idWZmZXIoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzctXFxuZnMvcHJvYy90YXNrX21tdS5jOjMxNzg6c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9zY2FuKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHVhcmcpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzkte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMyNTE9c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI1Ny1cXHRjYXNlIFBBR0VNQVBfU0NBTjpcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzI1ODpcXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0zMjU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzoyOS43NzU1MjQ2MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNTU5MDQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGZzL3Byb2MvdGFza19tbXUuY2AncyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRvX3BhZ2VtYXBfc2NhbmAgZnVuY3Rpb24gYmV0dGVyLCBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2MgZmlsZXN5c3RlbSdzIHRhc2sgbWVtb3J5IG1hcHMuIFRpbWUgdG8gemVybyBpbiBvbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzPyBUaG9zZSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBgZG9fcGFnZW1hcF9zY2FuYC4gSSB3YW50IHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSAqZW5hYmxlKiBvciAqZGlzYWJsZSogdGhpcyBjb2RlIHBhdGguIEkgZXhwZWN0IHRoZXJlIG1pZ2h0IGJlIGNvbXBpbGUtdGltZSBjaG9pY2VzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IHBhZ2UgdGFibGUgYXJjaGl0ZWN0dXJlcywgTlVNQSBzdXBwb3J0LCBvciBldmVuIHNwZWNpZmljIHNlY3VyaXR5IGhhcmRlbmluZyBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZW4gYGRvX3BhZ2VtYXBfc2NhbmAgaXMgKmF2YWlsYWJsZSogYW5kIHRoZXJlZm9yZSB3aGVuIHRoZSBwcm9jIGZpbGVzeXN0ZW0gd2lsbCBleHBvc2UgdGhpcyBpbmZvcm1hdGlvbiwgYW5kIHVuZGVyIHdoYXQgY29uc3RyYWludHMuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IHJlcG9ydGluZyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjMzLjUwMTExNzU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE3MDpcXHRcXG4zMTcxOlxcdFxcdHAtXFx1MDAzZXZlY19idWZfaW5kZXggPSAwO1xcbjMxNzI6XFx0XFx0cC1cXHUwMDNldmVjX2J1Zl9sZW4gPSBtaW5fdChzaXplX3QsIHAtXFx1MDAzZXZlY19idWZfbGVuLCBwLVxcdTAwM2VhcmcudmVjX2xlbik7XFxuMzE3MzpcXHRcXHRwLVxcdTAwM2V2ZWNfYnVmLVxcdTAwM2VzdGFydCA9IHAtXFx1MDAzZXZlY19idWYtXFx1MDAzZWVuZCA9IDA7XFxuMzE3NDpcXHRcXG4zMTc1OlxcdFxcdHJldHVybiBuO1xcbjMxNzY6XFx0fVxcbjMxNzc6XFx0XFxuMzE3ODpcXHRzdGF0aWMgbG9uZyBkb19wYWdlbWFwX3NjYW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdWFyZylcXG4zMTc5OlxcdHtcXG4zMTgwOlxcdFxcdHN0cnVjdCBwYWdlbWFwX3NjYW5fcHJpdmF0ZSBwID0gezB9O1xcbjMxODE6XFx0XFx0dW5zaWduZWQgbG9uZyB3YWxrX3N0YXJ0O1xcbjMxODI6XFx0XFx0c2l6ZV90IG5fcmFuZ2VzX291dCA9IDA7XFxuMzE4MzpcXHRcXHRpbnQgcmV0O1xcbjMxODQ6XFx0XFxuMzE4NTpcXHRcXHRyZXQgPSBwYWdlbWFwX3NjYW5fZ2V0X2FyZ3MoXFx1MDAyNnAuYXJnLCB1YXJnKTtcXG4zMTg2OlxcdFxcdGlmIChyZXQpXFxuMzE4NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjMxODg6XFx0XFxuMzE4OTpcXHRcXHRwLm1hc2tzX29mX2ludGVyZXN0ID0gcC5hcmcuY2F0ZWdvcnlfbWFzayB8IHAuYXJnLmNhdGVnb3J5X2FueW9mX21hc2sgfFxcbjMxOTA6XFx0XFx0XFx0XFx0ICAgICAgcC5hcmcucmV0dXJuX21hc2s7XFxuMzE5MTpcXHRcXHRyZXQgPSBwYWdlbWFwX3NjYW5faW5pdF9ib3VuY2VfYnVmZmVyKFxcdTAwMjZwKTtcXG4zMTkyOlxcdFxcdGlmIChyZXQpXFxuMzE5MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjMxOTQ6XFx0XFxuMzE5NTpcXHRcXHRmb3IgKHdhbGtfc3RhcnQgPSBwLmFyZy5zdGFydDsgd2Fsa19zdGFydCBcXHUwMDNjIHAuYXJnLmVuZDtcXG4zMTk2OlxcdFxcdFxcdFxcdHdhbGtfc3RhcnQgPSBwLmFyZy53YWxrX2VuZCkge1xcbjMxOTc6XFx0XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4zMTk4OlxcdFxcdFxcdGxvbmcgbl9vdXQ7XFxuMzE5OTpcXHRcXG4zMjAwOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjMyMDE6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlRSO1xcbjMyMDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzIwMzpcXHRcXHRcXHR9XFxuMzIwNDpcXHRcXG4zMjA1OlxcdFxcdFxcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcXG4zMjA2OlxcdFxcdFxcdGlmIChyZXQpXFxuMzIwNzpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjA4OlxcdFxcbjMyMDk6XFx0XFx0XFx0LyogUHJvdGVjdGlvbiBjaGFuZ2UgZm9yIHRoZSByYW5nZSBpcyBnb2luZyB0byBoYXBwZW4uICovXFxuMzIxMDpcXHRcXHRcXHRpZiAocC5hcmcuZmxhZ3MgXFx1MDAyNiBQTV9TQ0FOX1dQX01BVENISU5HKSB7XFxuMzIxMTpcXHRcXHRcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfUFJPVEVDVElPTl9WTUEsIDAsXFxuMzIxMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kKTtcXG4zMjEzOlxcdFxcdFxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuMzIxNDpcXHRcXHRcXHR9XFxuMzIxNTpcXHRcXG4zMjE2OlxcdFxcdFxcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgd2Fsa19zdGFydCwgcC5hcmcuZW5kLFxcbjMyMTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBhZ2VtYXBfc2Nhbl9vcHMsIFxcdTAwMjZwKTtcXG4zMjE4OlxcdFxcbjMyMTk6XFx0XFx0XFx0aWYgKHAuYXJnLmZsYWdzIFxcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MzMuNTAxMzQ0MTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMzA4ODQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYGRvX3BhZ2VtYXBfc2NhbmAqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBkb19wYWdlbWFwX3NjYW5gIGlzIGJlaW5nIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgc2V0dGluZ3MsIGFzIGxvbmcgYXMgYGZzL3Byb2MvdGFza19tbXUuY2AgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXMsIHdoYXQgdHJpZ2dlcnMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGU/IE15IGltbWVkaWF0ZSBodW5jaCwgYW5kIHRoZSBvYnZpb3VzIG5leHQgc3RlcCwgaXMgdG8gY2hlY2sgdGhlIGBmcy9wcm9jL01ha2VmaWxlYC4gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBpdCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgcnVsZXMgZGljdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6MzYuNzI0NDM0NDM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODYwMDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX21tdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICs9IHByb2Mub1xcbmZzL3Byb2MvTWFrZWZpbGUtNy1cXG5mcy9wcm9jL01ha2VmaWxlOjg6Q0ZMQUdTX3Rhc2tfbW11Lm9cXHQrPSAtV25vLW92ZXJyaWRlLWluaXRcXG5mcy9wcm9jL01ha2VmaWxlLTktcHJvYy15XFx0XFx0XFx0Oj0gbm9tbXUubyB0YXNrX25vbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVxcdDo9IHRhc2tfbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0MzozNi43OTMwNDU4NDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NjgxNTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGFza19tbXUub2Agb25seSBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19NTVVgIGlzIGFjdGl2ZSDigJMgdGhhdCdzIGV4cGVjdGVkLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkga25vdyB0aGF0IGBmcy9wcm9jYCByZXF1aXJlcyBgQ09ORklHX1BST0NfRlNgIHRvIGJlIGVuYWJsZWQsIGFuZCBJJ20gaW50ZXJlc3RlZCBpbiBwYWdlbWFwLiBJIHdvbmRlciwgZG9lcyBgUEFHRU1BUF9TQ0FOYCBoYXZlIGFueSBoaWRkZW4gcmVxdWlyZW1lbnRzPyBQZXJoYXBzIGl0IG5lZWRzIGBDT05GSUdfVVNFUkZBVUxURkRgIG9yIHNvbWUgb3RoZXIgb2JzY3VyZSBmbGFnIGVuYWJsZWQ/IEkgcmVjYWxsIHRoYXQgYFBBR0VNQVBfU0NBTmAgaXMgaW50ZXJ0d2luZWQgd2l0aCBgcGFnZW1hcF9yZWFkYCBhbmQgYHBhZ2VtYXBfY21kYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLiBMb29rcyBsaWtlIGBwYWdlbWFwX2NtZGAgaXMgZGVmaW5lZCBpbiBgZnMvcHJvYy90YXNrX21tdS5jYCwgd2hpY2ggbWFrZXMgdGhhdCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBMZXQncyBzZWUgd2hhdCB0aGF0IGNvZGUgcmV2ZWFscyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjQwLjY3OTg2MzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMjQwOlxcdFxcbjMyNDE6XFx0XFx0LyogVGhlIHdhbGtfZW5kIGlzbid0IHNldCB3aGVuIHJldCBpcyB6ZXJvICovXFxuMzI0MjpcXHRcXHRpZiAoIXAuYXJnLndhbGtfZW5kKVxcbjMyNDM6XFx0XFx0XFx0cC5hcmcud2Fsa19lbmQgPSBwLmFyZy5lbmQ7XFxuMzI0NDpcXHRcXHRpZiAocGFnZW1hcF9zY2FuX3dyaXRlYmFja19hcmdzKFxcdTAwMjZwLmFyZywgdWFyZykpXFxuMzI0NTpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjMyNDY6XFx0XFxuMzI0NzpcXHRcXHRrZnJlZShwLnZlY19idWYpO1xcbjMyNDg6XFx0XFx0cmV0dXJuIHJldDtcXG4zMjQ5OlxcdH1cXG4zMjUwOlxcdFxcbjMyNTE6XFx0c3RhdGljIGxvbmcgZG9fcGFnZW1hcF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuMzI1MjpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4zMjUzOlxcdHtcXG4zMjU0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjMyNTU6XFx0XFxuMzI1NjpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbjMyNTc6XFx0XFx0Y2FzZSBQQUdFTUFQX1NDQU46XFxuMzI1ODpcXHRcXHRcXHRyZXR1cm4gZG9fcGFnZW1hcF9zY2FuKG1tLCBhcmcpO1xcbjMyNTk6XFx0XFxuMzI2MDpcXHRcXHRkZWZhdWx0OlxcbjMyNjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzI2MjpcXHRcXHR9XFxuMzI2MzpcXHR9XFxuMzI2NDpcXHRcXG4zMjY1OlxcdGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuMzI2NjpcXHRcXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssIC8qIGJvcnJvdyB0aGlzICovXFxuMzI2NzpcXHRcXHQucmVhZFxcdFxcdD0gcGFnZW1hcF9yZWFkLFxcbjMyNjg6XFx0XFx0Lm9wZW5cXHRcXHQ9IHBhZ2VtYXBfb3BlbixcXG4zMjY5OlxcdFxcdC5yZWxlYXNlXFx0PSBwYWdlbWFwX3JlbGVhc2UsXFxuMzI3MDpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSBkb19wYWdlbWFwX2NtZCxcXG4zMjcxOlxcdFxcdC5jb21wYXRfaW9jdGxcXHQ9IGRvX3BhZ2VtYXBfY21kLFxcbjMyNzI6XFx0fTtcXG4zMjczOlxcdCNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cXG4zMjc0OlxcdFxcbjMyNzU6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMzI3NjpcXHRcXG4zMjc3OlxcdHN0cnVjdCBudW1hX21hcHMge1xcbjMyNzg6XFx0XFx0dW5zaWduZWQgbG9uZyBwYWdlcztcXG4zMjc5OlxcdFxcdHVuc2lnbmVkIGxvbmcgYW5vbjtcXG4zMjgwOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWN0aXZlO1xcbjMyODE6XFx0XFx0dW5zaWduZWQgbG9uZyB3cml0ZWJhY2s7XFxuMzI4MjpcXHRcXHR1bnNpZ25lZCBsb25nIG1hcGNvdW50X21heDtcXG4zMjgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZGlydHk7XFxuMzI4NDpcXHRcXHR1bnNpZ25lZCBsb25nIHN3YXBjYWNoZTtcXG4zMjg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgbm9kZVtNQVhfTlVNTk9ERVNdO1xcbjMyODY6XFx0fTtcXG4zMjg3OlxcdFxcbjMyODg6XFx0c3RydWN0IG51bWFfbWFwc19wcml2YXRlIHtcXG4zMjg5OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSBwcm9jX21hcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjQwLjY4MDA0Mzg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc3NjYyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHByb2NfcGFnZW1hcF9vcGVyYXRpb25zYCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHNvIGBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uc2AuLi4gdGhhdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgc2VlIGl0J3MgdHVja2VkIGF3YXkgdW5kZXIgYW4gYCNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9gLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5LCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gdGhlIHByb2Nlc3MgcGFnZSBtYXAsIGlzIG9ubHkgcHJlc2VudCBpZiBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyAqbm90KiBkZWZpbmVkLiBOb3csIHRoYXQncyBub3QgdGhlIG1vc3QgaW50dWl0aXZlIGFycmFuZ2VtZW50LiBVc3VhbGx5LCB5b3UnZCAqZXhwZWN0KiB0aGUgY29kZSB0byBiZSBwcmVzZW50ICppZiogdGhlIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4gQnV0IGhleSwgaXQgaGFwcGVucywgZXNwZWNpYWxseSBpbiBvbGRlciBjb2RlYmFzZXMgd2hlcmUgdGhpbmdzIG1pZ2h0IGhhdmUgZXZvbHZlZCBhIGJpdCBvZGRseS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uICp3aGVyZSogdGhlIGAjaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCB0aGF0IHN1cnJvdW5kcyB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgYWN0dWFsbHkgYmVnaW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgc3Vycm91bmRpbmcgbG9naWMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aHkgdGhpcyBjb25kaXRpb25hbCBleGNsdXNpb24gZXhpc3RzLiBJcyB0aGlzIHNvbWUga2luZCBvZiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IElzIGl0IHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZSBvciBwbGF0Zm9ybT8gT3IgaXMgaXQgYSBkZXByZWNhdGVkIGZlYXR1cmU/IFVuZGVyc3RhbmRpbmcgdGhlICpzdGFydGluZyogcG9pbnQgb2YgdGhlIGAjaWZkZWZgIGlzIHRoZSBrZXkgdG8gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gVGltZSB0byB0cmFjayBkb3duIHRoYXQgYCNpZmRlZmAgYW5kIHNlZSB3aGF0IHRoZSBzdG9yeSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NDQuODY3ODEyMDQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz04NjM9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtODkwLVxcbmZzL3Byb2MvdGFza19tbXUuYzo4OTE6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvdGFza19tbXUuYy04OTItc3RydWN0IG1lbV9zaXplX3N0YXRzIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMjY1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3Mi19O1xcbmZzL3Byb2MvdGFza19tbXUuYzozMjczOiNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NDQuOTQwMTUxNTAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDg1OTEwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBQYWdlbWFwIGFuZCBVbnBvcHVsYXRlZCBQVEVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaW5nZXMgb24gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIGhlcmUsIGJ1dCBsZXQncyBhc3N1bWUgaXQncyB0aGUgbWFpbiBvbmUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgKmluc2lkZSogdGhlIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGJsb2NrLlxuXG5UaGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBpcyBzdWJ0bGU6IEluc3RlYWQgb2YgcmV0dXJuaW5nIDAgZm9yIHVucG9wdWxhdGVkIFBURXMgKHRob3NlIGluZGljYXRlZCBieSBgcHRlX25vbmUocHRlKWApLCB0aGUgY29kZSBub3cgcmV0dXJucyBgUEFHRV9JU19XUklUVEVOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBgUEFHRU1BUF9TQ0FOYCBpb2N0bCByZXBvcnRzIHRoZXNlIHVucG9wdWxhdGVkIGVudHJpZXMuIEVzc2VudGlhbGx5LCBpdCdzIGNoYW5naW5nIHRoZSBzZW1hbnRpY3Mgb2YgdGhhdCByZXBvcnQuXG5cbk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwg4oCTIHRoZSBwcm9jZnMgcGFnZW1hcCBpbnRlcmZhY2UuIFRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAsIGFuZCBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYC4gSSB3YXMgcmlnaHQsIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGlzIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrLi4uIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgYnV0IGRvZXNuJ3QgbWFrZSBpdCBsZXNzIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuIEFuZCB5ZXMsIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCwgYW5kIGBkb19wYWdlbWFwX3NjYW5gIGFyZSBhbHNvIHN0YXRpYy4gYGRvX3BhZ2VtYXBfY21kYCBpcyBhbHNvIHN0YXRpYyEgSSBoYXZlIGEgc2V0IG9mIGNvcmUgZnVuY3Rpb24gc3ltYm9scyB0byBmb2N1cyBvbi5cblxuVGhlIG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgaWYgYHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZWAgbWFrZXMgdXNlIG9mIHRoZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBncmFwaCB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjUxLjA0ODc0NDcyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZW1hcF9zY2FuX3B0ZV9ob2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MzA0MD1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzA0Ni1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzA0NzpzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wdGVfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDQ4LVxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMwNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwYWdlbWFwX3NjYW5fb3BzID0ge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwNzYtXFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuZnMvcHJvYy90YXNrX21tdS5jOjMwNzc6XFx0LnB0ZV9ob2xlID0gcGFnZW1hcF9zY2FuX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0zMDc4LVxcdC5odWdldGxiX2VudHJ5ID0gcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQzOjUxLjExMzM2OTY2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4MDQyNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGFnZW1hcF9zY2FuX3B0ZV9ob2xlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlLCBhbmQgdGhlIG5hbWUgZ2l2ZXMgYSBzdHJvbmcgY2x1ZS4gSXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGZpbmRpbmcgXCJob2xlc1wiIGluIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIG9yIFBURXMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgcGVyaGFwcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhvdyB0aGUga2VybmVsIG1hcHMgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5LiBTbywgSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaWRlbnRpZmllcyByZWdpb25zIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aGF0IGFyZW4ndCBjdXJyZW50bHkgbWFwcGVkIHRvIGFueSBwaHlzaWNhbCBwYWdlcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGVmZmljaWVudCBtZW1vcnkgYWxsb2NhdGlvbi5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgYWxnb3JpdGhtcyBhcmUgZW1wbG95ZWQgZm9yIHRoZSBzY2FubmluZyBwcm9jZXNzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIG9yIG9wdGltaXphdGlvbnMgcHJlc2VudC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGxvb2sgZm9yIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHNpemVzLCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgYW5kIHdoZXRoZXIgaXQncyBjb25jZXJuZWQgYWJvdXQgdGhpbmdzIGxpa2UgbWVtb3J5IHByb3RlY3Rpb24gb3IgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykuIEknbGwgbmVlZCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGxpa2UgdGhlIGJ1ZGR5IGFsbG9jYXRvciBvciB0aGUgc2xhYiBhbGxvY2F0b3IuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zPyBXaGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZD8gRG9lcyBpdCB1dGlsaXplIGFueSBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgYW5kIGlmIHNvLCBob3cgZG9lcyBpdCBtYW5hZ2UgdGhlbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3M/IElzIHRoZXJlIGFueSB1c2Ugb2YgcHJlZmV0Y2hpbmcgb3Igb3RoZXIgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXM/IFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBwZXJmb3JtcyBpdHMgZHV0eSwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NTQuNjIxNDEzODUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzA0MDpcXHRzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMzA0MTpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbjMwNDI6XFx0e1xcbjMwNDM6XFx0XFx0cmV0dXJuIDA7XFxuMzA0NDpcXHR9XFxuMzA0NTpcXHQjZW5kaWZcXG4zMDQ2OlxcdFxcbjMwNDc6XFx0c3RhdGljIGludCBwYWdlbWFwX3NjYW5fcHRlX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4zMDQ4OlxcdFxcdFxcdFxcdFxcdCBpbnQgZGVwdGgsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbjMwNDk6XFx0e1xcbjMwNTA6XFx0XFx0c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4zMDUxOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cXHUwMDNldm1hO1xcbjMwNTI6XFx0XFx0aW50IHJldCwgZXJyO1xcbjMwNTM6XFx0XFxuMzA1NDpcXHRcXHRpZiAoIXZtYSB8fCAhcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UocC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSwgcCkpXFxuMzA1NTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMDU2OlxcdFxcbjMwNTc6XFx0XFx0cmV0ID0gcGFnZW1hcF9zY2FuX291dHB1dChwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5LCBwLCBhZGRyLCBcXHUwMDI2ZW5kKTtcXG4zMDU4OlxcdFxcdGlmIChhZGRyID09IGVuZClcXG4zMDU5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzA2MDpcXHRcXG4zMDYxOlxcdFxcdGlmICh+cC1cXHUwMDNlYXJnLmZsYWdzIFxcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcXG4zMDYyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzA2MzpcXHRcXG4zMDY0OlxcdFxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG4zMDY1OlxcdFxcdFxcdGVyciA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aodm1hLCBhZGRyLCBlbmQpO1xcbjMwNjY6XFx0XFx0ZWxzZVxcbjMwNjc6XFx0XFx0XFx0ZXJyID0gdWZmZF93cF9yYW5nZSh2bWEsIGFkZHIsIGVuZCAtIGFkZHIsIHRydWUpO1xcbjMwNjg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMzA2OTpcXHRcXHRcXHRyZXQgPSBlcnI7XFxuMzA3MDpcXHRcXG4zMDcxOlxcdFxcdHJldHVybiByZXQ7XFxuMzA3MjpcXHR9XFxuMzA3MzpcXHRcXG4zMDc0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcGFnZW1hcF9zY2FuX29wcyA9IHtcXG4zMDc1OlxcdFxcdC50ZXN0X3dhbGsgPSBwYWdlbWFwX3NjYW5fdGVzdF93YWxrLFxcbjMwNzY6XFx0XFx0LnBtZF9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnksXFxuMzA3NzpcXHRcXHQucHRlX2hvbGUgPSBwYWdlbWFwX3NjYW5fcHRlX2hvbGUsXFxuMzA3ODpcXHRcXHQuaHVnZXRsYl9lbnRyeSA9IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5LFxcbjMwNzk6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDM6NTQuNjIxNTc2MjAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDI4NjQ0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgYW4gZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gUGFnZW1hcCBTY2FucyoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEkgd2FzIGp1c3QgdGhpbmtpbmcgYWJvdXQgdGhlIGBwYWdlbWFwX3NjYW5fcHRlX2hvbGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaGFuZGxlcyBwYWdlIHRhYmxlIGVudHJpZXMuIEl0IHN0cnVjayBtZSB0aGF0LCBjdXJyZW50bHksIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZG9lc24ndCBzZWVtIHRvIG1ha2UgdXNlIG9mIGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLiBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIHRoYXQgdmFyaWFibGUgYmVpbmcgdXNlZCBoZXJlIGluIHRoZSBzYW1lIHdheSBJJ20gYWNjdXN0b21lZCB0byBzZWVpbmcgaW4gc2ltaWxhciBmdW5jdGlvbnMuXG5cblRoZW4gSSBwYXVzZWQgYW5kIHJlbWVtYmVyZWQgYSByZWxhdGVkIHBvaW50LiBJIGtub3cgYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAgKmlzKiBkZWZpbml0ZWx5IGVtcGxveWVkLCBhbmQgY3J1Y2lhbGx5LCBpdCdzIHVzZWQgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCBhbmQgYHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSdzIGEgZGlmZmVyZW5jZSBpbiBob3cgd2UncmUgY2F0ZWdvcml6aW5nIHBhZ2VzIGJhc2VkIG9uIGVudHJ5IHR5cGUsIHBvc3NpYmx5IHNvbWV0aGluZyB0aGF0IEkgc2hvdWxkIHJldmlzaXQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgZm9yIG9wdGltaXphdGlvbiBvciBpZiB0aGUgc2VwYXJhdGlvbiBvZiBwcm9jZXNzZXMgaXMgYWN0dWFsbHkgdGhlIHByZWZlcnJlZCBtZXRob2QuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBkaWZmZXJlbmNlIGluIHVzYWdlIGFjcm9zcyB0aGVzZSBmdW5jdGlvbnMgaXMgaW50ZW50aW9uYWwgYW5kIHBhcnQgb2YgdGhlIG92ZXJhbGwgZGVzaWduLCBvciBpZiB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpbmNvbnNpc3RlbmN5IHRoYXQgY291bGQgYmUgaW1wcm92ZWQgdXBvbi4gTmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0Mzo1OC4wNjQ0NDIzNzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTg5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VtYXBfcGFnZV9jYXRlZ29yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTI0MjE9c3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDI4LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNDI5OnN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0MzAtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjgzND1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODk5LVxcdFxcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyA9IHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfFxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTAwOlxcdFxcdFxcdFxcdFxcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkwMS1cXHRcXHR1bnNpZ25lZCBsb25nIG5leHQgPSBhZGRyICsgUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0Mzo1OC4xMjQwMzc2NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzMTQwMDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YCoqXG5cblJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBwaWVjZSBvZiBsb2dpYyBpcyBvbmx5IHJlZmVyZW5jZWQgd2l0aGluIGBwYWdlbWFwX3NjYW5fcG1kX2VudHJ5YC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgd2hpY2ggaXMgZ29vZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIExldCdzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgIGFuZCBzZWUgd2hhdCBpdCdzIGFsbCBhYm91dC4gSSdsbCBuZWVkIHRvIHJlY29uc3RydWN0IHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgc3BlY2lmaWMgaW50ZXJhY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBhZ2UtbWFwIHNjYW5uaW5nIHByb2Nlc3MsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBtYW5hZ2VtZW50IG9mIHBhZ2UgdGFibGUgZW50cmllcy4gTGV0J3Mgc2VlIGlmIHRoaXMgY29udGV4dCByZXZlYWxzIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBhbmQgd2hhdCBjb25jZXJucyBtZSBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MDEuMDU1NDQwOTQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg4MDpcXHRcXHRcXHRcXHRpZiAoKHB0ZV9wcmVzZW50KHB0ZW50KSBcXHUwMDI2XFx1MDAyNiBwdGVfdWZmZF93cChwdGVudCkpIHx8XFxuMjg4MTpcXHRcXHRcXHRcXHQgICAgcHRlX3N3cF91ZmZkX3dwX2FueShwdGVudCkpXFxuMjg4MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODgzOlxcdFxcdFxcdFxcdHJldCA9IHBhZ2VtYXBfc2Nhbl9vdXRwdXQocC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IFBBR0VfSVNfV1JJVFRFTixcXG4yODg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcCwgYWRkciwgXFx1MDAyNm5leHQpO1xcbjI4ODU6XFx0XFx0XFx0XFx0aWYgKG5leHQgPT0gYWRkcilcXG4yODg2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4ODc6XFx0XFx0XFx0XFx0aWYgKH5wLVxcdTAwM2VhcmcuZmxhZ3MgXFx1MDAyNiBQTV9TQ0FOX1dQX01BVENISU5HKVxcbjI4ODg6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjg4OTpcXHRcXHRcXHRcXHRtYWtlX3VmZmRfd3BfcHRlKHZtYSwgYWRkciwgcHRlLCBwdGVudCk7XFxuMjg5MDpcXHRcXHRcXHRcXHRpZiAoIWZsdXNoX2VuZClcXG4yODkxOlxcdFxcdFxcdFxcdFxcdHN0YXJ0ID0gYWRkcjtcXG4yODkyOlxcdFxcdFxcdFxcdGZsdXNoX2VuZCA9IG5leHQ7XFxuMjg5MzpcXHRcXHRcXHR9XFxuMjg5NDpcXHRcXHRcXHRnb3RvIGZsdXNoX2FuZF9yZXR1cm47XFxuMjg5NTpcXHRcXHR9XFxuMjg5NjpcXHRcXG4yODk3OlxcdFxcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyICE9IGVuZDsgcHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuMjg5ODpcXHRcXHRcXHRwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuMjg5OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNhdGVnb3JpZXMgPSBwLVxcdTAwM2VjdXJfdm1hX2NhdGVnb3J5IHxcXG4yOTAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShwLCB2bWEsIGFkZHIsIHB0ZW50KTtcXG4yOTAxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IGFkZHIgKyBQQUdFX1NJWkU7XFxuMjkwMjpcXHRcXG4yOTAzOlxcdFxcdFxcdGlmICghcGFnZW1hcF9zY2FuX2lzX2ludGVyZXN0aW5nX3BhZ2UoY2F0ZWdvcmllcywgcCkpXFxuMjkwNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yOTA1OlxcdFxcbjI5MDY6XFx0XFx0XFx0cmV0ID0gcGFnZW1hcF9zY2FuX291dHB1dChjYXRlZ29yaWVzLCBwLCBhZGRyLCBcXHUwMDI2bmV4dCk7XFxuMjkwNzpcXHRcXHRcXHRpZiAobmV4dCA9PSBhZGRyKVxcbjI5MDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjkwOTpcXHRcXG4yOTEwOlxcdFxcdFxcdGlmICh+cC1cXHUwMDNlYXJnLmZsYWdzIFxcdTAwMjYgUE1fU0NBTl9XUF9NQVRDSElORylcXG4yOTExOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI5MTI6XFx0XFx0XFx0aWYgKH5jYXRlZ29yaWVzIFxcdTAwMjYgUEFHRV9JU19XUklUVEVOKVxcbjI5MTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjkxNDpcXHRcXG4yOTE1OlxcdFxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG4yOTE2OlxcdFxcdFxcdGlmICghZmx1c2hfZW5kKVxcbjI5MTc6XFx0XFx0XFx0XFx0c3RhcnQgPSBhZGRyO1xcbjI5MTg6XFx0XFx0XFx0Zmx1c2hfZW5kID0gbmV4dDtcXG4yOTE5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MDEuMDU1NjgwMDg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzU1MDEzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIE1hcCBTY2FubmluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBwYWdlbWFwYCBjb2RlLiBJdCBsb29rcyBsaWtlIGBkb19wYWdlbWFwX3NjYW5gIGFuZCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhlIG1haW4gbG9naWMgZmxvdy4gSSByZW1lbWJlciBzZWVpbmcgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgbWVudGlvbmVkIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgZmVhdHVyZSwgc28gSSdtIGtlZXBpbmcgdGhhdCBpbiBtaW5kLiBXYWl0IGEgbWludXRlLi4uIEkgcmVjYWxsIHRoYXQgdGhlIGBQQUdFTUFQX1NDQU5gIGlvY3RsIGlzIGFjdHVhbGx5IGludm9sdmVkIHdpdGggdXNlcmZhdWx0ZmQgd3JpdGUtcHJvdGVjdCB0cmFja2luZy4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBvciBpZiBpdCBpcyBzb21laG93IG9wdGlvbmFsLiBJJ20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgdG8gYHB0ZV91ZmZkX3dwYCBvciBgbWFrZV91ZmZkX3dwX3B0ZWAuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDowNC41MzExODM0NDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzUyNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ha2VfdWZmZF93cF9wdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNDI5PXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcGFnZV9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQ4OC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjQ4OTpzdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmZzL3Byb2MvdGFza19tbXUuYy0yNDkwLVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yODM0PXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4NjQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjI4NjU6XFx0XFx0XFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODY2LVxcdFxcdFxcdGlmICghZmx1c2hfZW5kKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI4ODgtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuZnMvcHJvYy90YXNrX21tdS5jOjI4ODk6XFx0XFx0XFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yODkwLVxcdFxcdFxcdGlmICghZmx1c2hfZW5kKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MTQtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI5MTU6XFx0XFx0bWFrZV91ZmZkX3dwX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0yOTE2LVxcdFxcdGlmICghZmx1c2hfZW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDowNC42MzA5NDE0MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDg1NTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gYG1ha2VfdWZmZF93cF9wdGVgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlcmZhdWx0ZmQgKFVGRkQpIHdyaXRlIHByb3RlY3Rpb24gaXMgc2V0IHVwIGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGxldmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gcHJvY2Vzc2VzIGluIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1ha2VfdWZmZF93cF9wdGVgIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCB0aGUgY3J1Y2lhbCBiaXQpIG9mIHNldHRpbmcgdGhlIFVGRkQgd3JpdGUgcHJvdGVjdGlvbiBzaG91bGQgaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkyOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjA3LjU4MTc5OTU3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0ODA6XFx0XFx0XFx0XFx0Y2F0ZWdvcmllcyB8PSBQQUdFX0lTX0ZJTEU7XFxuMjQ4MTpcXHRcXG4yNDgyOlxcdFxcdFxcdGlmIChwdGVfc3dwX3NvZnRfZGlydHkocHRlKSlcXG4yNDgzOlxcdFxcdFxcdFxcdGNhdGVnb3JpZXMgfD0gUEFHRV9JU19TT0ZUX0RJUlRZO1xcbjI0ODQ6XFx0XFx0fVxcbjI0ODU6XFx0XFxuMjQ4NjpcXHRcXHRyZXR1cm4gY2F0ZWdvcmllcztcXG4yNDg3OlxcdH1cXG4yNDg4OlxcdFxcbjI0ODk6XFx0c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4yNDkwOlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlLCBwdGVfdCBwdGVudClcXG4yNDkxOlxcdHtcXG4yNDkyOlxcdFxcdGlmIChwdGVfcHJlc2VudChwdGVudCkpIHtcXG4yNDkzOlxcdFxcdFxcdHB0ZV90IG9sZF9wdGU7XFxuMjQ5NDpcXHRcXG4yNDk1OlxcdFxcdFxcdG9sZF9wdGUgPSBwdGVwX21vZGlmeV9wcm90X3N0YXJ0KHZtYSwgYWRkciwgcHRlKTtcXG4yNDk2OlxcdFxcdFxcdHB0ZW50ID0gcHRlX21rdWZmZF93cChvbGRfcHRlKTtcXG4yNDk3OlxcdFxcdFxcdHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHZtYSwgYWRkciwgcHRlLCBvbGRfcHRlLCBwdGVudCk7XFxuMjQ5ODpcXHRcXHR9IGVsc2UgaWYgKHB0ZV9ub25lKHB0ZW50KSkge1xcbjI0OTk6XFx0XFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuMjUwMDpcXHRcXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuMjUwMTpcXHRcXHR9IGVsc2Uge1xcbjI1MDI6XFx0XFx0XFx0cHRlbnQgPSBwdGVfc3dwX21rdWZmZF93cChwdGVudCk7XFxuMjUwMzpcXHRcXHRcXHRzZXRfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgcHRlbnQpO1xcbjI1MDQ6XFx0XFx0fVxcbjI1MDU6XFx0fVxcbjI1MDY6XFx0XFxuMjUwNzpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMjUwODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3RocF9jYXRlZ29yeShzdHJ1Y3QgcGFnZW1hcF9zY2FuX3ByaXZhdGUgKnAsXFxuMjUwOTpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI1MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90IHBtZClcXG4yNTExOlxcdHtcXG4yNTEyOlxcdFxcdHVuc2lnbmVkIGxvbmcgY2F0ZWdvcmllcyA9IFBBR0VfSVNfSFVHRTtcXG4yNTEzOlxcdFxcbjI1MTQ6XFx0XFx0aWYgKHBtZF9ub25lKHBtZCkpXFxuMjUxNTpcXHRcXHRcXHRyZXR1cm4gY2F0ZWdvcmllcztcXG4yNTE2OlxcdFxcbjI1MTc6XFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZCkpIHtcXG4yNTE4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjI1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjA3LjU4MTk2MzY4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE4OTk3NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipQVEVfTUFSS0VSX1VGRkRfV1AgSW5xdWlyeSoqXG5cbkhtbSwgc28gYFBURV9NQVJLRVJfVUZGRF9XUGAgaXMgaW4gcGxheSBoZXJlLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgbWFya2VyIGFsd2F5cyBhdmFpbGFibGUsIG9yIGlzIGl0IGNvbnRpbmdlbnQgb24gc29tZSBjb25maWd1cmF0aW9uIG9yIHNwZWNpZmljIGtlcm5lbCBidWlsZCBvcHRpb25zPyBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgcHJlc2VuY2UuXG5cbk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycywgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYGluY2x1ZGUvbGludXgvc3dhcG9wcy5oYCwgb3IgbWF5YmUgYSByZWxhdGVkIGZpbGUuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0aGlzIGtpbmQgb2YgZGVmaW5pdGlvbiB0byByZXNpZGUuIEEgcXVpY2sgZ3JlcCBtaWdodCBhbHNvIGJlIHVzZWZ1bCwgYnV0IGNoZWNraW5nIHRoZSBoZWFkZXIgaXMgdGhlIGRlZmluaXRpdmUgd2F5IHRvIGNvbmZpcm0gaXRzIHVuY29uZGl0aW9uYWwgYXZhaWxhYmlsaXR5IG9yIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpcyBwYXJhbW91bnQgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0IG9mIHRoaXMgbWFya2VyIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MTAuNjAwOTY0MjE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQxMTg5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRFX01BUktFUl9VRkZEX1dQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg9MTY9c3RhdGljIGlubGluZSBib29sIHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKHZvaWQpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xNy17XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaDoxODpcXHRyZXR1cm4gcGd0YWJsZV9zdXBwb3J0c191ZmZkX3dwKCkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ2MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NjE6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTU1PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBjb3B5X3B0ZV9tYXJrZXIoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU2Mi1cXHQvKiBPbmx5IGNvcHkgUFRFIG1hcmtlcnMgaWYgVUZGRCByZWdpc3RlciBtYXRjaGVzLiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYzOlxcdGlmICgoc3JjbSBcXHUwMDI2IFBURV9NQVJLRVJfVUZGRF9XUCkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfd3AoZHN0X3ZtYSkpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjQ6XFx0XFx0ZHN0bSB8PSBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU4Mj1wdGVfaW5zdGFsbF91ZmZkX3dwX2lmX25lZWRlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MTQtXFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo2MTU6XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNjE2LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MjgxPXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfbWFya2VyO1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI4Mi1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoyODM6I2RlZmluZSAgUFRFX01BUktFUl9VRkZEX1dQXFx0XFx0XFx0QklUKDApXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjg0LS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjExLjE5NTExMjIxNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxNTk3Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVGRkQgV3JpdGUgUHJvdGVjdGlvbiBSZWxldmFuY2UqKlxuXG5IbW0sIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYC4uLiB0aGF0IHNldHRpbmcgKmNvdWxkKiBiZSByZWxldmFudCB0byB3aGF0IEknbSB3b3JraW5nIG9uLiBJIG5lZWQgdG8gZ2V0IG1vcmUgY29udGV4dCBhbmQgc2VlIGlmIGl0J3MgYXBwbGljYWJsZS4gTGV0IG1lIGNoZWNrIHdoZXJlIGl0J3MgZGVmaW5lZC4gUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAgYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIGxvb2sgZm9yIGl0cyBkZXNjcmlwdGlvbiwgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBjb3VsZCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgaW5mb3JtYXRpb24gSSdtIGxvb2tpbmcgZm9yIGFuZCBsZWFkIG1lIGRvd24gdGhlIHJpZ2h0IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MTQuNzk2NzExNjg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4OTMyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTY9aWYgVVNFUkZBVUxURkRcXG5tbS9LY29uZmlnOjEzOTc6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5OC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MTYuNTE1NjUwNTMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTY4MTkwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgSW5kZXBlbmRlbmNlIG9mIFBBR0VNQVBfU0NBTiBhbmQgVVNFUkZBVUxURkQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJdCdzIGRhd25pbmcgb24gbWUg4oCTIGNvdWxkIGBQQUdFTUFQX1NDQU5gIGFjdHVhbGx5IG9wZXJhdGUgaW5kZXBlbmRlbnRseSBvZiBgVVNFUkZBVUxURkRgPyBUaGF0IHdvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvci4uLiB3ZWxsLCBmb3Igc2V2ZXJhbCB0aGluZ3MgSSdtIHdvcmtpbmcgb24gcmlnaHQgbm93LiBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBQQUdFTUFQX1NDQU5gIGFuZCBgQ09ORklHX1VTRVJGQVVMVEZEYCBhcmUgaW5oZXJlbnRseSBsaW5rZWQgaW4gdGhlIGNvZGUuIEknbSBsb29raW5nIGZvciBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmaW5kIGluc3RhbmNlcyB3aGVyZSBgUEFHRU1BUF9TQ0FOYCBpcyBlbmFibGVkIG9yIHVzZWQgZXZlbiAqd2l0aG91dCogYENPTkZJR19VU0VSRkFVTFRGRGAgYmVpbmcgZGVmaW5lZD8gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGFuZCBjb250cm9sIGZsb3cuXG5cbldoaWxlIEknbSBoZXJlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGRvdWJsZS1jaGVjayB0aGUgYG1ha2VfdWZmZF93cF9wdGVgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3cml0ZSBwcm90ZWN0aW9uIHBhZ2UgdGFibGUgZW50cmllcyBhcmUgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gdGhlc2UgdHdvIGZlYXR1cmVzLiBLbm93aW5nIGhvdyB0aGVzZSBjb21wb25lbnRzIGludGVyYWN0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MjAuMjMyNDcxNDQ3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDk1NjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWtlX3VmZmRfd3BfcHRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MjQyOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnkoc3RydWN0IHBhZ2VtYXBfc2Nhbl9wcml2YXRlICpwLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI0ODgtXFxuZnMvcHJvYy90YXNrX21tdS5jOjI0ODk6c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjQ5MC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSwgcHRlX3QgcHRlbnQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjgzND1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODY0LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyODY1OlxcdFxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg2Ni1cXHRcXHRcXHRpZiAoIWZsdXNoX2VuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODg4LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyODg5OlxcdFxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjg5MC1cXHRcXHRcXHRpZiAoIWZsdXNoX2VuZClcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTE0LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTE1OlxcdFxcdG1ha2VfdWZmZF93cF9wdGUodm1hLCBhZGRyLCBwdGUsIHB0ZW50KTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkxNi1cXHRcXHRpZiAoIWZsdXNoX2VuZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MjAuMjk3NDMzMDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTc3Nzg4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb2xlIG9mIGBtYWtlX3VmZmRfd3BfcHRlYCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gYG1ha2VfdWZmZF93cF9wdGVgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoeT8gV2hhdCdzIGl0cyBwdXJwb3NlP1wiIFRoZW4gSSBzZWUgdGhlIHVzYWdlIG9mIGBwdGVfbWt1ZmZkX3dwYCBhbmQgYHB0ZV9zd3BfbWt1ZmZkX3dwYC4gVGhlc2Ugc291bmQgbGlrZSB0aGV5J3JlIHJlbGF0ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9ucyBoZXJlLiBJIHN1c3BlY3QgdGhpcyBpcyBhbGwgdGllZCB0byB1c2VyZmF1bHRmZCwgYnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGBVU0VSRkFVTFRGRGAgaXMsIGluIGZhY3QsIGVzc2VudGlhbCBmb3IgYFBBR0VNQVBfU0NBTmAgdG8gYWN0dWFsbHkgYmUgdXNlZnVsLlxuXG5JIGtub3cgYFBBR0VNQVBfU0NBTmAgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgYW5kL29yIGNsZWFyaW5nIHRoZSBgUEFHRV9JU19XUklUVEVOYCBmbGFnLCBhIHZlcnkgY29tbW9uIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhpbmtpbmcgYmFjaywgdGhlIGBQQUdFX0lTX1dSSVRURU5gIGZsYWcgaXMsIGFzIEkgcmVjYWxsLCB0cmFja2VkIHV0aWxpemluZyBgdWZmZF93cGAgbWFya2Vycy4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgKmhvdyogdGhhdCBzY2FuIGludGVyYWN0cyB3aXRoIHRob3NlIG1hcmtlcnMuIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWxsb3dlZCBmbGFncywgc28gSSdsbCBuZXh0IGV4YW1pbmUgYHBhZ2VtYXBfc2Nhbl9nZXRfYXJnc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjI0LjUxNTIxNDg2OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODA6XFx0XFxuMzA4MTpcXHRzdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9nZXRfYXJncyhzdHJ1Y3QgcG1fc2Nhbl9hcmcgKmFyZyxcXG4zMDgyOlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHVhcmcpXFxuMzA4MzpcXHR7XFxuMzA4NDpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoYXJnLCAodm9pZCBfX3VzZXIgKil1YXJnLCBzaXplb2YoKmFyZykpKVxcbjMwODU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzA4NjpcXHRcXG4zMDg3OlxcdFxcdGlmIChhcmctXFx1MDAzZXNpemUgIT0gc2l6ZW9mKHN0cnVjdCBwbV9zY2FuX2FyZykpXFxuMzA4ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDg5OlxcdFxcbjMwOTA6XFx0XFx0LyogVmFsaWRhdGUgcmVxdWVzdGVkIGZlYXR1cmVzICovXFxuMzA5MTpcXHRcXHRpZiAoYXJnLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5QTV9TQ0FOX0ZMQUdTKVxcbjMwOTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzA5MzpcXHRcXHRpZiAoKGFyZy1cXHUwMDNlY2F0ZWdvcnlfaW52ZXJ0ZWQgfCBhcmctXFx1MDAzZWNhdGVnb3J5X21hc2sgfFxcbjMwOTQ6XFx0XFx0ICAgICBhcmctXFx1MDAzZWNhdGVnb3J5X2FueW9mX21hc2sgfCBhcmctXFx1MDAzZXJldHVybl9tYXNrKSBcXHUwMDI2IH5QTV9TQ0FOX0NBVEVHT1JJRVMpXFxuMzA5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDk2OlxcdFxcbjMwOTc6XFx0XFx0YXJnLVxcdTAwM2VzdGFydCA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVxcdTAwM2VzdGFydCk7XFxuMzA5ODpcXHRcXHRhcmctXFx1MDAzZWVuZCA9IHVudGFnZ2VkX2FkZHIoKHVuc2lnbmVkIGxvbmcpYXJnLVxcdTAwM2VlbmQpO1xcbjMwOTk6XFx0XFx0YXJnLVxcdTAwM2V2ZWMgPSB1bnRhZ2dlZF9hZGRyKCh1bnNpZ25lZCBsb25nKWFyZy1cXHUwMDNldmVjKTtcXG4zMTAwOlxcdFxcbjMxMDE6XFx0XFx0LyogVmFsaWRhdGUgbWVtb3J5IHBvaW50ZXJzICovXFxuMzEwMjpcXHRcXHRpZiAoIUlTX0FMSUdORUQoYXJnLVxcdTAwM2VzdGFydCwgUEFHRV9TSVpFKSlcXG4zMTAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMDQ6XFx0XFx0aWYgKCFhY2Nlc3Nfb2soKHZvaWQgX191c2VyICopKGxvbmcpYXJnLVxcdTAwM2VzdGFydCwgYXJnLVxcdTAwM2VlbmQgLSBhcmctXFx1MDAzZXN0YXJ0KSlcXG4zMTA1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjMxMDY6XFx0XFx0aWYgKCFhcmctXFx1MDAzZXZlYyBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZXZlY19sZW4pXFxuMzEwNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTA4OlxcdFxcdGlmIChVSU5UX01BWCA9PSBTSVpFX01BWCBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZXZlY19sZW4gXFx1MDAzZSBTSVpFX01BWClcXG4zMTA5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMTA6XFx0XFx0aWYgKGFyZy1cXHUwMDNldmVjIFxcdTAwMjZcXHUwMDI2ICFhY2Nlc3Nfb2soKHZvaWQgX191c2VyICopKGxvbmcpYXJnLVxcdTAwM2V2ZWMsXFxuMzExMTpcXHRcXHRcXHRcXHRcXHQgICBzaXplX211bChhcmctXFx1MDAzZXZlY19sZW4sIHNpemVvZihzdHJ1Y3QgcGFnZV9yZWdpb24pKSkpXFxuMzExMjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMTEzOlxcdFxcbjMxMTQ6XFx0XFx0LyogRml4dXAgZGVmYXVsdCB2YWx1ZXMgKi9cXG4zMTE1OlxcdFxcdGFyZy1cXHUwMDNlZW5kID0gQUxJR04oYXJnLVxcdTAwM2VlbmQsIFBBR0VfU0laRSk7XFxuMzExNjpcXHRcXHRhcmctXFx1MDAzZXdhbGtfZW5kID0gMDtcXG4zMTE3OlxcdFxcdGlmICghYXJnLVxcdTAwM2VtYXhfcGFnZXMpXFxuMzExODpcXHRcXHRcXHRhcmctXFx1MDAzZW1heF9wYWdlcyA9IFVMT05HX01BWDtcXG4zMTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDoyNC41MTUzODk1NTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDQ1NTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBwYWdlbWFwX2lvY3RsLmNgIFNlbGYtVGVzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2VsZi10ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGRlc2lnbmVkIHRvIHNwZWNpZmljYWxseSB0ZXN0IGBwYWdlbWFwX2lvY3RsYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXTigJlzIGEgZm9jdXNlZCB0ZXN0LCBhIGdvb2QgYXBwcm9hY2guIE5vdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSB0ZXN0IGl0c2VsZiB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgdGVzdGluZyBgcGFnZW1hcF9pb2N0bGAuIEEgcXVpY2sgc2VhcmNoIGZvciBgd3BfaW5pdGAgd2l0aGluIHRoYXQgZmlsZSBzaG91bGQgcmV2ZWFsIHRoZSBzcGVjaWZpYyBtZWNoYW5pc21zIGl0J3MgZW1wbG95aW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGlvY3RsIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGFzcGVjdCDigJMgdGhhdCdzIG9mdGVuIGEga2V5IGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIExldCBtZSBzZWUgd2hhdCB0aGV54oCZcmUgZG9pbmcgd2l0aCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwOCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MjcuNzQ1ODQ3OTM2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1MDpcXHRcXG4xMDUxOlxcdFxcdGtzZnRfdGVzdF9yZXN1bHQoaSA9PSBURVNUX0lURVJBVElPTlMsIFxcXCJUZXN0ICVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTA1MjpcXHR9XFxuMTA1MzpcXHRcXG4xMDU0OlxcdC8qXFxuMTA1NTpcXHQgKiBBIHJhbmdlIHRoYXQgd2FzIHBvcHVsYXRlZCBhbmQgdGhlbiBNQURWX0RPTlRORUVEJ2QgaXMgZ2VudWluZSBwdGVfbm9uZVxcbjEwNTY6XFx0ICogd2l0aCBubyB1ZmZkLXdwIG1hcmtlci4gU3VjaCBhIHB0ZSBtdXN0IHJlYWQgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGljaFxcbjEwNTc6XFx0ICogUEFHRU1BUF9TQ0FOIHBhdGggc2VydmVzIHRoZSByZXF1ZXN0OiBib3RoIHRoZSBQQUdFX0lTX1dSSVRURU4gZmFzdCBwYXRoIGFuZFxcbjEwNTg6XFx0ICogdGhlIGdlbmVyaWMgcGF0aCAocmVhY2hlZCBlLmcuIHZpYSBjYXRlZ29yeV9hbnlvZl9tYXNrKSBtdXN0IHJlcG9ydCBldmVyeVxcbjEwNTk6XFx0ICogcGFnZSB3cml0dGVuLlxcbjEwNjA6XFx0ICovXFxuMTA2MTpcXHRzdGF0aWMgdm9pZCB1bnBvcHVsYXRlZF9zY2FuX3Rlc3Qodm9pZClcXG4xMDYyOlxcdHtcXG4xMDYzOlxcdFxcdGludCBucGFnZXMgPSAxNiwgaTtcXG4xMDY0OlxcdFxcdGxvbmcgbWVtX3NpemUgPSBucGFnZXMgKiBwYWdlX3NpemU7XFxuMTA2NTpcXHRcXHRzdHJ1Y3QgcGFnZV9yZWdpb24gcmVnaW9uc1sxNl07XFxuMTA2NjpcXHRcXHRsb25nIGZhc3QgPSAwLCBzbG93ID0gMCwgcmV0O1xcbjEwNjc6XFx0XFx0Y2hhciAqbWVtO1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRtZW0gPSBtbWFwKE5VTEwsIG1lbV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbjEwNzA6XFx0XFx0XFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuMTA3MTpcXHRcXHRpZiAobWVtID09IE1BUF9GQUlMRUQpXFxuMTA3MjpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIG1tYXAgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTA3MzpcXHRcXG4xMDc0OlxcdFxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxuMTA3NTpcXHRcXG4xMDc2OlxcdFxcdC8qIFBvcHVsYXRlLCB0aGVuIGRyb3A6IHRoZSBwdGVzIGJlY29tZSBwdGVfbm9uZSB3aXRob3V0IGEgbWFya2VyLiAqL1xcbjEwNzc6XFx0XFx0bWVtc2V0KG1lbSwgMSwgbWVtX3NpemUpO1xcbjEwNzg6XFx0XFx0aWYgKG1hZHZpc2UobWVtLCBtZW1fc2l6ZSwgTUFEVl9ET05UTkVFRCkpXFxuMTA3OTpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIE1BRFZfRE9OVE5FRUQgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTA4MDpcXHRcXG4xMDgxOlxcdFxcdC8qIEZhc3QgcGF0aDogY2F0ZWdvcnlfbWFzayA9PSByZXR1cm5fbWFzayA9PSBQQUdFX0lTX1dSSVRURU4uICovXFxuMTA4MjpcXHRcXHRyZXQgPSBwYWdlbWFwX2lvY3RsKG1lbSwgbWVtX3NpemUsIHJlZ2lvbnMsIG5wYWdlcywgMCwgMCxcXG4xMDgzOlxcdFxcdFxcdFxcdCAgICBQQUdFX0lTX1dSSVRURU4sIDAsIDAsIFBBR0VfSVNfV1JJVFRFTik7XFxuMTA4NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMDg1OlxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgZmFzdCBzY2FuIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjEwODY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJldDsgaSsrKVxcbjEwODc6XFx0XFx0XFx0ZmFzdCArPSBMRU4ocmVnaW9uc1tpXSk7XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdC8qIEdlbmVyaWMgcGF0aDogc2FtZSBxdWVyeSBleHByZXNzZWQgdmlhIGNhdGVnb3J5X2FueW9mX21hc2suICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjI3Ljc0NjA0OTg3NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQzMzgyMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgcGFnZW1hcF9pb2N0bC5jYCBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgU2VsZi1UZXN0cyoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWUga2VybmVsIGludGVybmFscy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgd3BfaW5pdGAgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZWxmLXRlc3RzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB2aWEgdGhlIHBhZ2VtYXAgSU9DVEwuIFRoZXJlIGFyZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhc3BlY3RzIG9mIHRoZSB0ZXN0IHNldHVwIGluIGB3cF9pbml0YCB0aGF0IGNvdWxkIGxlYWQgdG8gbmV3IGF2ZW51ZXMgb2YgZXhwbG9yYXRpb24uIFRoZSBpbml0aWFsIHNldHVwIGlzIGtleSB0byB0aGUgdGVzdGluZywgYW5kIHRodXMgSSB3aWxsIGZvY3VzIG15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MzAuNjg5NDM0ODYzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc5MDE4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3BfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTk1PWludCBpbml0X3VmZmQodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjExODppbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM9MTg4PWludCB1c2VyZmF1bHRmZF90ZXN0cyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE5Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTk4OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE5OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0yMzk9aW50IHNhbml0eV90ZXN0c19zZCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTI2My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MjY0OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTI2NS1cXHR3cF9hZGRyX3JhbmdlKG1lbSwgbWVtX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6NDExOlxcdHdwX2luaXQobVswXSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo0MTI6XFx0d3BfaW5pdChtWzFdLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTQxMy1cXHR3cF9hZGRyX3JhbmdlKG1bMF0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy00NDgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjQ0OTpcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy00NTAtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01MDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjUwNDpcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01MDUtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01NTMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjU1NDpcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy01NTUtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz04MDM9aW50IGhwYWdlX3VuaXRfdGVzdHModm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04MTgtXFx0aWYgKG1hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo4MTk6XFx0XFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODIwLVxcdFxcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtODU1LVxcdFxcdG1hcCA9IGdldGh1Z2VwYWdlKG1hcF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6ODU2OlxcdFxcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTg1Ny1cXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTg3OS1cXHRpZiAobWFwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjg4MDpcXHRcXHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy04ODEtXFx0XFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05MDMtXFx0aWYgKG1hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzo5MDQ6XFx0XFx0d3BfaW5pdChtYXAsIG1hcF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTA1LVxcdFxcdHdwX2FkZHJfcmFuZ2UobWFwLCBtYXBfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtOTMzLVxcdGlmIChtYXApIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6OTM0OlxcdFxcdHdwX2luaXQobWFwLCBtYXBfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTkzNS1cXHRcXHR3cF9hZGRyX3JhbmdlKG1hcCwgbWFwX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTk2MC1cXHRpZiAobWFwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjk2MTpcXHRcXHR3cF9pbml0KG1hcCwgbWFwX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy05NjItXFx0XFx0d3BfYWRkcl9yYW5nZShtYXAsIG1hcF9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDE2PXN0YXRpYyB2b2lkIHRlc3Rfc2ltcGxlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTAyNjpcXHR3cF9pbml0KG1hcCwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTAyNy1cXHR3cF9hZGRyX3JhbmdlKG1hcCwgcGFnZV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMDYxPXN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3NjYW5fdGVzdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEwNzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEwNzQ6XFx0d3BfaW5pdChtZW0sIG1lbV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTA3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xMTA1PWludCBzYW5pdHlfdGVzdHModm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTIxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTIyOlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExMjMtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTQ4LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTQ5OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExNTAtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMTk0LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMTk1OlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTExOTYtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxMjUyOlxcdHdwX2luaXQoZm1lbSwgYnVmX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMjUzLVxcdHdwX2FkZHJfcmFuZ2UoZm1lbSwgYnVmX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTEyNzc9aW50IG1wcm90ZWN0X3Rlc3RzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTI5Mi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImVycm9yIG5vbWVtXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTI5MzpcXHR3cF9pbml0KG1lbSwgMiAqIHBhZ2Vfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEyOTQtXFx0d3BfYWRkcl9yYW5nZShtZW0sIDIgKiBwYWdlX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTEzMTctXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJlcnJvciBub21lbVxcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjEzMTg6XFx0d3BfaW5pdChtZW0yLCBwYWdlX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xMzE5LVxcdHdwX2FkZHJfcmFuZ2UobWVtMiwgcGFnZV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYz0xNDQzPXN0YXRpYyB2b2lkIHRyYW5zYWN0X3Rlc3QoaW50IHBhZ2Vfc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNDYxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNDYyOlxcdHdwX2luaXQobWVtLCAweDEwMDAgKiBudGhyZWFkcyAqIHBhZ2VzX3Blcl90aHJlYWQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNDYzLVxcdHdwX2FkZHJfcmFuZ2UobWVtLCAweDEwMDAgKiBudGhyZWFkcyAqIHBhZ2VzX3Blcl90aHJlYWQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jPTE1OTY9aW50IG1haW4oaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjI5LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNjMwOlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2MzEtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjQyLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZXJyb3Igbm9tZW1cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNjQzOlxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NDQtXFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjUzLVxcdGlmIChtYXApIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY1NDpcXHRcXHR3cF9pbml0KG1hcCwgaHBhZ2Vfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NTUtXFx0XFx0d3BfYWRkcl9yYW5nZShtYXAsIGhwYWdlX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NjYtXFx0aWYgKG1lbSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYzoxNjY3OlxcdFxcdHdwX2luaXQobWVtLCBtZW1fc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE2NjgtXFx0XFx0d3BfYWRkcl9yYW5nZShtZW0sIG1lbV9zaXplKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjgwLVxcdGlmIChtZW0pIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY4MTpcXHRcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjgyLVxcdFxcdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTY5Ny1cXHRpZiAobWVtICE9IE1BUF9GQUlMRUQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTY5ODpcXHRcXHR3cF9pbml0KG1lbSwgbWVtX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYy0xNjk5LVxcdFxcdHdwX2FkZHJfcmFuZ2UobWVtLCBtZW1fc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMtMTcyOS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmM6MTczMDpcXHR3cF9pbml0KGZtZW0sIHNidWYuc3Rfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3MzEtXFx0d3BfYWRkcl9yYW5nZShmbWVtLCBzYnVmLnN0X3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jOjE3NTg6XFx0d3BfaW5pdChmbWVtLCBidWZfc2l6ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jLTE3NTktXFx0d3BfYWRkcl9yYW5nZShmbWVtLCBidWZfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjMxLjE2NzM0MTkzMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY3NDgwODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyBgaW5pdF91ZmZkYCBpbiBgcGFnZW1hcF9pb2N0bC5jYCBmb3IgU2VsZnRlc3RzKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGBpbml0X3VmZmRgIHdpdGhpbiB0aGF0IGBwYWdlbWFwX2lvY3RsLmNgIGZpbGUsIG5lc3RsZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tYC4gVGhhdCBtZWFucyB0aGlzIGlzIGEgdGVzdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgYHBhZ2VtYXBfaW9jdGxgIHN5c3RlbSBjYWxscy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCBgaW5pdF91ZmZkYCBsaWtlbHkgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgb2YgYSB1c2VyZmF1bHRmZCwgb3IgVUZGRCwgaW5zdGFuY2UgZm9yIHVzZSB3aXRoaW4gdGhlc2UgdGVzdHMuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgaW5kaWNhdGl2ZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBcInNlbGZ0ZXN0LFwiIGl0IGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBlbnZpcm9ubWVudCByZWFkeSB0byBleGVyY2lzZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGFnZSBtYXAgSU9DVExzLiBTbywgcHJvYmFibHkgc2V0cyB1cCBzb21lIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIGNvbmZpZ3VyZXMgdGhlIFVGRkQgdG8gdHJpZ2dlciBvbiBzcGVjaWZpYyBldmVudHMsIGFuZCBnZW5lcmFsbHkgZG9lcyB0aGUgaGVhdnkgbGlmdGluZyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXN0aW5nIG9mIHRoZSBJT0NUTHMgdGhlbXNlbHZlcyBjYW4gY29tbWVuY2UuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IG1pbmQncyBleWUgc2VlcyBhIGZ1bmN0aW9uIHByZXBhcmluZyB0aGUgc3RhZ2UgZm9yIHRoZSBtYWluIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc0MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjM0LjUzNDgyNTY1N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdGludCBpbml0X3VmZmQodm9pZClcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdHN0cnVjdCB1ZmZkaW9fYXBpIHVmZmRpb19hcGk7XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKTtcXG4gMTAwOlxcdFxcdGlmICh1ZmZkID09IC0xKVxcbiAxMDE6XFx0XFx0XFx0cmV0dXJuIHVmZmQ7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdHVmZmRpb19hcGkuYXBpID0gVUZGRF9BUEk7XFxuIDEwNDpcXHRcXHR1ZmZkaW9fYXBpLmZlYXR1cmVzID0gVUZGRF9GRUFUVVJFX1dQX1VOUE9QVUxBVEVEIHwgVUZGRF9GRUFUVVJFX1dQX0FTWU5DIHxcXG4gMTA1OlxcdFxcdFxcdFxcdCAgICAgIFVGRkRfRkVBVFVSRV9XUF9IVUdFVExCRlNfU0hNRU07XFxuIDEwNjpcXHRcXHRpZiAoaW9jdGwodWZmZCwgVUZGRElPX0FQSSwgXFx1MDAyNnVmZmRpb19hcGkpKVxcbiAxMDc6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRpZiAoISh1ZmZkaW9fYXBpLmFwaSBcXHUwMDI2IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQKSB8fFxcbiAxMTA6XFx0XFx0ICAgICEodWZmZGlvX2FwaS5mZWF0dXJlcyBcXHUwMDI2IFVGRkRfRkVBVFVSRV9XUF9VTlBPUFVMQVRFRCkgfHxcXG4gMTExOlxcdFxcdCAgICAhKHVmZmRpb19hcGkuZmVhdHVyZXMgXFx1MDAyNiBVRkZEX0ZFQVRVUkVfV1BfQVNZTkMpIHx8XFxuIDExMjpcXHRcXHQgICAgISh1ZmZkaW9fYXBpLmZlYXR1cmVzIFxcdTAwMjYgVUZGRF9GRUFUVVJFX1dQX0hVR0VUTEJGU19TSE1FTSkpXFxuIDExMzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdHJldHVybiAwO1xcbiAxMTY6XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRpbnQgd3BfaW5pdCh2b2lkICphZGRyLCBsb25nIHNpemUpXFxuIDExOTpcXHR7XFxuIDEyMDpcXHRcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjtcXG4gMTIxOlxcdFxcdHN0cnVjdCB1ZmZkaW9fd3JpdGVwcm90ZWN0IHdwO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHR1ZmZkaW9fcmVnaXN0ZXIucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylhZGRyO1xcbiAxMjQ6XFx0XFx0dWZmZGlvX3JlZ2lzdGVyLnJhbmdlLmxlbiA9IHNpemU7XFxuIDEyNTpcXHRcXHR1ZmZkaW9fcmVnaXN0ZXIubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQO1xcbiAxMjY6XFx0XFx0aWYgKGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgXFx1MDAyNnVmZmRpb19yZWdpc3RlcikpXFxuIDEyNzpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImlvY3RsKFVGRkRJT19SRUdJU1RFUikgJWQgJXNcXFxcblxcXCIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRpZiAoISh1ZmZkaW9fcmVnaXN0ZXIuaW9jdGxzIFxcdTAwMjYgVUZGRElPX1dSSVRFUFJPVEVDVCkpXFxuIDEzMDpcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImlvY3RsIHNldCBpcyBpbmNvcnJlY3RcXFxcblxcXCIpO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHR3cC5yYW5nZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuIDEzMzpcXHRcXHR3cC5yYW5nZS5sZW4gPSBzaXplO1xcbiAxMzQ6XFx0XFx0d3AubW9kZSA9IFVGRkRJT19XUklURVBST1RFQ1RfTU9ERV9XUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6MzQuNTM0OTkzMjU3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjEwMjMxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgV3JpdGUgUHJvdGVjdGlvbiB3aXRoIFVzZXJmYXVsdGZkKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBgUEFHRU1BUF9TQ0FOYCB3b3JrcywgYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCdzIGRlZXBseSBjb25uZWN0ZWQgdG8gYFVTRVJGQVVMVEZEYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBVRkZEX0ZFQVRVUkVfV1BfVU5QT1BVTEFURURgIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHNvbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHRvIGdldCB0aGUgbW9zdCBvdXQgb2YgdGhpcy5cblxuSXQncyBwcmV0dHkgb2J2aW91cyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfVVNFUkZBVUxURkRgIGlzIHRoZSBmaXJzdCBzdGVwLiBUaGF0J3MgYSBuby1icmFpbmVyLiBCdXQgSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNydWNpYWwgcGllY2UgZm9yIG1hbmFnaW5nIHdyaXRlIHByb3RlY3Rpb24gdXNpbmcgdXNlcmZhdWx0ZmQgZWZmZWN0aXZlbHkuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IEkndmUgY2hvc2VuIHRoZSByaWdodCBjb25maWcgaGVyZSB0byBnZXQgdGhlIGludGVuZGVkIHJlc3VsdHMsIG9mIGNvdXJzZSwgYmVjYXVzZSBhbiBpbmNvcnJlY3QgY29uZmlnIGNob2ljZSBjb3VsZCBsZWFkIHRvIHNvbWUgc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjM3LjU5NjAxODY1NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMDU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Nj1pZiBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWc6MTM5Nzpjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxubW0vS2NvbmZpZy0xMzk4LVxcdGJvb2wgXFxcIlVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDozNy42NTkzMjkwMDRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0NDkzNzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJhdmVsaW5nIFBURSBNYXJrZXJzIGFuZCBVRkZEKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYC4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCdzIHNwZWNpZmljYWxseSBmb3Igc2hhcmVkIG1lbW9yeSBvciBodWdldGxiZnMsIGJ1dCB0aGVuIGl0IGhpdCBtZTogYFBURV9NQVJLRVJfVUZGRF9XUGAgaXRzZWxmIGlzIHVzZWQgZm9yIGFsbCB1bnBvcHVsYXRlZCBQVEVzLiBOb3csIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGJlIHByZWNpc2UuXG5cbldhaXQgYSBzZWNvbmQsIHdhc24ndCBgUFRFX01BUktFUl9VRkZEX1dQYCB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBhcyBgQklUKDApYCBpbiBgaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhgPyBUaGF0J3MgYSBjcnVjaWFsIGRldGFpbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS5cblxuTm93IEknbSB3b25kZXJpbmcgaWYgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgIG1pZ2h0IHN0aWxsIGJlIG5lZWRlZCBmb3IgY2VydGFpbiBmZWF0dXJlcy4gSXQgZmVlbHMgbGlrZSB0aGVyZSBtaWdodCBiZSBhIGRlcGVuZGVuY3kgb3IgcmVsYXRpb25zaGlwIEknbSBvdmVybG9va2luZyBoZXJlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbkxldCdzIGNoZWNrIGBDT05GSUdfVVNFUkZBVUxURkRgLiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTcxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ0OjQxLjUwNDI2OTE5OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2NjczNjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwMDo0NDo0MS41NjU5NDQxNjhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAxNjAxOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBVU0VSRkFVTFRGRGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4gU28sIEknbSB0aGlua2luZywgXCJMZXQncyBjaGVjayBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AgZm9yIGBVU0VSRkFVTFRGRGAuXCIgVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIGZpbmQgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVjbGFyZWQsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS4gS25vd2luZyB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIHVzZSBvZiB0aGlzIGZsYWcgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTYxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6NDkuNTgxOTY1NDk1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE4Mjg5NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDQ6NTguMTAwMjYzMTVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNzk1OTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyB1c2VyZmF1bHRmZC4gSSBzZWUgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgZGVmaW5lZCBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQncyBhIGdvb2Qgc3RhcnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIGVuYWJsZWQuIEFsc28sIEkga25vdyB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHJlbGV2YW50IHRvIHRoaXMgYXMgd2VsbCwgc28gSSBzaG91bGQgbGlzdCB0aGF0IGFzIHdlbGwuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJIHJlbWVtYmVyIHNlZWluZyBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBiZWluZyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYSBsb3Qgb2YgYmFzZSBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBTdGlsbCwgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgZXhwbGljaXRseSBzdGF0ZSB0aGUgc2V0dGluZywgc28gbGV0J3MgZG9jdW1lbnQgdGhhdC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBpcyBhbHNvIGRlZmluZWQgaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODQ4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDA6NDU6MDEuOTA4MjI0NTQ0WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNjQzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfUEFHRV9NT05JVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWc9ODM9Y29uZmlnIFBST0NfU1lTQ1RMXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTAxLVxcbmZzL3Byb2MvS2NvbmZpZzoxMDI6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXFxuZnMvcHJvYy9LY29uZmlnLTEwMy0gXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ1OjAyLjAxNTQ5MzcxNFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTAyNDM4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBjaGFuZ2VzIGhvdyB0aGUgYFBBR0VNQVBfU0NBTmAgaW9jdGwgYmVoYXZlcy4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCB0byByZXR1cm4gYFBBR0VfSVNfV1JJVFRFTmAgd2hlbiBpdCBlbmNvdW50ZXJzIGBwdGVfbm9uZShwdGUpYC4gVGhhdCdzIGEgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcm9jZnMgY29kZS4gSXQncyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgdG8gZml4IGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMsIG1ha2luZyBzdXJlIHVucG9wdWxhdGVkIFBURXMgYXJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHdyaXR0ZW4uIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy5cblxuTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZSBgcGFnZW1hcF9wYWdlX2NhdGVnb3J5YCwgYGRvX3BhZ2VtYXBfc2NhbmAsIGFuZCBgcGFnZW1hcF9zY2FuX3BtZF9lbnRyeWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBBR0VNQVBfU0NBTmAgaXNuJ3Qgc29sZWx5IGRlcGVuZGVudCBvbiBgVVNFUkZBVUxURkRgLCBzaW5jZSB0aGUgcGF0Y2ggbWVudGlvbnMgaXRzIG1vZGlmaWNhdGlvbi4gSG1tLCBhZnRlciBhIHF1aWNrIGludmVzdGlnYXRpb24sIGl0IHNlZW1zIHlvdSAqY2FuKiB1c2UgYFBBR0VNQVBfU0NBTmAgdG8gcXVlcnkgcGFnZSBjYXRlZ29yaWVzIHdpdGhvdXQgYFVTRVJGQVVMVEZEYCwgYnV0IHRoZSB0ZXN0IHV0aWxpemVzIGl0IGZvciB3cml0ZSBwcm90ZWN0aW9uIGZpcnN0LiBTbywgdGhlIHRlc3QgaW4gdGhlIHBhdGNoIHVzZXMgYSBzZXR1cCB3aGVyZSBpdCBpbml0aWFsaXplcywgd3JpdGVzIHRvLCBhbmQgdGhlbiBhZHZpc2VzIG1lbW9yeSBhcyBgTUFEVl9ET05UTkVFRGAuIFRoYXQgZGVmaW5pdGVseSBtZWFucyBJIHNob3VsZCBpbmNsdWRlIGBVU0VSRkFVTFRGRGAgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gTm9wZSwgaXQncyBqdXN0IGBwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlgLiBHaXZlbiB0aGlzLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcywgSSBzdXNwZWN0LlxuXG5TbywgdG8gc3VtbWFyaXplLCBteSBmb2N1cyBpcyBub3cgb24gdGhlc2Ugc3ltYm9sczogYHBhZ2VtYXBfcGFnZV9jYXRlZ29yeWAsIGBkb19wYWdlbWFwX3NjYW5gLCBhbmQgYHBhZ2VtYXBfc2Nhbl9wbWRfZW50cnlgLCBhbmQgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvbiB0aGUgaW1wbGljYXRpb25zIGZvciB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLiBNeSByZWxldmFudCBjb25maWd1cmF0aW9uIGZsYWdzIHdpbGwgYmUgYFVTRVJGQVVMVEZEYCBhbmQgYFBST0NfUEFHRV9NT05JVE9SYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMzAsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDAwOjQ1OjEwLjExNzkzNTA0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwMjkwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfcGFnZV9jYXRlZ29yeVwiLFxuICAgIFwiZG9fcGFnZW1hcF9zY2FuXCIsXG4gICAgXCJwYWdlbWFwX3NjYW5fcG1kX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBiZWhhdmlvciBmb3IgdW5wb3B1bGF0ZWQgUFRFcyAocHRlX25vbmUpIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlbSBhcyBQQUdFX0lTX1dSSVRURU4uIFRoaXMgZml4ZXMgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBnZW5lcmljIHNjYW4gcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJvY2ZzIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIFBBR0VNQVBfU0NBTiBpb2N0bCBvbiAvcHJvYy9waWQvcGFnZW1hcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BhZ2VfY2F0ZWdvcnlcIixcbiAgICBcImRvX3BhZ2VtYXBfc2NhblwiLFxuICAgIFwicGFnZW1hcF9zY2FuX3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgYmVoYXZpb3IgZm9yIHVucG9wdWxhdGVkIFBURXMgKHB0ZV9ub25lKSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZW0gYXMgUEFHRV9JU19XUklUVEVOLiBUaGlzIGZpeGVzIGFuIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgZmFzdCBhbmQgZ2VuZXJpYyBzY2FuIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb2NmcyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBQQUdFTUFQX1NDQU4gaW9jdGwgb24gL3Byb2MvcGlkL3BhZ2VtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[1] Phase: Succeeded StartedAt: 2026-07-08 00:45:33 +0000 UTC FinishedAt: 2026-07-08 00:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 00:45:33 +0000 UTC FinishedAt: 2026-07-08 00:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2] Phase: Succeeded StartedAt: 2026-07-08 00:45:33 +0000 UTC FinishedAt: 2026-07-08 05:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 00:45:33 +0000 UTC FinishedAt: 2026-07-08 05:19:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 00:45:33 +0000 UTC FinishedAt: 2026-07-08 00:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 00:45:33 +0000 UTC FinishedAt: 2026-07-08 00:45:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdnmrw/series-workflowdnmrw-convert-artifact-3595878394/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 00:45:54 +0000 UTC FinishedAt: 2026-07-08 01:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 00:45:54 +0000 UTC FinishedAt: 2026-07-08 01:45:52 +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:*59d62608-4bbd-4369-8990-5c114e8bf9dd,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-workflowdnmrw/series-workflowdnmrw-convert-artifact-3595878394/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": "4904aed0-3b52-4eb0-ae5e-8863af89e182", "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-workflowdnmrw/series-workflowdnmrw-build-action-1635684520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 00:45:54 +0000 UTC FinishedAt: 2026-07-08 01:45:42 +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:*59d62608-4bbd-4369-8990-5c114e8bf9dd,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-workflowdnmrw/series-workflowdnmrw-convert-artifact-3595878394/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": "4904aed0-3b52-4eb0-ae5e-8863af89e182", "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-workflowdnmrw/series-workflowdnmrw-build-action-1635684520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 01:45:52 +0000 UTC FinishedAt: 2026-07-08 01:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 01:45:52 +0000 UTC FinishedAt: 2026-07-08 01:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 01:45:52 +0000 UTC FinishedAt: 2026-07-08 01:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 01:45:52 +0000 UTC FinishedAt: 2026-07-08 01:47:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdnmrw/series-workflowdnmrw-convert-artifact-3803008085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 01:48:21 +0000 UTC FinishedAt: 2026-07-08 01:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 01:48:21 +0000 UTC FinishedAt: 2026-07-08 01:50:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4904aed0-3b52-4eb0-ae5e-8863af89e182,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-workflowdnmrw/series-workflowdnmrw-build-action-1635684520/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-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 01:50:26 +0000 UTC FinishedAt: 2026-07-08 01:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 01:50:26 +0000 UTC FinishedAt: 2026-07-08 01:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 01:50:26 +0000 UTC FinishedAt: 2026-07-08 02:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 01:50:26 +0000 UTC FinishedAt: 2026-07-08 02:13:44 +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:*59d62608-4bbd-4369-8990-5c114e8bf9dd,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-workflowdnmrw/series-workflowdnmrw-convert-artifact-3803008085/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": "bd184a79-7e4c-4567-b21f-c198cdc7f5ef", "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-workflowdnmrw/series-workflowdnmrw-build-action-1084124641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 01:50:26 +0000 UTC FinishedAt: 2026-07-08 02:13:34 +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:*59d62608-4bbd-4369-8990-5c114e8bf9dd,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-workflowdnmrw/series-workflowdnmrw-convert-artifact-3803008085/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": "bd184a79-7e4c-4567-b21f-c198cdc7f5ef", "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-workflowdnmrw/series-workflowdnmrw-build-action-1084124641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 02:13:44 +0000 UTC FinishedAt: 2026-07-08 02:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 02:13:44 +0000 UTC FinishedAt: 2026-07-08 02:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 02:13:44 +0000 UTC FinishedAt: 2026-07-08 02:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 02:13:44 +0000 UTC FinishedAt: 2026-07-08 02:15:42 +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:*bd184a79-7e4c-4567-b21f-c198cdc7f5ef,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-workflowdnmrw/series-workflowdnmrw-build-action-1084124641/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-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 05:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 05:19:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4904aed0-3b52-4eb0-ae5e-8863af89e182,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd184a79-7e4c-4567-b21f-c198cdc7f5ef,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-workflowdnmrw/series-workflowdnmrw-build-action-1635684520/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-workflowdnmrw/series-workflowdnmrw-build-action-1084124641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 02:16:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 02:15:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdnmrw/series-workflowdnmrw-convert-artifact-3277014074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 02:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 02:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 02:15:52 +0000 UTC FinishedAt: 2026-07-08 02:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 02:16:02 +0000 UTC FinishedAt: 2026-07-08 05:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnmrw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["pagemap_page_category","do_pagemap_scan","pagemap_scan_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","PROC_PAGE_MONITOR"],"series_id":"b95d30f9-8023-455c-8666-e5fbc36bd87c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 02:16:02 +0000 UTC FinishedAt: 2026-07-08 05:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4904aed0-3b52-4eb0-ae5e-8863af89e182,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd184a79-7e4c-4567-b21f-c198cdc7f5ef,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-workflowdnmrw/series-workflowdnmrw-build-action-1635684520/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-workflowdnmrw/series-workflowdnmrw-build-action-1084124641/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-workflowdnmrw/series-workflowdnmrw-convert-artifact-3277014074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}