Name: series-workflowlbgdh Phase: Succeeded StartedAt: 2026-07-26 08:28:05 +0000 UTC FinishedAt: 2026-07-26 13:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[0] Phase: Succeeded StartedAt: 2026-07-26 08:28:05 +0000 UTC FinishedAt: 2026-07-26 08:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 08:28:05 +0000 UTC FinishedAt: 2026-07-26 08:46:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYNC_FILE", "UDMABUF", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYNC_FILE", "UDMABUF", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "d64e8b99-6897-4c72-96fa-30aa17439b79" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_nl_bind_rx_doit", "netdev_nl_bind_tx_doit", "net_devmem_bind_dmabuf", "net_devmem_alloc_dmabuf", "net_devmem_free_dmabuf", "net_devmem_bind_dmabuf_to_queue", "net_devmem_get_niov_at", "mp_dmabuf_devmem_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZTkNfRklMRSYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3J4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfdHhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYWxsb2NfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZnJlZV9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZSYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2dldF9uaW92X2F0JiMzNDssCiAgICAmIzM0O21wX2RtYWJ1Zl9kZXZtZW1faW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBSWCBwYWdlIHNpemUgZm9yIGRldm1lbSBUQ1AgdmlhIHRoZSBgcngtcGFnZS1zaXplYCBuZXRsaW5rIGF0dHJpYnV0ZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgZGV2bWVtIFRDUCBjb2RlIHRvIGhhbmRsZSBub24tUEFHRV9TSVpFIGFsbG9jYXRpb25zIGFuZCBtYXBwaW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHVzaW5nIG5ldGtpdCBvciB2ZXRoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZlM2FhYzI3Y2QwMDQ5YjQ1ZTIyZDUxOTlhNWViNDI0OTk2OWY3MDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwODo0MzoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmV0ZGV2LnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmV0ZGV2LnlhbWxcbmluZGV4IDVmMTQzZGE3NDU4Y2ZiLi4xZWU2NDM0MmRmMTFjMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sXG5AQCAtNiw2ICYjNDM7NiwxMiBAQCBkb2M6IFx1MDAzZS1cbiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLlxuIFxuIGRlZmluaXRpb25zOlxuJiM0MzsgIC1cbiYjNDM7ICAgIHR5cGU6IGNvbnN0XG4mIzQzOyAgICBuYW1lOiBwYWdlLXNpemVcbiYjNDM7ICAgIHZhbHVlOiAwICAjIGR1bW15OiBjb2RlZ2VuIG5lZWRzIGEgbnVtYmVyLCByZWFsIHZhbHVlIGlzIHRoZSBQQUdFX1NJWkUgbWFjcm8gKGhlYWRlcilcbiYjNDM7ICAgIGhlYWRlcjogYXNtL3BhZ2UuaFxuJiM0MzsgICAgc2NvcGU6IGtlcm5lbFxuICAgLVxuICAgICB0eXBlOiBmbGFnc1xuICAgICBuYW1lOiB4ZHAtYWN0XG5AQCAtNTk4LDYgJiM0Mzs2MDQsMTYgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGNoZWNrczpcbiAgICAgICAgICAgbWluOiAxXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiByeC1wYWdlLXNpemVcbiYjNDM7ICAgICAgICBkb2M6IHxcbiYjNDM7ICAgICAgICAgIFNpemUgaW4gYnl0ZXMgb2YgZWFjaCBkZXZpY2UgcGFnZSB0aGUgTklDIHdyaXRlcyBpbnRvIGZyb20gdGhlIGJvdW5kXG4mIzQzOyAgICAgICAgICBkbWFidWYuIE11c3QgYmUgYSBwb3dlciBvZiB0d28gYW5kIFx1MDAzZT0gUEFHRV9TSVpFOyBkZWZhdWx0cyB0b1xuJiM0MzsgICAgICAgICAgUEFHRV9TSVpFLlxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGNoZWNrczpcbiYjNDM7ICAgICAgICAgIG1pbjogcGFnZS1zaXplXG4mIzQzOyAgICAgICAgICBtYXg6IHUzMi1tYXhcbiBcbiBvcGVyYXRpb25zOlxuICAgbGlzdDpcbkBAIC04MTIsNiAmIzQzOzgyOCw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBpZmluZGV4XG4gICAgICAgICAgICAgLSBmZFxuICAgICAgICAgICAgIC0gcXVldWVzXG4mIzQzOyAgICAgICAgICAgIC0gcngtcGFnZS1zaXplXG4gICAgICAgICByZXBseTpcbiAgICAgICAgICAgYXR0cmlidXRlczpcbiAgICAgICAgICAgICAtIGlkXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5pbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgZW51bSB7XG4gXHRORVRERVZfQV9ETUFCVUZfUVVFVUVTLFxuIFx0TkVUREVWX0FfRE1BQlVGX0ZELFxuIFx0TkVUREVWX0FfRE1BQlVGX0lELFxuJiM0MztcdE5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsXG4gXG4gXHRfX05FVERFVl9BX0RNQUJVRl9NQVgsXG4gXHRORVRERVZfQV9ETUFCVUZfTUFYID0gKF9fTkVUREVWX0FfRE1BQlVGX01BWCAtIDEpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uY1xuaW5kZXggOTU3ZDZiOTYyMTZiMzMuLmIwMzZmMTRjYjIzYTE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5jXG5AQCAtNDYsNyAmIzQzOzQ2LDcgQEAgc3RhdGljIGRtYV9hZGRyX3QgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gXG4gXHRvd25lciA9IG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xuIFx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfZG1hX2FkZHIgJiM0Mztcbi1cdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuJiM0MztcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIG93bmVyLVx1MDAzZWJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuQEAgLTkzLDEzICYjNDM7OTMsMTQgQEAgbmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gXHRzc2l6ZV90IG9mZnNldDtcbiBcdHNzaXplX3QgaW5kZXg7XG4gXG4tXHRkbWFfYWRkciA9IGdlbl9wb29sX2FsbG9jX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgUEFHRV9TSVpFLFxuJiM0MztcdGRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuJiM0MztcdFx0XHRcdFx0MVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQsXG4gXHRcdFx0XHRcdCh2b2lkICoqKVx1MDAyNm93bmVyKTtcbiBcdGlmICghZG1hX2FkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0b2Zmc2V0ID0gZG1hX2FkZHIgLSBvd25lci1cdTAwM2ViYXNlX2RtYV9hZGRyO1xuLVx0aW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7XG4mIzQzO1x0aW5kZXggPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdDtcbiBcdG5pb3YgPSBcdTAwMjZvd25lci1cdTAwM2VhcmVhLm5pb3ZzW2luZGV4XTtcbiBcbiBcdG5pb3YtXHUwMDNlZGVzYy5wcF9tYWdpYyA9IDA7XG5AQCAtMTEzLDEyICYjNDM7MTE0LDEzIEBAIHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmcobmlvdik7XG4gXHR1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7XG4mIzQzO1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuIFxuIFx0aWYgKFdBUk5fT04oIWdlbl9wb29sX2hhc19hZGRyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG4tXHRcdFx0XHQgICAgICAgUEFHRV9TSVpFKSkpXG4mIzQzO1x0XHRcdFx0ICAgICAgIG5pb3Zfc2l6ZSkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnZW5fcG9vbF9mcmVlKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsIFBBR0VfU0laRSk7XG4mIzQzO1x0Z2VuX3Bvb2xfZnJlZShiaW5kaW5nLVx1MDAzZWNodW5rX3Bvb2wsIGRtYV9hZGRyLCBuaW92X3NpemUpO1xuIH1cbiBcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbkBAIC0xNjMsNiAmIzQzOzE2NSw5IEBAIGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxuIFx0dTMyIHhhX2lkeDtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKVxuJiM0MztcdFx0bXBfcGFyYW1zLnJ4X3BhZ2Vfc2l6ZSA9IDFVIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQ7XG4mIzQzO1xuIFx0ZXJyID0gbmV0aWZfbXBfb3Blbl9yeHEoZGV2LCByeHFfaWR4LCBcdTAwMjZtcF9wYXJhbXMsIGV4dGFjayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE4NCwxMCAmIzQzOzE4OSwxMiBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XG4mIzQzO1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlvdl9zaGlmdDtcbiBcdHN0YXRpYyB1MzIgaWRfYWxsb2NfbmV4dDtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4gXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFxuIFx0YmluZGluZy1cdTAwM2VkZXYgPSBkZXY7XG4gXHRiaW5kaW5nLVx1MDAzZXZkZXYgPSB2ZGV2O1xuJiM0MztcdGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCA9IG5pb3Zfc2hpZnQ7XG4gXHR4YV9pbml0X2ZsYWdzKFx1MDAyNmJpbmRpbmctXHUwMDNlYm91bmRfcnhxcywgWEFfRkxBR1NfQUxMT0MpO1xuIFxuIFx0ZXJyID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNmJpbmRpbmctXHUwMDNlcmVmLFxuQEAgLTI0OCwxOCAmIzQzOzI1NiwxNCBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdFx0Z290byBlcnJfdW5tYXA7XG4gXHRcdH1cbiBcdFx0YmluZGluZy1cdTAwM2V0eF92ZWMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBuZXRfaW92ICosXG4tXHRcdFx0XHRcdFx0ZG1hYnVmLVx1MDAzZXNpemUgLyBQQUdFX1NJWkUpO1xuJiM0MztcdFx0XHRcdFx0XHRkbWFidWYtXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2Ugbmlvdl9zaGlmdCk7XG4gXHRcdGlmICghYmluZGluZy1cdTAwM2V0eF92ZWMpIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX3VubWFwO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBGb3Igc2ltcGxpY2l0eSB3ZSBleHBlY3QgdG8gbWFrZSBQQUdFX1NJWkUgYWxsb2NhdGlvbnMsIGJ1dCB0aGVcbi1cdCAqIGJpbmRpbmcgY2FuIGJlIG11Y2ggbW9yZSBmbGV4aWJsZSB0aGFuIHRoYXQuIFdlIG1heSBiZSBhYmxlIHRvXG4tXHQgKiBhbGxvY2F0ZSBNVFUgc2l6ZWQgY2h1bmtzIGhlcmUuIExlYXZlIHRoYXQgZm9yIGZ1dHVyZSB3b3JrLi4uXG4tXHQgKi9cbi1cdGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZULFxuJiM0MztcdGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShuaW92X3NoaWZ0LFxuIFx0XHRcdFx0XHQgICAgICBkZXZfdG9fbm9kZShcdTAwMjZkZXYtXHUwMDNlZGV2KSk7XG4gXHRpZiAoIWJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuQEAgLTI3Myw5ICYjNDM7Mjc3LDEyIEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdFx0c2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpO1xuIFx0XHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcbiBcbi1cdFx0aWYgKCFJU19BTElHTkVEKGxlbiwgUEFHRV9TSVpFKSkge1xuJiM0MztcdFx0aWYgKCFJU19BTElHTkVEKGRtYV9hZGRyLCBuaW92X3NpemUpIHx8XG4mIzQzO1x0XHQgICAgIUlTX0FMSUdORUQobGVuLCBuaW92X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2RtYS1idWYgU0cgbGVuZ3RoIG11c3QgYmUgUEFHRV9TSVpFIGFsaWduZWRcJiMzNDspO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7ZG1hYnVmIHNnIGVudHJ5IChhZGRyPSVwYWQsIGxlbj0lenUpIG5vdCBhbGlnbmVkIHRvIG5pb3Ygc2l6ZSAlenVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZkbWFfYWRkciwgbGVuLCBuaW92X3NpemUpO1xuIFx0XHRcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xuIFx0XHR9XG4gXG5AQCAtMjg4LDcgJiM0MzsyOTUsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXG4gXHRcdG93bmVyLVx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsID0gdmlydHVhbDtcbiBcdFx0b3duZXItXHUwMDNlYmFzZV9kbWFfYWRkciA9IGRtYV9hZGRyO1xuLVx0XHRvd25lci1cdTAwM2VhcmVhLm51bV9uaW92cyA9IGxlbiAvIFBBR0VfU0laRTtcbiYjNDM7XHRcdG93bmVyLVx1MDAzZWFyZWEubnVtX25pb3ZzID0gbGVuIFx1MDAzZVx1MDAzZSBuaW92X3NoaWZ0O1xuIFx0XHRvd25lci1cdTAwM2ViaW5kaW5nID0gYmluZGluZztcbiBcbiBcdFx0ZXJyID0gZ2VuX3Bvb2xfYWRkX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG5AQCAtMzEzLDcgJiM0MzszMjAsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdFx0cGFnZV9wb29sX3NldF9kbWFfYWRkcl9uZXRtZW0obmV0X2lvdl90b19uZXRtZW0obmlvdiksXG4gXHRcdFx0XHRcdFx0ICAgICAgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdikpO1xuIFx0XHRcdGlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSlcbi1cdFx0XHRcdGJpbmRpbmctXHUwMDNldHhfdmVjW293bmVyLVx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsIC8gUEFHRV9TSVpFICYjNDM7IGldID0gbmlvdjtcbiYjNDM7XHRcdFx0XHRiaW5kaW5nLVx1MDAzZXR4X3ZlY1sob3duZXItXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgXHUwMDNlXHUwMDNlIG5pb3Zfc2hpZnQpICYjNDM7IGldID0gbmlvdjtcbiBcdFx0fVxuIFxuIFx0XHR2aXJ0dWFsICYjNDM7PSBsZW47XG5AQCAtNDMwLDEzICYjNDM7NDM3LDE1IEBAIHN0cnVjdCBuZXRfaW92ICpcbiBuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuIFx0XHQgICAgICAgc2l6ZV90IHZpcnRfYWRkciwgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSlcbiB7XG4mIzQzO1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuJiM0MztcbiBcdGlmICh2aXJ0X2FkZHIgXHUwMDNlPSBiaW5kaW5nLVx1MDAzZWRtYWJ1Zi1cdTAwM2VzaXplKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdCpvZmYgPSB2aXJ0X2FkZHIgJSBQQUdFX1NJWkU7XG4tXHQqc2l6ZSA9IFBBR0VfU0laRSAtICpvZmY7XG4mIzQzO1x0Km9mZiA9IHZpcnRfYWRkciBcdTAwMjYgKG5pb3Zfc2l6ZSAtIDEpO1xuJiM0MztcdCpzaXplID0gbmlvdl9zaXplIC0gKm9mZjtcbiBcbi1cdHJldHVybiBiaW5kaW5nLVx1MDAzZXR4X3ZlY1t2aXJ0X2FkZHIgLyBQQUdFX1NJWkVdO1xuJiM0MztcdHJldHVybiBiaW5kaW5nLVx1MDAzZXR4X3ZlY1t2aXJ0X2FkZHIgXHUwMDNlXHUwMDNlIGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdF07XG4gfVxuIFxuIC8qKiogXCYjMzQ7RG1hYnVmIGRldm1lbSBtZW1vcnkgcHJvdmlkZXJcJiMzNDsgKioqL1xuQEAgLTQ1NCw3ICYjNDM7NDYzLDcgQEAgaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxuIFx0cG9vbC1cdTAwM2VkbWFfc3luYyA9IGZhbHNlO1xuIFx0cG9vbC1cdTAwM2VkbWFfc3luY19mb3JfY3B1ID0gZmFsc2U7XG4gXG4tXHRpZiAocG9vbC1cdTAwM2VwLm9yZGVyICE9IDApXG4mIzQzO1x0aWYgKHBvb2wtXHUwMDNlcC5vcmRlciAhPSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUKVxuIFx0XHRyZXR1cm4gLUUyQklHO1xuIFxuIFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoYmluZGluZyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNDAuLjRhMjkzYTdkMTE0OWM4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5oXG5AQCAtNzEsNiAmIzQzOzcxLDggQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuIFx0ICovXG4gXHRzdHJ1Y3QgbmV0X2lvdiAqKnR4X3ZlYztcbiBcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdDtcbiYjNDM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5iaW5kX3c7XG4gfTtcbiBcbkBAIC05Myw3ICYjNDM7OTUsOCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKTtcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG5AQCAtMTIyLDEwICYjNDM7MTI1LDExIEBAIHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5ldF9pb3ZfdmlydHVhbF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxuIHtcbi1cdHN0cnVjdCBuZXRfaW92X2FyZWEgKm93bmVyID0gbmV0X2lvdl9vd25lcihuaW92KTtcbiYjNDM7XHRzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID1cbiYjNDM7XHRcdG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xuIFxuLVx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfdmlydHVhbCAmIzQzO1xuLVx0ICAgICAgICgodW5zaWduZWQgbG9uZyluZXRfaW92X2lkeChuaW92KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0cmV0dXJuIG5ldF9pb3Zfb3duZXIobmlvdiktXHUwMDNlYmFzZV92aXJ0dWFsICYjNDM7XG4mIzQzO1x0ICAgICAgICgodW5zaWduZWQgbG9uZyluZXRfaW92X2lkeChuaW92KSBcdTAwM2NcdTAwM2MgY28tXHUwMDNlYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sXG5AQCAtMTc1LDYgJiM0MzsxNzksNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1xuaW5kZXggZDE4Yzg5YjVhNmM3NTkuLmY4Mzc5MDM0MWVhZTY4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuIC8qIEludGVnZXIgdmFsdWUgcmFuZ2VzICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfcGFnZV9wb29sX2lkX3JhbmdlID0ge1xuQEAgLTI3LDYgJiM0MzsyOCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBuZXRkZXZfYV9uYXBpX2RlZmVyX2hhcmRfaXJxc19yYW5nZVxuIFx0Lm1heFx0PSBTMzJfTUFYLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UgPSB7XG4mIzQzO1x0Lm1pblx0PSBQQUdFX1NJWkUsXG4mIzQzO1x0Lm1heFx0PSBVMzJfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBDb21tb24gbmVzdGVkIHR5cGVzICovXG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCAmIzQzOyAxXSA9IHtcbiBcdFtORVRERVZfQV9MRUFTRV9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuQEAgLTEwNiwxMCAmIzQzOzExMiwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X3FzdGF0c19nZXRfbmxfcG9saWN5W05FVERFVl9BX1FTVEFUU19TQ09QRVxuIH07XG4gXG4gLyogTkVUREVWX0NNRF9CSU5EX1JYIC0gZG8gKi9cbi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5W05FVERFVl9BX0RNQUJVRl9GRCAmIzQzOyAxXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeVtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFICYjNDM7IDFdID0ge1xuIFx0W05FVERFVl9BX0RNQUJVRl9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuIFx0W05FVERFVl9BX0RNQUJVRl9GRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbiBcdFtORVRERVZfQV9ETUFCVUZfUVVFVUVTXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKG5ldGRldl9xdWV1ZV9pZF9ubF9wb2xpY3kpLFxuJiM0MztcdFtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZuZXRkZXZfYV9kbWFidWZfcnhfcGFnZV9zaXplX3JhbmdlKSxcbiB9O1xuIFxuIC8qIE5FVERFVl9DTURfTkFQSV9TRVQgLSBkbyAqL1xuQEAgLTIxOSw3ICYjNDM7MjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XG4gXHRcdC5jbWRcdFx0PSBORVRERVZfQ01EX0JJTkRfUlgsXG4gXHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcbiBcdFx0LnBvbGljeVx0XHQ9IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeSxcbi1cdFx0Lm1heGF0dHJcdD0gTkVUREVWX0FfRE1BQlVGX0ZELFxuJiM0MztcdFx0Lm1heGF0dHJcdD0gTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcbiBcdFx0LmZsYWdzXHRcdD0gR0VOTF9VTlNfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbiBcdH0sXG4gXHR7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmggYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaFxuaW5kZXggZDcxYjQzNWQ3MmMxOGYuLjNmYWU4OGU4ZjVjNTBlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCAmIzQzOyAxXTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuaW5kZXggYzE1ZDhkNGNhMWY4ZmEuLjBlZWE0ZWUyMmYyNDY3IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuQEAgLTEwMTMsNiAmIzQzOzEwMTMsNyBAQCBuZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCxcbiBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xuJiM0MztcdHVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XG4gXHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuQEAgLTEwMzAsNiAmIzQzOzEwMzEsMTggQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmaW5kZXggPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RFVl9JRklOREVYXSk7XG4gXHRkbWFidWZfZmQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9GRF0pO1xuIFxuJiM0MztcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdKSB7XG4mIzQzO1x0XHR1MzIgcnhfcGFnZV9zaXplID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc19wb3dlcl9vZl8yKHJ4X3BhZ2Vfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O3J4LXBhZ2Utc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMlwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bmlvdl9zaGlmdCA9IGlsb2cyKHJ4X3BhZ2Vfc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHByaXYgPSBnZW5sX3NrX3ByaXZfZ2V0KFx1MDAyNm5ldGRldl9ubF9mYW1pbHksIE5FVExJTktfQ0Ioc2tiKS5zayk7XG4gXHRpZiAoSVNfRVJSKHByaXYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2KTtcbkBAIC0xMDgwLDcgJiM0MzsxMDkzLDggQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdH1cbiBcbiBcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxuLVx0XHRcdFx0XHQgZG1hYnVmX2ZkLCBwcml2LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4mIzQzO1x0XHRcdFx0XHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxuJiM0MztcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcbiBcdFx0Z290byBlcnJfcnhxX2JpdG1hcDtcbkBAIC0xMjIxLDcgJiM0MzsxMjM1LDcgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LFxuIFx0XHRcdFx0XHQgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCxcbiBcdFx0XHRcdFx0IGRtYV9kZXYsIERNQV9UT19ERVZJQ0UsIGRtYWJ1Zl9mZCxcbi1cdFx0XHRcdFx0IHByaXYsIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHRcdCBQQUdFX1NISUZULCBwcml2LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG4gXHRcdGdvdG8gZXJyX3VubG9ja19iaW5kX2RldjtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5AQCAtMjE5LDYgJiM0MzsyMTksNyBAQCBlbnVtIHtcbiBcdE5FVERFVl9BX0RNQUJVRl9RVUVVRVMsXG4gXHRORVRERVZfQV9ETUFCVUZfRkQsXG4gXHRORVRERVZfQV9ETUFCVUZfSUQsXG4mIzQzO1x0TkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcbiBcbiBcdF9fTkVUREVWX0FfRE1BQlVGX01BWCxcbiBcdE5FVERFVl9BX0RNQUJVRl9NQVggPSAoX19ORVRERVZfQV9ETUFCVUZfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHlcbmluZGV4IDAzMWNmOTkwNWY2NTFjLi44MmMxMWZmYzRhZGQ3YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5XG5AQCAtMiw3ICYjNDM7Miw4IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIGZyb20gb3MgaW1wb3J0IHBhdGhcbi1mcm9tIGRldm1lbV9saWIgaW1wb3J0IHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzXG4mIzQzO2Zyb20gZGV2bWVtX2xpYiBpbXBvcnQgKHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdilcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52XG4gXG5AQCAtMzAsMTEgJiM0MzszMSwxNyBAQCBkZWYgY2hlY2tfcnhfaGRzKGNmZykgLVx1MDAzZSBOb25lOlxuICAgICBydW5fcnhfaGRzKGNmZylcbiBcbiBcbiYjNDM7ZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggcngtcGFnZS1zaXplID0gMTYgS2lCLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgcnVuX3J4X2xhcmdlX25pb3YoY2ZnKVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biB0aGUgZGV2bWVtIHRlc3QgY2FzZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcbiAgICAgICAgIHNldHVwX3Rlc3QoY2ZnLCBwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSAmIzQzOyBcJiMzNDsvbmNkZXZtZW1cJiMzNDspKVxuLSAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHNdLFxuJiM0MzsgICAgICAgIGtzZnRfcnVuKFtjaGVja19yeCwgY2hlY2tfdHgsIGNoZWNrX3R4X2NodW5rcywgY2hlY2tfcnhfaGRzLFxuJiM0MzsgICAgICAgICAgICAgICAgICBjaGVja19yeF9sYXJnZV9uaW92XSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5pbmRleCAwOTIxZmYwM2ViODFjNS4uNmM5MzIwMThiNDYzYTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5AQCAtMSw0ICYjNDM7MSw1IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUsdG9vLW1hbnktYXJndW1lbnRzXG4gXCYjMzQ7XCYjMzQ7XCYjMzQ7U2hhcmVkIGhlbHBlcnMgZm9yIGRldm1lbSBUQ1Agc2VsZnRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuIGltcG9ydCByZVxuQEAgLTgsNyAmIzQzOzksNyBAQCBmcm9tIGxpYi5weSBpbXBvcnQgKGJrZywgY21kLCBkZWZlciwgZXRodG9vbCwgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuLFxuICAgICAgICAgICAgICAgICAgICAgTmV0ZGV2RmFtaWx5KVxuIFxuIFxuLWRlZiByZXF1aXJlX2Rldm1lbShjZmcpOlxuJiM0MztkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Byb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbiYjMzk7dCBzdXBwb3J0ZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXCYjMzQ7ZGV2bWVtX3Byb2JlZFwmIzM0Oyk6XG4gICAgICAgICBwcm9iZV9jb21tYW5kID0gZlwmIzM0O3tjZmcuYmluX2xvY2FsfSAtZiB7Y2ZnLmlmbmFtZX1cJiMzNDtcbkBAIC0xOCw2ICYjNDM7MTksMTkgQEAgZGVmIHJlcXVpcmVfZGV2bWVtKGNmZyk6XG4gICAgIGlmIG5vdCBjZmcuZGV2bWVtX3N1cHBvcnRlZDpcbiAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7VGVzdCByZXF1aXJlcyBkZXZtZW0gc3VwcG9ydFwmIzM0OylcbiBcbiYjNDM7ICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcdTAwM2UgMDpcbiYjNDM7ICAgICAgICBpZiBub3QgaGFzYXR0cihjZmcsIFwmIzM0O2Rldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkXCYjMzQ7KTpcbiYjNDM7ICAgICAgICAgICAgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkID0ge31cbiYjNDM7XG4mIzQzOyAgICAgICAgaWYgcnhfcGFnZV9zaXplIG5vdCBpbiBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWQ6XG4mIzQzOyAgICAgICAgICAgIHByb2JlX2NvbW1hbmQgPSBmXCYjMzQ7e2NmZy5iaW5fbG9jYWx9IC1mIHtjZmcuaWZuYW1lfSAtYiB7cnhfcGFnZV9zaXplfVwmIzM0O1xuJiM0MzsgICAgICAgICAgICBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWRbcnhfcGFnZV9zaXplXSA9IFxcXG4mIzQzOyAgICAgICAgICAgICAgICBjbWQocHJvYmVfY29tbWFuZCwgZmFpbD1GYWxzZSwgc2hlbGw9VHJ1ZSkucmV0ID09IDBcbiYjNDM7XG4mIzQzOyAgICAgICAgaWYgbm90IGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZFtyeF9wYWdlX3NpemVdOlxuJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuJiM0MzsgICAgICAgICAgICAgICAgZlwmIzM0O1Rlc3QgcmVxdWlyZXMgZGV2bWVtIHJ4LXBhZ2Utc2l6ZT17cnhfcGFnZV9zaXplfSBzdXBwb3J0XCYjMzQ7KVxuJiM0MztcbiBcbiBkZWYgY29uZmlndXJlX25pYyhjZmcpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtDaGFubmVscywgcmluZ3MsIFJTUywgcXVldWUgbGVhc2UgZm9yIG5ldGtpdCBkZXZtZW0uXCYjMzQ7XCYjMzQ7XCYjMzQ7XG5AQCAtNzYsNyAmIzQzOzkwLDggQEAgZGVmIHNldF9mbG93X3J1bGUoY2ZnLCBwb3J0KTpcbiAgICAgcmV0dXJuIGludChyZS5zZWFyY2gociYjMzk7SUQgKFxcZCYjNDM7KSYjMzk7LCBvdXRwdXQpLmdyb3VwKDEpKVxuIFxuIFxuLWRlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSk6XG4mIzQzO2RlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSxcbiYjNDM7ICAgICAgICAgICAgICAgIHJ4X3BhZ2Vfc2l6ZT0wKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QnVpbGQgdGhlIG5jZGV2bWVtIFJYIGxpc3RlbmVyIGNvbW1hbmQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIGlmIGhhc2F0dHIoY2ZnLCAmIzM5O25ldG5zJiMzOTspOlxuICAgICAgICAgZmxvd19ydWxlX2lkID0gc2V0X2Zsb3dfcnVsZShjZmcsIHBvcnQpXG5AQCAtOTYsNiAmIzQzOzExMSw4IEBAIGRlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSk6XG4gICAgICAgICBleHRyYXMuYXBwZW5kKFwmIzM0Oy12IDdcJiMzNDspXG4gICAgIGlmIGZhaWxfb25fbGluZWFyOlxuICAgICAgICAgZXh0cmFzLmFwcGVuZChcJiMzNDstTFwmIzM0OylcbiYjNDM7ICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcdTAwM2UgMDpcbiYjNDM7ICAgICAgICBleHRyYXMuYXBwZW5kKGZcJiMzNDstYiB7cnhfcGFnZV9zaXplfVwmIzM0OylcbiBcbiAgICAgcGFydHMgPSBbY2ZnLmJpbl9sb2NhbCwgXCYjMzQ7LWxcJiMzNDssIGZcJiMzNDstZiB7aWZuYW1lfVwmIzM0OywgZlwmIzM0Oy1zIHthZGRyfVwmIzM0OyxcbiAgICAgICAgICAgICAgZlwmIzM0Oy1wIHtwb3J0fVwmIzM0OywgKmV4dHJhc11cbkBAIC0yMDIsNiAmIzQzOzIxOSw0NCBAQCBkZWYgcnVuX3R4X2NodW5rcyhjZmcpOlxuICAgICBrc2Z0X2VxKHNvY2F0LnN0ZG91dC5zdHJpcCgpLCBcJiMzNDtoZWxsb1xcbndvcmxkXCYjMzQ7KVxuIFxuIFxuJiM0MztkZWYgX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzKGhwX2ZpbGUsIG5yX2h1Z2VwYWdlcyk6XG4mIzQzOyAgICB3aXRoIG9wZW4oaHBfZmlsZSwgJiMzOTt3JiMzOTssIGVuY29kaW5nPSYjMzk7dXRmLTgmIzM5OykgYXMgZjpcbiYjNDM7ICAgICAgICBmLndyaXRlKHN0cihucl9odWdlcGFnZXMpKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBydW5fcnhfbGFyZ2VfbmlvdihjZmcpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIHRoZSBkZXZtZW0gUlggdGVzdCB3aXRoIGEgbGFyZ2UgbmlvdiAocngtcGFnZS1zaXplIFx1MDAzZSBQQUdFX1NJWkUpLlxuJiM0MztcbiYjNDM7ICAgIFN3ZWVwIHBheWxvYWQgc2l6ZXMgdGhhdCBzdHJhZGRsZSB0aGUgbmlvdiBib3VuZGFyeTogYmVsb3csIGVxdWFsIHRvLFxuJiM0MzsgICAgYW5kIGFib3ZlIHJ4X3BhZ2Vfc2l6ZSwgdG8gZXhlcmNpc2Ugc3ViLW5pb3YsIGV4YWN0LW5pb3YsIGFuZCBtdWx0aS1uaW92XG4mIzQzOyAgICBSWCBwYXRocy5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgaHBfZmlsZSA9IFwmIzM0Oy9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXNcJiMzNDtcbiYjNDM7ICAgIHdpdGggb3BlbihocF9maWxlLCAmIzM5O3ImIzQzOyYjMzk7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIGY6XG4mIzQzOyAgICAgICAgbnJfaHVnZXBhZ2VzID0gaW50KGYucmVhZCgpLnN0cmlwKCkpXG4mIzQzOyAgICAgICAgaWYgbnJfaHVnZXBhZ2VzIFx1MDAzYyA2NDpcbiYjNDM7ICAgICAgICAgICAgZi5zZWVrKDApXG4mIzQzOyAgICAgICAgICAgIGYud3JpdGUoXCYjMzQ7NjRcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGRlZmVyKF9yZXN0b3JlX25yX2h1Z2VwYWdlcywgaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKVxuJiM0MzsgICAgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MTYzODQpXG4mIzQzOyAgICBjb25maWd1cmVfbmljKGNmZylcbiYjNDM7ICAgIG5ldG5zID0gZ2V0YXR0cihjZmcsIFwmIzM0O25ldG5zXCYjMzQ7LCBOb25lKVxuJiM0MztcbiYjNDM7ICAgIGZvciBzaXplIGluIFsxMDI0LCA0MDk2LCA4MTkyLCAxNjM4NCwgMzI3NjgsIDY1NTM2XTpcbiYjNDM7ICAgICAgICBwb3J0ID0gcmFuZF9wb3J0KClcbiYjNDM7ICAgICAgICBzb2NhdCA9IHNvY2F0X3NlbmQoY2ZnLCBwb3J0KVxuJiM0MzsgICAgICAgIGxpc3Rlbl9jbWQgPSBuY2Rldm1lbV9yeChjZmcsIHBvcnQsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dfc3RlZXI9bm90IG5ldG5zLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9wYWdlX3NpemU9MTYzODQpXG4mIzQzOyAgICAgICAgZGF0YV9waXBlID0gKGZcJiMzNDt5ZXMgJChlY2hvIC1lIFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNikgfCBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgZlwmIzM0O2hlYWQgLWMge3NpemV9IHwge3NvY2F0fVwmIzM0OylcbiYjNDM7ICAgICAgICB3aXRoIGJrZyhsaXN0ZW5fY21kLCBleGl0X3dhaXQ9VHJ1ZSwgbnM9bmV0bnMpIGFzIG5jZGV2bWVtOlxuJiM0MzsgICAgICAgICAgICB3YWl0X3BvcnRfbGlzdGVuKHBvcnQsIHByb3RvPVwmIzM0O3RjcFwmIzM0OywgbnM9bmV0bnMpXG4mIzQzOyAgICAgICAgICAgIGNtZChkYXRhX3BpcGUsIGhvc3Q9Y2ZnLnJlbW90ZSwgc2hlbGw9VHJ1ZSlcbiYjNDM7ICAgICAgICBrc2Z0X2VxKG5jZGV2bWVtLnJldCwgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIGZcJiMzNDtsYXJnZS1uaW92IGZhaWxlZCBmb3IgcGF5bG9hZCBzaXplIHtzaXplfVwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBydW5fcnhfaGRzKGNmZyk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biB0aGUgSERTIHRlc3QgYnkgcnVubmluZyBkZXZtZW0gUlggYWNyb3NzIGEgc2VnbWVudCBzaXplIHN3ZWVwLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICByZXF1aXJlX2Rldm1lbShjZmcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbmluZGV4IGQ5NmU4YTNiNWE2NTI2Li5mZmU4ZWIwNWZhYzBkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbkBAIC00MCw2ICYjNDM7NDAsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkYXJnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuQEAgLTYxLDYgJiM0Mzs2Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3BhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRtYWJ1Zi5oXHUwMDNlXG5AQCAtNzksNiAmIzQzOzgxLDcgQEBcbiAjZGVmaW5lIFBBR0VfU0hJRlQgMTJcbiAjZGVmaW5lIFRFU1RfUFJFRklYIFwmIzM0O25jZGV2bWVtXCYjMzQ7XG4gI2RlZmluZSBOVU1fUEFHRVMgMTYwMDBcbiYjNDM7I2RlZmluZSBNQih4KSAoKHgpIFx1MDAzY1x1MDAzYyAyMClcbiBcbiAjaWZuZGVmIE1TR19TT0NLX0RFVk1FTVxuICNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFxuQEAgLTEwMCw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XG4gc3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcbiBzdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwO1xuIHN0YXRpYyBib29sIGZhaWxfb25fbGluZWFyO1xuJiM0MztzdGF0aWMgdWludDMyX3QgcnhfcGFnZV9zaXplO1xuIFxuIC8qIFN5c3RlbSBzdGF0ZSBsb2FkZWQgYnkgY3VycmVudF9jb25maWdfbG9hZCgpICovXG4gI2RlZmluZSBNQVhfRkxPV1NcdDhcbkBAIC0xNDIsNiAmIzQzOzE0Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgY3JlYXRlO1xuIFx0c3RydWN0IG1lbW9yeV9idWZmZXIgKmN0eDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWVtZmRfZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Y3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7XG5AQCAtMTU2LDkgJiM0MzsxNjEsMTQgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKVxuIFx0XHRnb3RvIGVycl9mcmVlX2N0eDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VtZW1mZCA9IG1lbWZkX2NyZWF0ZShcJiMzNDt1ZG1hYnVmLXRlc3RcJiMzNDssIE1GRF9BTExPV19TRUFMSU5HKTtcbiYjNDM7XHRtZW1mZF9mbGFncyA9IE1GRF9BTExPV19TRUFMSU5HO1xuJiM0MztcdGlmIChyeF9wYWdlX3NpemUgXHUwMDNlIGdldHBhZ2VzaXplKCkpXG4mIzQzO1x0XHRtZW1mZF9mbGFncyB8PSBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQjtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZW1lbWZkID0gbWVtZmRfY3JlYXRlKFwmIzM0O3VkbWFidWYtdGVzdFwmIzM0OywgbWVtZmRfZmxhZ3MpO1xuIFx0aWYgKGN0eC1cdTAwM2VtZW1mZCBcdTAwM2MgMCkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7W3NraXAsbm8tbWVtZmRdXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtbc2tpcCxuby1tZW1mZCVzXVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICAobWVtZmRfZmxhZ3MgXHUwMDI2IE1GRF9IVUdFVExCKSA/IFwmIzM0OyAobmVlZCBodWdlcGFnZXMpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfY2xvc2VfZGV2O1xuIFx0fVxuIFxuQEAgLTE2OCw2ICYjNDM7MTc4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcbiBcdFx0Z290byBlcnJfY2xvc2VfbWVtZmQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG1lbWZkX2ZsYWdzIFx1MDAyNiBNRkRfSFVHRVRMQikge1xuJiM0MztcdFx0c2l6ZSA9IHJvdW5kdXAoc2l6ZSwgTUIoMikpO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBmdHJ1bmNhdGUoY3R4LVx1MDAzZW1lbWZkLCBzaXplKTtcbiBcdGlmIChyZXQgPT0gLTEpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O1tGQUlMLG1lbWZkLXRydW5jYXRlXVwmIzM0Oyk7XG5AQCAtNjk5LDYgJiM0Mzs3MTQsOCBAQCBzdGF0aWMgaW50IGJpbmRfcnhfcXVldWUodW5zaWduZWQgaW50IGlmaW5kZXgsIHVuc2lnbmVkIGludCBkbWFidWZfZmQsXG4gXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X2lmaW5kZXgocmVxLCBpZmluZGV4KTtcbiBcdG5ldGRldl9iaW5kX3J4X3JlcV9zZXRfZmQocmVxLCBkbWFidWZfZmQpO1xuIFx0X19uZXRkZXZfYmluZF9yeF9yZXFfc2V0X3F1ZXVlcyhyZXEsIHF1ZXVlcywgbl9xdWV1ZV9pbmRleCk7XG4mIzQzO1x0aWYgKHJ4X3BhZ2Vfc2l6ZSlcbiYjNDM7XHRcdG5ldGRldl9iaW5kX3J4X3JlcV9zZXRfcnhfcGFnZV9zaXplKHJlcSwgcnhfcGFnZV9zaXplKTtcbiBcbiBcdHJzcCA9IG5ldGRldl9iaW5kX3J4KCp5cywgcmVxKTtcbiBcdGlmICghcnNwKSB7XG5AQCAtMTQxMSw3ICYjNDM7MTQyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpbnQgaXNfc2VydmVyID0gMCwgb3B0O1xuIFx0aW50IHJldCwgZXJyID0gMTtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O0xsczpjOnA6djpxOnQ6Zjp6Om5cJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O0xsczpjOnA6djpxOnQ6Zjp6Om5iOlwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTtMJiMzOTs6XG4gXHRcdFx0ZmFpbF9vbl9saW5lYXIgPSB0cnVlO1xuQEAgLTE0NDYsNiAmIzQzOzE0NjMsMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0Y2FzZSAmIzM5O24mIzM5OzpcbiBcdFx0XHRza2lwX2NvbmZpZyA9IDE7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7YiYjMzk7OiB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJybm8gPSAwO1xuJiM0MztcdFx0XHR2YWwgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICgodmFsID09IFVMT05HX01BWCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRVJBTkdFKSB8fFxuJiM0MztcdFx0XHQgICAgdmFsIFx1MDAzZSBVSU5UMzJfTUFYKSB7XG4mIzQzO1x0XHRcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgcnhfcGFnZV9zaXplOiAlc1wmIzM0Oywgb3B0YXJnKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyeF9wYWdlX3NpemUgPSB2YWw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0XHRjYXNlICYjMzk7PyYjMzk7OlxuIFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDt1bmtub3duIG9wdGlvbjogJWNcXG5cJiMzNDssIG9wdG9wdCk7XG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5XG5pbmRleCAzMDBlZDJhNzBhYjQ0ZC4uNjFjNmYzMWYwMWU1MWUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weVxuQEAgLTMsNyAmIzQzOzMsOCBAQFxuIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgZGV2bWVtIFRDUCB3aXRoIG5ldGtpdC5cJiMzNDtcJiMzNDtcJiMzNDtcbiBcbiBpbXBvcnQgb3Ncbi1mcm9tIGRldm1lbV9saWIgaW1wb3J0IHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzXG4mIzQzO2Zyb20gZGV2bWVtX2xpYiBpbXBvcnQgKHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdilcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkNvbnRFbnZcbiBcbkBAIC0zMSw2ICYjNDM7MzIsMTEgQEAgZGVmIGNoZWNrX25rX3J4X2hkcyhjZmcpIC1cdTAwM2UgTm9uZTpcbiAgICAgcnVuX3J4X2hkcyhjZmcpXG4gXG4gXG4mIzQzO2RlZiBjaGVja19ua19yeF9sYXJnZV9uaW92KGNmZykgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIHRoZSBkZXZtZW0gUlggbGFyZ2UtbmlvdiB0ZXN0IHRocm91Z2ggbmV0a2l0LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgcnVuX3J4X2xhcmdlX25pb3YoY2ZnKVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biB0aGUgbmV0a2l0IGRldm1lbSB0ZXN0IGNhc2VzLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICB3aXRoIE5ldERydkNvbnRFbnYoX19maWxlX18sIHJ4cXVldWVzPTIsIHByaW1hcnlfcnhfcmVkaXJlY3Q9VHJ1ZSkgYXMgY2ZnOlxuQEAgLTM4LDcgJiM0Mzs0NCw3IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7bmNkZXZtZW1cJiMzNDspKVxuICAgICAgICAga3NmdF9ydW4oW2NoZWNrX25rX3J4LCBjaGVja19ua190eCwgY2hlY2tfbmtfdHhfY2h1bmtzLFxuLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKVxuJiM0MzsgICAgICAgICAgICAgICAgICBjaGVja19ua19yeF9oZHMsIGNoZWNrX25rX3J4X2xhcmdlX25pb3ZdLCBhcmdzPShjZmcsKSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lOQ19GSUxFJiMzNDssCiAgICAmIzM0O1VETUFCVUYmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9hbGxvY19kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X25pb3ZfYXQmIzM0OywKICAgICYjMzQ7bXBfZG1hYnVmX2Rldm1lbV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgdGhlIFJYIHBhZ2Ugc2l6ZSBmb3IgZGV2bWVtIFRDUCB2aWEgdGhlIGByeC1wYWdlLXNpemVgIG5ldGxpbmsgYXR0cmlidXRlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBkZXZtZW0gVENQIGNvZGUgdG8gaGFuZGxlIG5vbi1QQUdFX1NJWkUgYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0a2l0IG9yIHZldGgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmUzYWFjMjdjZDAwNDliNDVlMjJkNTE5OWE1ZWI0MjQ5OTY5ZjcwMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDA4OjQzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sCmluZGV4IDVmMTQzZGE3NDU4Y2ZiLi4xZWU2NDM0MmRmMTFjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbApAQCAtNiw2ICYjNDM7NiwxMiBAQCBkb2M6ICZndDstCiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLgogCiBkZWZpbml0aW9uczoKJiM0MzsgIC0KJiM0MzsgICAgdHlwZTogY29uc3QKJiM0MzsgICAgbmFtZTogcGFnZS1zaXplCiYjNDM7ICAgIHZhbHVlOiAwICAjIGR1bW15OiBjb2RlZ2VuIG5lZWRzIGEgbnVtYmVyLCByZWFsIHZhbHVlIGlzIHRoZSBQQUdFX1NJWkUgbWFjcm8gKGhlYWRlcikKJiM0MzsgICAgaGVhZGVyOiBhc20vcGFnZS5oCiYjNDM7ICAgIHNjb3BlOiBrZXJuZWwKICAgLQogICAgIHR5cGU6IGZsYWdzCiAgICAgbmFtZTogeGRwLWFjdApAQCAtNTk4LDYgJiM0Mzs2MDQsMTYgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBjaGVja3M6CiAgICAgICAgICAgbWluOiAxCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcngtcGFnZS1zaXplCiYjNDM7ICAgICAgICBkb2M6IHwKJiM0MzsgICAgICAgICAgU2l6ZSBpbiBieXRlcyBvZiBlYWNoIGRldmljZSBwYWdlIHRoZSBOSUMgd3JpdGVzIGludG8gZnJvbSB0aGUgYm91bmQKJiM0MzsgICAgICAgICAgZG1hYnVmLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGFuZCAmZ3Q7PSBQQUdFX1NJWkU7IGRlZmF1bHRzIHRvCiYjNDM7ICAgICAgICAgIFBBR0VfU0laRS4KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgY2hlY2tzOgomIzQzOyAgICAgICAgICBtaW46IHBhZ2Utc2l6ZQomIzQzOyAgICAgICAgICBtYXg6IHUzMi1tYXgKIAogb3BlcmF0aW9uczoKICAgbGlzdDoKQEAgLTgxMiw2ICYjNDM7ODI4LDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gaWZpbmRleAogICAgICAgICAgICAgLSBmZAogICAgICAgICAgICAgLSBxdWV1ZXMKJiM0MzsgICAgICAgICAgICAtIHJ4LXBhZ2Utc2l6ZQogICAgICAgICByZXBseToKICAgICAgICAgICBhdHRyaWJ1dGVzOgogICAgICAgICAgICAgLSBpZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oCmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaApAQCAtMjE5LDYgJiM0MzsyMTksNyBAQCBlbnVtIHsKIAlORVRERVZfQV9ETUFCVUZfUVVFVUVTLAogCU5FVERFVl9BX0RNQUJVRl9GRCwKIAlORVRERVZfQV9ETUFCVUZfSUQsCiYjNDM7CU5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsCiAKIAlfX05FVERFVl9BX0RNQUJVRl9NQVgsCiAJTkVUREVWX0FfRE1BQlVGX01BWCA9IChfX05FVERFVl9BX0RNQUJVRl9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uYwppbmRleCA5NTdkNmI5NjIxNmIzMy4uYjAzNmYxNGNiMjNhMTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldm1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5jCkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdikKIAogCW93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7CiAJcmV0dXJuIG93bmVyLSZndDtiYXNlX2RtYV9hZGRyICYjNDM7Ci0JICAgICAgICgoZG1hX2FkZHJfdCluZXRfaW92X2lkeChuaW92KSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsJICAgICAgICgoZG1hX2FkZHJfdCluZXRfaW92X2lkeChuaW92KSAmbHQ7Jmx0OyBvd25lci0mZ3Q7YmluZGluZy0mZ3Q7bmlvdl9zaGlmdCk7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQpAQCAtOTMsMTMgJiM0Mzs5MywxNCBAQCBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZykKIAlzc2l6ZV90IG9mZnNldDsKIAlzc2l6ZV90IGluZGV4OwogCi0JZG1hX2FkZHIgPSBnZW5fcG9vbF9hbGxvY19vd25lcihiaW5kaW5nLSZndDtjaHVua19wb29sLCBQQUdFX1NJWkUsCiYjNDM7CWRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCwKJiM0MzsJCQkJCTFVTCAmbHQ7Jmx0OyBiaW5kaW5nLSZndDtuaW92X3NoaWZ0LAogCQkJCQkodm9pZCAqKikmYW1wO293bmVyKTsKIAlpZiAoIWRtYV9hZGRyKQogCQlyZXR1cm4gTlVMTDsKIAogCW9mZnNldCA9IGRtYV9hZGRyIC0gb3duZXItJmd0O2Jhc2VfZG1hX2FkZHI7Ci0JaW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7CiYjNDM7CWluZGV4ID0gb2Zmc2V0ICZndDsmZ3Q7IGJpbmRpbmctJmd0O25pb3Zfc2hpZnQ7CiAJbmlvdiA9ICZhbXA7b3duZXItJmd0O2FyZWEubmlvdnNbaW5kZXhdOwogCiAJbmlvdi0mZ3Q7ZGVzYy5wcF9tYWdpYyA9IDA7CkBAIC0xMTMsMTIgJiM0MzsxMTQsMTMgQEAgdm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpuaW92KQogewogCXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nID0gbmV0X2Rldm1lbV9pb3ZfYmluZGluZyhuaW92KTsKIAl1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7CiYjNDM7CXNpemVfdCBuaW92X3NpemUgPSAxVUwgJmx0OyZsdDsgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdDsKIAogCWlmIChXQVJOX09OKCFnZW5fcG9vbF9oYXNfYWRkcihiaW5kaW5nLSZndDtjaHVua19wb29sLCBkbWFfYWRkciwKLQkJCQkgICAgICAgUEFHRV9TSVpFKSkpCiYjNDM7CQkJCSAgICAgICBuaW92X3NpemUpKSkKIAkJcmV0dXJuOwogCi0JZ2VuX3Bvb2xfZnJlZShiaW5kaW5nLSZndDtjaHVua19wb29sLCBkbWFfYWRkciwgUEFHRV9TSVpFKTsKJiM0MzsJZ2VuX3Bvb2xfZnJlZShiaW5kaW5nLSZndDtjaHVua19wb29sLCBkbWFfYWRkciwgbmlvdl9zaXplKTsKIH0KIAogdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpCkBAIC0xNjMsNiAmIzQzOzE2NSw5IEBAIGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LAogCXUzMiB4YV9pZHg7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoYmluZGluZy0mZ3Q7bmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKQomIzQzOwkJbXBfcGFyYW1zLnJ4X3BhZ2Vfc2l6ZSA9IDFVICZsdDsmbHQ7IGJpbmRpbmctJmd0O25pb3Zfc2hpZnQ7CiYjNDM7CiAJZXJyID0gbmV0aWZfbXBfb3Blbl9yeHEoZGV2LCByeHFfaWR4LCAmYW1wO21wX3BhcmFtcywgZXh0YWNrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTg0LDEwICYjNDM7MTg5LDEyIEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICoKIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsCiAJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsCiYjNDM7CQkgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LAogCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nOwomIzQzOwlzaXplX3Qgbmlvdl9zaXplID0gMVVMICZsdDsmbHQ7IG5pb3Zfc2hpZnQ7CiAJc3RhdGljIHUzMiBpZF9hbGxvY19uZXh0OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCiAJYmluZGluZy0mZ3Q7ZGV2ID0gZGV2OwogCWJpbmRpbmctJmd0O3ZkZXYgPSB2ZGV2OwomIzQzOwliaW5kaW5nLSZndDtuaW92X3NoaWZ0ID0gbmlvdl9zaGlmdDsKIAl4YV9pbml0X2ZsYWdzKCZhbXA7YmluZGluZy0mZ3Q7Ym91bmRfcnhxcywgWEFfRkxBR1NfQUxMT0MpOwogCiAJZXJyID0gcGVyY3B1X3JlZl9pbml0KCZhbXA7YmluZGluZy0mZ3Q7cmVmLApAQCAtMjQ4LDE4ICYjNDM7MjU2LDE0IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJCWdvdG8gZXJyX3VubWFwOwogCQl9CiAJCWJpbmRpbmctJmd0O3R4X3ZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldF9pb3YgKiwKLQkJCQkJCWRtYWJ1Zi0mZ3Q7c2l6ZSAvIFBBR0VfU0laRSk7CiYjNDM7CQkJCQkJZG1hYnVmLSZndDtzaXplICZndDsmZ3Q7IG5pb3Zfc2hpZnQpOwogCQlpZiAoIWJpbmRpbmctJmd0O3R4X3ZlYykgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyX3VubWFwOwogCQl9CiAJfQogCi0JLyogRm9yIHNpbXBsaWNpdHkgd2UgZXhwZWN0IHRvIG1ha2UgUEFHRV9TSVpFIGFsbG9jYXRpb25zLCBidXQgdGhlCi0JICogYmluZGluZyBjYW4gYmUgbXVjaCBtb3JlIGZsZXhpYmxlIHRoYW4gdGhhdC4gV2UgbWF5IGJlIGFibGUgdG8KLQkgKiBhbGxvY2F0ZSBNVFUgc2l6ZWQgY2h1bmtzIGhlcmUuIExlYXZlIHRoYXQgZm9yIGZ1dHVyZSB3b3JrLi4uCi0JICovCi0JYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZULAomIzQzOwliaW5kaW5nLSZndDtjaHVua19wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKG5pb3Zfc2hpZnQsCiAJCQkJCSAgICAgIGRldl90b19ub2RlKCZhbXA7ZGV2LSZndDtkZXYpKTsKIAlpZiAoIWJpbmRpbmctJmd0O2NodW5rX3Bvb2wpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTI3Myw5ICYjNDM7Mjc3LDEyIEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJc2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCQlzdHJ1Y3QgbmV0X2lvdiAqbmlvdjsKIAotCQlpZiAoIUlTX0FMSUdORUQobGVuLCBQQUdFX1NJWkUpKSB7CiYjNDM7CQlpZiAoIUlTX0FMSUdORUQoZG1hX2FkZHIsIG5pb3Zfc2l6ZSkgfHwKJiM0MzsJCSAgICAhSVNfQUxJR05FRChsZW4sIG5pb3Zfc2l6ZSkpIHsKIAkJCWVyciA9IC1FSU5WQUw7Ci0JCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7ZG1hLWJ1ZiBTRyBsZW5ndGggbXVzdCBiZSBQQUdFX1NJWkUgYWxpZ25lZCYjMzQ7KTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtkbWFidWYgc2cgZW50cnkgKGFkZHI9JXBhZCwgbGVuPSV6dSkgbm90IGFsaWduZWQgdG8gbmlvdiBzaXplICV6dSYjMzQ7LAomIzQzOwkJCQkJICAgJmFtcDtkbWFfYWRkciwgbGVuLCBuaW92X3NpemUpOwogCQkJZ290byBlcnJfZnJlZV9jaHVua3M7CiAJCX0KIApAQCAtMjg4LDcgJiM0MzsyOTUsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsCiAKIAkJb3duZXItJmd0O2FyZWEuYmFzZV92aXJ0dWFsID0gdmlydHVhbDsKIAkJb3duZXItJmd0O2Jhc2VfZG1hX2FkZHIgPSBkbWFfYWRkcjsKLQkJb3duZXItJmd0O2FyZWEubnVtX25pb3ZzID0gbGVuIC8gUEFHRV9TSVpFOwomIzQzOwkJb3duZXItJmd0O2FyZWEubnVtX25pb3ZzID0gbGVuICZndDsmZ3Q7IG5pb3Zfc2hpZnQ7CiAJCW93bmVyLSZndDtiaW5kaW5nID0gYmluZGluZzsKIAogCQllcnIgPSBnZW5fcG9vbF9hZGRfb3duZXIoYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCwgZG1hX2FkZHIsCkBAIC0zMTMsNyAmIzQzOzMyMCw3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJCXBhZ2VfcG9vbF9zZXRfZG1hX2FkZHJfbmV0bWVtKG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpLAogCQkJCQkJICAgICAgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdikpOwogCQkJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQkJCWJpbmRpbmctJmd0O3R4X3ZlY1tvd25lci0mZ3Q7YXJlYS5iYXNlX3ZpcnR1YWwgLyBQQUdFX1NJWkUgJiM0MzsgaV0gPSBuaW92OwomIzQzOwkJCQliaW5kaW5nLSZndDt0eF92ZWNbKG93bmVyLSZndDthcmVhLmJhc2VfdmlydHVhbCAmZ3Q7Jmd0OyBuaW92X3NoaWZ0KSAmIzQzOyBpXSA9IG5pb3Y7CiAJCX0KIAogCQl2aXJ0dWFsICYjNDM7PSBsZW47CkBAIC00MzAsMTMgJiM0Mzs0MzcsMTUgQEAgc3RydWN0IG5ldF9pb3YgKgogbmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZywKIAkJICAgICAgIHNpemVfdCB2aXJ0X2FkZHIsIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpCiB7CiYjNDM7CXNpemVfdCBuaW92X3NpemUgPSAxVUwgJmx0OyZsdDsgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdDsKJiM0MzsKIAlpZiAodmlydF9hZGRyICZndDs9IGJpbmRpbmctJmd0O2RtYWJ1Zi0mZ3Q7c2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkqb2ZmID0gdmlydF9hZGRyICUgUEFHRV9TSVpFOwotCSpzaXplID0gUEFHRV9TSVpFIC0gKm9mZjsKJiM0MzsJKm9mZiA9IHZpcnRfYWRkciAmYW1wOyAobmlvdl9zaXplIC0gMSk7CiYjNDM7CSpzaXplID0gbmlvdl9zaXplIC0gKm9mZjsKIAotCXJldHVybiBiaW5kaW5nLSZndDt0eF92ZWNbdmlydF9hZGRyIC8gUEFHRV9TSVpFXTsKJiM0MzsJcmV0dXJuIGJpbmRpbmctJmd0O3R4X3ZlY1t2aXJ0X2FkZHIgJmd0OyZndDsgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdF07CiB9CiAKIC8qKiogJiMzNDtEbWFidWYgZGV2bWVtIG1lbW9yeSBwcm92aWRlciYjMzQ7ICoqKi8KQEAgLTQ1NCw3ICYjNDM7NDYzLDcgQEAgaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKQogCXBvb2wtJmd0O2RtYV9zeW5jID0gZmFsc2U7CiAJcG9vbC0mZ3Q7ZG1hX3N5bmNfZm9yX2NwdSA9IGZhbHNlOwogCi0JaWYgKHBvb2wtJmd0O3Aub3JkZXIgIT0gMCkKJiM0MzsJaWYgKHBvb2wtJmd0O3Aub3JkZXIgIT0gYmluZGluZy0mZ3Q7bmlvdl9zaGlmdCAtIFBBR0VfU0hJRlQpCiAJCXJldHVybiAtRTJCSUc7CiAKIAluZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX2dldChiaW5kaW5nKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5oIGIvbmV0L2NvcmUvZGV2bWVtLmgKaW5kZXggMzg1MmE1NjAzNmNiNDAuLjRhMjkzYTdkMTE0OWM4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uaApAQCAtNzEsNiAmIzQzOzcxLDggQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgewogCSAqLwogCXN0cnVjdCBuZXRfaW92ICoqdHhfdmVjOwogCiYjNDM7CXVuc2lnbmVkIGludCBuaW92X3NoaWZ0OwomIzQzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdzsKIH07CiAKQEAgLTkzLDcgJiM0Mzs5NSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICoKIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsCiAJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsCiYjNDM7CQkgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LAogCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKTsKIHZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTsKQEAgLTEyMiwxMCAmIzQzOzEyNSwxMSBAQCBzdGF0aWMgaW5saW5lIHUzMiBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpCiB7Ci0Jc3RydWN0IG5ldF9pb3ZfYXJlYSAqb3duZXIgPSBuZXRfaW92X293bmVyKG5pb3YpOwomIzQzOwlzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID0KJiM0MzsJCW5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpOwogCi0JcmV0dXJuIG93bmVyLSZndDtiYXNlX3ZpcnR1YWwgJiM0MzsKLQkgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwlyZXR1cm4gbmV0X2lvdl9vd25lcihuaW92KS0mZ3Q7YmFzZV92aXJ0dWFsICYjNDM7CiYjNDM7CSAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgJmx0OyZsdDsgY28tJmd0O2JpbmRpbmctJmd0O25pb3Zfc2hpZnQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wKQEAgLTE3NSw2ICYjNDM7MTc5LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCQkgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldiwKIAkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsCiAJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsCiAJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jCmluZGV4IGQxOGM4OWI1YTZjNzU5Li5mODM3OTAzNDFlYWU2OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGRldi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogCiAvKiBJbnRlZ2VyIHZhbHVlIHJhbmdlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfcGFnZV9wb29sX2lkX3JhbmdlID0gewpAQCAtMjcsNiAmIzQzOzI4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX25hcGlfZGVmZXJfaGFyZF9pcnFzX3JhbmdlCiAJLm1heAk9IFMzMl9NQVgsCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfZG1hYnVmX3J4X3BhZ2Vfc2l6ZV9yYW5nZSA9IHsKJiM0MzsJLm1pbgk9IFBBR0VfU0laRSwKJiM0MzsJLm1heAk9IFUzMl9NQVgsCiYjNDM7fTsKJiM0MzsKIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi8KIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9sZWFzZV9ubF9wb2xpY3lbTkVUREVWX0FfTEVBU0VfTkVUTlNfSUQgJiM0MzsgMV0gPSB7CiAJW05FVERFVl9BX0xFQVNFX0lGSU5ERVhdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksCkBAIC0xMDYsMTAgJiM0MzsxMTIsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9xc3RhdHNfZ2V0X25sX3BvbGljeVtORVRERVZfQV9RU1RBVFNfU0NPUEUKIH07CiAKIC8qIE5FVERFVl9DTURfQklORF9SWCAtIGRvICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5W05FVERFVl9BX0RNQUJVRl9GRCAmIzQzOyAxXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5W05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUgJiM0MzsgMV0gPSB7CiAJW05FVERFVl9BX0RNQUJVRl9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLAogCVtORVRERVZfQV9ETUFCVUZfRkRdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sCiAJW05FVERFVl9BX0RNQUJVRl9RVUVVRVNdID0gTkxBX1BPTElDWV9ORVNURUQobmV0ZGV2X3F1ZXVlX2lkX25sX3BvbGljeSksCiYjNDM7CVtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCAmYW1wO25ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UpLAogfTsKIAogLyogTkVUREVWX0NNRF9OQVBJX1NFVCAtIGRvICovCkBAIC0yMTksNyAmIzQzOzIyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0gewogCQkuY21kCQk9IE5FVERFVl9DTURfQklORF9SWCwKIAkJLmRvaXQJCT0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCwKIAkJLnBvbGljeQkJPSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3ksCi0JCS5tYXhhdHRyCT0gTkVUREVWX0FfRE1BQlVGX0ZELAomIzQzOwkJLm1heGF0dHIJPSBORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLAogCQkuZmxhZ3MJCT0gR0VOTF9VTlNfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETywKIAl9LAogCXsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgKaW5kZXggZDcxYjQzNWQ3MmMxOGYuLjNmYWU4OGU4ZjVjNTBlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKIAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbmV0ZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9uZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAKIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfbGVhc2VfbmxfcG9saWN5W05FVERFVl9BX0xFQVNFX05FVE5TX0lEICYjNDM7IDFdOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKaW5kZXggYzE1ZDhkNGNhMWY4ZmEuLjBlZWE0ZWUyMmYyNDY3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKQEAgLTEwMTMsNiAmIzQzOzEwMTMsNyBAQCBuZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCwKIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7CiYjNDM7CXVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDsKIAl1MzIgaWZpbmRleCwgZG1hYnVmX2ZkLCByeHFfaWR4OwogCXN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwpAQCAtMTAzMCw2ICYjNDM7MTAzMSwxOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmaW5kZXggPSBubGFfZ2V0X3UzMihpbmZvLSZndDthdHRyc1tORVRERVZfQV9ERVZfSUZJTkRFWF0pOwogCWRtYWJ1Zl9mZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW05FVERFVl9BX0RNQUJVRl9GRF0pOwogCiYjNDM7CWlmIChpbmZvLSZndDthdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSkgewomIzQzOwkJdTMyIHJ4X3BhZ2Vfc2l6ZSA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdKTsKJiM0MzsKJiM0MzsJCWlmICghaXNfcG93ZXJfb2ZfMihyeF9wYWdlX3NpemUpKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLSZndDtleHRhY2ssCiYjNDM7CQkJCQkgICAgaW5mby0mZ3Q7YXR0cnNbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0sCiYjNDM7CQkJCQkgICAgJiMzNDtyeC1wYWdlLXNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDImIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQluaW92X3NoaWZ0ID0gaWxvZzIocnhfcGFnZV9zaXplKTsKJiM0MzsJfQomIzQzOwogCXByaXYgPSBnZW5sX3NrX3ByaXZfZ2V0KCZhbXA7bmV0ZGV2X25sX2ZhbWlseSwgTkVUTElOS19DQihza2IpLnNrKTsKIAlpZiAoSVNfRVJSKHByaXYpKQogCQlyZXR1cm4gUFRSX0VSUihwcml2KTsKQEAgLTEwODAsNyAmIzQzOzEwOTMsOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCX0KIAogCWJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLAotCQkJCQkgZG1hYnVmX2ZkLCBwcml2LCBpbmZvLSZndDtleHRhY2spOwomIzQzOwkJCQkJIGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdiwKJiM0MzsJCQkJCSBpbmZvLSZndDtleHRhY2spOwogCWlmIChJU19FUlIoYmluZGluZykpIHsKIAkJZXJyID0gUFRSX0VSUihiaW5kaW5nKTsKIAkJZ290byBlcnJfcnhxX2JpdG1hcDsKQEAgLTEyMjEsNyAmIzQzOzEyMzUsNyBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LAogCQkJCQkgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCwKIAkJCQkJIGRtYV9kZXYsIERNQV9UT19ERVZJQ0UsIGRtYWJ1Zl9mZCwKLQkJCQkJIHByaXYsIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CQkJCQkgUEFHRV9TSElGVCwgcHJpdiwgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoSVNfRVJSKGJpbmRpbmcpKSB7CiAJCWVyciA9IFBUUl9FUlIoYmluZGluZyk7CiAJCWdvdG8gZXJyX3VubG9ja19iaW5kX2RldjsKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaAppbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmgKQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgZW51bSB7CiAJTkVUREVWX0FfRE1BQlVGX1FVRVVFUywKIAlORVRERVZfQV9ETUFCVUZfRkQsCiAJTkVUREVWX0FfRE1BQlVGX0lELAomIzQzOwlORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLAogCiAJX19ORVRERVZfQV9ETUFCVUZfTUFYLAogCU5FVERFVl9BX0RNQUJVRl9NQVggPSAoX19ORVRERVZfQV9ETUFCVUZfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weQppbmRleCAwMzFjZjk5MDVmNjUxYy4uODJjMTFmZmM0YWRkN2IgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHkKQEAgLTIsNyAmIzQzOzIsOCBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiBmcm9tIG9zIGltcG9ydCBwYXRoCi1mcm9tIGRldm1lbV9saWIgaW1wb3J0IHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzCiYjNDM7ZnJvbSBkZXZtZW1fbGliIGltcG9ydCAoc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3J4X2xhcmdlX25pb3YpCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlCiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYKIApAQCAtMzAsMTEgJiM0MzszMSwxNyBAQCBkZWYgY2hlY2tfcnhfaGRzKGNmZykgLSZndDsgTm9uZToKICAgICBydW5fcnhfaGRzKGNmZykKIAogCiYjNDM7ZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggcngtcGFnZS1zaXplID0gMTYgS2lCLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBydW5fcnhfbGFyZ2VfbmlvdihjZmcpCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIHRoZSBkZXZtZW0gdGVzdCBjYXNlcy4mIzM0OyYjMzQ7JiMzNDsKICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6CiAgICAgICAgIHNldHVwX3Rlc3QoY2ZnLCBwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSAmIzQzOyAmIzM0Oy9uY2Rldm1lbSYjMzQ7KSkKLSAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHNdLAomIzQzOyAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHMsCiYjNDM7ICAgICAgICAgICAgICAgICAgY2hlY2tfcnhfbGFyZ2Vfbmlvdl0sCiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKQogICAgIGtzZnRfZXhpdCgpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5CmluZGV4IDA5MjFmZjAzZWI4MWM1Li42YzkzMjAxOGI0NjNhMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtX2xpYi5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5CkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUsdG9vLW1hbnktYXJndW1lbnRzCiAmIzM0OyYjMzQ7JiMzNDtTaGFyZWQgaGVscGVycyBmb3IgZGV2bWVtIFRDUCBzZWxmdGVzdHMuJiMzNDsmIzM0OyYjMzQ7CiAKIGltcG9ydCByZQpAQCAtOCw3ICYjNDM7OSw3IEBAIGZyb20gbGliLnB5IGltcG9ydCAoYmtnLCBjbWQsIGRlZmVyLCBldGh0b29sLCByYW5kX3BvcnQsIHdhaXRfcG9ydF9saXN0ZW4sCiAgICAgICAgICAgICAgICAgICAgIE5ldGRldkZhbWlseSkKIAogCi1kZWYgcmVxdWlyZV9kZXZtZW0oY2ZnKToKJiM0MztkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UHJvYmUgbmNkZXZtZW0gb24gY2ZnLmlmbmFtZSBhbmQgU0tJUCB0aGUgdGVzdCBpZiBkZXZtZW0gaXNuJiMzOTt0IHN1cHBvcnRlZC4mIzM0OyYjMzQ7JiMzNDsKICAgICBpZiBub3QgaGFzYXR0cihjZmcsICYjMzQ7ZGV2bWVtX3Byb2JlZCYjMzQ7KToKICAgICAgICAgcHJvYmVfY29tbWFuZCA9IGYmIzM0O3tjZmcuYmluX2xvY2FsfSAtZiB7Y2ZnLmlmbmFtZX0mIzM0OwpAQCAtMTgsNiAmIzQzOzE5LDE5IEBAIGRlZiByZXF1aXJlX2Rldm1lbShjZmcpOgogICAgIGlmIG5vdCBjZmcuZGV2bWVtX3N1cHBvcnRlZDoKICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O1Rlc3QgcmVxdWlyZXMgZGV2bWVtIHN1cHBvcnQmIzM0OykKIAomIzQzOyAgICBpZiByeF9wYWdlX3NpemUgJmd0OyAwOgomIzQzOyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCAmIzM0O2Rldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkJiMzNDspOgomIzQzOyAgICAgICAgICAgIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZCA9IHt9CiYjNDM7CiYjNDM7ICAgICAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZDoKJiM0MzsgICAgICAgICAgICBwcm9iZV9jb21tYW5kID0gZiYjMzQ7e2NmZy5iaW5fbG9jYWx9IC1mIHtjZmcuaWZuYW1lfSAtYiB7cnhfcGFnZV9zaXplfSYjMzQ7CiYjNDM7ICAgICAgICAgICAgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkW3J4X3BhZ2Vfc2l6ZV0gPSBcCiYjNDM7ICAgICAgICAgICAgICAgIGNtZChwcm9iZV9jb21tYW5kLCBmYWlsPUZhbHNlLCBzaGVsbD1UcnVlKS5yZXQgPT0gMAomIzQzOwomIzQzOyAgICAgICAgaWYgbm90IGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZFtyeF9wYWdlX3NpemVdOgomIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoCiYjNDM7ICAgICAgICAgICAgICAgIGYmIzM0O1Rlc3QgcmVxdWlyZXMgZGV2bWVtIHJ4LXBhZ2Utc2l6ZT17cnhfcGFnZV9zaXplfSBzdXBwb3J0JiMzNDspCiYjNDM7CiAKIGRlZiBjb25maWd1cmVfbmljKGNmZyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7Q2hhbm5lbHMsIHJpbmdzLCBSU1MsIHF1ZXVlIGxlYXNlIGZvciBuZXRraXQgZGV2bWVtLiYjMzQ7JiMzNDsmIzM0OwpAQCAtNzYsNyAmIzQzOzkwLDggQEAgZGVmIHNldF9mbG93X3J1bGUoY2ZnLCBwb3J0KToKICAgICByZXR1cm4gaW50KHJlLnNlYXJjaChyJiMzOTtJRCAoXGQmIzQzOykmIzM5Oywgb3V0cHV0KS5ncm91cCgxKSkKIAogCi1kZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOgomIzQzO2RlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSwKJiM0MzsgICAgICAgICAgICAgICAgcnhfcGFnZV9zaXplPTApOgogICAgICYjMzQ7JiMzNDsmIzM0O0J1aWxkIHRoZSBuY2Rldm1lbSBSWCBsaXN0ZW5lciBjb21tYW5kLiYjMzQ7JiMzNDsmIzM0OwogICAgIGlmIGhhc2F0dHIoY2ZnLCAmIzM5O25ldG5zJiMzOTspOgogICAgICAgICBmbG93X3J1bGVfaWQgPSBzZXRfZmxvd19ydWxlKGNmZywgcG9ydCkKQEAgLTk2LDYgJiM0MzsxMTEsOCBAQCBkZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOgogICAgICAgICBleHRyYXMuYXBwZW5kKCYjMzQ7LXYgNyYjMzQ7KQogICAgIGlmIGZhaWxfb25fbGluZWFyOgogICAgICAgICBleHRyYXMuYXBwZW5kKCYjMzQ7LUwmIzM0OykKJiM0MzsgICAgaWYgcnhfcGFnZV9zaXplICZndDsgMDoKJiM0MzsgICAgICAgIGV4dHJhcy5hcHBlbmQoZiYjMzQ7LWIge3J4X3BhZ2Vfc2l6ZX0mIzM0OykKIAogICAgIHBhcnRzID0gW2NmZy5iaW5fbG9jYWwsICYjMzQ7LWwmIzM0OywgZiYjMzQ7LWYge2lmbmFtZX0mIzM0OywgZiYjMzQ7LXMge2FkZHJ9JiMzNDssCiAgICAgICAgICAgICAgZiYjMzQ7LXAge3BvcnR9JiMzNDssICpleHRyYXNdCkBAIC0yMDIsNiAmIzQzOzIxOSw0NCBAQCBkZWYgcnVuX3R4X2NodW5rcyhjZmcpOgogICAgIGtzZnRfZXEoc29jYXQuc3Rkb3V0LnN0cmlwKCksICYjMzQ7aGVsbG9cbndvcmxkJiMzNDspCiAKIAomIzQzO2RlZiBfcmVzdG9yZV9ucl9odWdlcGFnZXMoaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKToKJiM0MzsgICAgd2l0aCBvcGVuKGhwX2ZpbGUsICYjMzk7dyYjMzk7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIGY6CiYjNDM7ICAgICAgICBmLndyaXRlKHN0cihucl9odWdlcGFnZXMpKQomIzQzOwomIzQzOwomIzQzO2RlZiBydW5fcnhfbGFyZ2VfbmlvdihjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggYSBsYXJnZSBuaW92IChyeC1wYWdlLXNpemUgJmd0OyBQQUdFX1NJWkUpLgomIzQzOwomIzQzOyAgICBTd2VlcCBwYXlsb2FkIHNpemVzIHRoYXQgc3RyYWRkbGUgdGhlIG5pb3YgYm91bmRhcnk6IGJlbG93LCBlcXVhbCB0bywKJiM0MzsgICAgYW5kIGFib3ZlIHJ4X3BhZ2Vfc2l6ZSwgdG8gZXhlcmNpc2Ugc3ViLW5pb3YsIGV4YWN0LW5pb3YsIGFuZCBtdWx0aS1uaW92CiYjNDM7ICAgIFJYIHBhdGhzLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgaHBfZmlsZSA9ICYjMzQ7L3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcyYjMzQ7CiYjNDM7ICAgIHdpdGggb3BlbihocF9maWxlLCAmIzM5O3ImIzQzOyYjMzk7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIGY6CiYjNDM7ICAgICAgICBucl9odWdlcGFnZXMgPSBpbnQoZi5yZWFkKCkuc3RyaXAoKSkKJiM0MzsgICAgICAgIGlmIG5yX2h1Z2VwYWdlcyAmbHQ7IDY0OgomIzQzOyAgICAgICAgICAgIGYuc2VlaygwKQomIzQzOyAgICAgICAgICAgIGYud3JpdGUoJiMzNDs2NCYjMzQ7KQomIzQzOyAgICAgICAgICAgIGRlZmVyKF9yZXN0b3JlX25yX2h1Z2VwYWdlcywgaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKQomIzQzOyAgICByZXF1aXJlX2Rldm1lbShjZmcsIHJ4X3BhZ2Vfc2l6ZT0xNjM4NCkKJiM0MzsgICAgY29uZmlndXJlX25pYyhjZmcpCiYjNDM7ICAgIG5ldG5zID0gZ2V0YXR0cihjZmcsICYjMzQ7bmV0bnMmIzM0OywgTm9uZSkKJiM0MzsKJiM0MzsgICAgZm9yIHNpemUgaW4gWzEwMjQsIDQwOTYsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzZdOgomIzQzOyAgICAgICAgcG9ydCA9IHJhbmRfcG9ydCgpCiYjNDM7ICAgICAgICBzb2NhdCA9IHNvY2F0X3NlbmQoY2ZnLCBwb3J0KQomIzQzOyAgICAgICAgbGlzdGVuX2NtZCA9IG5jZGV2bWVtX3J4KGNmZywgcG9ydCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93X3N0ZWVyPW5vdCBuZXRucywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9wYWdlX3NpemU9MTYzODQpCiYjNDM7ICAgICAgICBkYXRhX3BpcGUgPSAoZiYjMzQ7eWVzICQoZWNobyAtZSBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDYpIHwgJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgICBmJiMzNDtoZWFkIC1jIHtzaXplfSB8IHtzb2NhdH0mIzM0OykKJiM0MzsgICAgICAgIHdpdGggYmtnKGxpc3Rlbl9jbWQsIGV4aXRfd2FpdD1UcnVlLCBucz1uZXRucykgYXMgbmNkZXZtZW06CiYjNDM7ICAgICAgICAgICAgd2FpdF9wb3J0X2xpc3Rlbihwb3J0LCBwcm90bz0mIzM0O3RjcCYjMzQ7LCBucz1uZXRucykKJiM0MzsgICAgICAgICAgICBjbWQoZGF0YV9waXBlLCBob3N0PWNmZy5yZW1vdGUsIHNoZWxsPVRydWUpCiYjNDM7ICAgICAgICBrc2Z0X2VxKG5jZGV2bWVtLnJldCwgMCwKJiM0MzsgICAgICAgICAgICAgICAgZiYjMzQ7bGFyZ2UtbmlvdiBmYWlsZWQgZm9yIHBheWxvYWQgc2l6ZSB7c2l6ZX0mIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBydW5fcnhfaGRzKGNmZyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIHRoZSBIRFMgdGVzdCBieSBydW5uaW5nIGRldm1lbSBSWCBhY3Jvc3MgYSBzZWdtZW50IHNpemUgc3dlZXAuJiMzNDsmIzM0OyYjMzQ7CiAgICAgcmVxdWlyZV9kZXZtZW0oY2ZnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMKaW5kZXggZDk2ZThhM2I1YTY1MjYuLmZmZThlYjA1ZmFjMGQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMKQEAgLTQwLDYgJiM0Mzs0MCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC91aW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKQEAgLTYxLDYgJiM0Mzs2Miw3IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9wYXJhbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkbWFidWYuaCZndDsKQEAgLTc5LDYgJiM0Mzs4MSw3IEBACiAjZGVmaW5lIFBBR0VfU0hJRlQgMTIKICNkZWZpbmUgVEVTVF9QUkVGSVggJiMzNDtuY2Rldm1lbSYjMzQ7CiAjZGVmaW5lIE5VTV9QQUdFUyAxNjAwMAomIzQzOyNkZWZpbmUgTUIoeCkgKCh4KSAmbHQ7Jmx0OyAyMCkKIAogI2lmbmRlZiBNU0dfU09DS19ERVZNRU0KICNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMApAQCAtMTAwLDYgJiM0MzsxMDMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZDsKIHN0YXRpYyB1aW50MzJfdCB0eF9kbWFidWZfaWQ7CiBzdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwOwogc3RhdGljIGJvb2wgZmFpbF9vbl9saW5lYXI7CiYjNDM7c3RhdGljIHVpbnQzMl90IHJ4X3BhZ2Vfc2l6ZTsKIAogLyogU3lzdGVtIHN0YXRlIGxvYWRlZCBieSBjdXJyZW50X2NvbmZpZ19sb2FkKCkgKi8KICNkZWZpbmUgTUFYX0ZMT1dTCTgKQEAgLTE0Miw2ICYjNDM7MTQ2LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKQogewogCXN0cnVjdCB1ZG1hYnVmX2NyZWF0ZSBjcmVhdGU7CiAJc3RydWN0IG1lbW9yeV9idWZmZXIgKmN0eDsKJiM0MzsJdW5zaWduZWQgaW50IG1lbWZkX2ZsYWdzOwogCWludCByZXQ7CiAKIAljdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKQEAgLTE1Niw5ICYjNDM7MTYxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSkKIAkJZ290byBlcnJfZnJlZV9jdHg7CiAJfQogCi0JY3R4LSZndDttZW1mZCA9IG1lbWZkX2NyZWF0ZSgmIzM0O3VkbWFidWYtdGVzdCYjMzQ7LCBNRkRfQUxMT1dfU0VBTElORyk7CiYjNDM7CW1lbWZkX2ZsYWdzID0gTUZEX0FMTE9XX1NFQUxJTkc7CiYjNDM7CWlmIChyeF9wYWdlX3NpemUgJmd0OyBnZXRwYWdlc2l6ZSgpKQomIzQzOwkJbWVtZmRfZmxhZ3MgfD0gTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUI7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bWVtZmQgPSBtZW1mZF9jcmVhdGUoJiMzNDt1ZG1hYnVmLXRlc3QmIzM0OywgbWVtZmRfZmxhZ3MpOwogCWlmIChjdHgtJmd0O21lbWZkICZsdDsgMCkgewotCQlwcl9lcnIoJiMzNDtbc2tpcCxuby1tZW1mZF0mIzM0Oyk7CiYjNDM7CQlwcl9lcnIoJiMzNDtbc2tpcCxuby1tZW1mZCVzXSYjMzQ7LAomIzQzOwkJICAgICAgIChtZW1mZF9mbGFncyAmYW1wOyBNRkRfSFVHRVRMQikgPyAmIzM0OyAobmVlZCBodWdlcGFnZXMpJiMzNDsgOiAmIzM0OyYjMzQ7KTsKIAkJZ290byBlcnJfY2xvc2VfZGV2OwogCX0KIApAQCAtMTY4LDYgJiM0MzsxNzgsMTEgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKQogCQlnb3RvIGVycl9jbG9zZV9tZW1mZDsKIAl9CiAKJiM0MzsJaWYgKG1lbWZkX2ZsYWdzICZhbXA7IE1GRF9IVUdFVExCKSB7CiYjNDM7CQlzaXplID0gcm91bmR1cChzaXplLCBNQigyKSk7CiYjNDM7CQljdHgtJmd0O3NpemUgPSBzaXplOwomIzQzOwl9CiYjNDM7CiAJcmV0ID0gZnRydW5jYXRlKGN0eC0mZ3Q7bWVtZmQsIHNpemUpOwogCWlmIChyZXQgPT0gLTEpIHsKIAkJcHJfZXJyKCYjMzQ7W0ZBSUwsbWVtZmQtdHJ1bmNhdGVdJiMzNDspOwpAQCAtNjk5LDYgJiM0Mzs3MTQsOCBAQCBzdGF0aWMgaW50IGJpbmRfcnhfcXVldWUodW5zaWduZWQgaW50IGlmaW5kZXgsIHVuc2lnbmVkIGludCBkbWFidWZfZmQsCiAJbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9pZmluZGV4KHJlcSwgaWZpbmRleCk7CiAJbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9mZChyZXEsIGRtYWJ1Zl9mZCk7CiAJX19uZXRkZXZfYmluZF9yeF9yZXFfc2V0X3F1ZXVlcyhyZXEsIHF1ZXVlcywgbl9xdWV1ZV9pbmRleCk7CiYjNDM7CWlmIChyeF9wYWdlX3NpemUpCiYjNDM7CQluZXRkZXZfYmluZF9yeF9yZXFfc2V0X3J4X3BhZ2Vfc2l6ZShyZXEsIHJ4X3BhZ2Vfc2l6ZSk7CiAKIAlyc3AgPSBuZXRkZXZfYmluZF9yeCgqeXMsIHJlcSk7CiAJaWYgKCFyc3ApIHsKQEAgLTE0MTEsNyAmIzQzOzE0MjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludCBpc19zZXJ2ZXIgPSAwLCBvcHQ7CiAJaW50IHJldCwgZXJyID0gMTsKIAotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7TGxzOmM6cDp2OnE6dDpmOno6biYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtMbHM6YzpwOnY6cTp0OmY6ejpuYjomIzM0OykpICE9IC0xKSB7CiAJCXN3aXRjaCAob3B0KSB7CiAJCWNhc2UgJiMzOTtMJiMzOTs6CiAJCQlmYWlsX29uX2xpbmVhciA9IHRydWU7CkBAIC0xNDQ2LDYgJiM0MzsxNDYzLDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWNhc2UgJiMzOTtuJiMzOTs6CiAJCQlza2lwX2NvbmZpZyA9IDE7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtiJiMzOTs6IHsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsKJiM0MzsJCQllcnJubyA9IDA7CiYjNDM7CQkJdmFsID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICgodmFsID09IFVMT05HX01BWCAmYW1wOyZhbXA7IGVycm5vID09IEVSQU5HRSkgfHwKJiM0MzsJCQkgICAgdmFsICZndDsgVUlOVDMyX01BWCkgewomIzQzOwkJCQlwcl9lcnIoJiMzNDtpbnZhbGlkIHJ4X3BhZ2Vfc2l6ZTogJXMmIzM0Oywgb3B0YXJnKTsKJiM0MzsJCQkJcmV0dXJuIDE7CiYjNDM7CQkJfQomIzQzOwkJCXJ4X3BhZ2Vfc2l6ZSA9IHZhbDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJY2FzZSAmIzM5Oz8mIzM5OzoKIAkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3Vua25vd24gb3B0aW9uOiAlY1xuJiMzNDssIG9wdG9wdCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weQppbmRleCAzMDBlZDJhNzBhYjQ0ZC4uNjFjNmYzMWYwMWU1MWUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHkKQEAgLTMsNyAmIzQzOzMsOCBAQAogJiMzNDsmIzM0OyYjMzQ7VGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LiYjMzQ7JiMzNDsmIzM0OwogCiBpbXBvcnQgb3MKLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMKJiM0Mztmcm9tIGRldm1lbV9saWIgaW1wb3J0IChzZXR1cF90ZXN0LCBydW5fcngsIHJ1bl90eCwgcnVuX3R4X2NodW5rcywgcnVuX3J4X2hkcywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdikKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X2Rpc3J1cHRpdmUKIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZDb250RW52CiAKQEAgLTMxLDYgJiM0MzszMiwxMSBAQCBkZWYgY2hlY2tfbmtfcnhfaGRzKGNmZykgLSZndDsgTm9uZToKICAgICBydW5fcnhfaGRzKGNmZykKIAogCiYjNDM7ZGVmIGNoZWNrX25rX3J4X2xhcmdlX25pb3YoY2ZnKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIGRldm1lbSBSWCBsYXJnZS1uaW92IHRlc3QgdGhyb3VnaCBuZXRraXQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIG5ldGtpdCBkZXZtZW0gdGVzdCBjYXNlcy4mIzM0OyYjMzQ7JiMzNDsKICAgICB3aXRoIE5ldERydkNvbnRFbnYoX19maWxlX18sIHJ4cXVldWVzPTIsIHByaW1hcnlfcnhfcmVkaXJlY3Q9VHJ1ZSkgYXMgY2ZnOgpAQCAtMzgsNyAmIzQzOzQ0LDcgQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7bmNkZXZtZW0mIzM0OykpCiAgICAgICAgIGtzZnRfcnVuKFtjaGVja19ua19yeCwgY2hlY2tfbmtfdHgsIGNoZWNrX25rX3R4X2NodW5rcywKLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKQomIzQzOyAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkcywgY2hlY2tfbmtfcnhfbGFyZ2Vfbmlvdl0sIGFyZ3M9KGNmZywpKQogICAgIGtzZnRfZXhpdCgpCiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJYIFBhZ2UgU2l6ZSBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByeC1wYWdlLXNpemVgIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIG5ldGRldiBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgTkVUREVWX0NNRF9CSU5EX1JYYCBjb21tYW5kLiBUaGUgaWRlYSBpcyB0byBsZXQgdXMgY29uZmlndXJlIHRoZSBwYWdlIHNpemUgdGhhdCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSB1c2VzIHdoZW4gd3JpdGluZyBkYXRhIGludG8gdGhlIGJvdW5kIERNQSBidWZmZXIuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCBmZWF0dXJlLCBmb2N1c2VkIG9uIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgRE1BIGJ1ZmZlciBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1bmN0aW9uYWw/IExvb2tpbmcgZGVlcGVyLCBpdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBuZXR3b3JraW5nIGZpbGVzOiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBgbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY2AuIE9rYXksIHNvIGl0JiMzOTtzIG5vdCBzb21lIG9ic2N1cmUsIG5pY2hlIGRyaXZlcjsgdGhpcyBpcyB0b3VjaGluZyB0aGUgYWN0dWFsIGRldm1lbSBUQ1AgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgYSBzb2xpZCB2b3RlIG9mIGNvbmZpZGVuY2UuCgpOZXh0IHF1ZXN0aW9uOiBpcyB0aGlzIHRlc3RhYmxlIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UmIzM5O3JlIG9mdGVuIHN0dWNrIHdpdGggdGVzdGluZyB0aGVzZSBsb3dlci1sZXZlbCB0aGluZ3Mgb24gcmVhbCBoYXJkd2FyZSwgd2hpY2ggaXMgYSBwYWluLiBCdXQgaG9sZCBvbi4uLiBpdCBtZW50aW9ucyBgbmV0a2l0YCBhbmQgYHZldGhgIGRldmljZXMsIGFuZCB0aGVyZSBhcmUgc2VsZnRlc3RzIGxpa2UgYG5rX2Rldm1lbS5weWAgdGhhdCB1dGlsaXplIGBOZXREcnZDb250RW52YCAobmV0a2l0KS4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB3ZSAqY2FuKiB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBUaGUgc2VsZnRlc3QgaXRzZWxmIGxpdGVyYWxseSBzdGF0ZXMgJiMzNDtUZXN0IGRldm1lbSBUQ1Agd2l0aCBuZXRraXQsJiMzNDsgc28gdGhlIGFuc3dlciBpcyB5ZXMuIFZlcnkgZ29vZC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyB0aGVtc2VsdmVzLiBJbiBgbmV0L2NvcmUvZGV2bWVtLmNgLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHVzZSBvZiBgUEFHRV9TSElGVGAgdG8gYGJpbmRpbmctJmd0O25pb3Zfc2hpZnRgLiBPa2F5LCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ug4oCTIHJlcGxhY2luZyBhIGZpeGVkIHBhZ2Ugc2l6ZSB3aXRoIGEgY29uZmlndXJhYmxlIG9uZSwgYmFzZWQgb24gdGhlIGJpbmRpbmcuIFdlIG5lZWQgdG8gY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDoKCiogICBgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHJgCiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgCiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAKKiAgIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgCgpUaGF0IGxpc3QgY29uZmlybXMgdGhlIGNoYW5nZSBpcyBpbmZsdWVuY2luZyBjb3JlIGJ1ZmZlciBhbGxvY2F0aW9uLCBiaW5kaW5nLCBhbmQgbWFuYWdlbWVudC4KCkluIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNjb3BlZCB0byB0aGUgTmV0bGluayBjb21tYW5kIGhhbmRsZXJzOgoKKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YAoqICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgCgpPa2F5LCB0aGlzIGFsbCBsaW5lcyB1cDogd2UgaGF2ZSBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSB0aGF0IHdlIGZlZWQgaW50byB0aGUgYE5FVERFVl9DTURfQklORF9SWGAgY29tbWFuZCBoYW5kbGVyLCB3aGljaCB0aGVuIGFmZmVjdHMgdGhlIGBkZXZtZW1gIFRDUCByb3V0aW5lcyBhbmQgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIE92ZXJhbGwsIHRoZSBsb2dpYyBhcHBlYXJzIHNvdW5kLCBidXQgSSBuZWVkIHRvIGV4YW1pbmUgdGhlIG5ldyBhdHRyaWJ1dGUmIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB3b3JrIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTE0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIG5ldGRldl9ubF9vcHNbXSA9IHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjYtXHRcdC5jbWRcdFx0PSBORVRERVZfQ01EX0JJTkRfUlgsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyMjc6XHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTIyOC1cdFx0LnBvbGljeVx0XHQ9IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeSxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaD0zNj1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0zNy1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaDozODppbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oLTM5LWludCBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTk4OT1uZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTItXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwMTM6aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBOZXRsaW5rL0Rldm1lbSBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgZm91bmRhdGlvbmFsIHN0dWZmIOKAkyBjb3JlIG5ldGRldiBuZXRsaW5rIGNvZGUgYW5kIHRoZSBkZXZtZW0gcm91dGluZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIGFib3V0IHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBCZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJICpuZWVkKiB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gU28sIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgKmFic29sdXRlbHkqIG5lY2Vzc2FyeSBmb3IgdGhpcyBkZXZtZW0gaW50ZXJhY3Rpb24gdG8gZXZlbiBmdW5jdGlvbiBwcm9wZXJseT8mIzM0OyBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IGNvcnJlY3RseSBiZWZvcmUgSSB3YXN0ZSBteSB0aW1lIHRyeWluZyB0byBkZWJ1Zy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZXF1aXJlZCBzbyBJIGNhbiBwcm9jZWVkIHdpdGggYSBjbGVhbiBiaWxsIG9mIGhlYWx0aC4gV2hhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdD8gTWF5YmUgSSBzaG91bGQgdHJhY2sgZG93biBkb2N1bWVudGF0aW9uIGFib3V0IGRldm1lbSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVk1FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcbi0tXG5uZXQvS2NvbmZpZy02OC1cbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXG5uZXQvS2NvbmZpZy03MC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEZsYWcqKgoKT2theSwgc28gSSBzZWUgYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYSBgZGVmX2Jvb2wgeWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBxdWVzdGlvbiBpbiBteSBtaW5kLiBBIGBkZWZfYm9vbGAgc3VnZ2VzdHMgYSBkZWZhdWx0ICYjMzk7eWVzJiMzOTsgY29uZmlndXJhdGlvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIGBuZXQvS2NvbmZpZ2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQuIElzIGl0IHRpZWQgdG8gb3RoZXIgbmV0d29yayBmZWF0dXJlcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nIGF0IGZpcnN0IGdsYW5jZT8gSSB3YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgKndoeSogdGhpcyBkZWZhdWx0IGlzICYjMzk7eSYjMzk7IGFuZCB3aGF0IHBvdGVudGlhbCBpbXBhY3RzIGFyZSBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdGNvbmZpZyBORVRfUkVESVJFQ1RcbiAgNjE6XHRcdGJvb2xcbiAgNjI6XHRcbiAgNjM6XHRjb25maWcgU0tCX0RFQ1JZUFRFRFxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKkV4YW1pbmluZyBEZXBlbmRlbmNpZXMgaW4gYSBEZXZpY2UgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTkVUX0RFVk1FTWAgaGVyZSwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgcmVsYXRlZCB0byBuZXR3b3JrIGRldmljZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGl0cyBkZXBlbmRlbmN5IGNoYWluLiBJIGtub3cgYE5FVF9ERVZNRU1gIHJlbGllcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSB0aGVzZSBvbmUgYXQgYSB0aW1lLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgYFBBR0VfUE9PTGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkIGluIGEgbW9kZXJuIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBmaW5lLiBNeSBtYWluIGNvbmNlcm4gaXMgcmVhbGx5IGBETUFfU0hBUkVEX0JVRkZFUmAgc2luY2UgdGhhdCYjMzk7cyB0aGUgbW9yZSBzcGVjaWZpYyBkZXBlbmRlbmN5LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBhdHRlbnRpb24gdGhlcmUgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgdGhlIERNQSBTaGFyZWQgQnVmZmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRE1BLUJVRiBhcmUgZGVmaW5lZCwgaW5jbHVkaW5nIHRoZSBgRE1BX1NIQVJFRF9CVUZGRVJgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoYXQgb3B0aW9uIGNvbnRyb2xzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGdyb3VuZGluZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHJlbWVtYmVyIHNlZWluZyBgY29uZmlnIERNQV9TSEFSRURfQlVGRkVSYCBkZWZpbmVkIHNvbWV3aGVyZSwgYW5kIEkgdGhpbmsgaXQgd2FzIGluIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2AuIExldCBtZSBnbyBjaGVjayB0aGF0IGZpbGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZXhhY3RseSB0aGF0IG9wdGlvbiBpcyBjb250cm9sbGluZyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBHb3R0YSBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuIDIyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cbiAyMjE6XHRcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcbiAyMjI6XHRcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJiMzOTtzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXG4gMjIzOlx0XHQgIGRyaXZlci5cbiAyMjQ6XHRcbiAyMjU6XHRjb25maWcgRE1BX0ZFTkNFX1RSQUNFXG4gMjI2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1wmIzM0O1xuIDIyNzpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuIDIyODpcdFx0aGVscFxuIDIyOTpcdFx0ICBFbmFibGUgdGhlIERNQV9GRU5DRV9UUkFDRSBwcmludGtzLiBUaGlzIHdpbGwgYWRkIGV4dHJhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTYxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRE1BIFNoYXJlZCBCdWZmZXIgYW5kIERldm1lbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBjdXJyZW50bHkgYSBib29sZWFuLCBkZWZhdWx0aW5nIHRvICYjMzk7biYjMzk7LiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIHRoaXMuIFdhaXQgYSBzZWNvbmQsIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzIGludGVyZXN0aW5nLiBgTkVUX0RFVk1FTWAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAsIGJ1dCBpdCBkZXBlbmRzIG9uIGBETUFfU0hBUkVEX0JVRkZFUmAuIFNvLCBpZiB3ZSBlbmFibGUgYERNQV9TSEFSRURfQlVGRkVSYCwgYE5FVF9ERVZNRU1gIHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5LiBUaGF0IG1ha2VzIHRoaW5ncyBlYXNpZXIuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2UgbmVlZCB0byBjb25zaWRlci4gVGhlIHBhdGNoIGFmZmVjdHMgYG5ldC9jb3JlL2Rldm1lbS5jYCBhbmQgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBzbyB0aG9zZSBhcmUgdGhlIGFyZWFzIHRvIGZvY3VzIG9uLgoKVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmU6CgoqICAgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgCiogICBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYAoqICAgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYAoqICAgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAKCkxldCYjMzk7cyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LCBhbmQgd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4gYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGluIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCBhbmQgaXMgbm90IHN0YXRpYywgbWVhbmluZyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIG5vbi1zdGF0aWMuIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBub24tc3RhdGljLiBGaW5hbGx5LCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBuZXQvY29yZS9kZXZtZW0uY2AuIEdvb2QsIGFsbCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUuCgpMZXQgbWUganVzdCBsaXN0IHRob3NlIGZ1bmN0aW9ucyBvbmUgbW9yZSB0aW1lIHRvIGtlZXAgdGhlbSB0b3Agb2YgbWluZDoKCiogICBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAKKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgCiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYAoKTm93IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzIEkmIzM5O20gbWlzc2luZy4gUmlnaHQsIGBQQUdFX1BPT0xgIGlzIGEgZ29vZCBvbmUgdG8gcmVtZW1iZXI7IG5ldHdvcmtpbmcgZHJpdmVycyBjb21tb25seSBzZWxlY3QgdGhhdC4gTG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGFnYWluLCBgTkVUX0RFVk1FTWAgaXMgYGRlZl9ib29sIHlgIGFuZCBkZXBlbmRzIG9uICpib3RoKiBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gU28sIHdlICpzdGlsbCogbmVlZCBgRE1BX1NIQVJFRF9CVUZGRVJgLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgIGFnYWluIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fYWxsb2NfZG1hYnVmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTg3PXN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5jOjg4Om5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxubmV0L2NvcmUvZGV2bWVtLmMtODkte1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTQ3Mz1uZXRtZW1fcmVmIG1wX2RtYWJ1Zl9kZXZtZW1fYWxsb2NfbmV0bWVtcyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtNDc4LVxubmV0L2NvcmUvZGV2bWVtLmM6NDc5Olx0bmlvdiA9IG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKGJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmMtNDgwLVx0aWYgKCFuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE1MD1zdHJ1Y3QgbmV0X2lvdiAqXG5uZXQvY29yZS9kZXZtZW0uaDoxNTE6bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmgtMTUyLXZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIwOTpuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbm5ldC9jb3JlL2Rldm1lbS5oLTIxMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODI1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgRE1BIEJ1ZmZlciBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gTmV0d29yayBEZXZpY2UgTWVtb3J5KioKClJpZ2h0LCBzbyBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgIGlzIGRlZmluaXRpdmVseSBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93OyBpdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZnJlZWluZyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIHN0YXlzIHRpZHkgYW5kIHByZWRpY3RhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbG9jYXRpb25zIGFyZSBkZWFsbG9jYXRlZCBhdCBzb21lIHBvaW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBkb2luZyBpdHMgam9iIGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBzYW1lIGFjY2Vzc2liaWxpdHkgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fZnJlZV9kbWFidWYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9ODg9bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTEyLVxubmV0L2NvcmUvZGV2bWVtLmM6MTEzOnZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbm5ldC9jb3JlL2Rldm1lbS5jLTExNC17XG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9NDk5PWJvb2wgbXBfZG1hYnVmX2Rldm1lbV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0pXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtNTEwLVxubmV0L2NvcmUvZGV2bWVtLmM6NTExOlx0bmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihuZXRtZW1fdG9fbmV0X2lvdihuZXRtZW0pKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTUxMi1cbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTE9bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmg6MTUyOnZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xubmV0L2NvcmUvZGV2bWVtLmgtMTUzLVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIwOT1uZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC0yMTMtXG5uZXQvY29yZS9kZXZtZW0uaDoyMTQ6c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKnBwaW92KVxubmV0L2NvcmUvZGV2bWVtLmgtMjE1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqQW5hbHl6aW5nIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBhbmQgUG90ZW50aWFsIFF1ZXVlIEJpbmRpbmcqKgoKUmlnaHQsIHNvIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIHdhbnRlZCB0byBjb25maXJtLiBOb3cgdGhhdCB0aGF0JiMzOTtzIGNsZWFyZWQgdXAsIGl0JiMzOTtzIHRpbWUgdG8gc2hpZnQgZm9jdXMgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiByZWxhdGlvbiB0byBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAuIEdpdmVuIHRoYXQgSSBrbm93IHRoZSBmb3JtZXIgaXNuJiMzOTt0IHN0YXRpYywgaG93IG1pZ2h0IHRoYXQgZmFjdG9yIGludG8gdGhlIHF1ZXVlIGJpbmRpbmcgcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgY3Jvc3MtcmVmZXJlbmNlcyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0xNTUtXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTAyPXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwNC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xOTk9c3RhdGljIGlubGluZSBpbnRcbm5ldC9jb3JlL2Rldm1lbS5oOjIwMDpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVx0XHRcdFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVx0Zm9yX2VhY2hfc2V0X2JpdChyeHFfaWR4LCByeHFfYml0bWFwLCBuZXRkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XHRcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVx0XHRcdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMjEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludGVybmFsIFJldmlldyBvZiBETUEgQnVmZmVyIEJpbmRpbmcqKgoKUmlnaHQsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gVGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQsIGdpdmVuIGl0cyBsaWtlbHkgcm9sZSBpbiBleHRlcm5hbCBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHJlLXVzZS4gTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcXVldWUtc3BlY2lmaWMgZnVuY3Rpb24gdG8gZ2V0IGEgZnVsbCBncmFzcCBvZiB0aGUgYmluZGluZyBwcm9jZXNzIGFuZCBhbnkgcG9zc2libGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIFRoaXMgaXMgdGhlIGNvcmUgZmxvdywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGltcGxpY2F0aW9ucyBpcyBrZXkgZm9yIHRoaXMgbGV2ZWwgb2YgYW5hbHlzaXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cbm5ldC9jb3JlL2Rldm1lbS5jOjE1NjppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1Ny1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0xODg9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmM6MTg5Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5jLTE5MC1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9OTQ9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6OTU6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxubmV0L2NvcmUvZGV2bWVtLmgtOTYtXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTEwMj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG5uZXQvY29yZS9kZXZtZW0uaDoxMDM6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uaC0xMDQtXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTc4Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5oLTE3OS1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTk5PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQvY29yZS9kZXZtZW0uaDoyMDA6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5oLTIwMS1cdFx0XHRcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTAxMz1pbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5NC1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTA5NTpcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDk2LVx0XHRcdFx0XHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwMy1cdGZvcl9lYWNoX3NldF9iaXQocnhxX2lkeCwgcnhxX2JpdG1hcCwgbmV0ZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcykge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMTA0Olx0XHRlcnIgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKG5ldGRldiwgcnhxX2lkeCwgYmluZGluZyxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwNS1cdFx0XHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMTY5PWludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM0LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMjM1Olx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEyMzYtXHRcdFx0XHRcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ3NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGtub3dsZWRnZWFibGUgYWJvdXQgdGhlIHN1YmplY3Q6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG5ldF9kZXZtZW1gIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBTbywgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGlzIGNvbmZpcm1lZCAqbm90KiB0byBiZSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IG9wZW5zIHVwIGNlcnRhaW4gcG9zc2liaWxpdGllcyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGl0IG91dHNpZGUgb2YgaXRzIHR5cGljYWwgY29udGV4dC4gTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBzaGlmdCBteSBmb2N1cyBvdmVyIHRvIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28uIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBpcyBwcm92aWRpbmcgc29tZSBvZiB0aGUgZm91bmRhdGlvbmFsIGRhdGEgb3IgbWVjaGFuaXNtcyB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB1dGlsaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdHMgb3V0cHV0IGlzIHVzZWQuIFRoaXMgbWlnaHQgcmV2ZWFsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIG9yIG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdCBpbiB0aGUgYG5ldF9kZXZtZW1gIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9nZXRfbmlvdl9hdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03MjctXHRcdHZpcnRfYWRkciA9IChzaXplX3QpaXRlcl9pb3ZfYWRkcihmcm9tKTtcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzI4Olx0XHRuaW92ID0gbmV0X2Rldm1lbV9nZXRfbmlvdl9hdChiaW5kaW5nLCB2aXJ0X2FkZHIsIFx1MDAyNm9mZiwgXHUwMDI2c2l6ZSk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcyOS1cdFx0aWYgKCFuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTQzNj1zdHJ1Y3QgbmV0X2lvdiAqXG5uZXQvY29yZS9kZXZtZW0uYzo0Mzc6bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbm5ldC9jb3JlL2Rldm1lbS5jLTQzOC1cdFx0ICAgICAgIHNpemVfdCB2aXJ0X2FkZHIsIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTU3PXN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE1ODpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcbm5ldC9jb3JlL2Rldm1lbS5oLTE1OS1cdFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpO1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIzND1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIzNTpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcbm5ldC9jb3JlL2Rldm1lbS5oLTIzNi1cdFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjA5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6CgoqKkFuYWx5emluZyBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAgYW5kIFJlbGF0ZWQgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoYXQgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgbGV0JiMzOTtzIHBpdm90IHRvIGludmVzdGlnYXRpbmcgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgd29ya3MuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoaXMgYWxsIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIERNQUJVRiBpbXBsZW1lbnRhdGlvbiB0aWVzIGludG8gdGhlIG1lbW9yeSBkZXZpY2UgYW5kIG5ldCBpbnRlcmZhY2UsIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGZlYXR1cmUgbGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wX2RtYWJ1Zl9kZXZtZW1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz00Mzc9bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy00NTItXG5uZXQvY29yZS9kZXZtZW0uYzo0NTM6aW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxubmV0L2NvcmUvZGV2bWVtLmMtNDU0LXtcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz01NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzID0ge1xubmV0L2NvcmUvZGV2bWVtLmM6NTQ4Olx0LmluaXRcdFx0XHQ9IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdCxcbm5ldC9jb3JlL2Rldm1lbS5jLTU0OS1cdC5kZXN0cm95XHRcdD0gbXBfZG1hYnVmX2Rldm1lbV9kZXN0cm95LFxuLS1cbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xMy0jaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVk1FTSlcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoxNDppbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpO1xubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTE1LVxuLS1cbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaD0yMD1ib29sIG1wX2RtYWJ1Zl9kZXZtZW1fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIG5ldG1lbV9yZWYgbmV0bWVtKTtcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0yMS0jZWxzZVxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oOjIyOnN0YXRpYyBpbmxpbmUgaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGRtYWJ1ZiBEZXZtZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQmIzM5O3MgaW1wb3J0YW50LiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCB0ZWxscyBtZSB0aGUgbGlrZWx5IGZvY3VzIHN5bWJvbHMgYXJlIHRoZSBvbmVzIHRoYXQgdXNlIG9yIGNhbGwgaXQuIFNvLCB0aGF0IGxpc3Qgc2hvdWxkIGluY2x1ZGU6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLCBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAsIGFuZCwgb2YgY291cnNlLCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpdHNlbGYuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIFJpZ2h0LCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpcyBjYWxsZWQgYnkgYHBhZ2VfcG9vbF9pbml0YCB3aGVuIHdlJiMzOTtyZSB1c2luZyBkbWFidWYgYXMgdGhlIG1lbW9yeSBwcm92aWRlci4gT2theSwgdGhhdCYjMzk7cyBjcnVjaWFsIGNvbnRleHQuIEFuZCBJIHNlZSB0aGF0IGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBpc24mIzM5O3QgZnVuZGFtZW50YWxseSBhbHRlcmVkOyBpdCBqdXN0IGluY29ycG9yYXRlcyBgUEFHRV9TSElGVGAgbm93LCBidXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgZmVhdHVyZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgdG8gcGFyc2UgdGhpcyBgTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRWAgYXR0cmlidXRlLgoKTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9ucz8gV2hhdCYjMzk7cyAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIHdvcms/IEkga25vdyBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGZvciBgTkVUX0RFVk1FTWAuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3PigKYgUmlnaHQsIGBORVRfREVWTUVNYCBpcyBhICYjMzQ7ZGVmX2Jvb2wgeSYjMzQ7IGRlcGVuZGVudCBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgICphbmQqIGBQQUdFX1BPT0xgLiBBbmQgYFBBR0VfUE9PTGAgaXMgYSAmIzM0O2Jvb2wmIzM0OyBvcHRpb24sIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycy4gQ2FuIEkgZW5hYmxlIGBQQUdFX1BPT0xgIGRpcmVjdGx5PyBObywgc2VlbXMgbGlrZSBpdCYjMzk7cyBzZWxlY3RlZC4gSSBjYW4gbGlzdCBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLCBidXQgYERNQV9TSEFSRURfQlVGRkVSYCBzaG91bGQgYmUgc3VmZmljaWVudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IG9uIGBuZXQvS2NvbmZpZ2AgZm9yIGBQQUdFX1BPT0xgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBPcHRpb25zIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgUEFHRV9QT09MYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiB3aXRob3V0IGEgcHJvbXB0LiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgZml4ZWQgc2VsZWN0aW9uLCBsaWtlbHkgY29udHJvbGxlZCBieSB0aGUgZHJpdmVyIGl0c2VsZiwgYW5kIGNhbiYjMzk7dCBiZSBzZXQgZGlyZWN0bHkgaW4gdGhlIGNvbmZpZyBtZW51LiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgbGlzdGVkIGluIGBFbmFibGVDb25maWdzYC4gUHJvYmFibHkgbm90LCBzaW5jZSBpdCYjMzk7cyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiBCdXQgbWF5YmUgaXQgd291bGRuJiMzOTt0IGh1cnQsIGp1c3QgZm9yIGNvbXBsZXRlbmVzcywgYnV0IEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuCgpIb2xkIG9uLi4uIEkmIzM5O20gcmVtaW5kZWQgdGhhdCBzeXprYWxsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gZW5hYmxlIGl0IGRpcmVjdGx5IGlmIGl0IGhhcyBubyBwcm9tcHQ7IHNpbmNlIHRoYXQmIzM5O3MgbXkgY29uY2VybiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYERNQV9TSEFSRURfQlVGRkVSYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSBoYXZpbmcgYSBwcm9tcHQsIHdoaWNoIHdvdWxkIGJlIGV4cGVjdGVkIGZvciB1c2VyLWNvbmZpZ3VyYWJsZSBvcHRpb25zLiBBaCwgYnV0IHdhaXQgYSBzZWNvbmQuLi4gaXMgbXkgbWVtb3J5IGNvcnJlY3Q/IExldCBtZSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBiZSBzdXJlOyBpdCYjMzk7cyBhIGBib29sYCB3aXRob3V0IGEgcHJvbXB0IGluIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2A/IE9rYXksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZXJlYWQgYGRyaXZlcnMvYmFzZS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZWZpbml0aW9ucyBhbmQgYXZvaWQgbWFraW5nIG1pc3Rha2VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQyOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeTogRE1BX1NIQVJFRF9CVUZGRVIqKgoKUmlnaHQsIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgZGVmaW5lZCBhcyBhIGBib29sYCAqd2l0aG91dCogYW55IGFzc29jaWF0ZWQgcHJvbXB0LiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc3VzcGljaW9uIOKAkyBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgaW1wbGljaXRseSBzZWxlY3RlZCBieSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIGEgZGVyaXZlZCBjb25maWd1cmF0aW9uLCBhIGJ1aWxkaW5nIGJsb2NrLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QgYSBkaXJlY3RseSB1c2VyLWZhY2luZyBvcHRpb247IGl0cyAqdmFsdWUqIGlzIGRldGVybWluZWQgZWxzZXdoZXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBwdWxsaW5nIGl0IGluLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgZGVzaWduIGFuZCBob3cgYERNQV9TSEFSRURfQlVGRkVSYCBpbmZsdWVuY2VzIHRoZSBmaW5hbCBidWlsZCBhbmQgc3lzdGVtIGJlaGF2aW9yLiBUaW1lIHRvIHRyYWNlIHRoZSBzZWxlY3RzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0PTY1PUFueSBleHBvcnRlcnMgb3IgdXNlcnMgb2YgdGhlIGRtYS1idWYgYnVmZmVyIHNoYXJpbmcgZnJhbWV3b3JrIG11c3QgaGF2ZSBhXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q6NjY6JiMzOTtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM5OyBpbiB0aGVpciByZXNwZWN0aXZlIEtjb25maWdzLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0LTY3LVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnPTY9Y29uZmlnIERSTV9BQ0NFTF9IQUJBTkFMQUJTXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTItXHRzZWxlY3QgSFdNT05cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZy0xNC1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQ9Y29uZmlnIFNZTkNfRklMRVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYtXHRkZWZhdWx0IG5cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NTI9Y29uZmlnIERNQUJVRl9LVU5JVF9URVNUXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTQtXHRkZXBlbmRzIG9uIEtVTklUXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTYwPW1lbnVjb25maWcgRE1BQlVGX0hFQVBTXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBVc2VybGFuZCBNZW1vcnkgSGVhcHNcJiMzNDtcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYyOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cdGhlbHBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXG4tLVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTMtXHRzZWxlY3QgSTJDXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxNDpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXHRzZWxlY3QgU1lOQ19GSUxFXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xuLS1cbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXHRib29sIFwmIzM0O0VuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXCYjMzQ7XG5kcml2ZXJzL2lpby9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cdGRlcGVuZHMgb24gIUFMUEhBXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVx0c2VsZWN0IElSUV9QT0xMXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cdGRlcGVuZHMgb24gTU1VXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0zOT1jb25maWcgSU9NTVVGRF9URVNUXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDQtXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDU6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQ2LVx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9Mz1jb25maWcgVklERU9CVUYyX0NPUkVcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTUtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTEzPWNvbmZpZyBWSURFT0JVRjJfRE1BX0NPTlRJR1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTE5PWNvbmZpZyBWSURFT0JVRjJfVk1BTExPQ1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTIyLVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yNC1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZz0xPWNvbmZpZyBWSURFT19URUdSQV9WREVcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBWSURFT19ERVZcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTgtXHRzZWxlY3QgSU9NTVVfSU9WQVxuLS1cbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMwMT1jb25maWcgUUNPTV9GQVNUUlBDXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctMzA0LVx0ZGVwZW5kcyBvbiBSUE1TR1xuZHJpdmVycy9taXNjL0tjb25maWc6MzA1Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDYtXHRzZWxlY3QgUUNPTV9TQ01cbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG5kcml2ZXJzL3RlZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvdGVlL0tjb25maWctOC1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTE5Mj1jb25maWcgVVNCX0ZfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE5MzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTk0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTE0NT1jb25maWcgWEVOX0dOVERFVl9ETUFCVUZcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cdGRlcGVuZHMgb24gWEVOX0dOVERFViBcdTAwMjZcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xuZHJpdmVycy94ZW4vS2NvbmZpZzoxNDg6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVx0aGVscFxuLS1cbnNhbXBsZXMvS2NvbmZpZz0yMzA9Y29uZmlnIFNBTVBMRV9WRklPX01ERVZfTUJPQ0hTXG4tLVxuc2FtcGxlcy9LY29uZmlnLTIzMy1cdHNlbGVjdCBWRklPX01ERVZcbnNhbXBsZXMvS2NvbmZpZzoyMzQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNhbXBsZXMvS2NvbmZpZy0yMzUtXHRoZWxwXG4tLVxuc291bmQvc29jL2ZzbC9LY29uZmlnPTY9Y29uZmlnIFNORF9TT0NfRlNMX0FTUkNcbi0tXG5zb3VuZC9zb2MvZnNsL0tjb25maWctOC1cdGRlcGVuZHMgb24gSEFTX0RNQVxuc291bmQvc29jL2ZzbC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy0xMC1cdHNlbGVjdCBSRUdNQVBfTU1JT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ2NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYERNQV9TSEFSRURfQlVGRkVSYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYERNQV9TSEFSRURfQlVGRkVSYCBnZXRzIGVuYWJsZWQgaW4gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG9wdGlvbiwgYnV0IGl0JiMzOTtzICpwdWxsZWQgaW4qIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIHN1YnN5c3RlbXMuIEkmIzM5O20gc2VlaW5nIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgYERSTWAsIGBJTkZJTklCQU5EYCwgYFZJREVPQlVGMl9DT1JFYCwgYFRFRWAgYW5kIHByb2JhYmx5IG1vcmUsIGFsbCBkZXBlbmRpbmcgb24gaXQuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgaWYgSSB3YW50IHRvIHR1cm4gb24gYERNQV9TSEFSRURfQlVGRkVSYCwgSSBjYW4gc2ltcGx5IGVuYWJsZSBhbnkgb2YgdGhvc2UgZGVwZW5kZW50IGZlYXR1cmVzLCBsaWtlIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgb3IgYERSTWAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGRlc2lnbiBjaG9pY2UsIHNpbXBsaWZ5aW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBETUFCVUZfSEVBUFNgLi4udGhhdCYjMzk7cyBhIG1lbnVjb25maWcgZW50cnkgd2l0aCBpdHMgb3duIHByb21wdCwgJiMzNDtETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwcyYjMzQ7LiBJIHNob3VsZCByZWFsbHkgZHJpbGwgZG93biBpbnRvIHRoYXQuIEl0IHNlZW1zIHRvIHN1Z2dlc3QgYSBtb3JlIGRpcmVjdCwgdXNlci1jb250cm9sbGFibGUgd2F5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIGBETUFfU0hBUkVEX0JVRkZFUmAuIFNvLCBsZXQmIzM5O3MgZ28gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBETUFCVUZfSEVBUFNgLCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERNQS1CVUYgaGVhcHMgY2FuIGJlIGNvbmZpZ3VyZWQsIGFuZCB3aGljaCB1c2VybGFuZCBjb21wb25lbnRzIHVzZSB0aGVzZSBoZWFwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQUJVRl9IRUFQUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1Rcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01OS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYwOm1lbnVjb25maWcgRE1BQlVGX0hFQVBTXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBVc2VybGFuZCBNZW1vcnkgSGVhcHNcJiMzNDtcbi0tXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzoxOmNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7RE1BLUJVRiBTeXN0ZW0gSGVhcFwmIzM0O1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnLTctXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzo4OmNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNX0NDX1NIQVJFRFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBTeXN0ZW0gSGVhcCBmb3IgZGVjcnlwdGVkIENvQ28gVk1zXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzoxNjpjb25maWcgRE1BQlVGX0hFQVBTX0NNQVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtETUEtQlVGIENNQSBIZWFwXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIERNQS1CVUYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIGlmIEkganVzdCBkZWNsYXJlIGBETUFCVUZfSEVBUFNgLCB0aGUgc3lzdGVtIHdpbGwgYXV0b21hdGljYWxseSBjaG9vc2UgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGFuZGxlIHRoZSBzZWxlY3Rpb24gY29ycmVjdGx5IGlmIEkganVzdCBnaXZlIGl0IHRoZSBvcHRpb24gdGhhdCAqc2VsZWN0cyogaXQ/IE9yIGNvdWxkIEkganVzdCBzcGVjaWZ5IGBETUFfU0hBUkVEX0JVRkZFUmAgZGlyZWN0bHksIGFuZCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gd2lsbCB1bmRlcnN0YW5kIGl0JiMzOTtzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQ/IEhtbW0sIG5vLCBpZiB0aGVyZSYjMzk7cyBubyBwcm9tcHQsIHN5emthbGxlciBwcm9iYWJseSBjYW4mIzM5O3QgZW5hYmxlIGl0IGRpcmVjdGx5OyBpdCAqbmVlZHMqIHNvbWV0aGluZyB0aGF0IHRyaWdnZXJzIHRoZSBzZWxlY3Rpb24uIEFscmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2sgLSBgU1lOQ19GSUxFYCBpcyBhIGJvb2xlYW4gaW4gYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCBkZWZpbmVkIGFzICYjMzQ7QVBJIGZvciB1c2VyLXNwYWNlIHN5bmNocm9uaXphdGlvbiYjMzQ7LiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O0RNQUJVRiBvcHRpb25zXCYjMzQ7XG4gICAzOlx0XG4gICA0Olx0Y29uZmlnIFNZTkNfRklMRVxuICAgNTpcdFx0Ym9vbCBcJiMzNDtFeHBsaWNpdCBTeW5jaHJvbml6YXRpb24gRnJhbWV3b3JrXCYjMzQ7XG4gICA2Olx0XHRkZWZhdWx0IG5cbiAgIDc6XHRcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBUaGUgU3luYyBGaWxlIEZyYW1ld29yayBhZGRzIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiB2aWFcbiAgMTA6XHRcdCAgdXNlcnNwYWNlLiBJdCBlbmFibGVzIHNlbmQvcmVjZWl2ZSAmIzM5O3N0cnVjdCBkbWFfZmVuY2UmIzM5OyBvYmplY3RzIHRvL2Zyb21cbiAgMTE6XHRcdCAgdXNlcnNwYWNlIHZpYSBTeW5jIEZpbGUgZmRzIGZvciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBkcml2ZXJzIHZpYVxuICAxMjpcdFx0ICB1c2Vyc3BhY2UgY29tcG9uZW50cy4gSXQgaGFzIGJlZW4gcG9ydGVkIGZyb20gQW5kcm9pZC5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVGhlIGZpcnN0IGFuZCBtYWluIHVzZXIgZm9yIHRoaXMgaXMgZ3JhcGhpY3MgaW4gd2hpY2ggYSBmZW5jZSBpc1xuICAxNTpcdFx0ICBhc3NvY2lhdGVkIHdpdGggYSBidWZmZXIuIFdoZW4gYSBqb2IgaXMgc3VibWl0dGVkIHRvIHRoZSBHUFUgYSBmZW5jZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc3MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgU1lOQ19GSUxFYCBpcyBkZWZpbml0ZWx5IHNldCB1cCB0byBwcm9tcHQgdGhlIHVzZXIgYW5kIHVsdGltYXRlbHkgc2VsZWN0cyBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF04oCZcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBHaXZlbiB0aGlzLCBpdCBzZWVtcyBwZXJmZWN0bHkgcmVhc29uYWJsZSB0byBhZGQgYFNZTkNfRklMRWAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBCdXQgYmVmb3JlIEkgZ2V0IHRvbyBhaGVhZCBvZiBteXNlbGYsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBXaGF0IGFib3V0IGBQQUdFX1BPT0xgPyBIbW0sIGl0IGRvZXNu4oCZdCBzZWVtIHRvIGhhdmUgYSB1c2VyIHByb21wdCBvZiBpdHMgb3duLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zLCBpZiBhbnksIGFyZSAqc2VsZWN0aW5nKiBpdC4gR290dGEgdHJhY2UgdGhhdCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM3Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ4Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cdHNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5EXG5kcml2ZXJzL25ldC9LY29uZmlnOjU0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ5LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTg5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NjA0PWNvbmZpZyBORVRERVZTSU1cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9MTg9Y29uZmlnIE5FVF9BSVJPSEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cdHNlbGVjdCBORVRfQUlST0hBX05QVVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc9MTg9Y29uZmlnIEFMSUJBQkFfRUVBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiA2NEJJVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6ODE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgyLVx0c2VsZWN0IEJST0FEQ09NX1BIWSBpZiBBUkNIX0JDTTI4MzVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIxNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjE1LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjMtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6Mjc2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnPTY9Y29uZmlnIEVOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy0xMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnPTE5PWNvbmZpZyBUU05FUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnOjI0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMz1jb25maWcgRkVDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXHRzZWxlY3QgRklYRURfUEhZXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMzLVx0aW1wbHkgUEFHRV9QT09MX1NUQVRTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTg9Y29uZmlnIEdWRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo5NTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTE0Nz1jb25maWcgSElCTUNHRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cdHNlbGVjdCBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6MTU0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTU1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZz02PWNvbmZpZyBISU5JQzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc6MTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc9ND1jb25maWcgTElCRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEV0aGVybmV0IGxpYnJhcnkgKGxpYmV0aClcJiMzNDsgaWYgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9NTk9Y29uZmlnIE1WTkVUQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02My1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjU6XHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTg2PWNvbmZpZyBNVlBQMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6OTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZz0xND1jb25maWcgTkVUX01FRElBVEVLX1NPQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc6MjE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cdHNlbGVjdCBQQ1NfTVRLX0xZTlhJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctOS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZzoxMDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cdHNlbGVjdCBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMzEtXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMzpcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTM0LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNy1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOS1cdHNlbGVjdCBQQ1NfWFBDU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc9MT1jb25maWcgTEFOOTY2WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy0xMC1cdHNlbGVjdCBWQ0FQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnPTI4PWNvbmZpZyBMQU45NjlYX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cdGRlcGVuZHMgb24gU1BBUlg1X1NXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE4PWNvbmZpZyBNSUNST1NPRlRfTUFOQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjctXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0xMTA9Y29uZmlnIFJUQVNFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExMy1cdHNlbGVjdCBDUkMzMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTI5PWNvbmZpZyBSQVZCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM1LVx0c2VsZWN0IE1ESU9fQklUQkFOR1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM3LVx0c2VsZWN0IFBIWUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnPTI1PWNvbmZpZyBTTklfTkVUU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMjgtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTMwLVx0c2VsZWN0IE1JSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctOC1cdHNlbGVjdCBQQ1NfWFBDU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMC1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc9MjY9Y29uZmlnIFRFSFVUSV9UTjQwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMjgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0zMC1cdHNlbGVjdCBGV19MT0FERVJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTUwPWNvbmZpZyBUSV9DUFNXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01NS1cdHNlbGVjdCBNRkRfU1lTQ09OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01Ny1cdHNlbGVjdCBSRUdNQVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNjktXHRkZXBlbmRzIG9uIFRJX0NQVFMgfHwgIVRJX0NQVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTcxLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDEtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMy1cdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MjA0PWNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDgtXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMTAtXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc9Mj1jb25maWcgTVQ3Nl9DT1JFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy01LVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzctXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERNQSBTaGFyZWQgQnVmZmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYFBBR0VfUE9PTGAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIHRoZSBzeXprYWxsZXIgY29uZmlncywgc2luY2UgYEJQRl9TWVNDQUxMYCBhbmQgYFZFVEhgIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhhdCBhbHNvIHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgYFNZTkNfRklMRWAgaXMgZ29pbmcgdG8gZ2V0IG1lIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGVuYWJsaW5nIGZsZXhpYmxlIERNQSBidWZmZXIgc2l6ZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRWAgdG8gYG5ldGRldl9iaW5kX3J4X25sX3BvbGljeWAsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gVGhlbiwgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGNoYW5nZWQgdG8gcGFyc2UgdGhhdCBuZXcgcGFyYW1ldGVyLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB0byB0YWtlIGBuaW92X3NoaWZ0YCwgYW5kIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAgYW5kIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBhcmUgbW9kaWZpZWQgdG8gYWxsb2NhdGUgYW5kIGZyZWUgYnVmZmVycyB1c2luZyB0aGUgY2FsY3VsYXRlZCBzaXplIGJhc2VkIG9uIHRoZSBzaGlmdCAodXNpbmcgYDFVTCAmbHQ7Jmx0OyBiaW5kaW5nLSZndDtuaW92X3NoaWZ0YCkuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBzZXRzIGBtcF9wYXJhbXMucnhfcGFnZV9zaXplYCBiYXNlZCBvbiB0aGlzIGBuaW92X3NoaWZ0YCwgYW5kIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCB1c2VzIGl0IHRvby4gRmluYWxseSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgbm93IGNoZWNrcyB0aGUgcGFnZSBvcmRlciBhZ2FpbnN0IHRoZSBiaW5kaW5nJiMzOTtzIGBuaW92X3NoaWZ0YC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgZGV2bWVtIFRDUCwgd2hpY2ggaXMgZ3JlYXQgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuCgpTbywgdG8gc3VtbWFyaXplIHRoZSByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmUga2V5IHRvIHRoZSBmdW5jdGlvbmFsaXR5LCBJJiMzOTttIGZvY3VzaW5nIG9uOgoKKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YAoqICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgIChzaW5jZSBSWCBoYXMgVFgpCiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgCiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAKKiAgIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgCgpBIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0uLi4gYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbm90IHN0YXRpYywgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGluIGBuZXQvY29yZS9kZXZtZW0uY2AsIHNvIGl0JiMzOTtzIGFjY2Vzc2libGUuIFRoaXMgbmVlZHMgZnVydGhlciBleHBsb3JhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBhZ2FpbiwgYnV0IHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcF9kbWFidWZfZGV2bWVtX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9NDM3PW5ldF9kZXZtZW1fZ2V0X25pb3ZfYXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtNDUyLVxubmV0L2NvcmUvZGV2bWVtLmM6NDUzOmludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcbm5ldC9jb3JlL2Rldm1lbS5jLTQ1NC17XG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3Byb3ZpZGVyX29wcyBkbWFidWZfZGV2bWVtX29wcyA9IHtcbm5ldC9jb3JlL2Rldm1lbS5jOjU0ODpcdC5pbml0XHRcdFx0PSBtcF9kbWFidWZfZGV2bWVtX2luaXQsXG5uZXQvY29yZS9kZXZtZW0uYy01NDktXHQuZGVzdHJveVx0XHQ9IG1wX2RtYWJ1Zl9kZXZtZW1fZGVzdHJveSxcbi0tXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTMtI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MTQ6aW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKTtcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xNS1cbi0tXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg9MjA9Ym9vbCBtcF9kbWFidWZfZGV2bWVtX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSk7XG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMjEtI2Vsc2Vcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoyMjpzdGF0aWMgaW5saW5lIGludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0yMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODA3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCByZWZsZWN0aW5nIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBETUEgQWRkcmVzcyBSZXRyaWV2YWwgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIHRoaXMgY29kZSBzZWdtZW50JiMzOTtzIGZvY3VzIGlzIG9uIHNvbWV0aGluZyB0aGF0JiMzOTtzIG5vdCwgd2VsbCwgc3RhdGljLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLCBhbmQgaXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyYCBpcyAqYWN0dWFsbHkqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gaGVyZS4gS25vd2luZyBpdHMgc2NvcGUg4oCTIHdoZXRoZXIgaXQmIzM5O3MgY29uZmluZWQgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IG9yIHZpc2libGUgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIOKAkyBpcyB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgaG93IGl0IGNhbiBiZSB1dGlsaXplZCAob3IsIG1vcmUgaW1wb3J0YW50bHksICpub3QqIHV0aWxpemVkKSBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2dldF9kbWFfYWRkciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0zMz1zdGF0aWMgdm9pZCBuZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyKHN0cnVjdCBnZW5fcG9vbCAqZ2VucG9vbCxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy00Mi1cbm5ldC9jb3JlL2Rldm1lbS5jOjQzOnN0YXRpYyBkbWFfYWRkcl90IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxubmV0L2NvcmUvZGV2bWVtLmMtNDQte1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTExMz12b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTE1LVx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xubmV0L2NvcmUvZGV2bWVtLmM6MTE2Olx0dW5zaWduZWQgbG9uZyBkbWFfYWRkciA9IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpO1xubmV0L2NvcmUvZGV2bWVtLmMtMTE3LVx0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTE4OT1uZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMzIwLVx0XHRcdHBhZ2VfcG9vbF9zZXRfZG1hX2FkZHJfbmV0bWVtKG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpLFxubmV0L2NvcmUvZGV2bWVtLmM6MzIxOlx0XHRcdFx0XHRcdCAgICAgIG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTMyMi1cdFx0XHRpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDQ3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIHRvdWNoZWQgYW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBmb3IgdGhpcy4KCkZpcnN0LCB0aGUgYG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyYCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkmIzM5O20gbm90IGdvaW5nIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Qgb2YgRm9jdXNTeW1ib2xzLiBBbmQgSSYjMzk7bSBub3QgZ29pbmcgdG8gaW5jbHVkZSBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgcGFydCBvZiB0aGUgbGlmZWN5Y2xlLCBzaW5jZSBpdCYjMzk7cyBub3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4KClNvLCBoZXJlJiMzOTtzIG15IGluaXRpYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHM6CiogICBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAKKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgCiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYAoqICAgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgCiogICBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YAoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgaW5kZWVkIG1vZGlmaWVkLiBJIHNlZSB0aGF0IGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBpcyBjaGFuZ2VkIHRvIHBhc3MgYFBBR0VfU0hJRlRgIHRvIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC4gR29vZC4gVGhlbiwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGl0c2VsZiBpcyBtb2RpZmllZCB0byB0YWtlIGBuaW92X3NoaWZ0YC4gT2theSwgYW5kIHRoZSBjaGFuZ2VzIHJpcHBsZSBkb3duLiBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgLCBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAgYXJlIGFsbCB1cGRhdGVkIHRvIHVzZSBgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdGAsIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgbW9kaWZpZWQgdG8gc2V0IGBtcF9wYXJhbXMucnhfcGFnZV9zaXplYC4gRmluYWxseSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgYHBvb2wtJmd0O3Aub3JkZXIgIT0gYmluZGluZy0mZ3Q7bmlvdl9zaGlmdCAtIFBBR0VfU0hJRlRgLiBMb29rcyBsaWtlIGFsbCBhcmUgdG91Y2hlZC4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgdGhlIG1pbmltdW0gY29uZmlnIG9wdGlvbnMgbmVlZGVkIHRvIHJlYWNoIHRoaXMgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgY29kZSByZWxhdGVkIHRvIGBTWU5DX0ZJTEVgLCB3aGljaCBzZWxlY3RzIGBETUFfU0hBUkVEX0JVRkZFUmAuIEJ1dCBgTkVUX0RFVk1FTWAgZGVwZW5kcyBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGVyZWZvcmUsIEkgY2FuIGp1c3QgbGlzdCBlaXRoZXIgYFNZTkNfRklMRWAgb3IgYERNQV9TSEFSRURfQlVGRkVSYC4gV2FpdCwgaWYgSSBsaXN0IGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBpdCBoYXMgbm8gcHJvbXB0LCBzeXprYWxsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gZW5hYmxlIGl0IGRpcmVjdGx5LiBTbywgbGlzdGluZyBgU1lOQ19GSUxFYCB3aGljaCBoYXMgYSBwcm9tcHQgaXMgYmV0dGVyLiBBbHRlcm5hdGl2ZWx5LCBgRE1BQlVGX0hFQVBTYCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuIEkmIzM5O2xsIGp1c3QgbGlzdCBgU1lOQ19GSUxFYC4gSSYjMzk7bGwgZ28gYmFjayBhbmQgY2hlY2sgYG5ldC9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3IgYE5FVF9ERVZNRU1gIHRoYXQgSSBhbSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA4NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5IGZvciBORVRfREVWTUVNIFRlc3RpbmcqKgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSYjMzk7bSBhcHByb2FjaGluZyBlbmFibGluZyBgTkVUX0RFVk1FTWAgZm9yIHRlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIGFyZSBtZXQgc28gc3l6a2FsbGVyIGNhbiBidWlsZCBhIHZhbGlkIGtlcm5lbCBjb25maWcuIEluaXRpYWxseSwgSSB0aG91Z2h0IEkmIzM5O2QgaGF2ZSB0byBleHBsaWNpdGx5IGxpc3QgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYmVjYXVzZSBgTkVUX0RFVk1FTWAgZGVwZW5kcyBvbiB0aGVtLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgaG93IHN5emthbGxlciBoYW5kbGVzIGBkZXBlbmRzIG9uYDogaXQgYXR0ZW1wdHMgdG8gZW5hYmxlIHRoZSBkZXBlbmRlbmNpZXMuIElmIHRoZXkmIzM5O3JlIHVucHJvbXB0ZWQsIHRoaXMgY291bGQgc3RpbGwgZmFpbC4KCkkga25vdyBgU1lOQ19GSUxFYCBzZWxlY3RzIGBETUFfU0hBUkVEX0JVRkZFUmAsIHNvIGxpc3RpbmcgYFNZTkNfRklMRWAgc2hvdWxkIHNhdGlzZnkgdGhhdCBkZXBlbmRlbmN5LiBBbmQsIGBQQUdFX1BPT0xgIGlzIHNlbGVjdGVkIGJ5IGJvdGggYFZFVEhgIGFuZCBgQlBGX1NZU0NBTExgLCB3aGljaCBhcmUgZ2VuZXJhbGx5IGVuYWJsZWQsIHNvIEkgdGhvdWdodCBqdXN0IGxpc3RpbmcgaXQgd2FzIGVub3VnaC4gSnVzdCB0byBiZSBzYWZlLCB0aG91Z2gsIGxldCYjMzk7cyBpbmNsdWRlIGBETUFfU0hBUkVEX0JVRkZFUmAgZXhwbGljaXRseSBpbiB0aGUgY29uZmlnIGFzIHdlbGwuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zIQoKSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBORVRfREVWTUVNYCBpcyBhIGBkZWZfYm9vbCB5YCwgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdCwgdGhvdWdoLgoKUmlnaHQsIHNvIHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gY29uZmlndXJlIHRoZSBSWCBwYWdlIHNpemUgaW4gZGV2bWVtIFRDUC4gSXQgZGlyZWN0bHkgbW9kaWZpZXMgY3JpdGljYWwgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdG8gbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBleHBvc2VkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhlIGNvZGUsIGFuZCBJIGtub3cgdGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbjogYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCwgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAsIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCwgYW5kIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgLgoKVGhlcmVmb3JlLCB0byBiZSBhcyBjb25maWRlbnQgYXMgcG9zc2libGUgaW4gbXkgY29uZmlndXJhdGlvbiwgSSYjMzk7bSBnb2luZyB0byBsaXN0IGBETUFfU0hBUkVEX0JVRkZFUmAsIGBTWU5DX0ZJTEVgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpCdXQgd2FpdCwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gT2theSwgSSBzZWUgdGhhdCBgR0VORVJJQ19BTExPQ0FUT1JgIGlzIGFsc28gc2VsZWN0ZWQgYnkgYE5FVF9ERVZNRU1gLgoKQW5kIGZpbmFsbHksIGxvb2tpbmcgYXQgdGhlIHNlbGZ0ZXN0LCBpdCB1c2VzIGBuY2Rldm1lbWAsIHdoaWNoIGluIHR1cm4gdXNlcyBgbWVtZmRfY3JlYXRlYCBhbmQgYHVkbWFidWZgLiBTbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgVURNQUJVRmAgaXMgc2V0IHRvby4gT2theSwgbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVRE1BQlVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipBZGRpbmcgYFVETUFCVUZgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBVRE1BQlVGYCBpcyBjbGVhcmx5IGEgYm9vbGVhbiBjb25maWcgb3B0aW9uIHdpdGggYSBwcm9tcHQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgdGhlIHVzZXIgZ2V0cyBhIGNob2ljZSBhYm91dCBpdC4gTW9yZSBpbXBvcnRhbnRseSwgaXQgc2VlbXMgdGhpcyBpcyBob3cgZG1hYnVmcyBhcmUgY3JlYXRlZCBmcm9tIHVzZXIgc3BhY2UgbWVtb3J5LiBUaGF0JiMzOTtzICpleGFjdGx5KiB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBpbiBhIHNlbGZ0ZXN0IHNjZW5hcmlvLCBhbmQgaXQmIzM5O3MgYWxzbyB0aGUgbGlrZWx5IHBhdGggc3l6a2FsbGVyIHdvdWxkIHRha2UgdG8gZnV6eiB0aGlzIGZ1bmN0aW9uYWxpdHkuIFNvLCBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCB0byBpbmNsdWRlLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBhZGQgYFVETUFCVUZgIHRvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSB0cmFja2luZy4gTm93LCBiZWZvcmUgd2UgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBldmVyeXRoaW5nIGl0IGRlcGVuZHMgb24uIExldCYjMzk7cyBkaWcgaW50byBgVURNQUJVRmAmIzM5O3MgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8ga25vdyB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBvciB3aGljaCBjYW4gYWZmZWN0IGl0cyBiZWhhdmlvdXIgYW5kIGF0dGFjayBzdXJmYWNlLiBUaGF0JiMzOTtzIG5leHQgb24gdGhlIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIFdBUk5JTkc6IGltcHJvcGVyIHVzZSBvZiB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsXG4gIDMxOlx0XHQgIGRyaXZlcnMgZnJvbSB1c2Vyc3BhY2UuIEludGVuZGVkIGZvciB0ZXN0IGFuZCBkZWJ1ZyBvbmx5LlxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBVRE1BQlVGXG4gIDM0Olx0XHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiAgMzU6XHRcdGRlZmF1bHQgblxuICAzNjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICAzNzpcdFx0ZGVwZW5kcyBvbiBNRU1GRF9DUkVBVEUgfHwgQ09NUElMRV9URVNUXG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1NVVxuICAzOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFVETUFCVUZgIGhlcmUuIFJpZ2h0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBkZXBlbmRzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYE1FTUZEX0NSRUFURWAuIE1ha2VzIHNlbnNlLCByaWdodD8gTm93LCB0aGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhpczogaWYgZW5hYmxpbmcgYFVETUFCVUZgICpyZXF1aXJlcyogYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgZG9lc24mIzM5O3QgZXZlbiBoYXZlIGEgcHJvbXB0LCBob3cgb24gZWFydGggaXMgYSB1c2VyIHN1cHBvc2VkIHRvIGFjdHVhbGx5ICplbmFibGUqIGBVRE1BQlVGYD8gVGhhdCBmZWVscyBsaWtlIGEgZ2xhcmluZyBvbWlzc2lvbi4KCkFoYSEgR290IGl0LiBJIHNob3VsZCBoYXZlIGNvbnNpZGVyZWQgdGhhdCBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGxpa2VseSBzZWxlY3RlZCBieSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcmlnaHQ/IExldCYjMzk7cyBzZWUuLi5pZiB3ZSBlbmFibGUgYFNZTkNfRklMRWAsIGJvb20sIGBETUFfU0hBUkVEX0JVRkZFUmAgZ2V0cyBwdWxsZWQgaW4uIEFuZCAqdGhlbiogd2UgY2FuIGVuYWJsZSBgVURNQUJVRmAuIFRoYXQgZXhwbGFpbnMgaXQuIFNvLCBhIHVzZXIgd2FudGluZyBgVURNQUJVRmAgd2lsbCBsaWtlbHkgbmVlZCB0byBlbmFibGUgYFNZTkNfRklMRWAuCgpTbywgdGhlIGtleSBvcHRpb25zIHRvIGNvbnNpZGVyIHdvdWxkIGJlOgoKKiAgIGBTWU5DX0ZJTEVgICh0aGlzIGluZGlyZWN0bHkgZW5hYmxlcyBgRE1BX1NIQVJFRF9CVUZGRVJgKQoqICAgYFVETUFCVUZgICh0aGUgZGVzaXJlZCBvcHRpb24pCiogICBgRE1BX1NIQVJFRF9CVUZGRVJgIChhIGRlcGVuZGVuY3kgb2YgYFVETUFCVUZgKQoqICAgYFBBR0VfUE9PTGAgKGNvdWxkIGJlIHJlbGV2YW50IGRlcGVuZGluZyBvbiB0aGUgdXNlIGNhc2UpCgpOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgc2l0dWF0aW9uIHdpdGggYE1FTUZEX0NSRUFURWAsIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUZEX0NSRUFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzNTA9Y29uZmlnIEtNQVBfTE9DQUxfTk9OX0xJTkVBUl9QVEVfQVJSQVlcbi0tXG5tbS9LY29uZmlnLTEzNTItXG5tbS9LY29uZmlnOjEzNTM6Y29uZmlnIE1FTUZEX0NSRUFURVxubW0vS2NvbmZpZy0xMzU0LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtZmRfY3JlYXRlKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDY0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyBLZXJuZWwgRE1BIEJ1ZmZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBNRU1GRF9DUkVBVEVgIGlzIGdlbmVyYWxseSBlbmFibGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBpbmZsdWVuY2VzIGhvdyB3ZSYjMzk7cmUgYXBwcm9hY2hpbmcgdGhpcyBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb24uCgpHaXZlbiB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgU1lOQ19GSUxFYCwgYFVETUFCVUZgLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgc2V0IG9mIGNvbmZpZ3Mgc2hvdWxkIHN1cHBvcnQgdGhlIGludGVuZGVkIHVzZSBjYXNlLgoKTm93LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRob3NlIGBGb2N1c1N5bWJvbHNgIHdlIGlkZW50aWZpZWQgZWFybGllci4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIHN0aWxsIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIHRob3NlOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgLCBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCwgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgLCBhbmQgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZS4KCkhhdmUgdGhlcmUgYmVlbiBhbnkgKm90aGVyKiBmdW5jdGlvbnMsIG91dHNpZGUgb2YgdGhpcyBmb2N1c2VkIHNldCwgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZD8gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvZGV2bWVtLmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz00Mz1zdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy00Ni1cbm5ldC9jb3JlL2Rldm1lbS5jOjQ3Olx0b3duZXIgPSBuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lcihuaW92KTtcbm5ldC9jb3JlL2Rldm1lbS5jLTQ4LVx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfZG1hX2FkZHIgJiM0Mztcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xMDc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTA4Om5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxubmV0L2NvcmUvZGV2bWVtLmgtMTA5LXtcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xMTY9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbm5ldC9jb3JlL2Rldm1lbS5oLTExNy17XG5uZXQvY29yZS9kZXZtZW0uaDoxMTg6XHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdiktXHUwMDNlYmluZGluZztcbm5ldC9jb3JlL2Rldm1lbS5oLTExOS19XG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTI2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuZXRfaW92X3ZpcnR1YWxfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC0xMjgtXHRzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID1cbm5ldC9jb3JlL2Rldm1lbS5oOjEyOTpcdFx0bmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XG5uZXQvY29yZS9kZXZtZW0uaC0xMzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDAwCgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnk6CgoqKkZvY3VzIFN5bWJvbCBWZXJpZmljYXRpb24gQ29tcGxldGUqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCBiZWVuIGxvb2tpbmcgYXQgYG5ldF9pb3ZfdmlydHVhbF9hZGRyYC4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgIGFuZCwgYXMgZXhwZWN0ZWQsIGl0JiMzOTtzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gU2luY2Ugd2Ugc3BlY2lmaWNhbGx5IGV4Y2x1ZGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgdGhhdCBtZWFucyB0aGUgZXhjbHVzaW9uIHByb2Nlc3Mgd29ya2VkIGFzIGl0IHNob3VsZC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IG9uZS4KCkdvb2QuIEl0IGxvb2tzIGxpa2UgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgc3RhYmxlIGFuZCBhY2N1cmF0ZSBhdCB0aGlzIHBvaW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lOQ19GSUxFJiMzNDssCiAgICAmIzM0O1VETUFCVUYmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9hbGxvY19kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X25pb3ZfYXQmIzM0OywKICAgICYjMzQ7bXBfZG1hYnVmX2Rldm1lbV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgdGhlIFJYIHBhZ2Ugc2l6ZSBmb3IgZGV2bWVtIFRDUCB2aWEgdGhlIGByeC1wYWdlLXNpemVgIG5ldGxpbmsgYXR0cmlidXRlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBkZXZtZW0gVENQIGNvZGUgdG8gaGFuZGxlIG5vbi1QQUdFX1NJWkUgYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0a2l0IG9yIHZldGgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTWU5DX0ZJTEUmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3R4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfbmlvdl9hdCYjMzQ7LAogICAgJiMzNDttcF9kbWFidWZfZGV2bWVtX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjb25maWd1cmluZyB0aGUgUlggcGFnZSBzaXplIGZvciBkZXZtZW0gVENQIHZpYSB0aGUgYHJ4LXBhZ2Utc2l6ZWAgbmV0bGluayBhdHRyaWJ1dGUuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGRldm1lbSBUQ1AgY29kZSB0byBoYW5kbGUgbm9uLVBBR0VfU0laRSBhbGxvY2F0aW9ucyBhbmQgbWFwcGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRraXQgb3IgdmV0aCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0MzoxNy4zNTMxNTc5MzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM4NDM0NTU1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lOQ19GSUxFXCIsXG4gICAgXCJVRE1BQlVGXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICAgIFwibmV0ZGV2X25sX2JpbmRfdHhfZG9pdFwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9hbGxvY19kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fZnJlZV9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIixcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRcIixcbiAgICBcIm1wX2RtYWJ1Zl9kZXZtZW1faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgdGhlIFJYIHBhZ2Ugc2l6ZSBmb3IgZGV2bWVtIFRDUCB2aWEgdGhlIGByeC1wYWdlLXNpemVgIG5ldGxpbmsgYXR0cmlidXRlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBkZXZtZW0gVENQIGNvZGUgdG8gaGFuZGxlIG5vbi1QQUdFX1NJWkUgYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0a2l0IG9yIHZldGgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0MzoxNy4zNTMyOTczMDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDcxMDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZlM2FhYzI3Y2QwMDQ5YjQ1ZTIyZDUxOTlhNWViNDI0OTk2OWY3MDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDg6NDM6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sXFxuaW5kZXggNWYxNDNkYTc0NThjZmIuLjFlZTY0MzQyZGYxMWMzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxcbkBAIC02LDYgKzYsMTIgQEAgZG9jOiBcXHUwMDNlLVxcbiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLlxcbiBcXG4gZGVmaW5pdGlvbnM6XFxuKyAgLVxcbisgICAgdHlwZTogY29uc3RcXG4rICAgIG5hbWU6IHBhZ2Utc2l6ZVxcbisgICAgdmFsdWU6IDAgICMgZHVtbXk6IGNvZGVnZW4gbmVlZHMgYSBudW1iZXIsIHJlYWwgdmFsdWUgaXMgdGhlIFBBR0VfU0laRSBtYWNybyAoaGVhZGVyKVxcbisgICAgaGVhZGVyOiBhc20vcGFnZS5oXFxuKyAgICBzY29wZToga2VybmVsXFxuICAgLVxcbiAgICAgdHlwZTogZmxhZ3NcXG4gICAgIG5hbWU6IHhkcC1hY3RcXG5AQCAtNTk4LDYgKzYwNCwxNiBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBjaGVja3M6XFxuICAgICAgICAgICBtaW46IDFcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHJ4LXBhZ2Utc2l6ZVxcbisgICAgICAgIGRvYzogfFxcbisgICAgICAgICAgU2l6ZSBpbiBieXRlcyBvZiBlYWNoIGRldmljZSBwYWdlIHRoZSBOSUMgd3JpdGVzIGludG8gZnJvbSB0aGUgYm91bmRcXG4rICAgICAgICAgIGRtYWJ1Zi4gTXVzdCBiZSBhIHBvd2VyIG9mIHR3byBhbmQgXFx1MDAzZT0gUEFHRV9TSVpFOyBkZWZhdWx0cyB0b1xcbisgICAgICAgICAgUEFHRV9TSVpFLlxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGNoZWNrczpcXG4rICAgICAgICAgIG1pbjogcGFnZS1zaXplXFxuKyAgICAgICAgICBtYXg6IHUzMi1tYXhcXG4gXFxuIG9wZXJhdGlvbnM6XFxuICAgbGlzdDpcXG5AQCAtODEyLDYgKzgyOCw3IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICAgIC0gaWZpbmRleFxcbiAgICAgICAgICAgICAtIGZkXFxuICAgICAgICAgICAgIC0gcXVldWVzXFxuKyAgICAgICAgICAgIC0gcngtcGFnZS1zaXplXFxuICAgICAgICAgcmVwbHk6XFxuICAgICAgICAgICBhdHRyaWJ1dGVzOlxcbiAgICAgICAgICAgICAtIGlkXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxcbmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcXG5AQCAtMjE5LDYgKzIxOSw3IEBAIGVudW0ge1xcbiBcXHRORVRERVZfQV9ETUFCVUZfUVVFVUVTLFxcbiBcXHRORVRERVZfQV9ETUFCVUZfRkQsXFxuIFxcdE5FVERFVl9BX0RNQUJVRl9JRCxcXG4rXFx0TkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcXG4gXFxuIFxcdF9fTkVUREVWX0FfRE1BQlVGX01BWCxcXG4gXFx0TkVUREVWX0FfRE1BQlVGX01BWCA9IChfX05FVERFVl9BX0RNQUJVRl9NQVggLSAxKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZtZW0uYyBiL25ldC9jb3JlL2Rldm1lbS5jXFxuaW5kZXggOTU3ZDZiOTYyMTZiMzMuLmIwMzZmMTRjYjIzYTE0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5jXFxuKysrIGIvbmV0L2NvcmUvZGV2bWVtLmNcXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4gXFxuIFxcdG93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XFxuIFxcdHJldHVybiBvd25lci1cXHUwMDNlYmFzZV9kbWFfYWRkciArXFxuLVxcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuK1xcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2Mgb3duZXItXFx1MDAzZWJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG5AQCAtOTMsMTMgKzkzLDE0IEBAIG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiBcXHRzc2l6ZV90IG9mZnNldDtcXG4gXFx0c3NpemVfdCBpbmRleDtcXG4gXFxuLVxcdGRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCwgUEFHRV9TSVpFLFxcbitcXHRkbWFfYWRkciA9IGdlbl9wb29sX2FsbG9jX293bmVyKGJpbmRpbmctXFx1MDAzZWNodW5rX3Bvb2wsXFxuK1xcdFxcdFxcdFxcdFxcdDFVTCBcXHUwMDNjXFx1MDAzYyBiaW5kaW5nLVxcdTAwM2VuaW92X3NoaWZ0LFxcbiBcXHRcXHRcXHRcXHRcXHQodm9pZCAqKilcXHUwMDI2b3duZXIpO1xcbiBcXHRpZiAoIWRtYV9hZGRyKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdG9mZnNldCA9IGRtYV9hZGRyIC0gb3duZXItXFx1MDAzZWJhc2VfZG1hX2FkZHI7XFxuLVxcdGluZGV4ID0gb2Zmc2V0IC8gUEFHRV9TSVpFO1xcbitcXHRpbmRleCA9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBiaW5kaW5nLVxcdTAwM2VuaW92X3NoaWZ0O1xcbiBcXHRuaW92ID0gXFx1MDAyNm93bmVyLVxcdTAwM2VhcmVhLm5pb3ZzW2luZGV4XTtcXG4gXFxuIFxcdG5pb3YtXFx1MDAzZWRlc2MucHBfbWFnaWMgPSAwO1xcbkBAIC0xMTMsMTIgKzExNCwxMyBAQCB2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7XFxuK1xcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2MgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdDtcXG4gXFxuIFxcdGlmIChXQVJOX09OKCFnZW5fcG9vbF9oYXNfYWRkcihiaW5kaW5nLVxcdTAwM2VjaHVua19wb29sLCBkbWFfYWRkcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFBBR0VfU0laRSkpKVxcbitcXHRcXHRcXHRcXHQgICAgICAgbmlvdl9zaXplKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsIFBBR0VfU0laRSk7XFxuK1xcdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsIG5pb3Zfc2l6ZSk7XFxuIH1cXG4gXFxuIHZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbkBAIC0xNjMsNiArMTY1LDkgQEAgaW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxuIFxcdHUzMiB4YV9pZHg7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKVxcbitcXHRcXHRtcF9wYXJhbXMucnhfcGFnZV9zaXplID0gMVUgXFx1MDAzY1xcdTAwM2MgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdDtcXG4rXFxuIFxcdGVyciA9IG5ldGlmX21wX29wZW5fcnhxKGRldiwgcnhxX2lkeCwgXFx1MDAyNm1wX3BhcmFtcywgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTg0LDEwICsxODksMTIgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XFxuK1xcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2Mgbmlvdl9zaGlmdDtcXG4gXFx0c3RhdGljIHUzMiBpZF9hbGxvY19uZXh0O1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbiBcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbkBAIC0yMTMsNiArMjIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXG4gXFx0YmluZGluZy1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXHRiaW5kaW5nLVxcdTAwM2V2ZGV2ID0gdmRldjtcXG4rXFx0YmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdCA9IG5pb3Zfc2hpZnQ7XFxuIFxcdHhhX2luaXRfZmxhZ3MoXFx1MDAyNmJpbmRpbmctXFx1MDAzZWJvdW5kX3J4cXMsIFhBX0ZMQUdTX0FMTE9DKTtcXG4gXFxuIFxcdGVyciA9IHBlcmNwdV9yZWZfaW5pdChcXHUwMDI2YmluZGluZy1cXHUwMDNlcmVmLFxcbkBAIC0yNDgsMTggKzI1NiwxNCBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdFxcdGdvdG8gZXJyX3VubWFwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJpbmRpbmctXFx1MDAzZXR4X3ZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldF9pb3YgKixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZG1hYnVmLVxcdTAwM2VzaXplIC8gUEFHRV9TSVpFKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZG1hYnVmLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIG5pb3Zfc2hpZnQpO1xcbiBcXHRcXHRpZiAoIWJpbmRpbmctXFx1MDAzZXR4X3ZlYykge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGVycl91bm1hcDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHQvKiBGb3Igc2ltcGxpY2l0eSB3ZSBleHBlY3QgdG8gbWFrZSBQQUdFX1NJWkUgYWxsb2NhdGlvbnMsIGJ1dCB0aGVcXG4tXFx0ICogYmluZGluZyBjYW4gYmUgbXVjaCBtb3JlIGZsZXhpYmxlIHRoYW4gdGhhdC4gV2UgbWF5IGJlIGFibGUgdG9cXG4tXFx0ICogYWxsb2NhdGUgTVRVIHNpemVkIGNodW5rcyBoZXJlLiBMZWF2ZSB0aGF0IGZvciBmdXR1cmUgd29yay4uLlxcbi1cXHQgKi9cXG4tXFx0YmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZULFxcbitcXHRiaW5kaW5nLVxcdTAwM2VjaHVua19wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKG5pb3Zfc2hpZnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGRldl90b19ub2RlKFxcdTAwMjZkZXYtXFx1MDAzZWRldikpO1xcbiBcXHRpZiAoIWJpbmRpbmctXFx1MDAzZWNodW5rX3Bvb2wpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG5AQCAtMjczLDkgKzI3NywxMiBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdHNpemVfdCBsZW4gPSBzZ19kbWFfbGVuKHNnKTtcXG4gXFx0XFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuIFxcbi1cXHRcXHRpZiAoIUlTX0FMSUdORUQobGVuLCBQQUdFX1NJWkUpKSB7XFxuK1xcdFxcdGlmICghSVNfQUxJR05FRChkbWFfYWRkciwgbmlvdl9zaXplKSB8fFxcbitcXHRcXHQgICAgIUlTX0FMSUdORUQobGVuLCBuaW92X3NpemUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcImRtYS1idWYgU0cgbGVuZ3RoIG11c3QgYmUgUEFHRV9TSVpFIGFsaWduZWRcXFwiKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcImRtYWJ1ZiBzZyBlbnRyeSAoYWRkcj0lcGFkLCBsZW49JXp1KSBub3QgYWxpZ25lZCB0byBuaW92IHNpemUgJXp1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRtYV9hZGRyLCBsZW4sIG5pb3Zfc2l6ZSk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yODgsNyArMjk1LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXG4gXFx0XFx0b3duZXItXFx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsID0gdmlydHVhbDtcXG4gXFx0XFx0b3duZXItXFx1MDAzZWJhc2VfZG1hX2FkZHIgPSBkbWFfYWRkcjtcXG4tXFx0XFx0b3duZXItXFx1MDAzZWFyZWEubnVtX25pb3ZzID0gbGVuIC8gUEFHRV9TSVpFO1xcbitcXHRcXHRvd25lci1cXHUwMDNlYXJlYS5udW1fbmlvdnMgPSBsZW4gXFx1MDAzZVxcdTAwM2Ugbmlvdl9zaGlmdDtcXG4gXFx0XFx0b3duZXItXFx1MDAzZWJpbmRpbmcgPSBiaW5kaW5nO1xcbiBcXG4gXFx0XFx0ZXJyID0gZ2VuX3Bvb2xfYWRkX293bmVyKGJpbmRpbmctXFx1MDAzZWNodW5rX3Bvb2wsIGRtYV9hZGRyLFxcbkBAIC0zMTMsNyArMzIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXHRcXHRcXHRwYWdlX3Bvb2xfc2V0X2RtYV9hZGRyX25ldG1lbShuZXRfaW92X3RvX25ldG1lbShuaW92KSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdikpO1xcbiBcXHRcXHRcXHRpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpXFxuLVxcdFxcdFxcdFxcdGJpbmRpbmctXFx1MDAzZXR4X3ZlY1tvd25lci1cXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgLyBQQUdFX1NJWkUgKyBpXSA9IG5pb3Y7XFxuK1xcdFxcdFxcdFxcdGJpbmRpbmctXFx1MDAzZXR4X3ZlY1sob3duZXItXFx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsIFxcdTAwM2VcXHUwMDNlIG5pb3Zfc2hpZnQpICsgaV0gPSBuaW92O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR2aXJ0dWFsICs9IGxlbjtcXG5AQCAtNDMwLDEzICs0MzcsMTUgQEAgc3RydWN0IG5ldF9pb3YgKlxcbiBuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbiBcXHRcXHQgICAgICAgc2l6ZV90IHZpcnRfYWRkciwgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSlcXG4ge1xcbitcXHRzaXplX3Qgbmlvdl9zaXplID0gMVVMIFxcdTAwM2NcXHUwMDNjIGJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQ7XFxuK1xcbiBcXHRpZiAodmlydF9hZGRyIFxcdTAwM2U9IGJpbmRpbmctXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHQqb2ZmID0gdmlydF9hZGRyICUgUEFHRV9TSVpFO1xcbi1cXHQqc2l6ZSA9IFBBR0VfU0laRSAtICpvZmY7XFxuK1xcdCpvZmYgPSB2aXJ0X2FkZHIgXFx1MDAyNiAobmlvdl9zaXplIC0gMSk7XFxuK1xcdCpzaXplID0gbmlvdl9zaXplIC0gKm9mZjtcXG4gXFxuLVxcdHJldHVybiBiaW5kaW5nLVxcdTAwM2V0eF92ZWNbdmlydF9hZGRyIC8gUEFHRV9TSVpFXTtcXG4rXFx0cmV0dXJuIGJpbmRpbmctXFx1MDAzZXR4X3ZlY1t2aXJ0X2FkZHIgXFx1MDAzZVxcdTAwM2UgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdF07XFxuIH1cXG4gXFxuIC8qKiogXFxcIkRtYWJ1ZiBkZXZtZW0gbWVtb3J5IHByb3ZpZGVyXFxcIiAqKiovXFxuQEAgLTQ1NCw3ICs0NjMsNyBAQCBpbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxuIFxcdHBvb2wtXFx1MDAzZWRtYV9zeW5jID0gZmFsc2U7XFxuIFxcdHBvb2wtXFx1MDAzZWRtYV9zeW5jX2Zvcl9jcHUgPSBmYWxzZTtcXG4gXFxuLVxcdGlmIChwb29sLVxcdTAwM2VwLm9yZGVyICE9IDApXFxuK1xcdGlmIChwb29sLVxcdTAwM2VwLm9yZGVyICE9IGJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUKVxcbiBcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiBcXG4gXFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoYmluZGluZyk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5oIGIvbmV0L2NvcmUvZGV2bWVtLmhcXG5pbmRleCAzODUyYTU2MDM2Y2I0MC4uNGEyOTNhN2QxMTQ5YzggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxcbkBAIC03MSw2ICs3MSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBuZXRfaW92ICoqdHhfdmVjO1xcbiBcXG4rXFx0dW5zaWduZWQgaW50IG5pb3Zfc2hpZnQ7XFxuK1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5iaW5kX3c7XFxuIH07XFxuIFxcbkBAIC05Myw3ICs5NSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG4gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4gXFx0XFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxcbitcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpO1xcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XFxuQEAgLTEyMiwxMCArMTI1LDExIEBAIHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9pb3ZfYXJlYSAqb3duZXIgPSBuZXRfaW92X293bmVyKG5pb3YpO1xcbitcXHRzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID1cXG4rXFx0XFx0bmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XFxuIFxcbi1cXHRyZXR1cm4gb3duZXItXFx1MDAzZWJhc2VfdmlydHVhbCArXFxuLVxcdCAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuK1xcdHJldHVybiBuZXRfaW92X293bmVyKG5pb3YpLVxcdTAwM2ViYXNlX3ZpcnR1YWwgK1xcbitcXHQgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpIFxcdTAwM2NcXHUwMDNjIGNvLVxcdTAwM2ViaW5kaW5nLVxcdTAwM2VuaW92X3NoaWZ0KTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sXFxuQEAgLTE3NSw2ICsxNzksNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiBcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcXG5pbmRleCBkMThjODliNWE2Yzc1OS4uZjgzNzkwMzQxZWFlNjggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcXG4rKysgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1xcbkBAIC0xMSw2ICsxMSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gXFxuIC8qIEludGVnZXIgdmFsdWUgcmFuZ2VzICovXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX3BhZ2VfcG9vbF9pZF9yYW5nZSA9IHtcXG5AQCAtMjcsNiArMjgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfbmFwaV9kZWZlcl9oYXJkX2lycXNfcmFuZ2VcXG4gXFx0Lm1heFxcdD0gUzMyX01BWCxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UgPSB7XFxuK1xcdC5taW5cXHQ9IFBBR0VfU0laRSxcXG4rXFx0Lm1heFxcdD0gVTMyX01BWCxcXG4rfTtcXG4rXFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cXG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCArIDFdID0ge1xcbiBcXHRbTkVUREVWX0FfTEVBU0VfSUZJTkRFWF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSxcXG5AQCAtMTA2LDEwICsxMTIsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9xc3RhdHNfZ2V0X25sX3BvbGljeVtORVRERVZfQV9RU1RBVFNfU0NPUEVcXG4gfTtcXG4gXFxuIC8qIE5FVERFVl9DTURfQklORF9SWCAtIGRvICovXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3lbTkVUREVWX0FfRE1BQlVGX0ZEICsgMV0gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3lbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSArIDFdID0ge1xcbiBcXHRbTkVUREVWX0FfRE1BQlVGX0lGSU5ERVhdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXFxuIFxcdFtORVRERVZfQV9ETUFCVUZfRkRdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuIFxcdFtORVRERVZfQV9ETUFCVUZfUVVFVUVTXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKG5ldGRldl9xdWV1ZV9pZF9ubF9wb2xpY3kpLFxcbitcXHRbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm5ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UpLFxcbiB9O1xcbiBcXG4gLyogTkVUREVWX0NNRF9OQVBJX1NFVCAtIGRvICovXFxuQEAgLTIxOSw3ICsyMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIG5ldGRldl9ubF9vcHNbXSA9IHtcXG4gXFx0XFx0LmNtZFxcdFxcdD0gTkVUREVWX0NNRF9CSU5EX1JYLFxcbiBcXHRcXHQuZG9pdFxcdFxcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcXG4gXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxcbi1cXHRcXHQubWF4YXR0clxcdD0gTkVUREVWX0FfRE1BQlVGX0ZELFxcbitcXHRcXHQubWF4YXR0clxcdD0gTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcXG4gXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX1VOU19BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbiBcXHR9LFxcbiBcXHR7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcXG5pbmRleCBkNzFiNDM1ZDcyYzE4Zi4uM2ZhZTg4ZThmNWM1MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcXG4rKysgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gXFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9sZWFzZV9ubF9wb2xpY3lbTkVUREVWX0FfTEVBU0VfTkVUTlNfSUQgKyAxXTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmNcXG5pbmRleCBjMTVkOGQ0Y2ExZjhmYS4uMGVlYTRlZTIyZjI0NjcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xcbisrKyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmNcXG5AQCAtMTAxMyw2ICsxMDEzLDcgQEAgbmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXFxuIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XFxuK1xcdHVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4gXFx0dTMyIGlmaW5kZXgsIGRtYWJ1Zl9mZCwgcnhxX2lkeDtcXG4gXFx0c3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbkBAIC0xMDMwLDYgKzEwMzEsMTggQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWZpbmRleCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RFVl9JRklOREVYXSk7XFxuIFxcdGRtYWJ1Zl9mZCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9GRF0pO1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdKSB7XFxuK1xcdFxcdHUzMiByeF9wYWdlX3NpemUgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSk7XFxuK1xcbitcXHRcXHRpZiAoIWlzX3Bvd2VyX29mXzIocnhfcGFnZV9zaXplKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcInJ4LXBhZ2Utc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMlxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRuaW92X3NoaWZ0ID0gaWxvZzIocnhfcGFnZV9zaXplKTtcXG4rXFx0fVxcbitcXG4gXFx0cHJpdiA9IGdlbmxfc2tfcHJpdl9nZXQoXFx1MDAyNm5ldGRldl9ubF9mYW1pbHksIE5FVExJTktfQ0Ioc2tiKS5zayk7XFxuIFxcdGlmIChJU19FUlIocHJpdikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYpO1xcbkBAIC0xMDgwLDcgKzEwOTMsOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHR9XFxuIFxcbiBcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihuZXRkZXYsIE5VTEwsIGRtYV9kZXYsIERNQV9GUk9NX0RFVklDRSxcXG4tXFx0XFx0XFx0XFx0XFx0IGRtYWJ1Zl9mZCwgcHJpdiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcXG4gXFx0XFx0Z290byBlcnJfcnhxX2JpdG1hcDtcXG5AQCAtMTIyMSw3ICsxMjM1LDcgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgZG1hX2RldiwgRE1BX1RPX0RFVklDRSwgZG1hYnVmX2ZkLFxcbi1cXHRcXHRcXHRcXHRcXHQgcHJpdiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0IFBBR0VfU0hJRlQsIHByaXYsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcXG4gXFx0XFx0Z290byBlcnJfdW5sb2NrX2JpbmRfZGV2O1xcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcXG5pbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXFxuQEAgLTIxOSw2ICsyMTksNyBAQCBlbnVtIHtcXG4gXFx0TkVUREVWX0FfRE1BQlVGX1FVRVVFUyxcXG4gXFx0TkVUREVWX0FfRE1BQlVGX0ZELFxcbiBcXHRORVRERVZfQV9ETUFCVUZfSUQsXFxuK1xcdE5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsXFxuIFxcbiBcXHRfX05FVERFVl9BX0RNQUJVRl9NQVgsXFxuIFxcdE5FVERFVl9BX0RNQUJVRl9NQVggPSAoX19ORVRERVZfQV9ETUFCVUZfTUFYIC0gMSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5XFxuaW5kZXggMDMxY2Y5OTA1ZjY1MWMuLjgyYzExZmZjNGFkZDdiIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxcbkBAIC0yLDcgKzIsOCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiBmcm9tIG9zIGltcG9ydCBwYXRoXFxuLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHNcXG4rZnJvbSBkZXZtZW1fbGliIGltcG9ydCAoc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9yeF9sYXJnZV9uaW92KVxcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXFxuIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudlxcbiBcXG5AQCAtMzAsMTEgKzMxLDE3IEBAIGRlZiBjaGVja19yeF9oZHMoY2ZnKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgcnVuX3J4X2hkcyhjZmcpXFxuIFxcbiBcXG4rZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiUnVuIHRoZSBkZXZtZW0gUlggdGVzdCB3aXRoIHJ4LXBhZ2Utc2l6ZSA9IDE2IEtpQi5cXFwiXFxcIlxcXCJcXG4rICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZylcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gdGhlIGRldm1lbSB0ZXN0IGNhc2VzLlxcXCJcXFwiXFxcIlxcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxcbiAgICAgICAgIHNldHVwX3Rlc3QoY2ZnLCBwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArIFxcXCIvbmNkZXZtZW1cXFwiKSlcXG4tICAgICAgICBrc2Z0X3J1bihbY2hlY2tfcngsIGNoZWNrX3R4LCBjaGVja190eF9jaHVua3MsIGNoZWNrX3J4X2hkc10sXFxuKyAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHMsXFxuKyAgICAgICAgICAgICAgICAgIGNoZWNrX3J4X2xhcmdlX25pb3ZdLFxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKVxcbiAgICAga3NmdF9leGl0KClcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XFxuaW5kZXggMDkyMWZmMDNlYjgxYzUuLjZjOTMyMDE4YjQ2M2EyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lLHRvby1tYW55LWFyZ3VtZW50c1xcbiBcXFwiXFxcIlxcXCJTaGFyZWQgaGVscGVycyBmb3IgZGV2bWVtIFRDUCBzZWxmdGVzdHMuXFxcIlxcXCJcXFwiXFxuIFxcbiBpbXBvcnQgcmVcXG5AQCAtOCw3ICs5LDcgQEAgZnJvbSBsaWIucHkgaW1wb3J0IChia2csIGNtZCwgZGVmZXIsIGV0aHRvb2wsIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlbixcXG4gICAgICAgICAgICAgICAgICAgICBOZXRkZXZGYW1pbHkpXFxuIFxcbiBcXG4tZGVmIHJlcXVpcmVfZGV2bWVtKGNmZyk6XFxuK2RlZiByZXF1aXJlX2Rldm1lbShjZmcsIHJ4X3BhZ2Vfc2l6ZT0wKTpcXG4gICAgIFxcXCJcXFwiXFxcIlByb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbid0IHN1cHBvcnRlZC5cXFwiXFxcIlxcXCJcXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXFxcImRldm1lbV9wcm9iZWRcXFwiKTpcXG4gICAgICAgICBwcm9iZV9jb21tYW5kID0gZlxcXCJ7Y2ZnLmJpbl9sb2NhbH0gLWYge2NmZy5pZm5hbWV9XFxcIlxcbkBAIC0xOCw2ICsxOSwxOSBAQCBkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnKTpcXG4gICAgIGlmIG5vdCBjZmcuZGV2bWVtX3N1cHBvcnRlZDpcXG4gICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJUZXN0IHJlcXVpcmVzIGRldm1lbSBzdXBwb3J0XFxcIilcXG4gXFxuKyAgICBpZiByeF9wYWdlX3NpemUgXFx1MDAzZSAwOlxcbisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXFxcImRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkXFxcIik6XFxuKyAgICAgICAgICAgIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZCA9IHt9XFxuK1xcbisgICAgICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBub3QgaW4gY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkOlxcbisgICAgICAgICAgICBwcm9iZV9jb21tYW5kID0gZlxcXCJ7Y2ZnLmJpbl9sb2NhbH0gLWYge2NmZy5pZm5hbWV9IC1iIHtyeF9wYWdlX3NpemV9XFxcIlxcbisgICAgICAgICAgICBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWRbcnhfcGFnZV9zaXplXSA9IFxcXFxcXG4rICAgICAgICAgICAgICAgIGNtZChwcm9iZV9jb21tYW5kLCBmYWlsPUZhbHNlLCBzaGVsbD1UcnVlKS5yZXQgPT0gMFxcbitcXG4rICAgICAgICBpZiBub3QgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkW3J4X3BhZ2Vfc2l6ZV06XFxuKyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxuKyAgICAgICAgICAgICAgICBmXFxcIlRlc3QgcmVxdWlyZXMgZGV2bWVtIHJ4LXBhZ2Utc2l6ZT17cnhfcGFnZV9zaXplfSBzdXBwb3J0XFxcIilcXG4rXFxuIFxcbiBkZWYgY29uZmlndXJlX25pYyhjZmcpOlxcbiAgICAgXFxcIlxcXCJcXFwiQ2hhbm5lbHMsIHJpbmdzLCBSU1MsIHF1ZXVlIGxlYXNlIGZvciBuZXRraXQgZGV2bWVtLlxcXCJcXFwiXFxcIlxcbkBAIC03Niw3ICs5MCw4IEBAIGRlZiBzZXRfZmxvd19ydWxlKGNmZywgcG9ydCk6XFxuICAgICByZXR1cm4gaW50KHJlLnNlYXJjaChyJ0lEIChcXFxcZCspJywgb3V0cHV0KS5ncm91cCgxKSlcXG4gXFxuIFxcbi1kZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOlxcbitkZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UsXFxuKyAgICAgICAgICAgICAgICByeF9wYWdlX3NpemU9MCk6XFxuICAgICBcXFwiXFxcIlxcXCJCdWlsZCB0aGUgbmNkZXZtZW0gUlggbGlzdGVuZXIgY29tbWFuZC5cXFwiXFxcIlxcXCJcXG4gICAgIGlmIGhhc2F0dHIoY2ZnLCAnbmV0bnMnKTpcXG4gICAgICAgICBmbG93X3J1bGVfaWQgPSBzZXRfZmxvd19ydWxlKGNmZywgcG9ydClcXG5AQCAtOTYsNiArMTExLDggQEAgZGVmIG5jZGV2bWVtX3J4KGNmZywgcG9ydCwgdmVyaWZ5PVRydWUsIGZhaWxfb25fbGluZWFyPUZhbHNlLCBmbG93X3N0ZWVyPUZhbHNlKTpcXG4gICAgICAgICBleHRyYXMuYXBwZW5kKFxcXCItdiA3XFxcIilcXG4gICAgIGlmIGZhaWxfb25fbGluZWFyOlxcbiAgICAgICAgIGV4dHJhcy5hcHBlbmQoXFxcIi1MXFxcIilcXG4rICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcXHUwMDNlIDA6XFxuKyAgICAgICAgZXh0cmFzLmFwcGVuZChmXFxcIi1iIHtyeF9wYWdlX3NpemV9XFxcIilcXG4gXFxuICAgICBwYXJ0cyA9IFtjZmcuYmluX2xvY2FsLCBcXFwiLWxcXFwiLCBmXFxcIi1mIHtpZm5hbWV9XFxcIiwgZlxcXCItcyB7YWRkcn1cXFwiLFxcbiAgICAgICAgICAgICAgZlxcXCItcCB7cG9ydH1cXFwiLCAqZXh0cmFzXVxcbkBAIC0yMDIsNiArMjE5LDQ0IEBAIGRlZiBydW5fdHhfY2h1bmtzKGNmZyk6XFxuICAgICBrc2Z0X2VxKHNvY2F0LnN0ZG91dC5zdHJpcCgpLCBcXFwiaGVsbG9cXFxcbndvcmxkXFxcIilcXG4gXFxuIFxcbitkZWYgX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzKGhwX2ZpbGUsIG5yX2h1Z2VwYWdlcyk6XFxuKyAgICB3aXRoIG9wZW4oaHBfZmlsZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoc3RyKG5yX2h1Z2VwYWdlcykpXFxuK1xcbitcXG4rZGVmIHJ1bl9yeF9sYXJnZV9uaW92KGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggYSBsYXJnZSBuaW92IChyeC1wYWdlLXNpemUgXFx1MDAzZSBQQUdFX1NJWkUpLlxcbitcXG4rICAgIFN3ZWVwIHBheWxvYWQgc2l6ZXMgdGhhdCBzdHJhZGRsZSB0aGUgbmlvdiBib3VuZGFyeTogYmVsb3csIGVxdWFsIHRvLFxcbisgICAgYW5kIGFib3ZlIHJ4X3BhZ2Vfc2l6ZSwgdG8gZXhlcmNpc2Ugc3ViLW5pb3YsIGV4YWN0LW5pb3YsIGFuZCBtdWx0aS1uaW92XFxuKyAgICBSWCBwYXRocy5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgaHBfZmlsZSA9IFxcXCIvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzXFxcIlxcbisgICAgd2l0aCBvcGVuKGhwX2ZpbGUsICdyKycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6XFxuKyAgICAgICAgbnJfaHVnZXBhZ2VzID0gaW50KGYucmVhZCgpLnN0cmlwKCkpXFxuKyAgICAgICAgaWYgbnJfaHVnZXBhZ2VzIFxcdTAwM2MgNjQ6XFxuKyAgICAgICAgICAgIGYuc2VlaygwKVxcbisgICAgICAgICAgICBmLndyaXRlKFxcXCI2NFxcXCIpXFxuKyAgICAgICAgICAgIGRlZmVyKF9yZXN0b3JlX25yX2h1Z2VwYWdlcywgaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKVxcbisgICAgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MTYzODQpXFxuKyAgICBjb25maWd1cmVfbmljKGNmZylcXG4rICAgIG5ldG5zID0gZ2V0YXR0cihjZmcsIFxcXCJuZXRuc1xcXCIsIE5vbmUpXFxuK1xcbisgICAgZm9yIHNpemUgaW4gWzEwMjQsIDQwOTYsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzZdOlxcbisgICAgICAgIHBvcnQgPSByYW5kX3BvcnQoKVxcbisgICAgICAgIHNvY2F0ID0gc29jYXRfc2VuZChjZmcsIHBvcnQpXFxuKyAgICAgICAgbGlzdGVuX2NtZCA9IG5jZGV2bWVtX3J4KGNmZywgcG9ydCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvd19zdGVlcj1ub3QgbmV0bnMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3BhZ2Vfc2l6ZT0xNjM4NClcXG4rICAgICAgICBkYXRhX3BpcGUgPSAoZlxcXCJ5ZXMgJChlY2hvIC1lIFxcXFx4MDFcXFxceDAyXFxcXHgwM1xcXFx4MDRcXFxceDA1XFxcXHgwNikgfCBcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgIGZcXFwiaGVhZCAtYyB7c2l6ZX0gfCB7c29jYXR9XFxcIilcXG4rICAgICAgICB3aXRoIGJrZyhsaXN0ZW5fY21kLCBleGl0X3dhaXQ9VHJ1ZSwgbnM9bmV0bnMpIGFzIG5jZGV2bWVtOlxcbisgICAgICAgICAgICB3YWl0X3BvcnRfbGlzdGVuKHBvcnQsIHByb3RvPVxcXCJ0Y3BcXFwiLCBucz1uZXRucylcXG4rICAgICAgICAgICAgY21kKGRhdGFfcGlwZSwgaG9zdD1jZmcucmVtb3RlLCBzaGVsbD1UcnVlKVxcbisgICAgICAgIGtzZnRfZXEobmNkZXZtZW0ucmV0LCAwLFxcbisgICAgICAgICAgICAgICAgZlxcXCJsYXJnZS1uaW92IGZhaWxlZCBmb3IgcGF5bG9hZCBzaXplIHtzaXplfVxcXCIpXFxuK1xcbitcXG4gZGVmIHJ1bl9yeF9oZHMoY2ZnKTpcXG4gICAgIFxcXCJcXFwiXFxcIlJ1biB0aGUgSERTIHRlc3QgYnkgcnVubmluZyBkZXZtZW0gUlggYWNyb3NzIGEgc2VnbWVudCBzaXplIHN3ZWVwLlxcXCJcXFwiXFxcIlxcbiAgICAgcmVxdWlyZV9kZXZtZW0oY2ZnKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uY1xcbmluZGV4IGQ5NmU4YTNiNWE2NTI2Li5mZmU4ZWIwNWZhYzBkOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uY1xcbkBAIC00MCw2ICs0MCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRhcmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuQEAgLTYxLDYgKzYyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90aW1lLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9wYXJhbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJycXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkbWFidWYuaFxcdTAwM2VcXG5AQCAtNzksNiArODEsNyBAQFxcbiAjZGVmaW5lIFBBR0VfU0hJRlQgMTJcXG4gI2RlZmluZSBURVNUX1BSRUZJWCBcXFwibmNkZXZtZW1cXFwiXFxuICNkZWZpbmUgTlVNX1BBR0VTIDE2MDAwXFxuKyNkZWZpbmUgTUIoeCkgKCh4KSBcXHUwMDNjXFx1MDAzYyAyMClcXG4gXFxuICNpZm5kZWYgTVNHX1NPQ0tfREVWTUVNXFxuICNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFxcbkBAIC0xMDAsNiArMTAzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XFxuIHN0YXRpYyB1aW50MzJfdCB0eF9kbWFidWZfaWQ7XFxuIHN0YXRpYyBpbnQgd2FpdHRpbWVfbXMgPSA1MDA7XFxuIHN0YXRpYyBib29sIGZhaWxfb25fbGluZWFyO1xcbitzdGF0aWMgdWludDMyX3QgcnhfcGFnZV9zaXplO1xcbiBcXG4gLyogU3lzdGVtIHN0YXRlIGxvYWRlZCBieSBjdXJyZW50X2NvbmZpZ19sb2FkKCkgKi9cXG4gI2RlZmluZSBNQVhfRkxPV1NcXHQ4XFxuQEAgLTE0Miw2ICsxNDYsNyBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0c3RydWN0IHVkbWFidWZfY3JlYXRlIGNyZWF0ZTtcXG4gXFx0c3RydWN0IG1lbW9yeV9idWZmZXIgKmN0eDtcXG4rXFx0dW5zaWduZWQgaW50IG1lbWZkX2ZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0Y3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7XFxuQEAgLTE1Niw5ICsxNjEsMTQgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlX2N0eDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4LVxcdTAwM2VtZW1mZCA9IG1lbWZkX2NyZWF0ZShcXFwidWRtYWJ1Zi10ZXN0XFxcIiwgTUZEX0FMTE9XX1NFQUxJTkcpO1xcbitcXHRtZW1mZF9mbGFncyA9IE1GRF9BTExPV19TRUFMSU5HO1xcbitcXHRpZiAocnhfcGFnZV9zaXplIFxcdTAwM2UgZ2V0cGFnZXNpemUoKSlcXG4rXFx0XFx0bWVtZmRfZmxhZ3MgfD0gTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUI7XFxuK1xcbitcXHRjdHgtXFx1MDAzZW1lbWZkID0gbWVtZmRfY3JlYXRlKFxcXCJ1ZG1hYnVmLXRlc3RcXFwiLCBtZW1mZF9mbGFncyk7XFxuIFxcdGlmIChjdHgtXFx1MDAzZW1lbWZkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIltza2lwLG5vLW1lbWZkXVxcXCIpO1xcbitcXHRcXHRwcl9lcnIoXFxcIltza2lwLG5vLW1lbWZkJXNdXFxcIixcXG4rXFx0XFx0ICAgICAgIChtZW1mZF9mbGFncyBcXHUwMDI2IE1GRF9IVUdFVExCKSA/IFxcXCIgKG5lZWQgaHVnZXBhZ2VzKVxcXCIgOiBcXFwiXFxcIik7XFxuIFxcdFxcdGdvdG8gZXJyX2Nsb3NlX2RldjtcXG4gXFx0fVxcbiBcXG5AQCAtMTY4LDYgKzE3OCwxMSBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXFxuIFxcdFxcdGdvdG8gZXJyX2Nsb3NlX21lbWZkO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobWVtZmRfZmxhZ3MgXFx1MDAyNiBNRkRfSFVHRVRMQikge1xcbitcXHRcXHRzaXplID0gcm91bmR1cChzaXplLCBNQigyKSk7XFxuK1xcdFxcdGN0eC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IGZ0cnVuY2F0ZShjdHgtXFx1MDAzZW1lbWZkLCBzaXplKTtcXG4gXFx0aWYgKHJldCA9PSAtMSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIltGQUlMLG1lbWZkLXRydW5jYXRlXVxcXCIpO1xcbkBAIC02OTksNiArNzE0LDggQEAgc3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbiBcXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X2lmaW5kZXgocmVxLCBpZmluZGV4KTtcXG4gXFx0bmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9mZChyZXEsIGRtYWJ1Zl9mZCk7XFxuIFxcdF9fbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9xdWV1ZXMocmVxLCBxdWV1ZXMsIG5fcXVldWVfaW5kZXgpO1xcbitcXHRpZiAocnhfcGFnZV9zaXplKVxcbitcXHRcXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X3J4X3BhZ2Vfc2l6ZShyZXEsIHJ4X3BhZ2Vfc2l6ZSk7XFxuIFxcbiBcXHRyc3AgPSBuZXRkZXZfYmluZF9yeCgqeXMsIHJlcSk7XFxuIFxcdGlmICghcnNwKSB7XFxuQEAgLTE0MTEsNyArMTQyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGludCBpc19zZXJ2ZXIgPSAwLCBvcHQ7XFxuIFxcdGludCByZXQsIGVyciA9IDE7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiTGxzOmM6cDp2OnE6dDpmOno6blxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiTGxzOmM6cDp2OnE6dDpmOno6bmI6XFxcIikpICE9IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAob3B0KSB7XFxuIFxcdFxcdGNhc2UgJ0wnOlxcbiBcXHRcXHRcXHRmYWlsX29uX2xpbmVhciA9IHRydWU7XFxuQEAgLTE0NDYsNiArMTQ2MywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRjYXNlICduJzpcXG4gXFx0XFx0XFx0c2tpcF9jb25maWcgPSAxO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnYic6IHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcbitcXHRcXHRcXHRlcnJubyA9IDA7XFxuK1xcdFxcdFxcdHZhbCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCh2YWwgPT0gVUxPTkdfTUFYIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVSQU5HRSkgfHxcXG4rXFx0XFx0XFx0ICAgIHZhbCBcXHUwMDNlIFVJTlQzMl9NQVgpIHtcXG4rXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpbnZhbGlkIHJ4X3BhZ2Vfc2l6ZTogJXNcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyeF9wYWdlX3NpemUgPSB2YWw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgJz8nOlxcbiBcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInVua25vd24gb3B0aW9uOiAlY1xcXFxuXFxcIiwgb3B0b3B0KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weVxcbmluZGV4IDMwMGVkMmE3MGFiNDRkLi42MWM2ZjMxZjAxZTUxZSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcXG5AQCAtMyw3ICszLDggQEBcXG4gXFxcIlxcXCJcXFwiVGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LlxcXCJcXFwiXFxcIlxcbiBcXG4gaW1wb3J0IG9zXFxuLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHNcXG4rZnJvbSBkZXZtZW1fbGliIGltcG9ydCAoc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9yeF9sYXJnZV9uaW92KVxcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXFxuIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZDb250RW52XFxuIFxcbkBAIC0zMSw2ICszMiwxMSBAQCBkZWYgY2hlY2tfbmtfcnhfaGRzKGNmZykgLVxcdTAwM2UgTm9uZTpcXG4gICAgIHJ1bl9yeF9oZHMoY2ZnKVxcbiBcXG4gXFxuK2RlZiBjaGVja19ua19yeF9sYXJnZV9uaW92KGNmZykgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlJ1biB0aGUgZGV2bWVtIFJYIGxhcmdlLW5pb3YgdGVzdCB0aHJvdWdoIG5ldGtpdC5cXFwiXFxcIlxcXCJcXG4rICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZylcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gdGhlIG5ldGtpdCBkZXZtZW0gdGVzdCBjYXNlcy5cXFwiXFxcIlxcXCJcXG4gICAgIHdpdGggTmV0RHJ2Q29udEVudihfX2ZpbGVfXywgcnhxdWV1ZXM9MiwgcHJpbWFyeV9yeF9yZWRpcmVjdD1UcnVlKSBhcyBjZmc6XFxuQEAgLTM4LDcgKzQ0LDcgQEAgZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibmNkZXZtZW1cXFwiKSlcXG4gICAgICAgICBrc2Z0X3J1bihbY2hlY2tfbmtfcngsIGNoZWNrX25rX3R4LCBjaGVja19ua190eF9jaHVua3MsXFxuLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKVxcbisgICAgICAgICAgICAgICAgICBjaGVja19ua19yeF9oZHMsIGNoZWNrX25rX3J4X2xhcmdlX25pb3ZdLCBhcmdzPShjZmcsKSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MTguMjQ2NzA0NjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjAyOTQ5ODk0OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZTkNfRklMRVwiLFxuICAgIFwiVURNQUJVRlwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9ubF9iaW5kX3J4X2RvaXRcIixcbiAgICBcIm5ldGRldl9ubF9iaW5kX3R4X2RvaXRcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlXCIsXG4gICAgXCJuZXRfZGV2bWVtX2dldF9uaW92X2F0XCIsXG4gICAgXCJtcF9kbWFidWZfZGV2bWVtX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBSWCBwYWdlIHNpemUgZm9yIGRldm1lbSBUQ1AgdmlhIHRoZSBgcngtcGFnZS1zaXplYCBuZXRsaW5rIGF0dHJpYnV0ZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgZGV2bWVtIFRDUCBjb2RlIHRvIGhhbmRsZSBub24tUEFHRV9TSVpFIGFsbG9jYXRpb25zIGFuZCBtYXBwaW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHVzaW5nIG5ldGtpdCBvciB2ZXRoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmUzYWFjMjdjZDAwNDliNDVlMjJkNTE5OWE1ZWI0MjQ5OTY5ZjcwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA4OjQzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sXG5pbmRleCA1ZjE0M2RhNzQ1OGNmYi4uMWVlNjQzNDJkZjExYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmV0ZGV2LnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxuQEAgLTYsNiArNiwxMiBAQCBkb2M6IFx1MDAzZS1cbiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLlxuIFxuIGRlZmluaXRpb25zOlxuKyAgLVxuKyAgICB0eXBlOiBjb25zdFxuKyAgICBuYW1lOiBwYWdlLXNpemVcbisgICAgdmFsdWU6IDAgICMgZHVtbXk6IGNvZGVnZW4gbmVlZHMgYSBudW1iZXIsIHJlYWwgdmFsdWUgaXMgdGhlIFBBR0VfU0laRSBtYWNybyAoaGVhZGVyKVxuKyAgICBoZWFkZXI6IGFzbS9wYWdlLmhcbisgICAgc2NvcGU6IGtlcm5lbFxuICAgLVxuICAgICB0eXBlOiBmbGFnc1xuICAgICBuYW1lOiB4ZHAtYWN0XG5AQCAtNTk4LDYgKzYwNCwxNiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgY2hlY2tzOlxuICAgICAgICAgICBtaW46IDFcbisgICAgICAtXG4rICAgICAgICBuYW1lOiByeC1wYWdlLXNpemVcbisgICAgICAgIGRvYzogfFxuKyAgICAgICAgICBTaXplIGluIGJ5dGVzIG9mIGVhY2ggZGV2aWNlIHBhZ2UgdGhlIE5JQyB3cml0ZXMgaW50byBmcm9tIHRoZSBib3VuZFxuKyAgICAgICAgICBkbWFidWYuIE11c3QgYmUgYSBwb3dlciBvZiB0d28gYW5kIFx1MDAzZT0gUEFHRV9TSVpFOyBkZWZhdWx0cyB0b1xuKyAgICAgICAgICBQQUdFX1NJWkUuXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGNoZWNrczpcbisgICAgICAgICAgbWluOiBwYWdlLXNpemVcbisgICAgICAgICAgbWF4OiB1MzItbWF4XG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtODEyLDYgKzgyOCw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBpZmluZGV4XG4gICAgICAgICAgICAgLSBmZFxuICAgICAgICAgICAgIC0gcXVldWVzXG4rICAgICAgICAgICAgLSByeC1wYWdlLXNpemVcbiAgICAgICAgIHJlcGx5OlxuICAgICAgICAgICBhdHRyaWJ1dGVzOlxuICAgICAgICAgICAgIC0gaWRcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5AQCAtMjE5LDYgKzIxOSw3IEBAIGVudW0ge1xuIFx0TkVUREVWX0FfRE1BQlVGX1FVRVVFUyxcbiBcdE5FVERFVl9BX0RNQUJVRl9GRCxcbiBcdE5FVERFVl9BX0RNQUJVRl9JRCxcbitcdE5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsXG4gXG4gXHRfX05FVERFVl9BX0RNQUJVRl9NQVgsXG4gXHRORVRERVZfQV9ETUFCVUZfTUFYID0gKF9fTkVUREVWX0FfRE1BQlVGX01BWCAtIDEpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uY1xuaW5kZXggOTU3ZDZiOTYyMTZiMzMuLmIwMzZmMTRjYjIzYTE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcbisrKyBiL25ldC9jb3JlL2Rldm1lbS5jXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiBcbiBcdG93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XG4gXHRyZXR1cm4gb3duZXItXHUwMDNlYmFzZV9kbWFfYWRkciArXG4tXHQgICAgICAgKChkbWFfYWRkcl90KW5ldF9pb3ZfaWR4KG5pb3YpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIG93bmVyLVx1MDAzZWJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuQEAgLTkzLDEzICs5MywxNCBAQCBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiBcdHNzaXplX3Qgb2Zmc2V0O1xuIFx0c3NpemVfdCBpbmRleDtcbiBcbi1cdGRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy1cdTAwM2VjaHVua19wb29sLCBQQUdFX1NJWkUsXG4rXHRkbWFfYWRkciA9IGdlbl9wb29sX2FsbG9jX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCxcbitcdFx0XHRcdFx0MVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQsXG4gXHRcdFx0XHRcdCh2b2lkICoqKVx1MDAyNm93bmVyKTtcbiBcdGlmICghZG1hX2FkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0b2Zmc2V0ID0gZG1hX2FkZHIgLSBvd25lci1cdTAwM2ViYXNlX2RtYV9hZGRyO1xuLVx0aW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7XG4rXHRpbmRleCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuIFx0bmlvdiA9IFx1MDAyNm93bmVyLVx1MDAzZWFyZWEubmlvdnNbaW5kZXhdO1xuIFxuIFx0bmlvdi1cdTAwM2VkZXNjLnBwX21hZ2ljID0gMDtcbkBAIC0xMTMsMTIgKzExNCwxMyBAQCB2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xuIFx0dW5zaWduZWQgbG9uZyBkbWFfYWRkciA9IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpO1xuK1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuIFxuIFx0aWYgKFdBUk5fT04oIWdlbl9wb29sX2hhc19hZGRyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG4tXHRcdFx0XHQgICAgICAgUEFHRV9TSVpFKSkpXG4rXHRcdFx0XHQgICAgICAgbmlvdl9zaXplKSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cdTAwM2VjaHVua19wb29sLCBkbWFfYWRkciwgUEFHRV9TSVpFKTtcbitcdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cdTAwM2VjaHVua19wb29sLCBkbWFfYWRkciwgbmlvdl9zaXplKTtcbiB9XG4gXG4gdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG5AQCAtMTYzLDYgKzE2NSw5IEBAIGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxuIFx0dTMyIHhhX2lkeDtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0ICE9IFBBR0VfU0hJRlQpXG4rXHRcdG1wX3BhcmFtcy5yeF9wYWdlX3NpemUgPSAxVSBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuK1xuIFx0ZXJyID0gbmV0aWZfbXBfb3Blbl9yeHEoZGV2LCByeHFfaWR4LCBcdTAwMjZtcF9wYXJhbXMsIGV4dGFjayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE4NCwxMCArMTg5LDEyIEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXG4rXHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XG4rXHRzaXplX3Qgbmlvdl9zaXplID0gMVVMIFx1MDAzY1x1MDAzYyBuaW92X3NoaWZ0O1xuIFx0c3RhdGljIHUzMiBpZF9hbGxvY19uZXh0O1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG5AQCAtMjEzLDYgKzIyMCw3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcbiBcdGJpbmRpbmctXHUwMDNlZGV2ID0gZGV2O1xuIFx0YmluZGluZy1cdTAwM2V2ZGV2ID0gdmRldjtcbitcdGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCA9IG5pb3Zfc2hpZnQ7XG4gXHR4YV9pbml0X2ZsYWdzKFx1MDAyNmJpbmRpbmctXHUwMDNlYm91bmRfcnhxcywgWEFfRkxBR1NfQUxMT0MpO1xuIFxuIFx0ZXJyID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNmJpbmRpbmctXHUwMDNlcmVmLFxuQEAgLTI0OCwxOCArMjU2LDE0IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdFx0XHRnb3RvIGVycl91bm1hcDtcbiBcdFx0fVxuIFx0XHRiaW5kaW5nLVx1MDAzZXR4X3ZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldF9pb3YgKixcbi1cdFx0XHRcdFx0XHRkbWFidWYtXHUwMDNlc2l6ZSAvIFBBR0VfU0laRSk7XG4rXHRcdFx0XHRcdFx0ZG1hYnVmLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIG5pb3Zfc2hpZnQpO1xuIFx0XHRpZiAoIWJpbmRpbmctXHUwMDNldHhfdmVjKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl91bm1hcDtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0LyogRm9yIHNpbXBsaWNpdHkgd2UgZXhwZWN0IHRvIG1ha2UgUEFHRV9TSVpFIGFsbG9jYXRpb25zLCBidXQgdGhlXG4tXHQgKiBiaW5kaW5nIGNhbiBiZSBtdWNoIG1vcmUgZmxleGlibGUgdGhhbiB0aGF0LiBXZSBtYXkgYmUgYWJsZSB0b1xuLVx0ICogYWxsb2NhdGUgTVRVIHNpemVkIGNodW5rcyBoZXJlLiBMZWF2ZSB0aGF0IGZvciBmdXR1cmUgd29yay4uLlxuLVx0ICovXG4tXHRiaW5kaW5nLVx1MDAzZWNodW5rX3Bvb2wgPSBnZW5fcG9vbF9jcmVhdGUoUEFHRV9TSElGVCxcbitcdGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShuaW92X3NoaWZ0LFxuIFx0XHRcdFx0XHQgICAgICBkZXZfdG9fbm9kZShcdTAwMjZkZXYtXHUwMDNlZGV2KSk7XG4gXHRpZiAoIWJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuQEAgLTI3Myw5ICsyNzcsMTIgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHRzaXplX3QgbGVuID0gc2dfZG1hX2xlbihzZyk7XG4gXHRcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuIFxuLVx0XHRpZiAoIUlTX0FMSUdORUQobGVuLCBQQUdFX1NJWkUpKSB7XG4rXHRcdGlmICghSVNfQUxJR05FRChkbWFfYWRkciwgbmlvdl9zaXplKSB8fFxuK1x0XHQgICAgIUlTX0FMSUdORUQobGVuLCBuaW92X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiZG1hLWJ1ZiBTRyBsZW5ndGggbXVzdCBiZSBQQUdFX1NJWkUgYWxpZ25lZFwiKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcImRtYWJ1ZiBzZyBlbnRyeSAoYWRkcj0lcGFkLCBsZW49JXp1KSBub3QgYWxpZ25lZCB0byBuaW92IHNpemUgJXp1XCIsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmRtYV9hZGRyLCBsZW4sIG5pb3Zfc2l6ZSk7XG4gXHRcdFx0Z290byBlcnJfZnJlZV9jaHVua3M7XG4gXHRcdH1cbiBcbkBAIC0yODgsNyArMjk1LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFxuIFx0XHRvd25lci1cdTAwM2VhcmVhLmJhc2VfdmlydHVhbCA9IHZpcnR1YWw7XG4gXHRcdG93bmVyLVx1MDAzZWJhc2VfZG1hX2FkZHIgPSBkbWFfYWRkcjtcbi1cdFx0b3duZXItXHUwMDNlYXJlYS5udW1fbmlvdnMgPSBsZW4gLyBQQUdFX1NJWkU7XG4rXHRcdG93bmVyLVx1MDAzZWFyZWEubnVtX25pb3ZzID0gbGVuIFx1MDAzZVx1MDAzZSBuaW92X3NoaWZ0O1xuIFx0XHRvd25lci1cdTAwM2ViaW5kaW5nID0gYmluZGluZztcbiBcbiBcdFx0ZXJyID0gZ2VuX3Bvb2xfYWRkX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG5AQCAtMzEzLDcgKzMyMCw3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdFx0XHRwYWdlX3Bvb2xfc2V0X2RtYV9hZGRyX25ldG1lbShuZXRfaW92X3RvX25ldG1lbShuaW92KSxcbiBcdFx0XHRcdFx0XHQgICAgICBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihuaW92KSk7XG4gXHRcdFx0aWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKVxuLVx0XHRcdFx0YmluZGluZy1cdTAwM2V0eF92ZWNbb3duZXItXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgLyBQQUdFX1NJWkUgKyBpXSA9IG5pb3Y7XG4rXHRcdFx0XHRiaW5kaW5nLVx1MDAzZXR4X3ZlY1sob3duZXItXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgXHUwMDNlXHUwMDNlIG5pb3Zfc2hpZnQpICsgaV0gPSBuaW92O1xuIFx0XHR9XG4gXG4gXHRcdHZpcnR1YWwgKz0gbGVuO1xuQEAgLTQzMCwxMyArNDM3LDE1IEBAIHN0cnVjdCBuZXRfaW92ICpcbiBuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuIFx0XHQgICAgICAgc2l6ZV90IHZpcnRfYWRkciwgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSlcbiB7XG4rXHRzaXplX3Qgbmlvdl9zaXplID0gMVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQ7XG4rXG4gXHRpZiAodmlydF9hZGRyIFx1MDAzZT0gYmluZGluZy1cdTAwM2VkbWFidWYtXHUwMDNlc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHQqb2ZmID0gdmlydF9hZGRyICUgUEFHRV9TSVpFO1xuLVx0KnNpemUgPSBQQUdFX1NJWkUgLSAqb2ZmO1xuK1x0Km9mZiA9IHZpcnRfYWRkciBcdTAwMjYgKG5pb3Zfc2l6ZSAtIDEpO1xuK1x0KnNpemUgPSBuaW92X3NpemUgLSAqb2ZmO1xuIFxuLVx0cmV0dXJuIGJpbmRpbmctXHUwMDNldHhfdmVjW3ZpcnRfYWRkciAvIFBBR0VfU0laRV07XG4rXHRyZXR1cm4gYmluZGluZy1cdTAwM2V0eF92ZWNbdmlydF9hZGRyIFx1MDAzZVx1MDAzZSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnRdO1xuIH1cbiBcbiAvKioqIFwiRG1hYnVmIGRldm1lbSBtZW1vcnkgcHJvdmlkZXJcIiAqKiovXG5AQCAtNDU0LDcgKzQ2Myw3IEBAIGludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcbiBcdHBvb2wtXHUwMDNlZG1hX3N5bmMgPSBmYWxzZTtcbiBcdHBvb2wtXHUwMDNlZG1hX3N5bmNfZm9yX2NwdSA9IGZhbHNlO1xuIFxuLVx0aWYgKHBvb2wtXHUwMDNlcC5vcmRlciAhPSAwKVxuK1x0aWYgKHBvb2wtXHUwMDNlcC5vcmRlciAhPSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUKVxuIFx0XHRyZXR1cm4gLUUyQklHO1xuIFxuIFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoYmluZGluZyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNDAuLjRhMjkzYTdkMTE0OWM4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcbisrKyBiL25ldC9jb3JlL2Rldm1lbS5oXG5AQCAtNzEsNiArNzEsOCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XG4gXHQgKi9cbiBcdHN0cnVjdCBuZXRfaW92ICoqdHhfdmVjO1xuIFxuK1x0dW5zaWduZWQgaW50IG5pb3Zfc2hpZnQ7XG4rXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5iaW5kX3c7XG4gfTtcbiBcbkBAIC05Myw3ICs5NSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXG4rXHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKTtcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG5AQCAtMTIyLDEwICsxMjUsMTEgQEAgc3RhdGljIGlubGluZSB1MzIgbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4ge1xuLVx0c3RydWN0IG5ldF9pb3ZfYXJlYSAqb3duZXIgPSBuZXRfaW92X293bmVyKG5pb3YpO1xuK1x0c3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyICpjbyA9XG4rXHRcdG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xuIFxuLVx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfdmlydHVhbCArXG4tXHQgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdHJldHVybiBuZXRfaW92X293bmVyKG5pb3YpLVx1MDAzZWJhc2VfdmlydHVhbCArXG4rXHQgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpIFx1MDAzY1x1MDAzYyBjby1cdTAwM2ViaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2xcbkBAIC0xNzUsNiArMTc5LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1xuaW5kZXggZDE4Yzg5YjVhNmM3NTkuLmY4Mzc5MDM0MWVhZTY4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcbisrKyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jXG5AQCAtMTEsNiArMTEsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiBcbiAvKiBJbnRlZ2VyIHZhbHVlIHJhbmdlcyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX3BhZ2VfcG9vbF9pZF9yYW5nZSA9IHtcbkBAIC0yNyw2ICsyOCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBuZXRkZXZfYV9uYXBpX2RlZmVyX2hhcmRfaXJxc19yYW5nZVxuIFx0Lm1heFx0PSBTMzJfTUFYLFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfZG1hYnVmX3J4X3BhZ2Vfc2l6ZV9yYW5nZSA9IHtcbitcdC5taW5cdD0gUEFHRV9TSVpFLFxuK1x0Lm1heFx0PSBVMzJfTUFYLFxuK307XG4rXG4gLyogQ29tbW9uIG5lc3RlZCB0eXBlcyAqL1xuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9sZWFzZV9ubF9wb2xpY3lbTkVUREVWX0FfTEVBU0VfTkVUTlNfSUQgKyAxXSA9IHtcbiBcdFtORVRERVZfQV9MRUFTRV9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuQEAgLTEwNiwxMCArMTEyLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfcXN0YXRzX2dldF9ubF9wb2xpY3lbTkVUREVWX0FfUVNUQVRTX1NDT1BFXG4gfTtcbiBcbiAvKiBORVRERVZfQ01EX0JJTkRfUlggLSBkbyAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3lbTkVUREVWX0FfRE1BQlVGX0ZEICsgMV0gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeVtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFICsgMV0gPSB7XG4gXHRbTkVUREVWX0FfRE1BQlVGX0lGSU5ERVhdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXG4gXHRbTkVUREVWX0FfRE1BQlVGX0ZEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuIFx0W05FVERFVl9BX0RNQUJVRl9RVUVVRVNdID0gTkxBX1BPTElDWV9ORVNURUQobmV0ZGV2X3F1ZXVlX2lkX25sX3BvbGljeSksXG4rXHRbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXHUwMDI2bmV0ZGV2X2FfZG1hYnVmX3J4X3BhZ2Vfc2l6ZV9yYW5nZSksXG4gfTtcbiBcbiAvKiBORVRERVZfQ01EX05BUElfU0VUIC0gZG8gKi9cbkBAIC0yMTksNyArMjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XG4gXHRcdC5jbWRcdFx0PSBORVRERVZfQ01EX0JJTkRfUlgsXG4gXHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcbiBcdFx0LnBvbGljeVx0XHQ9IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeSxcbi1cdFx0Lm1heGF0dHJcdD0gTkVUREVWX0FfRE1BQlVGX0ZELFxuK1x0XHQubWF4YXR0clx0PSBORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLFxuIFx0XHQuZmxhZ3NcdFx0PSBHRU5MX1VOU19BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuIFx0fSxcbiBcdHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaCBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oXG5pbmRleCBkNzFiNDM1ZDcyYzE4Zi4uM2ZhZTg4ZThmNWM1MGUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaFxuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCArIDFdO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5pbmRleCBjMTVkOGQ0Y2ExZjhmYS4uMGVlYTRlZTIyZjI0NjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG4rKysgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5AQCAtMTAxMyw2ICsxMDEzLDcgQEAgbmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXG4gaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbitcdHVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XG4gXHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuQEAgLTEwMzAsNiArMTAzMSwxOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWZpbmRleCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfREVWX0lGSU5ERVhdKTtcbiBcdGRtYWJ1Zl9mZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfRE1BQlVGX0ZEXSk7XG4gXG4rXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSkge1xuK1x0XHR1MzIgcnhfcGFnZV9zaXplID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSk7XG4rXG4rXHRcdGlmICghaXNfcG93ZXJfb2ZfMihyeF9wYWdlX3NpemUpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0sXG4rXHRcdFx0XHRcdCAgICBcInJ4LXBhZ2Utc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMlwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRuaW92X3NoaWZ0ID0gaWxvZzIocnhfcGFnZV9zaXplKTtcbitcdH1cbitcbiBcdHByaXYgPSBnZW5sX3NrX3ByaXZfZ2V0KFx1MDAyNm5ldGRldl9ubF9mYW1pbHksIE5FVExJTktfQ0Ioc2tiKS5zayk7XG4gXHRpZiAoSVNfRVJSKHByaXYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2KTtcbkBAIC0xMDgwLDcgKzEwOTMsOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0fVxuIFxuIFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYobmV0ZGV2LCBOVUxMLCBkbWFfZGV2LCBETUFfRlJPTV9ERVZJQ0UsXG4tXHRcdFx0XHRcdCBkbWFidWZfZmQsIHByaXYsIGluZm8tXHUwMDNlZXh0YWNrKTtcbitcdFx0XHRcdFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcbitcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcbiBcdFx0Z290byBlcnJfcnhxX2JpdG1hcDtcbkBAIC0xMjIxLDcgKzEyMzUsNyBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXG4gXHRcdFx0XHRcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxuIFx0XHRcdFx0XHQgZG1hX2RldiwgRE1BX1RPX0RFVklDRSwgZG1hYnVmX2ZkLFxuLVx0XHRcdFx0XHQgcHJpdiwgaW5mby1cdTAwM2VleHRhY2spO1xuK1x0XHRcdFx0XHQgUEFHRV9TSElGVCwgcHJpdiwgaW5mby1cdTAwM2VleHRhY2spO1xuIFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuIFx0XHRnb3RvIGVycl91bmxvY2tfYmluZF9kZXY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5pbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuQEAgLTIxOSw2ICsyMTksNyBAQCBlbnVtIHtcbiBcdE5FVERFVl9BX0RNQUJVRl9RVUVVRVMsXG4gXHRORVRERVZfQV9ETUFCVUZfRkQsXG4gXHRORVRERVZfQV9ETUFCVUZfSUQsXG4rXHRORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLFxuIFxuIFx0X19ORVRERVZfQV9ETUFCVUZfTUFYLFxuIFx0TkVUREVWX0FfRE1BQlVGX01BWCA9IChfX05FVERFVl9BX0RNQUJVRl9NQVggLSAxKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxuaW5kZXggMDMxY2Y5OTA1ZjY1MWMuLjgyYzExZmZjNGFkZDdiIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHlcbkBAIC0yLDcgKzIsOCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiBmcm9tIG9zIGltcG9ydCBwYXRoXG4tZnJvbSBkZXZtZW1fbGliIGltcG9ydCBzZXR1cF90ZXN0LCBydW5fcngsIHJ1bl90eCwgcnVuX3R4X2NodW5rcywgcnVuX3J4X2hkc1xuK2Zyb20gZGV2bWVtX2xpYiBpbXBvcnQgKHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9yeF9sYXJnZV9uaW92KVxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X2Rpc3J1cHRpdmVcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnZcbiBcbkBAIC0zMCwxMSArMzEsMTcgQEAgZGVmIGNoZWNrX3J4X2hkcyhjZmcpIC1cdTAwM2UgTm9uZTpcbiAgICAgcnVuX3J4X2hkcyhjZmcpXG4gXG4gXG4rZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlJ1biB0aGUgZGV2bWVtIFJYIHRlc3Qgd2l0aCByeC1wYWdlLXNpemUgPSAxNiBLaUIuXCJcIlwiXG4rICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZylcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiUnVuIHRoZSBkZXZtZW0gdGVzdCBjYXNlcy5cIlwiXCJcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuICAgICAgICAgc2V0dXBfdGVzdChjZmcsIHBhdGguYWJzcGF0aChwYXRoLmRpcm5hbWUoX19maWxlX18pICsgXCIvbmNkZXZtZW1cIikpXG4tICAgICAgICBrc2Z0X3J1bihbY2hlY2tfcngsIGNoZWNrX3R4LCBjaGVja190eF9jaHVua3MsIGNoZWNrX3J4X2hkc10sXG4rICAgICAgICBrc2Z0X3J1bihbY2hlY2tfcngsIGNoZWNrX3R4LCBjaGVja190eF9jaHVua3MsIGNoZWNrX3J4X2hkcyxcbisgICAgICAgICAgICAgICAgICBjaGVja19yeF9sYXJnZV9uaW92XSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5pbmRleCAwOTIxZmYwM2ViODFjNS4uNmM5MzIwMThiNDYzYTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lLHRvby1tYW55LWFyZ3VtZW50c1xuIFwiXCJcIlNoYXJlZCBoZWxwZXJzIGZvciBkZXZtZW0gVENQIHNlbGZ0ZXN0cy5cIlwiXCJcbiBcbiBpbXBvcnQgcmVcbkBAIC04LDcgKzksNyBAQCBmcm9tIGxpYi5weSBpbXBvcnQgKGJrZywgY21kLCBkZWZlciwgZXRodG9vbCwgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuLFxuICAgICAgICAgICAgICAgICAgICAgTmV0ZGV2RmFtaWx5KVxuIFxuIFxuLWRlZiByZXF1aXJlX2Rldm1lbShjZmcpOlxuK2RlZiByZXF1aXJlX2Rldm1lbShjZmcsIHJ4X3BhZ2Vfc2l6ZT0wKTpcbiAgICAgXCJcIlwiUHJvYmUgbmNkZXZtZW0gb24gY2ZnLmlmbmFtZSBhbmQgU0tJUCB0aGUgdGVzdCBpZiBkZXZtZW0gaXNuJ3Qgc3VwcG9ydGVkLlwiXCJcIlxuICAgICBpZiBub3QgaGFzYXR0cihjZmcsIFwiZGV2bWVtX3Byb2JlZFwiKTpcbiAgICAgICAgIHByb2JlX2NvbW1hbmQgPSBmXCJ7Y2ZnLmJpbl9sb2NhbH0gLWYge2NmZy5pZm5hbWV9XCJcbkBAIC0xOCw2ICsxOSwxOSBAQCBkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnKTpcbiAgICAgaWYgbm90IGNmZy5kZXZtZW1fc3VwcG9ydGVkOlxuICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIlRlc3QgcmVxdWlyZXMgZGV2bWVtIHN1cHBvcnRcIilcbiBcbisgICAgaWYgcnhfcGFnZV9zaXplIFx1MDAzZSAwOlxuKyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCBcImRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkXCIpOlxuKyAgICAgICAgICAgIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZCA9IHt9XG4rXG4rICAgICAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZDpcbisgICAgICAgICAgICBwcm9iZV9jb21tYW5kID0gZlwie2NmZy5iaW5fbG9jYWx9IC1mIHtjZmcuaWZuYW1lfSAtYiB7cnhfcGFnZV9zaXplfVwiXG4rICAgICAgICAgICAgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkW3J4X3BhZ2Vfc2l6ZV0gPSBcXFxuKyAgICAgICAgICAgICAgICBjbWQocHJvYmVfY29tbWFuZCwgZmFpbD1GYWxzZSwgc2hlbGw9VHJ1ZSkucmV0ID09IDBcbitcbisgICAgICAgIGlmIG5vdCBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWRbcnhfcGFnZV9zaXplXTpcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuKyAgICAgICAgICAgICAgICBmXCJUZXN0IHJlcXVpcmVzIGRldm1lbSByeC1wYWdlLXNpemU9e3J4X3BhZ2Vfc2l6ZX0gc3VwcG9ydFwiKVxuK1xuIFxuIGRlZiBjb25maWd1cmVfbmljKGNmZyk6XG4gICAgIFwiXCJcIkNoYW5uZWxzLCByaW5ncywgUlNTLCBxdWV1ZSBsZWFzZSBmb3IgbmV0a2l0IGRldm1lbS5cIlwiXCJcbkBAIC03Niw3ICs5MCw4IEBAIGRlZiBzZXRfZmxvd19ydWxlKGNmZywgcG9ydCk6XG4gICAgIHJldHVybiBpbnQocmUuc2VhcmNoKHInSUQgKFxcZCspJywgb3V0cHV0KS5ncm91cCgxKSlcbiBcbiBcbi1kZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOlxuK2RlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSxcbisgICAgICAgICAgICAgICAgcnhfcGFnZV9zaXplPTApOlxuICAgICBcIlwiXCJCdWlsZCB0aGUgbmNkZXZtZW0gUlggbGlzdGVuZXIgY29tbWFuZC5cIlwiXCJcbiAgICAgaWYgaGFzYXR0cihjZmcsICduZXRucycpOlxuICAgICAgICAgZmxvd19ydWxlX2lkID0gc2V0X2Zsb3dfcnVsZShjZmcsIHBvcnQpXG5AQCAtOTYsNiArMTExLDggQEAgZGVmIG5jZGV2bWVtX3J4KGNmZywgcG9ydCwgdmVyaWZ5PVRydWUsIGZhaWxfb25fbGluZWFyPUZhbHNlLCBmbG93X3N0ZWVyPUZhbHNlKTpcbiAgICAgICAgIGV4dHJhcy5hcHBlbmQoXCItdiA3XCIpXG4gICAgIGlmIGZhaWxfb25fbGluZWFyOlxuICAgICAgICAgZXh0cmFzLmFwcGVuZChcIi1MXCIpXG4rICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcdTAwM2UgMDpcbisgICAgICAgIGV4dHJhcy5hcHBlbmQoZlwiLWIge3J4X3BhZ2Vfc2l6ZX1cIilcbiBcbiAgICAgcGFydHMgPSBbY2ZnLmJpbl9sb2NhbCwgXCItbFwiLCBmXCItZiB7aWZuYW1lfVwiLCBmXCItcyB7YWRkcn1cIixcbiAgICAgICAgICAgICAgZlwiLXAge3BvcnR9XCIsICpleHRyYXNdXG5AQCAtMjAyLDYgKzIxOSw0NCBAQCBkZWYgcnVuX3R4X2NodW5rcyhjZmcpOlxuICAgICBrc2Z0X2VxKHNvY2F0LnN0ZG91dC5zdHJpcCgpLCBcImhlbGxvXFxud29ybGRcIilcbiBcbiBcbitkZWYgX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzKGhwX2ZpbGUsIG5yX2h1Z2VwYWdlcyk6XG4rICAgIHdpdGggb3BlbihocF9maWxlLCAndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6XG4rICAgICAgICBmLndyaXRlKHN0cihucl9odWdlcGFnZXMpKVxuK1xuK1xuK2RlZiBydW5fcnhfbGFyZ2VfbmlvdihjZmcpOlxuKyAgICBcIlwiXCJSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggYSBsYXJnZSBuaW92IChyeC1wYWdlLXNpemUgXHUwMDNlIFBBR0VfU0laRSkuXG4rXG4rICAgIFN3ZWVwIHBheWxvYWQgc2l6ZXMgdGhhdCBzdHJhZGRsZSB0aGUgbmlvdiBib3VuZGFyeTogYmVsb3csIGVxdWFsIHRvLFxuKyAgICBhbmQgYWJvdmUgcnhfcGFnZV9zaXplLCB0byBleGVyY2lzZSBzdWItbmlvdiwgZXhhY3QtbmlvdiwgYW5kIG11bHRpLW5pb3ZcbisgICAgUlggcGF0aHMuXG4rICAgIFwiXCJcIlxuKyAgICBocF9maWxlID0gXCIvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzXCJcbisgICAgd2l0aCBvcGVuKGhwX2ZpbGUsICdyKycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6XG4rICAgICAgICBucl9odWdlcGFnZXMgPSBpbnQoZi5yZWFkKCkuc3RyaXAoKSlcbisgICAgICAgIGlmIG5yX2h1Z2VwYWdlcyBcdTAwM2MgNjQ6XG4rICAgICAgICAgICAgZi5zZWVrKDApXG4rICAgICAgICAgICAgZi53cml0ZShcIjY0XCIpXG4rICAgICAgICAgICAgZGVmZXIoX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzLCBocF9maWxlLCBucl9odWdlcGFnZXMpXG4rICAgIHJlcXVpcmVfZGV2bWVtKGNmZywgcnhfcGFnZV9zaXplPTE2Mzg0KVxuKyAgICBjb25maWd1cmVfbmljKGNmZylcbisgICAgbmV0bnMgPSBnZXRhdHRyKGNmZywgXCJuZXRuc1wiLCBOb25lKVxuK1xuKyAgICBmb3Igc2l6ZSBpbiBbMTAyNCwgNDA5NiwgODE5MiwgMTYzODQsIDMyNzY4LCA2NTUzNl06XG4rICAgICAgICBwb3J0ID0gcmFuZF9wb3J0KClcbisgICAgICAgIHNvY2F0ID0gc29jYXRfc2VuZChjZmcsIHBvcnQpXG4rICAgICAgICBsaXN0ZW5fY21kID0gbmNkZXZtZW1fcngoY2ZnLCBwb3J0LFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dfc3RlZXI9bm90IG5ldG5zLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3BhZ2Vfc2l6ZT0xNjM4NClcbisgICAgICAgIGRhdGFfcGlwZSA9IChmXCJ5ZXMgJChlY2hvIC1lIFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNikgfCBcIlxuKyAgICAgICAgICAgICAgICAgICAgIGZcImhlYWQgLWMge3NpemV9IHwge3NvY2F0fVwiKVxuKyAgICAgICAgd2l0aCBia2cobGlzdGVuX2NtZCwgZXhpdF93YWl0PVRydWUsIG5zPW5ldG5zKSBhcyBuY2Rldm1lbTpcbisgICAgICAgICAgICB3YWl0X3BvcnRfbGlzdGVuKHBvcnQsIHByb3RvPVwidGNwXCIsIG5zPW5ldG5zKVxuKyAgICAgICAgICAgIGNtZChkYXRhX3BpcGUsIGhvc3Q9Y2ZnLnJlbW90ZSwgc2hlbGw9VHJ1ZSlcbisgICAgICAgIGtzZnRfZXEobmNkZXZtZW0ucmV0LCAwLFxuKyAgICAgICAgICAgICAgICBmXCJsYXJnZS1uaW92IGZhaWxlZCBmb3IgcGF5bG9hZCBzaXplIHtzaXplfVwiKVxuK1xuK1xuIGRlZiBydW5fcnhfaGRzKGNmZyk6XG4gICAgIFwiXCJcIlJ1biB0aGUgSERTIHRlc3QgYnkgcnVubmluZyBkZXZtZW0gUlggYWNyb3NzIGEgc2VnbWVudCBzaXplIHN3ZWVwLlwiXCJcIlxuICAgICByZXF1aXJlX2Rldm1lbShjZmcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbmluZGV4IGQ5NmU4YTNiNWE2NTI2Li5mZmU4ZWIwNWZhYzBkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbkBAIC02MSw2ICs2Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZG1hYnVmLmhcdTAwM2VcbkBAIC03OSw2ICs4MSw3IEBAXG4gI2RlZmluZSBQQUdFX1NISUZUIDEyXG4gI2RlZmluZSBURVNUX1BSRUZJWCBcIm5jZGV2bWVtXCJcbiAjZGVmaW5lIE5VTV9QQUdFUyAxNjAwMFxuKyNkZWZpbmUgTUIoeCkgKCh4KSBcdTAwM2NcdTAwM2MgMjApXG4gXG4gI2lmbmRlZiBNU0dfU09DS19ERVZNRU1cbiAjZGVmaW5lIE1TR19TT0NLX0RFVk1FTSAweDIwMDAwMDBcbkBAIC0xMDAsNiArMTAzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XG4gc3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcbiBzdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwO1xuIHN0YXRpYyBib29sIGZhaWxfb25fbGluZWFyO1xuK3N0YXRpYyB1aW50MzJfdCByeF9wYWdlX3NpemU7XG4gXG4gLyogU3lzdGVtIHN0YXRlIGxvYWRlZCBieSBjdXJyZW50X2NvbmZpZ19sb2FkKCkgKi9cbiAjZGVmaW5lIE1BWF9GTE9XU1x0OFxuQEAgLTE0Miw2ICsxNDYsNyBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXG4ge1xuIFx0c3RydWN0IHVkbWFidWZfY3JlYXRlIGNyZWF0ZTtcbiBcdHN0cnVjdCBtZW1vcnlfYnVmZmVyICpjdHg7XG4rXHR1bnNpZ25lZCBpbnQgbWVtZmRfZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Y3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7XG5AQCAtMTU2LDkgKzE2MSwxNCBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfY3R4O1xuIFx0fVxuIFxuLVx0Y3R4LVx1MDAzZW1lbWZkID0gbWVtZmRfY3JlYXRlKFwidWRtYWJ1Zi10ZXN0XCIsIE1GRF9BTExPV19TRUFMSU5HKTtcbitcdG1lbWZkX2ZsYWdzID0gTUZEX0FMTE9XX1NFQUxJTkc7XG4rXHRpZiAocnhfcGFnZV9zaXplIFx1MDAzZSBnZXRwYWdlc2l6ZSgpKVxuK1x0XHRtZW1mZF9mbGFncyB8PSBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQjtcbitcbitcdGN0eC1cdTAwM2VtZW1mZCA9IG1lbWZkX2NyZWF0ZShcInVkbWFidWYtdGVzdFwiLCBtZW1mZF9mbGFncyk7XG4gXHRpZiAoY3R4LVx1MDAzZW1lbWZkIFx1MDAzYyAwKSB7XG4tXHRcdHByX2VycihcIltza2lwLG5vLW1lbWZkXVwiKTtcbitcdFx0cHJfZXJyKFwiW3NraXAsbm8tbWVtZmQlc11cIixcbitcdFx0ICAgICAgIChtZW1mZF9mbGFncyBcdTAwMjYgTUZEX0hVR0VUTEIpID8gXCIgKG5lZWQgaHVnZXBhZ2VzKVwiIDogXCJcIik7XG4gXHRcdGdvdG8gZXJyX2Nsb3NlX2RldjtcbiBcdH1cbiBcbkBAIC0xNjgsNiArMTc4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcbiBcdFx0Z290byBlcnJfY2xvc2VfbWVtZmQ7XG4gXHR9XG4gXG4rXHRpZiAobWVtZmRfZmxhZ3MgXHUwMDI2IE1GRF9IVUdFVExCKSB7XG4rXHRcdHNpemUgPSByb3VuZHVwKHNpemUsIE1CKDIpKTtcbitcdFx0Y3R4LVx1MDAzZXNpemUgPSBzaXplO1xuK1x0fVxuK1xuIFx0cmV0ID0gZnRydW5jYXRlKGN0eC1cdTAwM2VtZW1mZCwgc2l6ZSk7XG4gXHRpZiAocmV0ID09IC0xKSB7XG4gXHRcdHByX2VycihcIltGQUlMLG1lbWZkLXRydW5jYXRlXVwiKTtcbkBAIC02OTksNiArNzE0LDggQEAgc3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxuIFx0bmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9pZmluZGV4KHJlcSwgaWZpbmRleCk7XG4gXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X2ZkKHJlcSwgZG1hYnVmX2ZkKTtcbiBcdF9fbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9xdWV1ZXMocmVxLCBxdWV1ZXMsIG5fcXVldWVfaW5kZXgpO1xuK1x0aWYgKHJ4X3BhZ2Vfc2l6ZSlcbitcdFx0bmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9yeF9wYWdlX3NpemUocmVxLCByeF9wYWdlX3NpemUpO1xuIFxuIFx0cnNwID0gbmV0ZGV2X2JpbmRfcngoKnlzLCByZXEpO1xuIFx0aWYgKCFyc3ApIHtcbkBAIC0xNDExLDcgKzE0MjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aW50IGlzX3NlcnZlciA9IDAsIG9wdDtcbiBcdGludCByZXQsIGVyciA9IDE7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIkxsczpjOnA6djpxOnQ6Zjp6Om5cIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIkxsczpjOnA6djpxOnQ6Zjp6Om5iOlwiKSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAnTCc6XG4gXHRcdFx0ZmFpbF9vbl9saW5lYXIgPSB0cnVlO1xuQEAgLTE0NDYsNiArMTQ2MywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRza2lwX2NvbmZpZyA9IDE7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2InOiB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyB2YWw7XG4rXG4rXHRcdFx0ZXJybm8gPSAwO1xuK1x0XHRcdHZhbCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoKHZhbCA9PSBVTE9OR19NQVggXHUwMDI2XHUwMDI2IGVycm5vID09IEVSQU5HRSkgfHxcbitcdFx0XHQgICAgdmFsIFx1MDAzZSBVSU5UMzJfTUFYKSB7XG4rXHRcdFx0XHRwcl9lcnIoXCJpbnZhbGlkIHJ4X3BhZ2Vfc2l6ZTogJXNcIiwgb3B0YXJnKTtcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdH1cbitcdFx0XHRyeF9wYWdlX3NpemUgPSB2YWw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0Y2FzZSAnPyc6XG4gXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwidW5rbm93biBvcHRpb246ICVjXFxuXCIsIG9wdG9wdCk7XG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5XG5pbmRleCAzMDBlZDJhNzBhYjQ0ZC4uNjFjNmYzMWYwMWU1MWUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weVxuQEAgLTMsNyArMyw4IEBAXG4gXCJcIlwiVGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LlwiXCJcIlxuIFxuIGltcG9ydCBvc1xuLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHNcbitmcm9tIGRldm1lbV9saWIgaW1wb3J0IChzZXR1cF90ZXN0LCBydW5fcngsIHJ1bl90eCwgcnVuX3R4X2NodW5rcywgcnVuX3J4X2hkcyxcbisgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdilcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkNvbnRFbnZcbiBcbkBAIC0zMSw2ICszMiwxMSBAQCBkZWYgY2hlY2tfbmtfcnhfaGRzKGNmZykgLVx1MDAzZSBOb25lOlxuICAgICBydW5fcnhfaGRzKGNmZylcbiBcbiBcbitkZWYgY2hlY2tfbmtfcnhfbGFyZ2VfbmlvdihjZmcpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiUnVuIHRoZSBkZXZtZW0gUlggbGFyZ2UtbmlvdiB0ZXN0IHRocm91Z2ggbmV0a2l0LlwiXCJcIlxuKyAgICBydW5fcnhfbGFyZ2VfbmlvdihjZmcpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIlJ1biB0aGUgbmV0a2l0IGRldm1lbSB0ZXN0IGNhc2VzLlwiXCJcIlxuICAgICB3aXRoIE5ldERydkNvbnRFbnYoX19maWxlX18sIHJ4cXVldWVzPTIsIHByaW1hcnlfcnhfcmVkaXJlY3Q9VHJ1ZSkgYXMgY2ZnOlxuQEAgLTM4LDcgKzQ0LDcgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5jZGV2bWVtXCIpKVxuICAgICAgICAga3NmdF9ydW4oW2NoZWNrX25rX3J4LCBjaGVja19ua190eCwgY2hlY2tfbmtfdHhfY2h1bmtzLFxuLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKVxuKyAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkcywgY2hlY2tfbmtfcnhfbGFyZ2Vfbmlvdl0sIGFyZ3M9KGNmZywpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MTguMjQ2NzA4MjQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0Mjg2NzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJYIFBhZ2UgU2l6ZSBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgcngtcGFnZS1zaXplYCBhdHRyaWJ1dGUgd2l0aGluIHRoZSBuZXRkZXYgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYE5FVERFVl9DTURfQklORF9SWGAgY29tbWFuZC4gVGhlIGlkZWEgaXMgdG8gbGV0IHVzIGNvbmZpZ3VyZSB0aGUgcGFnZSBzaXplIHRoYXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgdXNlcyB3aGVuIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSBib3VuZCBETUEgYnVmZmVyLiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgdGFyZ2V0ZWQgZmVhdHVyZSwgZm9jdXNlZCBvbiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIERNQSBidWZmZXIgYmVoYXZpb3IuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1bmN0aW9uYWw/IExvb2tpbmcgZGVlcGVyLCBpdCdzIG1vZGlmeWluZyBjb3JlIG5ldHdvcmtpbmcgZmlsZXM6IGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYC4gT2theSwgc28gaXQncyBub3Qgc29tZSBvYnNjdXJlLCBuaWNoZSBkcml2ZXI7IHRoaXMgaXMgdG91Y2hpbmcgdGhlIGFjdHVhbCBkZXZtZW0gVENQIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgYSBzb2xpZCB2b3RlIG9mIGNvbmZpZGVuY2UuXG5cbk5leHQgcXVlc3Rpb246IGlzIHRoaXMgdGVzdGFibGUgYW5kIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBXZSdyZSBvZnRlbiBzdHVjayB3aXRoIHRlc3RpbmcgdGhlc2UgbG93ZXItbGV2ZWwgdGhpbmdzIG9uIHJlYWwgaGFyZHdhcmUsIHdoaWNoIGlzIGEgcGFpbi4gQnV0IGhvbGQgb24uLi4gaXQgbWVudGlvbnMgYG5ldGtpdGAgYW5kIGB2ZXRoYCBkZXZpY2VzLCBhbmQgdGhlcmUgYXJlIHNlbGZ0ZXN0cyBsaWtlIGBua19kZXZtZW0ucHlgIHRoYXQgdXRpbGl6ZSBgTmV0RHJ2Q29udEVudmAgKG5ldGtpdCkuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgKmNhbiogdGVzdCB0aGlzIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhlIHNlbGZ0ZXN0IGl0c2VsZiBsaXRlcmFsbHkgc3RhdGVzIFwiVGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LFwiIHNvIHRoZSBhbnN3ZXIgaXMgeWVzLiBWZXJ5IGdvb2QuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29kZSBtb2RpZmljYXRpb25zIHRoZW1zZWx2ZXMuIEluIGBuZXQvY29yZS9kZXZtZW0uY2AsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgdXNlIG9mIGBQQUdFX1NISUZUYCB0byBgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0YC4gT2theSwgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ug4oCTIHJlcGxhY2luZyBhIGZpeGVkIHBhZ2Ugc2l6ZSB3aXRoIGEgY29uZmlndXJhYmxlIG9uZSwgYmFzZWQgb24gdGhlIGJpbmRpbmcuIFdlIG5lZWQgdG8gY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDpcblxuKiAgIGBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcmBcbiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgXG4qICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgXG4qICAgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGBcblxuVGhhdCBsaXN0IGNvbmZpcm1zIHRoZSBjaGFuZ2UgaXMgaW5mbHVlbmNpbmcgY29yZSBidWZmZXIgYWxsb2NhdGlvbiwgYmluZGluZywgYW5kIG1hbmFnZW1lbnQuXG5cbkluIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNjb3BlZCB0byB0aGUgTmV0bGluayBjb21tYW5kIGhhbmRsZXJzOlxuXG4qICAgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgXG4qICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgXG5cbk9rYXksIHRoaXMgYWxsIGxpbmVzIHVwOiB3ZSBoYXZlIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIHRoYXQgd2UgZmVlZCBpbnRvIHRoZSBgTkVUREVWX0NNRF9CSU5EX1JYYCBjb21tYW5kIGhhbmRsZXIsIHdoaWNoIHRoZW4gYWZmZWN0cyB0aGUgYGRldm1lbWAgVENQIHJvdXRpbmVzIGFuZCBhc3NvY2lhdGVkIHNlbGZ0ZXN0cy4gT3ZlcmFsbCwgdGhlIGxvZ2ljIGFwcGVhcnMgc291bmQsIGJ1dCBJIG5lZWQgdG8gZXhhbWluZSB0aGUgbmV3IGF0dHJpYnV0ZSdzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgd29yayBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODU5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MjYuNTg5NTc4NTcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mjc3NjMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYz0xNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjYtXFx0XFx0LmNtZFxcdFxcdD0gTkVUREVWX0NNRF9CSU5EX1JYLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjIyNzpcXHRcXHQuZG9pdFxcdFxcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjgtXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg9MzY9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oLTM3LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6Mzg6aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMzktaW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05ODk9bmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTItXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDEzOmludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MzIuMzE3MzQ4MjAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3Mjk2NjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0bGluay9EZXZtZW0gUGF0Y2gqKlxuXG5SaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgZm91bmRhdGlvbmFsIHN0dWZmIOKAkyBjb3JlIG5ldGRldiBuZXRsaW5rIGNvZGUgYW5kIHRoZSBkZXZtZW0gcm91dGluZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIGFib3V0IHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBCZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJICpuZWVkKiB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gU28sIEknbSB0aGlua2luZywgXCJPa2F5LCB3aGF0IGtlcm5lbCBjb25maWdzIGFyZSAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IGZvciB0aGlzIGRldm1lbSBpbnRlcmFjdGlvbiB0byBldmVuIGZ1bmN0aW9uIHByb3Blcmx5P1wiIFRoYXQncyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCBjb3JyZWN0bHkgYmVmb3JlIEkgd2FzdGUgbXkgdGltZSB0cnlpbmcgdG8gZGVidWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyByZXF1aXJlZCBzbyBJIGNhbiBwcm9jZWVkIHdpdGggYSBjbGVhbiBiaWxsIG9mIGhlYWx0aC4gV2hhdCdzIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0PyBNYXliZSBJIHNob3VsZCB0cmFjayBkb3duIGRvY3VtZW50YXRpb24gYWJvdXQgZGV2bWVtIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQzOjM2LjM5MDMxNjk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTI2MjQ0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9ERVZNRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuLS1cXG5uZXQvS2NvbmZpZy02OC1cXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxcbm5ldC9LY29uZmlnLTcwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6NDAuMzAyOTUwMjE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczNDM2MzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRmxhZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYGRlZl9ib29sIHlgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcXVlc3Rpb24gaW4gbXkgbWluZC4gQSBgZGVmX2Jvb2xgIHN1Z2dlc3RzIGEgZGVmYXVsdCAneWVzJyBjb25maWd1cmF0aW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbG9naWMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBgbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkLiBJcyBpdCB0aWVkIHRvIG90aGVyIG5ldHdvcmsgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEknbSBtaXNzaW5nIGF0IGZpcnN0IGdsYW5jZT8gSSB3YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgKndoeSogdGhpcyBkZWZhdWx0IGlzICd5JyBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wYWN0cyBhcmUgaW52b2x2ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJ20gbG9va2luZyBmb3IgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQzOjQ3LjAzNzMxNzEyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0Mzo0Ny4wMzc3ODgzODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNjc5MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipFeGFtaW5pbmcgRGVwZW5kZW5jaWVzIGluIGEgRGV2aWNlIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBORVRfREVWTUVNYCBoZXJlLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyByZWxhdGVkIHRvIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgaXRzIGRlcGVuZGVuY3kgY2hhaW4uIEkga25vdyBgTkVUX0RFVk1FTWAgcmVsaWVzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIEFscmlnaHQsIGxldCdzIHRha2UgdGhlc2Ugb25lIGF0IGEgdGltZS4gSSdtIGFzc3VtaW5nIHRoYXQgYFBBR0VfUE9PTGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkIGluIGEgbW9kZXJuIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGZpbmUuIE15IG1haW4gY29uY2VybiBpcyByZWFsbHkgYERNQV9TSEFSRURfQlVGRkVSYCBzaW5jZSB0aGF0J3MgdGhlIG1vcmUgc3BlY2lmaWMgZGVwZW5kZW5jeS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCdzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIzMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6NTAuNjA4NDcyMTA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkwOTE0ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0Mzo1NC44OTkzOTU3OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMzAyMTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIHRoZSBETUEgU2hhcmVkIEJ1ZmZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBETUEtQlVGIGFyZSBkZWZpbmVkLCBpbmNsdWRpbmcgdGhlIGBETUFfU0hBUkVEX0JVRkZFUmAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBvcHRpb24gY29udHJvbHMgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgZ3JvdW5kaW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQzOjU3LjgwMjQyMDE2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDEzNjU2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6NTcuOTMwNDQzOTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTk0NDkzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSByZW1lbWJlciBzZWVpbmcgYGNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUmAgZGVmaW5lZCBzb21ld2hlcmUsIGFuZCBJIHRoaW5rIGl0IHdhcyBpbiBgZHJpdmVycy9iYXNlL0tjb25maWdgLiBMZXQgbWUgZ28gY2hlY2sgdGhhdCBmaWxlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgdGhhdCBvcHRpb24gaXMgY29udHJvbGxpbmcgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcy4gR290dGEgZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjAwLjc0OTg5NzA1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdFxcdGJvb2xcXG4gMjExOlxcdFxcdHNlbGVjdCBHTE9CXFxuIDIxMjpcXHRcXG4gMjEzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjE2OlxcdFxcdGJvb2xcXG4gMjE3OlxcdFxcdGRlZmF1bHQgblxcbiAyMTg6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDIxOTpcXHRcXHRoZWxwXFxuIDIyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxcbiAyMjE6XFx0XFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxcbiAyMjI6XFx0XFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUncyBkZXNjcmlwdG9yIGNhbiB0aGVuIGJlIHBhc3NlZCBvbiB0byBvdGhlclxcbiAyMjM6XFx0XFx0ICBkcml2ZXIuXFxuIDIyNDpcXHRcXG4gMjI1OlxcdGNvbmZpZyBETUFfRkVOQ0VfVFJBQ0VcXG4gMjI2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1xcXCJcXG4gMjI3OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjI4OlxcdFxcdGhlbHBcXG4gMjI5OlxcdFxcdCAgRW5hYmxlIHRoZSBETUFfRkVOQ0VfVFJBQ0UgcHJpbnRrcy4gVGhpcyB3aWxsIGFkZCBleHRyYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDowMC43NTAwNDIzMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NjQ1OTc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERNQSBTaGFyZWQgQnVmZmVyIGFuZCBEZXZtZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBjdXJyZW50bHkgYSBib29sZWFuLCBkZWZhdWx0aW5nIHRvICduJy4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSB0aGlzLiBXYWl0IGEgc2Vjb25kLCB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBpbnRlcmVzdGluZy4gYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLCBidXQgaXQgZGVwZW5kcyBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBTbywgaWYgd2UgZW5hYmxlIGBETUFfU0hBUkVEX0JVRkZFUmAsIGBORVRfREVWTUVNYCB3aWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseS4gVGhhdCBtYWtlcyB0aGluZ3MgZWFzaWVyLlxuXG5Ob3csIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2UgbmVlZCB0byBjb25zaWRlci4gVGhlIHBhdGNoIGFmZmVjdHMgYG5ldC9jb3JlL2Rldm1lbS5jYCBhbmQgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBzbyB0aG9zZSBhcmUgdGhlIGFyZWFzIHRvIGZvY3VzIG9uLlxuXG5UaGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGFyZTpcblxuKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YFxuKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YFxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcblxuTGV0J3Mgc2VlIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIG5vdCwgYW5kIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBpcyBpbiBgbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY2AgYW5kIGlzIG5vdCBzdGF0aWMsIG1lYW5pbmcgaXQncyBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIG5vbi1zdGF0aWMuIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBub24tc3RhdGljLiBGaW5hbGx5LCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBuZXQvY29yZS9kZXZtZW0uY2AuIEdvb2QsIGFsbCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUuXG5cbkxldCBtZSBqdXN0IGxpc3QgdGhvc2UgZnVuY3Rpb25zIG9uZSBtb3JlIHRpbWUgdG8ga2VlcCB0aGVtIHRvcCBvZiBtaW5kOlxuXG4qICAgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgXG4qICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgXG4qICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYFxuXG5Ob3cgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgSSdtIG1pc3NpbmcuIFJpZ2h0LCBgUEFHRV9QT09MYCBpcyBhIGdvb2Qgb25lIHRvIHJlbWVtYmVyOyBuZXR3b3JraW5nIGRyaXZlcnMgY29tbW9ubHkgc2VsZWN0IHRoYXQuIExvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBhZ2FpbiwgYE5FVF9ERVZNRU1gIGlzIGBkZWZfYm9vbCB5YCBhbmQgZGVwZW5kcyBvbiAqYm90aCogYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFNvLCB3ZSAqc3RpbGwqIG5lZWQgYERNQV9TSEFSRURfQlVGRkVSYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgIGFnYWluIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MDguOTA2NTA2MDI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIxODE5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTg3PXN0cnVjdCBuZXRfaW92ICpcXG5uZXQvY29yZS9kZXZtZW0uYzo4ODpuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG5uZXQvY29yZS9kZXZtZW0uYy04OS17XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYz00NzM9bmV0bWVtX3JlZiBtcF9kbWFidWZfZGV2bWVtX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtNDc4LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQ3OTpcXHRuaW92ID0gbmV0X2Rldm1lbV9hbGxvY19kbWFidWYoYmluZGluZyk7XFxubmV0L2NvcmUvZGV2bWVtLmMtNDgwLVxcdGlmICghbmlvdilcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTE1MD1zdHJ1Y3QgbmV0X2lvdiAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MTUxOm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG5uZXQvY29yZS9kZXZtZW0uaC0xNTItdm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdik7XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2lvdiAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjA5Om5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjEzLjEyODMzMTMzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU3ODA3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBETUEgQnVmZmVyIEFsbG9jYXRpb24gYW5kIERlYWxsb2NhdGlvbiBpbiBOZXR3b3JrIERldmljZSBNZW1vcnkqKlxuXG5SaWdodCwgc28gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBpcyBkZWZpbml0aXZlbHkgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgZ29vZCB0byBrbm93OyBpdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgZ2l2ZW4gdGhhdCBpdCdzIGFjY2Vzc2libGUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JyZXNwb25kaW5nIGZyZWVpbmcgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBzdGF5cyB0aWR5IGFuZCBwcmVkaWN0YWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW9ucyBhcmUgZGVhbGxvY2F0ZWQgYXQgc29tZSBwb2ludC4gTGV0J3MgbWFrZSBzdXJlIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBkb2luZyBpdHMgam9iIGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBzYW1lIGFjY2Vzc2liaWxpdHkgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODI1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MTYuMTg2MTQ0NTQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYxNjUzNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fZnJlZV9kbWFidWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2bWVtLmM9ODg9bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0xMTItXFxubmV0L2NvcmUvZGV2bWVtLmM6MTEzOnZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG5uZXQvY29yZS9kZXZtZW0uYy0xMTQte1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9NDk5PWJvb2wgbXBfZG1hYnVmX2Rldm1lbV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0pXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy01MTAtXFxubmV0L2NvcmUvZGV2bWVtLmM6NTExOlxcdG5ldF9kZXZtZW1fZnJlZV9kbWFidWYobmV0bWVtX3RvX25ldF9pb3YobmV0bWVtKSk7XFxubmV0L2NvcmUvZGV2bWVtLmMtNTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTUxPW5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTI6dm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdik7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTUzLVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MjA5PW5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmgtMjEzLVxcbm5ldC9jb3JlL2Rldm1lbS5oOjIxNDpzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjE1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MjIuMDQ3ODA1NzIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTYwOTkyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeTpcblxuKipBbmFseXppbmcgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgIGFuZCBQb3RlbnRpYWwgUXVldWUgQmluZGluZyoqXG5cblJpZ2h0LCBzbyBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSB3YW50ZWQgdG8gY29uZmlybS4gTm93IHRoYXQgdGhhdCdzIGNsZWFyZWQgdXAsIGl0J3MgdGltZSB0byBzaGlmdCBmb2N1cyBhbmQgc3RhcnQgaW52ZXN0aWdhdGluZyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHJlbGF0aW9uIHRvIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYC4gR2l2ZW4gdGhhdCBJIGtub3cgdGhlIGZvcm1lciBpc24ndCBzdGF0aWMsIGhvdyBtaWdodCB0aGF0IGZhY3RvciBpbnRvIHRoZSBxdWV1ZSBiaW5kaW5nIHByb2Nlc3MuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgY3Jvc3MtcmVmZXJlbmNlcyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjI1LjI2MzkxNjczM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1MTM0Njc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTEwMj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XFxubmV0L2NvcmUvZGV2bWVtLmg6MTAzOmludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwNC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xOTk9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvY29yZS9kZXZtZW0uaDoyMDA6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uaC0yMDEtXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEwMTM9aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwMy1cXHRmb3JfZWFjaF9zZXRfYml0KHJ4cV9pZHgsIHJ4cV9iaXRtYXAsIG5ldGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMTA0OlxcdFxcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDoyOS40MTUyNjkzMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NDI3MDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnRlcm5hbCBSZXZpZXcgb2YgRE1BIEJ1ZmZlciBCaW5kaW5nKipcblxuUmlnaHQsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gVGhhdCdzIHdoYXQgSSBleHBlY3RlZCwgZ2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGV4dGVybmFsIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgcmUtdXNlLiBOb3csIGxldCdzIHBpdm90IHRvIGV4YW1pbmUgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHF1ZXVlLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGdldCBhIGZ1bGwgZ3Jhc3Agb2YgdGhlIGJpbmRpbmcgcHJvY2VzcyBhbmQgYW55IHBvc3NpYmxlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIGlzIHRoZSBjb3JlIGZsb3csIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMgaXMga2V5IGZvciB0aGlzIGxldmVsIG9mIGFuYWx5c2lzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MzIuNTY5NTQzOTUxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ1Mjk0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjE1NjppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9MTg4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uYzoxODk6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5jLTE5MC1cXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTk0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDo5NTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtOTYtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xMDI9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uaC0xMDQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE3ODpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtMTc5LVxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTk5PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L2NvcmUvZGV2bWVtLmg6MjAwOm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTQtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDk1OlxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5Ni1cXHRcXHRcXHRcXHRcXHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVxcdGZvcl9lYWNoX3NldF9iaXQocnhxX2lkeCwgcnhxX2JpdG1hcCwgbmV0ZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XFx0XFx0ZXJyID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShuZXRkZXYsIHJ4cV9pZHgsIGJpbmRpbmcsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExNjk9aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzNC1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEyMzU6XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM2LVxcdFxcdFxcdFxcdFxcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDozNy40MTQ5MDI3ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODQ1MzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGtub3dsZWRnZWFibGUgYWJvdXQgdGhlIHN1YmplY3Q6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgbmV0X2Rldm1lbWAgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBTbywgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGlzIGNvbmZpcm1lZCAqbm90KiB0byBiZSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgb3BlbnMgdXAgY2VydGFpbiBwb3NzaWJpbGl0aWVzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBpdCBvdXRzaWRlIG9mIGl0cyB0eXBpY2FsIGNvbnRleHQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgc2hpZnQgbXkgZm9jdXMgb3ZlciB0byBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvLiBJdCdzIGxpa2VseSB0aGF0IGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBpcyBwcm92aWRpbmcgc29tZSBvZiB0aGUgZm91bmRhdGlvbmFsIGRhdGEgb3IgbWVjaGFuaXNtcyB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB1dGlsaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdHMgb3V0cHV0IGlzIHVzZWQuIFRoaXMgbWlnaHQgcmV2ZWFsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIG9yIG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdCBpbiB0aGUgYG5ldF9kZXZtZW1gIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDo0MC43OTMzNjA1NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg3MjM5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9nZXRfbmlvdl9hdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcyNy1cXHRcXHR2aXJ0X2FkZHIgPSAoc2l6ZV90KWl0ZXJfaW92X2FkZHIoZnJvbSk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3Mjg6XFx0XFx0bmlvdiA9IG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXQoYmluZGluZywgdmlydF9hZGRyLCBcXHUwMDI2b2ZmLCBcXHUwMDI2c2l6ZSk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MjktXFx0XFx0aWYgKCFuaW92KVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9NDM2PXN0cnVjdCBuZXRfaW92ICpcXG5uZXQvY29yZS9kZXZtZW0uYzo0Mzc6bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG5uZXQvY29yZS9kZXZtZW0uYy00MzgtXFx0XFx0ICAgICAgIHNpemVfdCB2aXJ0X2FkZHIsIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTc9c3RydWN0IG5ldF9pb3YgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1ODpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcXG5uZXQvY29yZS9kZXZtZW0uaC0xNTktXFx0XFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpO1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MjM0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9pb3YgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjIzNTpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcXG5uZXQvY29yZS9kZXZtZW0uaC0yMzYtXFx0XFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjQ1LjM2MjA5NDI3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1MDIzMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBhbmQgUmVsYXRlZCBJbml0aWFsaXphdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGF0IGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgbGV0J3MgcGl2b3QgdG8gaW52ZXN0aWdhdGluZyB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGBtcF9kbWFidWZfZGV2bWVtX2luaXRgIHdvcmtzLiBJdCdzIGEga2V5IHBhcnQgb2YgaG93IHRoaXMgYWxsIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIERNQUJVRiBpbXBsZW1lbnRhdGlvbiB0aWVzIGludG8gdGhlIG1lbW9yeSBkZXZpY2UgYW5kIG5ldCBpbnRlcmZhY2UsIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGZlYXR1cmUgbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjA5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6NDguNDc3MTIwODMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDUwMjEwMDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wX2RtYWJ1Zl9kZXZtZW1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz00Mzc9bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ1Mi1cXG5uZXQvY29yZS9kZXZtZW0uYzo0NTM6aW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ1NC17XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYz01NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzID0ge1xcbm5ldC9jb3JlL2Rldm1lbS5jOjU0ODpcXHQuaW5pdFxcdFxcdFxcdD0gbXBfZG1hYnVmX2Rldm1lbV9pbml0LFxcbm5ldC9jb3JlL2Rldm1lbS5jLTU0OS1cXHQuZGVzdHJveVxcdFxcdD0gbXBfZG1hYnVmX2Rldm1lbV9kZXN0cm95LFxcbi0tXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTEzLSNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoxNDppbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpO1xcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xNS1cXG4tLVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaD0yMD1ib29sIG1wX2RtYWJ1Zl9kZXZtZW1fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIG5ldG1lbV9yZWYgbmV0bWVtKTtcXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMjEtI2Vsc2VcXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MjI6c3RhdGljIGlubGluZSBpbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6NTIuNTI3MzM3MDc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzI2NDI4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGRtYWJ1ZiBEZXZtZW0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQncyBpbXBvcnRhbnQuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpc24ndCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgdGhlIGxpa2VseSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgb25lcyB0aGF0IHVzZSBvciBjYWxsIGl0LiBTbywgdGhhdCBsaXN0IHNob3VsZCBpbmNsdWRlOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgLCBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCwgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgLCBhbmQsIG9mIGNvdXJzZSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXRzZWxmLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIFJpZ2h0LCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpcyBjYWxsZWQgYnkgYHBhZ2VfcG9vbF9pbml0YCB3aGVuIHdlJ3JlIHVzaW5nIGRtYWJ1ZiBhcyB0aGUgbWVtb3J5IHByb3ZpZGVyLiBPa2F5LCB0aGF0J3MgY3J1Y2lhbCBjb250ZXh0LiBBbmQgSSBzZWUgdGhhdCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAgaXNuJ3QgZnVuZGFtZW50YWxseSBhbHRlcmVkOyBpdCBqdXN0IGluY29ycG9yYXRlcyBgUEFHRV9TSElGVGAgbm93LCBidXQgaXQncyBwYXJ0IG9mIHRoZSBmZWF0dXJlLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCB0byBwYXJzZSB0aGlzIGBORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFYCBhdHRyaWJ1dGUuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFdoYXQncyAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIHdvcms/IEkga25vdyBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGZvciBgTkVUX0RFVk1FTWAuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3PigKYgUmlnaHQsIGBORVRfREVWTUVNYCBpcyBhIFwiZGVmX2Jvb2wgeVwiIGRlcGVuZGVudCBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgICphbmQqIGBQQUdFX1BPT0xgLiBBbmQgYFBBR0VfUE9PTGAgaXMgYSBcImJvb2xcIiBvcHRpb24sIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycy4gQ2FuIEkgZW5hYmxlIGBQQUdFX1BPT0xgIGRpcmVjdGx5PyBObywgc2VlbXMgbGlrZSBpdCdzIHNlbGVjdGVkLiBJIGNhbiBsaXN0IGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAsIGJ1dCBgRE1BX1NIQVJFRF9CVUZGRVJgIHNob3VsZCBiZSBzdWZmaWNpZW50LiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgb24gYG5ldC9LY29uZmlnYCBmb3IgYFBBR0VfUE9PTGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODY3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjU4Ljg1OTk4Mzk1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MDMzMTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTowMy4yMjAzMjA2NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5ODMzMzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIEtjb25maWcgT3B0aW9ucyBhbmQgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBQQUdFX1BPT0xgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQuIFRoYXQgbWVhbnMgaXQncyBhIGZpeGVkIHNlbGVjdGlvbiwgbGlrZWx5IGNvbnRyb2xsZWQgYnkgdGhlIGRyaXZlciBpdHNlbGYsIGFuZCBjYW4ndCBiZSBzZXQgZGlyZWN0bHkgaW4gdGhlIGNvbmZpZyBtZW51LiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgbGlzdGVkIGluIGBFbmFibGVDb25maWdzYC4gUHJvYmFibHkgbm90LCBzaW5jZSBpdCdzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuIEJ1dCBtYXliZSBpdCB3b3VsZG4ndCBodXJ0LCBqdXN0IGZvciBjb21wbGV0ZW5lc3MsIGJ1dCBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuXG5cbkhvbGQgb24uLi4gSSdtIHJlbWluZGVkIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGVuYWJsZSBpdCBkaXJlY3RseSBpZiBpdCBoYXMgbm8gcHJvbXB0OyBzaW5jZSB0aGF0J3MgbXkgY29uY2VybiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLlxuXG5UaGVuLCB0aGVyZSdzIGBETUFfU0hBUkVEX0JVRkZFUmAuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUgaGF2aW5nIGEgcHJvbXB0LCB3aGljaCB3b3VsZCBiZSBleHBlY3RlZCBmb3IgdXNlci1jb25maWd1cmFibGUgb3B0aW9ucy4gQWgsIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzIG15IG1lbW9yeSBjb3JyZWN0PyBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIG5lZWQgdG8gYmUgc3VyZTsgaXQncyBhIGBib29sYCB3aXRob3V0IGEgcHJvbXB0IGluIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2A/IE9rYXksIEknbSBnb2luZyB0byBxdWlja2x5IHJlcmVhZCBgZHJpdmVycy9iYXNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlZmluaXRpb25zIGFuZCBhdm9pZCBtYWtpbmcgbWlzdGFrZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MDcuMzE4NjU3NTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRib29sXFxuIDIxMTpcXHRcXHRzZWxlY3QgR0xPQlxcbiAyMTI6XFx0XFxuIDIxMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1xcXCJcXG4gMjE0OlxcdFxcbiAyMTU6XFx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuIDIxNjpcXHRcXHRib29sXFxuIDIxNzpcXHRcXHRkZWZhdWx0IG5cXG4gMjE4OlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAyMTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTowNy4zMTg3NzEyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ0NDYyNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3k6IERNQV9TSEFSRURfQlVGRkVSKipcblxuUmlnaHQsIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgZGVmaW5lZCBhcyBhIGBib29sYCAqd2l0aG91dCogYW55IGFzc29jaWF0ZWQgcHJvbXB0LiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc3VzcGljaW9uIOKAkyBpdCdzIGxpa2VseSBiZWluZyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBhIGRlcml2ZWQgY29uZmlndXJhdGlvbiwgYSBidWlsZGluZyBibG9jay4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgdHJhY2luZyB0aGVzZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXNuJ3QgYSBkaXJlY3RseSB1c2VyLWZhY2luZyBvcHRpb247IGl0cyAqdmFsdWUqIGlzIGRldGVybWluZWQgZWxzZXdoZXJlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgcHVsbGluZyBpdCBpbi4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY29uZmlndXJhdGlvbnMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgZGVzaWduIGFuZCBob3cgYERNQV9TSEFSRURfQlVGRkVSYCBpbmZsdWVuY2VzIHRoZSBmaW5hbCBidWlsZCBhbmQgc3lzdGVtIGJlaGF2aW9yLiBUaW1lIHRvIHRyYWNlIHRoZSBzZWxlY3RzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MTAuNzYzMjM2NTQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE2MTA3NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q9NjU9QW55IGV4cG9ydGVycyBvciB1c2VycyBvZiB0aGUgZG1hLWJ1ZiBidWZmZXIgc2hhcmluZyBmcmFtZXdvcmsgbXVzdCBoYXZlIGFcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q6NjY6J3NlbGVjdCBETUFfU0hBUkVEX0JVRkZFUicgaW4gdGhlaXIgcmVzcGVjdGl2ZSBLY29uZmlncy5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3QtNjctXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZz02PWNvbmZpZyBEUk1fQUNDRUxfSEFCQU5BTEFCU1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTItXFx0c2VsZWN0IEhXTU9OXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc6MTM6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTQtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz00PWNvbmZpZyBTWU5DX0ZJTEVcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYtXFx0ZGVmYXVsdCBuXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTUyPWNvbmZpZyBETUFCVUZfS1VOSVRfVEVTVFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTQtXFx0ZGVwZW5kcyBvbiBLVU5JVFxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjU1OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTU2LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz02MD1tZW51Y29uZmlnIERNQUJVRl9IRUFQU1xcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYxLVxcdGJvb2wgXFxcIkRNQS1CVUYgVXNlcmxhbmQgTWVtb3J5IEhlYXBzXFxcIlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYyOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTg9bWVudWNvbmZpZyBEUk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTEzLVxcdHNlbGVjdCBJMkNcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxNDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xNS1cXHRzZWxlY3QgU1lOQ19GSUxFXFxuLS1cXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZz02PWNvbmZpZyBURUdSQV9IT1NUMVhcXG4tLVxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTgtXFx0ZGVwZW5kcyBvbiBBUkNIX1RFR1JBIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctMTAtXFx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xcbi0tXFxuZHJpdmVycy9paW8vS2NvbmZpZz0xNT1jb25maWcgSUlPX0JVRkZFUlxcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ1ZmZlciBzdXBwb3J0IHdpdGhpbiBJSU9cXFwiXFxuZHJpdmVycy9paW8vS2NvbmZpZzoxNzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gIUFMUEhBXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVxcdHNlbGVjdCBJUlFfUE9MTFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ3LVxcdGRlcGVuZHMgb24gTU1VXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDg6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0zOT1jb25maWcgSU9NTVVGRF9URVNUXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00NC1cXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjQ1OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQ2LVxcdHNlbGVjdCBJT01NVUZEX0RSSVZFUlxcbi0tXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9Mz1jb25maWcgVklERU9CVUYyX0NPUkVcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZzo0OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTUtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTEzPWNvbmZpZyBWSURFT0JVRjJfRE1BX0NPTlRJR1xcbi0tXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTYtXFx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZzoxNzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0xOT1jb25maWcgVklERU9CVUYyX1ZNQUxMT0NcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTIyLVxcdHNlbGVjdCBWSURFT0JVRjJfTUVNT1BTXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MjM6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMjQtXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZz0xPWNvbmZpZyBWSURFT19URUdSQV9WREVcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiBWSURFT19ERVZcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZzo3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTgtXFx0c2VsZWN0IElPTU1VX0lPVkFcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMwMT1jb25maWcgUUNPTV9GQVNUUlBDXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDQtXFx0ZGVwZW5kcyBvbiBSUE1TR1xcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMwNTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDYtXFx0c2VsZWN0IFFDT01fU0NNXFxuLS1cXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcXG4tLVxcbmRyaXZlcnMvdGVlL0tjb25maWctNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuZHJpdmVycy90ZWUvS2NvbmZpZzo3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvdGVlL0tjb25maWctOC1cXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTE5Mj1jb25maWcgVVNCX0ZfRlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxOTM6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTk0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnPTE0NT1jb25maWcgWEVOX0dOVERFVl9ETUFCVUZcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWctMTQ3LVxcdGRlcGVuZHMgb24gWEVOX0dOVERFViBcXHUwMDI2XFx1MDAyNiBYRU5fR1JBTlRfRE1BX0FMTE9DXFxuZHJpdmVycy94ZW4vS2NvbmZpZzoxNDg6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy94ZW4vS2NvbmZpZy0xNDktXFx0aGVscFxcbi0tXFxuc2FtcGxlcy9LY29uZmlnPTIzMD1jb25maWcgU0FNUExFX1ZGSU9fTURFVl9NQk9DSFNcXG4tLVxcbnNhbXBsZXMvS2NvbmZpZy0yMzMtXFx0c2VsZWN0IFZGSU9fTURFVlxcbnNhbXBsZXMvS2NvbmZpZzoyMzQ6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuc2FtcGxlcy9LY29uZmlnLTIzNS1cXHRoZWxwXFxuLS1cXG5zb3VuZC9zb2MvZnNsL0tjb25maWc9Nj1jb25maWcgU05EX1NPQ19GU0xfQVNSQ1xcbi0tXFxuc291bmQvc29jL2ZzbC9LY29uZmlnLTgtXFx0ZGVwZW5kcyBvbiBIQVNfRE1BXFxuc291bmQvc29jL2ZzbC9LY29uZmlnOjk6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuc291bmQvc29jL2ZzbC9LY29uZmlnLTEwLVxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NToxNC45NzkzNDkzNDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzODE0OTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYERNQV9TSEFSRURfQlVGRkVSYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBETUFfU0hBUkVEX0JVRkZFUmAgZ2V0cyBlbmFibGVkIGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgY2xlYXIgdGhhdCBpdCdzIGEgZnVuZGFtZW50YWwgb3B0aW9uLCBidXQgaXQncyAqcHVsbGVkIGluKiBieSBhIHdpZGUgdmFyaWV0eSBvZiBzdWJzeXN0ZW1zLiBJJ20gc2VlaW5nIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgYERSTWAsIGBJTkZJTklCQU5EYCwgYFZJREVPQlVGMl9DT1JFYCwgYFRFRWAgYW5kIHByb2JhYmx5IG1vcmUsIGFsbCBkZXBlbmRpbmcgb24gaXQuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgaWYgSSB3YW50IHRvIHR1cm4gb24gYERNQV9TSEFSRURfQlVGRkVSYCwgSSBjYW4gc2ltcGx5IGVuYWJsZSBhbnkgb2YgdGhvc2UgZGVwZW5kZW50IGZlYXR1cmVzLCBsaWtlIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgb3IgYERSTWAuIFRoYXQncyBhIHJlYXNvbmFibGUgZGVzaWduIGNob2ljZSwgc2ltcGxpZnlpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgRE1BQlVGX0hFQVBTYC4uLnRoYXQncyBhIG1lbnVjb25maWcgZW50cnkgd2l0aCBpdHMgb3duIHByb21wdCwgXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1wiLiBJIHNob3VsZCByZWFsbHkgZHJpbGwgZG93biBpbnRvIHRoYXQuIEl0IHNlZW1zIHRvIHN1Z2dlc3QgYSBtb3JlIGRpcmVjdCwgdXNlci1jb250cm9sbGFibGUgd2F5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIGBETUFfU0hBUkVEX0JVRkZFUmAuIFNvLCBsZXQncyBnbyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYERNQUJVRl9IRUFQU2AsIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgRE1BLUJVRiBoZWFwcyBjYW4gYmUgY29uZmlndXJlZCwgYW5kIHdoaWNoIHVzZXJsYW5kIGNvbXBvbmVudHMgdXNlIHRoZXNlIGhlYXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ2NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NToxOS4zMTc1MDMwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4ODM3NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BQlVGX0hFQVBTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTUyPWNvbmZpZyBETUFCVUZfS1VOSVRfVEVTVFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTktXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6NjA6bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cXHRib29sIFxcXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1xcXCJcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnOjE6Y29uZmlnIERNQUJVRl9IRUFQU19TWVNURU1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJETUEtQlVGIFN5c3RlbSBIZWFwXFxcIlxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctNy1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzo4OmNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNX0NDX1NIQVJFRFxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnLTktXFx0Ym9vbCBcXFwiRE1BLUJVRiBTeXN0ZW0gSGVhcCBmb3IgZGVjcnlwdGVkIENvQ28gVk1zXFxcIlxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWc6MTY6Y29uZmlnIERNQUJVRl9IRUFQU19DTUFcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiRE1BLUJVRiBDTUEgSGVhcFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MjIuNTA1ODg4MDYxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzYxNzcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRE1BLUJVRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBpZiBJIGp1c3QgZGVjbGFyZSBgRE1BQlVGX0hFQVBTYCwgdGhlIHN5c3RlbSB3aWxsIGF1dG9tYXRpY2FsbHkgY2hvb3NlIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFdhaXQsIGRvZXMgc3l6a2FsbGVyIGhhbmRsZSB0aGUgc2VsZWN0aW9uIGNvcnJlY3RseSBpZiBJIGp1c3QgZ2l2ZSBpdCB0aGUgb3B0aW9uIHRoYXQgKnNlbGVjdHMqIGl0PyBPciBjb3VsZCBJIGp1c3Qgc3BlY2lmeSBgRE1BX1NIQVJFRF9CVUZGRVJgIGRpcmVjdGx5LCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHdpbGwgdW5kZXJzdGFuZCBpdCdzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQ/IEhtbW0sIG5vLCBpZiB0aGVyZSdzIG5vIHByb21wdCwgc3l6a2FsbGVyIHByb2JhYmx5IGNhbid0IGVuYWJsZSBpdCBkaXJlY3RseTsgaXQgKm5lZWRzKiBzb21ldGhpbmcgdGhhdCB0cmlnZ2VycyB0aGUgc2VsZWN0aW9uLiBBbHJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIC0gYFNZTkNfRklMRWAgaXMgYSBib29sZWFuIGluIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZGVmaW5lZCBhcyBcIkFQSSBmb3IgdXNlci1zcGFjZSBzeW5jaHJvbml6YXRpb25cIi4gTGV0J3MgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjA0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjI2LjU4MjA2OTE2N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnUgXFxcIkRNQUJVRiBvcHRpb25zXFxcIlxcbiAgIDM6XFx0XFxuICAgNDpcXHRjb25maWcgU1lOQ19GSUxFXFxuICAgNTpcXHRcXHRib29sIFxcXCJFeHBsaWNpdCBTeW5jaHJvbml6YXRpb24gRnJhbWV3b3JrXFxcIlxcbiAgIDY6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNzpcXHRcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhlIFN5bmMgRmlsZSBGcmFtZXdvcmsgYWRkcyBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gdmlhXFxuICAxMDpcXHRcXHQgIHVzZXJzcGFjZS4gSXQgZW5hYmxlcyBzZW5kL3JlY2VpdmUgJ3N0cnVjdCBkbWFfZmVuY2UnIG9iamVjdHMgdG8vZnJvbVxcbiAgMTE6XFx0XFx0ICB1c2Vyc3BhY2UgdmlhIFN5bmMgRmlsZSBmZHMgZm9yIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGRyaXZlcnMgdmlhXFxuICAxMjpcXHRcXHQgIHVzZXJzcGFjZSBjb21wb25lbnRzLiBJdCBoYXMgYmVlbiBwb3J0ZWQgZnJvbSBBbmRyb2lkLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRoZSBmaXJzdCBhbmQgbWFpbiB1c2VyIGZvciB0aGlzIGlzIGdyYXBoaWNzIGluIHdoaWNoIGEgZmVuY2UgaXNcXG4gIDE1OlxcdFxcdCAgYXNzb2NpYXRlZCB3aXRoIGEgYnVmZmVyLiBXaGVuIGEgam9iIGlzIHN1Ym1pdHRlZCB0byB0aGUgR1BVIGEgZmVuY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MjYuNTgyMjA3ODg3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mzc1NDYxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYFNZTkNfRklMRWAgaXMgZGVmaW5pdGVseSBzZXQgdXAgdG8gcHJvbXB0IHRoZSB1c2VyIGFuZCB1bHRpbWF0ZWx5IHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhhdOKAmXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gR2l2ZW4gdGhpcywgaXQgc2VlbXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8gYWRkIGBTWU5DX0ZJTEVgIHRvIGBFbmFibGVDb25maWdzYC4gQnV0IGJlZm9yZSBJIGdldCB0b28gYWhlYWQgb2YgbXlzZWxmLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gV2hhdCBhYm91dCBgUEFHRV9QT09MYD8gSG1tLCBpdCBkb2VzbuKAmXQgc2VlbSB0byBoYXZlIGEgdXNlciBwcm9tcHQgb2YgaXRzIG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBhcmUgKnNlbGVjdGluZyogaXQuIEdvdHRhIHRyYWNlIHRoYXQgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NzAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjMwLjIxOTc1NzU4N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMTcxODU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0Mzc6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTg4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gNjRCSVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo4MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cXHRzZWxlY3QgQlJPQURDT01fUEhZIGlmIEFSQ0hfQkNNMjgzNVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXFx0c2VsZWN0IEZJWEVEX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjMyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cXHRzZWxlY3QgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXFxcIiBpZiBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz01OT1jb25maWcgTVZORVRBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo2NTpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVxcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cXHRzZWxlY3QgUENTX01US19MWU5YSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjMzOlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zNC1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTMzPWNvbmZpZyBNTFhTV19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTM3LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI3LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI5LVxcdHNlbGVjdCBQQ1NfWFBDU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZz0xPWNvbmZpZyBMQU45NjZYX1NXSVRDSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy04LVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTEwLVxcdHNlbGVjdCBWQ0FQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc9Mjg9Y29uZmlnIExBTjk2OVhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzAtXFx0ZGVwZW5kcyBvbiBTUEFSWDVfU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTg9Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjU6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI2LVxcdHNlbGVjdCBORVRfU0hBUEVSXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNy1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTExMD1jb25maWcgUlRBU0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTMtXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9Mjk9Y29uZmlnIFJBVkJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTURJT19CSVRCQU5HXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzctXFx0c2VsZWN0IFBIWUxJQlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc9MjU9Y29uZmlnIFNOSV9ORVRTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTI4LVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMzAtXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTgtXFx0c2VsZWN0IFBDU19YUENTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEwLVxcdHNlbGVjdCBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZz0yNj1jb25maWcgVEVIVVRJX1RONDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTI4LVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTMwLVxcdHNlbGVjdCBGV19MT0FERVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NTA9Y29uZmlnIFRJX0NQU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTUtXFx0c2VsZWN0IE1GRF9TWVNDT05cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU3LVxcdHNlbGVjdCBSRUdNQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTY5LVxcdGRlcGVuZHMgb24gVElfQ1BUUyB8fCAhVElfQ1BUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzEtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAxLVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAzLVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0yMDQ9Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjA4LVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIxMC1cXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTk9Y29uZmlnIExJQldYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIzLVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0yPWNvbmZpZyBNVDc2X0NPUkVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzo0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNS1cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjM0LjAyMTQ4MjM0NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTE0MjI1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBETUEgU2hhcmVkIEJ1ZmZlciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYFBBR0VfUE9PTGAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIHRoZSBzeXprYWxsZXIgY29uZmlncywgc2luY2UgYEJQRl9TWVNDQUxMYCBhbmQgYFZFVEhgIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhhdCBhbHNvIHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgYFNZTkNfRklMRWAgaXMgZ29pbmcgdG8gZ2V0IG1lIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGVuYWJsaW5nIGZsZXhpYmxlIERNQSBidWZmZXIgc2l6ZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRWAgdG8gYG5ldGRldl9iaW5kX3J4X25sX3BvbGljeWAsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gVGhlbiwgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGNoYW5nZWQgdG8gcGFyc2UgdGhhdCBuZXcgcGFyYW1ldGVyLiBXZSdyZSBtb2RpZnlpbmcgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIHRvIHRha2UgYG5pb3Zfc2hpZnRgLCBhbmQgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBhbmQgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgIGFyZSBtb2RpZmllZCB0byBhbGxvY2F0ZSBhbmQgZnJlZSBidWZmZXJzIHVzaW5nIHRoZSBjYWxjdWxhdGVkIHNpemUgYmFzZWQgb24gdGhlIHNoaWZ0ICh1c2luZyBgMVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnRgKS4gYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgIHNldHMgYG1wX3BhcmFtcy5yeF9wYWdlX3NpemVgIGJhc2VkIG9uIHRoaXMgYG5pb3Zfc2hpZnRgLCBhbmQgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgIHVzZXMgaXQgdG9vLiBGaW5hbGx5LCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBub3cgY2hlY2tzIHRoZSBwYWdlIG9yZGVyIGFnYWluc3QgdGhlIGJpbmRpbmcncyBgbmlvdl9zaGlmdGAuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgZGV2bWVtIFRDUCwgd2hpY2ggaXMgZ3JlYXQgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuXG5cblNvLCB0byBzdW1tYXJpemUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IGFyZSBrZXkgdG8gdGhlIGZ1bmN0aW9uYWxpdHksIEknbSBmb2N1c2luZyBvbjpcblxuKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YFxuKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCAoc2luY2UgUlggaGFzIFRYKVxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcbiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGBcbiogICBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YFxuXG5BIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0uLi4gYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbm90IHN0YXRpYywgaXQncyBleHBvcnRlZCBhbmQgaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCwgc28gaXQncyBhY2Nlc3NpYmxlLiBUaGlzIG5lZWRzIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBhZ2FpbiwgYnV0IHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIwNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTo0MS41MzU3MTA4NjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTI2Mjk4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXBfZG1hYnVmX2Rldm1lbV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTQzNz1uZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtNDUyLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQ1MzppbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxubmV0L2NvcmUvZGV2bWVtLmMtNDU0LXtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTU0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9wcm92aWRlcl9vcHMgZG1hYnVmX2Rldm1lbV9vcHMgPSB7XFxubmV0L2NvcmUvZGV2bWVtLmM6NTQ4OlxcdC5pbml0XFx0XFx0XFx0PSBtcF9kbWFidWZfZGV2bWVtX2luaXQsXFxubmV0L2NvcmUvZGV2bWVtLmMtNTQ5LVxcdC5kZXN0cm95XFx0XFx0PSBtcF9kbWFidWZfZGV2bWVtX2Rlc3Ryb3ksXFxuLS1cXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTMtI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oOjE0OmludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCk7XFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTE1LVxcbi0tXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oPTIwPWJvb2wgbXBfZG1hYnVmX2Rldm1lbV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0pO1xcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0yMS0jZWxzZVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoyMjpzdGF0aWMgaW5saW5lIGludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTo0NS40MjgzNDYwMjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMTY4NzI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgcmVmbGVjdGluZyBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBETUEgQWRkcmVzcyBSZXRyaWV2YWwgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gdGhpcyBjb2RlIHNlZ21lbnQncyBmb2N1cyBpcyBvbiBzb21ldGhpbmcgdGhhdCdzIG5vdCwgd2VsbCwgc3RhdGljLiBUaGF0J3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGFuZCBpdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHJgIGlzICphY3R1YWxseSogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIGhlcmUuIEtub3dpbmcgaXRzIHNjb3BlIOKAkyB3aGV0aGVyIGl0J3MgY29uZmluZWQgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IG9yIHZpc2libGUgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIOKAkyBpcyB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgaG93IGl0IGNhbiBiZSB1dGlsaXplZCAob3IsIG1vcmUgaW1wb3J0YW50bHksICpub3QqIHV0aWxpemVkKSBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTgwNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjQ4LjYzMDAzODY2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg4MTQ4NjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2dldF9kbWFfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zMz1zdGF0aWMgdm9pZCBuZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyKHN0cnVjdCBnZW5fcG9vbCAqZ2VucG9vbCxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQyLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQzOnN0YXRpYyBkbWFfYWRkcl90IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ0LXtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTExMz12b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0xMTUtXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xcbm5ldC9jb3JlL2Rldm1lbS5jOjExNjpcXHR1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7XFxubmV0L2NvcmUvZGV2bWVtLmMtMTE3LVxcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2MgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdDtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTE4OT1uZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0zMjAtXFx0XFx0XFx0cGFnZV9wb29sX3NldF9kbWFfYWRkcl9uZXRtZW0obmV0X2lvdl90b19uZXRtZW0obmlvdiksXFxubmV0L2NvcmUvZGV2bWVtLmM6MzIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpKTtcXG5uZXQvY29yZS9kZXZtZW0uYy0zMjItXFx0XFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTo1Mi41MTE1MzQxODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg0Mjk0NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb2N1cyBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZ29pbmcgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgdG91Y2hlZCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGZvciB0aGlzLlxuXG5GaXJzdCwgdGhlIGBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcmAgZnVuY3Rpb24gaXMgc3RhdGljLCBzbyBJJ20gbm90IGdvaW5nIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Qgb2YgRm9jdXNTeW1ib2xzLiBBbmQgSSdtIG5vdCBnb2luZyB0byBpbmNsdWRlIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBldmVuIHRob3VnaCBpdCdzIHBhcnQgb2YgdGhlIGxpZmVjeWNsZSwgc2luY2UgaXQncyBub3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC5cblxuU28sIGhlcmUncyBteSBpbml0aWFsIGxpc3Qgb2YgRm9jdXNTeW1ib2xzOlxuKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YFxuKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YFxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcbiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGBcbiogICBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YFxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGluZGVlZCBtb2RpZmllZC4gSSBzZWUgdGhhdCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAgaXMgY2hhbmdlZCB0byBwYXNzIGBQQUdFX1NISUZUYCB0byBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIEdvb2QuIFRoZW4sIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpdHNlbGYgaXMgbW9kaWZpZWQgdG8gdGFrZSBgbmlvdl9zaGlmdGAuIE9rYXksIGFuZCB0aGUgY2hhbmdlcyByaXBwbGUgZG93bi4gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCwgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgLCBhbmQgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgIGFyZSBhbGwgdXBkYXRlZCB0byB1c2UgYGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdGAsIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgbW9kaWZpZWQgdG8gc2V0IGBtcF9wYXJhbXMucnhfcGFnZV9zaXplYC4gRmluYWxseSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgYHBvb2wtXHUwMDNlcC5vcmRlciAhPSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUYC4gTG9va3MgbGlrZSBhbGwgYXJlIHRvdWNoZWQuXG5cbk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkndmUgZ290IHRvIGRldGVybWluZSB0aGUgbWluaW11bSBjb25maWcgb3B0aW9ucyBuZWVkZWQgdG8gcmVhY2ggdGhpcyBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb2RlIHJlbGF0ZWQgdG8gYFNZTkNfRklMRWAsIHdoaWNoIHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYC4gQnV0IGBORVRfREVWTUVNYCBkZXBlbmRzIG9uIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoZXJlZm9yZSwgSSBjYW4ganVzdCBsaXN0IGVpdGhlciBgU1lOQ19GSUxFYCBvciBgRE1BX1NIQVJFRF9CVUZGRVJgLiBXYWl0LCBpZiBJIGxpc3QgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGl0IGhhcyBubyBwcm9tcHQsIHN5emthbGxlciBtaWdodCBub3QgYmUgYWJsZSB0byBlbmFibGUgaXQgZGlyZWN0bHkuIFNvLCBsaXN0aW5nIGBTWU5DX0ZJTEVgIHdoaWNoIGhhcyBhIHByb21wdCBpcyBiZXR0ZXIuIEFsdGVybmF0aXZlbHksIGBETUFCVUZfSEVBUFNgIGlzIGFsc28gYSBnb29kIGNob2ljZS4gSSdsbCBqdXN0IGxpc3QgYFNZTkNfRklMRWAuIEknbGwgZ28gYmFjayBhbmQgY2hlY2sgYG5ldC9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3IgYE5FVF9ERVZNRU1gIHRoYXQgSSBhbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NjowMi4zNTQ0ODQ4NjJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcbiAgNjY6XFx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuICA2NzpcXHRcXHRib29sXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBORVRfREVWTUVNXFxuICA3MDpcXHRcXHRkZWZfYm9vbCB5XFxuICA3MTpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDczOlxcdFxcdGRlcGVuZHMgb24gUEFHRV9QT09MXFxuICA3NDpcXHRcXG4gIDc1OlxcdGNvbmZpZyBORVRfU0hBUEVSXFxuICA3NjpcXHRcXHRib29sXFxuICA3NzpcXHRcXG4gIDc4OlxcdGNvbmZpZyBORVRfQ1JDMzJDXFxuICA3OTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjAyLjM1NDYxNTY0MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjk0NzA4MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIE5FVF9ERVZNRU0gVGVzdGluZyoqXG5cbk9rYXksIGhlcmUncyBob3cgSSdtIGFwcHJvYWNoaW5nIGVuYWJsaW5nIGBORVRfREVWTUVNYCBmb3IgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldCBzbyBzeXprYWxsZXIgY2FuIGJ1aWxkIGEgdmFsaWQga2VybmVsIGNvbmZpZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSdkIGhhdmUgdG8gZXhwbGljaXRseSBsaXN0IGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGJlY2F1c2UgYE5FVF9ERVZNRU1gIGRlcGVuZHMgb24gdGhlbS4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBgZGVwZW5kcyBvbmA6IGl0IGF0dGVtcHRzIHRvIGVuYWJsZSB0aGUgZGVwZW5kZW5jaWVzLiBJZiB0aGV5J3JlIHVucHJvbXB0ZWQsIHRoaXMgY291bGQgc3RpbGwgZmFpbC5cblxuSSBrbm93IGBTWU5DX0ZJTEVgIHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYCwgc28gbGlzdGluZyBgU1lOQ19GSUxFYCBzaG91bGQgc2F0aXNmeSB0aGF0IGRlcGVuZGVuY3kuIEFuZCwgYFBBR0VfUE9PTGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgVkVUSGAgYW5kIGBCUEZfU1lTQ0FMTGAsIHdoaWNoIGFyZSBnZW5lcmFsbHkgZW5hYmxlZCwgc28gSSB0aG91Z2h0IGp1c3QgbGlzdGluZyBpdCB3YXMgZW5vdWdoLiBKdXN0IHRvIGJlIHNhZmUsIHRob3VnaCwgbGV0J3MgaW5jbHVkZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGV4cGxpY2l0bHkgaW4gdGhlIGNvbmZpZyBhcyB3ZWxsLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyFcblxuSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBORVRfREVWTUVNYCBpcyBhIGBkZWZfYm9vbCB5YCwgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGNvcnJlY3QsIHRob3VnaC5cblxuUmlnaHQsIHNvIHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gY29uZmlndXJlIHRoZSBSWCBwYWdlIHNpemUgaW4gZGV2bWVtIFRDUC4gSXQgZGlyZWN0bHkgbW9kaWZpZXMgY3JpdGljYWwgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdG8gbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhhdCdzIHNvbWV0aGluZyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGV4cG9zZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhlIGNvZGUsIGFuZCBJIGtub3cgdGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbjogYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCwgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAsIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCwgYW5kIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgLlxuXG5UaGVyZWZvcmUsIHRvIGJlIGFzIGNvbmZpZGVudCBhcyBwb3NzaWJsZSBpbiBteSBjb25maWd1cmF0aW9uLCBJJ20gZ29pbmcgdG8gbGlzdCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBgU1lOQ19GSUxFYCwgYW5kIGBQQUdFX1BPT0xgLiBUaGF0IHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5CdXQgd2FpdCwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gT2theSwgSSBzZWUgdGhhdCBgR0VORVJJQ19BTExPQ0FUT1JgIGlzIGFsc28gc2VsZWN0ZWQgYnkgYE5FVF9ERVZNRU1gLlxuXG5BbmQgZmluYWxseSwgbG9va2luZyBhdCB0aGUgc2VsZnRlc3QsIGl0IHVzZXMgYG5jZGV2bWVtYCwgd2hpY2ggaW4gdHVybiB1c2VzIGBtZW1mZF9jcmVhdGVgIGFuZCBgdWRtYWJ1ZmAuIFNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBVRE1BQlVGYCBpcyBzZXQgdG9vLiBPa2F5LCBsZXQncyBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA4NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjEwLjY0OTMyNzA3MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2OTUxOTU5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVURNQUJVRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJ1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NjoxNC4zMTg4NTIwNjhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNDgyMjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQWRkaW5nIGBVRE1BQlVGYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBVRE1BQlVGYCBpcyBjbGVhcmx5IGEgYm9vbGVhbiBjb25maWcgb3B0aW9uIHdpdGggYSBwcm9tcHQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB0aGUgdXNlciBnZXRzIGEgY2hvaWNlIGFib3V0IGl0LiBNb3JlIGltcG9ydGFudGx5LCBpdCBzZWVtcyB0aGlzIGlzIGhvdyBkbWFidWZzIGFyZSBjcmVhdGVkIGZyb20gdXNlciBzcGFjZSBtZW1vcnkuIFRoYXQncyAqZXhhY3RseSogd2hhdCBJJ2QgZXhwZWN0IHRvIHNlZSBpbiBhIHNlbGZ0ZXN0IHNjZW5hcmlvLCBhbmQgaXQncyBhbHNvIHRoZSBsaWtlbHkgcGF0aCBzeXprYWxsZXIgd291bGQgdGFrZSB0byBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eS4gU28sIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSBuZWVkIHRvIGluY2x1ZGUuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblRoZXJlZm9yZSwgbGV0J3MgZ28gYWhlYWQgYW5kIGFkZCBgVURNQUJVRmAgdG8gdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgd2UncmUgdHJhY2tpbmcuIE5vdywgYmVmb3JlIHdlIHByb2NlZWQgZnVydGhlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpdCBkZXBlbmRzIG9uLiBMZXQncyBkaWcgaW50byBgVURNQUJVRmAncyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBrbm93IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYXJlIHJlcXVpcmVkIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHksIG9yIHdoaWNoIGNhbiBhZmZlY3QgaXRzIGJlaGF2aW91ciBhbmQgYXR0YWNrIHN1cmZhY2UuIFRoYXQncyBuZXh0IG9uIHRoZSBsaXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM1NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjE4LjQyMzY3NzIzM1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0ICBXQVJOSU5HOiBpbXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbFxcbiAgMzE6XFx0XFx0ICBkcml2ZXJzIGZyb20gdXNlcnNwYWNlLiBJbnRlbmRlZCBmb3IgdGVzdCBhbmQgZGVidWcgb25seS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIFVETUFCVUZcXG4gIDM0OlxcdFxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuICAzNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTUVNRkRfQ1JFQVRFIHx8IENPTVBJTEVfVEVTVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gIDM5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MTguNDIzODI1OTQzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTEwMDc4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgVURNQUJVRmAgaGVyZS4gUmlnaHQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgZGVwZW5kcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBNRU1GRF9DUkVBVEVgLiBNYWtlcyBzZW5zZSwgcmlnaHQ/IE5vdywgdGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoaXM6IGlmIGVuYWJsaW5nIGBVRE1BQlVGYCAqcmVxdWlyZXMqIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGRvZXNuJ3QgZXZlbiBoYXZlIGEgcHJvbXB0LCBob3cgb24gZWFydGggaXMgYSB1c2VyIHN1cHBvc2VkIHRvIGFjdHVhbGx5ICplbmFibGUqIGBVRE1BQlVGYD8gVGhhdCBmZWVscyBsaWtlIGEgZ2xhcmluZyBvbWlzc2lvbi5cblxuQWhhISBHb3QgaXQuIEkgc2hvdWxkIGhhdmUgY29uc2lkZXJlZCB0aGF0IGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgbGlrZWx5IHNlbGVjdGVkIGJ5ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zLCByaWdodD8gTGV0J3Mgc2VlLi4uaWYgd2UgZW5hYmxlIGBTWU5DX0ZJTEVgLCBib29tLCBgRE1BX1NIQVJFRF9CVUZGRVJgIGdldHMgcHVsbGVkIGluLiBBbmQgKnRoZW4qIHdlIGNhbiBlbmFibGUgYFVETUFCVUZgLiBUaGF0IGV4cGxhaW5zIGl0LiBTbywgYSB1c2VyIHdhbnRpbmcgYFVETUFCVUZgIHdpbGwgbGlrZWx5IG5lZWQgdG8gZW5hYmxlIGBTWU5DX0ZJTEVgLlxuXG5TbywgdGhlIGtleSBvcHRpb25zIHRvIGNvbnNpZGVyIHdvdWxkIGJlOlxuXG4qICAgYFNZTkNfRklMRWAgKHRoaXMgaW5kaXJlY3RseSBlbmFibGVzIGBETUFfU0hBUkVEX0JVRkZFUmApXG4qICAgYFVETUFCVUZgICh0aGUgZGVzaXJlZCBvcHRpb24pXG4qICAgYERNQV9TSEFSRURfQlVGRkVSYCAoYSBkZXBlbmRlbmN5IG9mIGBVRE1BQlVGYClcbiogICBgUEFHRV9QT09MYCAoY291bGQgYmUgcmVsZXZhbnQgZGVwZW5kaW5nIG9uIHRoZSB1c2UgY2FzZSlcblxuTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNpdHVhdGlvbiB3aXRoIGBNRU1GRF9DUkVBVEVgLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODU0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MjMuMTE0ODM3MzE3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ1NjQ5Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1GRF9DUkVBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzUwPWNvbmZpZyBLTUFQX0xPQ0FMX05PTl9MSU5FQVJfUFRFX0FSUkFZXFxuLS1cXG5tbS9LY29uZmlnLTEzNTItXFxubW0vS2NvbmZpZzoxMzUzOmNvbmZpZyBNRU1GRF9DUkVBVEVcXG5tbS9LY29uZmlnLTEzNTQtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbWZkX2NyZWF0ZSgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MjcuMTYwNDkzMzI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODY2ODY3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmV2aWV3aW5nIEtlcm5lbCBETUEgQnVmZmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgTUVNRkRfQ1JFQVRFYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgaW5mbHVlbmNlcyBob3cgd2UncmUgYXBwcm9hY2hpbmcgdGhpcyBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb24uXG5cbkdpdmVuIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Uga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBTWU5DX0ZJTEVgLCBgVURNQUJVRmAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBzZXQgb2YgY29uZmlncyBzaG91bGQgc3VwcG9ydCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UuXG5cbk5vdywgbGV0J3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRob3NlIGBGb2N1c1N5bWJvbHNgIHdlIGlkZW50aWZpZWQgZWFybGllci4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gc3RpbGwgb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggdGhvc2U6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLCBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAsIGFuZCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lLlxuXG5IYXZlIHRoZXJlIGJlZW4gYW55ICpvdGhlciogZnVuY3Rpb25zLCBvdXRzaWRlIG9mIHRoaXMgZm9jdXNlZCBzZXQsIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ/IExldCdzIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvZGV2bWVtLmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjMxLjc0NzE4NDYyN1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjE3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz00Mz1zdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ2LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQ3OlxcdG93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XFxubmV0L2NvcmUvZGV2bWVtLmMtNDgtXFx0cmV0dXJuIG93bmVyLVxcdTAwM2ViYXNlX2RtYV9hZGRyICtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTEwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MTA4Om5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwOS17XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xMTY9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG5uZXQvY29yZS9kZXZtZW0uaC0xMTcte1xcbm5ldC9jb3JlL2Rldm1lbS5oOjExODpcXHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdiktXFx1MDAzZWJpbmRpbmc7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTE5LX1cXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTEyNj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaC0xMjgtXFx0c3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyICpjbyA9XFxubmV0L2NvcmUvZGV2bWVtLmg6MTI5OlxcdFxcdG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTEzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MzYuMTA5MzkwNzYzWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDQzMDAxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5OlxuXG4qKkZvY3VzIFN5bWJvbCBWZXJpZmljYXRpb24gQ29tcGxldGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0IGBuZXRfaW92X3ZpcnR1YWxfYWRkcmAuIEkgc2VlIGl0J3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgIGFuZCwgYXMgZXhwZWN0ZWQsIGl0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBTaW5jZSB3ZSBzcGVjaWZpY2FsbHkgZXhjbHVkZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0IG1lYW5zIHRoZSBleGNsdXNpb24gcHJvY2VzcyB3b3JrZWQgYXMgaXQgc2hvdWxkLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgb25lLlxuXG5Hb29kLiBJdCBsb29rcyBsaWtlIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIHN0YWJsZSBhbmQgYWNjdXJhdGUgYXQgdGhpcyBwb2ludC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0MDAsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6NDEuMDEzNjk0MjZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI5MDA0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZTkNfRklMRVwiLFxuICAgIFwiVURNQUJVRlwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9ubF9iaW5kX3J4X2RvaXRcIixcbiAgICBcIm5ldGRldl9ubF9iaW5kX3R4X2RvaXRcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlXCIsXG4gICAgXCJuZXRfZGV2bWVtX2dldF9uaW92X2F0XCIsXG4gICAgXCJtcF9kbWFidWZfZGV2bWVtX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBSWCBwYWdlIHNpemUgZm9yIGRldm1lbSBUQ1AgdmlhIHRoZSBgcngtcGFnZS1zaXplYCBuZXRsaW5rIGF0dHJpYnV0ZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgZGV2bWVtIFRDUCBjb2RlIHRvIGhhbmRsZSBub24tUEFHRV9TSVpFIGFsbG9jYXRpb25zIGFuZCBtYXBwaW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHVzaW5nIG5ldGtpdCBvciB2ZXRoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWU5DX0ZJTEVcIixcbiAgICBcIlVETUFCVUZcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZVwiLFxuICAgIFwibmV0X2Rldm1lbV9nZXRfbmlvdl9hdFwiLFxuICAgIFwibXBfZG1hYnVmX2Rldm1lbV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjb25maWd1cmluZyB0aGUgUlggcGFnZSBzaXplIGZvciBkZXZtZW0gVENQIHZpYSB0aGUgYHJ4LXBhZ2Utc2l6ZWAgbmV0bGluayBhdHRyaWJ1dGUuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGRldm1lbSBUQ1AgY29kZSB0byBoYW5kbGUgbm9uLVBBR0VfU0laRSBhbGxvY2F0aW9ucyBhbmQgbWFwcGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRraXQgb3IgdmV0aCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlbgdh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 08:28:05 +0000 UTC FinishedAt: 2026-07-26 08:46:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYNC_FILE", "UDMABUF", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYNC_FILE", "UDMABUF", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "d64e8b99-6897-4c72-96fa-30aa17439b79" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_nl_bind_rx_doit", "netdev_nl_bind_tx_doit", "net_devmem_bind_dmabuf", "net_devmem_alloc_dmabuf", "net_devmem_free_dmabuf", "net_devmem_bind_dmabuf_to_queue", "net_devmem_get_niov_at", "mp_dmabuf_devmem_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZTkNfRklMRSYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3J4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfdHhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYWxsb2NfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZnJlZV9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZSYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2dldF9uaW92X2F0JiMzNDssCiAgICAmIzM0O21wX2RtYWJ1Zl9kZXZtZW1faW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBSWCBwYWdlIHNpemUgZm9yIGRldm1lbSBUQ1AgdmlhIHRoZSBgcngtcGFnZS1zaXplYCBuZXRsaW5rIGF0dHJpYnV0ZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgZGV2bWVtIFRDUCBjb2RlIHRvIGhhbmRsZSBub24tUEFHRV9TSVpFIGFsbG9jYXRpb25zIGFuZCBtYXBwaW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHVzaW5nIG5ldGtpdCBvciB2ZXRoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZlM2FhYzI3Y2QwMDQ5YjQ1ZTIyZDUxOTlhNWViNDI0OTk2OWY3MDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwODo0MzoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmV0ZGV2LnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmV0ZGV2LnlhbWxcbmluZGV4IDVmMTQzZGE3NDU4Y2ZiLi4xZWU2NDM0MmRmMTFjMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sXG5AQCAtNiw2ICYjNDM7NiwxMiBAQCBkb2M6IFx1MDAzZS1cbiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLlxuIFxuIGRlZmluaXRpb25zOlxuJiM0MzsgIC1cbiYjNDM7ICAgIHR5cGU6IGNvbnN0XG4mIzQzOyAgICBuYW1lOiBwYWdlLXNpemVcbiYjNDM7ICAgIHZhbHVlOiAwICAjIGR1bW15OiBjb2RlZ2VuIG5lZWRzIGEgbnVtYmVyLCByZWFsIHZhbHVlIGlzIHRoZSBQQUdFX1NJWkUgbWFjcm8gKGhlYWRlcilcbiYjNDM7ICAgIGhlYWRlcjogYXNtL3BhZ2UuaFxuJiM0MzsgICAgc2NvcGU6IGtlcm5lbFxuICAgLVxuICAgICB0eXBlOiBmbGFnc1xuICAgICBuYW1lOiB4ZHAtYWN0XG5AQCAtNTk4LDYgJiM0Mzs2MDQsMTYgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGNoZWNrczpcbiAgICAgICAgICAgbWluOiAxXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiByeC1wYWdlLXNpemVcbiYjNDM7ICAgICAgICBkb2M6IHxcbiYjNDM7ICAgICAgICAgIFNpemUgaW4gYnl0ZXMgb2YgZWFjaCBkZXZpY2UgcGFnZSB0aGUgTklDIHdyaXRlcyBpbnRvIGZyb20gdGhlIGJvdW5kXG4mIzQzOyAgICAgICAgICBkbWFidWYuIE11c3QgYmUgYSBwb3dlciBvZiB0d28gYW5kIFx1MDAzZT0gUEFHRV9TSVpFOyBkZWZhdWx0cyB0b1xuJiM0MzsgICAgICAgICAgUEFHRV9TSVpFLlxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGNoZWNrczpcbiYjNDM7ICAgICAgICAgIG1pbjogcGFnZS1zaXplXG4mIzQzOyAgICAgICAgICBtYXg6IHUzMi1tYXhcbiBcbiBvcGVyYXRpb25zOlxuICAgbGlzdDpcbkBAIC04MTIsNiAmIzQzOzgyOCw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBpZmluZGV4XG4gICAgICAgICAgICAgLSBmZFxuICAgICAgICAgICAgIC0gcXVldWVzXG4mIzQzOyAgICAgICAgICAgIC0gcngtcGFnZS1zaXplXG4gICAgICAgICByZXBseTpcbiAgICAgICAgICAgYXR0cmlidXRlczpcbiAgICAgICAgICAgICAtIGlkXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5pbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgZW51bSB7XG4gXHRORVRERVZfQV9ETUFCVUZfUVVFVUVTLFxuIFx0TkVUREVWX0FfRE1BQlVGX0ZELFxuIFx0TkVUREVWX0FfRE1BQlVGX0lELFxuJiM0MztcdE5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsXG4gXG4gXHRfX05FVERFVl9BX0RNQUJVRl9NQVgsXG4gXHRORVRERVZfQV9ETUFCVUZfTUFYID0gKF9fTkVUREVWX0FfRE1BQlVGX01BWCAtIDEpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uY1xuaW5kZXggOTU3ZDZiOTYyMTZiMzMuLmIwMzZmMTRjYjIzYTE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5jXG5AQCAtNDYsNyAmIzQzOzQ2LDcgQEAgc3RhdGljIGRtYV9hZGRyX3QgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gXG4gXHRvd25lciA9IG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xuIFx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfZG1hX2FkZHIgJiM0Mztcbi1cdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuJiM0MztcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIG93bmVyLVx1MDAzZWJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuQEAgLTkzLDEzICYjNDM7OTMsMTQgQEAgbmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gXHRzc2l6ZV90IG9mZnNldDtcbiBcdHNzaXplX3QgaW5kZXg7XG4gXG4tXHRkbWFfYWRkciA9IGdlbl9wb29sX2FsbG9jX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgUEFHRV9TSVpFLFxuJiM0MztcdGRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy1cdTAwM2VjaHVua19wb29sLFxuJiM0MztcdFx0XHRcdFx0MVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQsXG4gXHRcdFx0XHRcdCh2b2lkICoqKVx1MDAyNm93bmVyKTtcbiBcdGlmICghZG1hX2FkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0b2Zmc2V0ID0gZG1hX2FkZHIgLSBvd25lci1cdTAwM2ViYXNlX2RtYV9hZGRyO1xuLVx0aW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7XG4mIzQzO1x0aW5kZXggPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdDtcbiBcdG5pb3YgPSBcdTAwMjZvd25lci1cdTAwM2VhcmVhLm5pb3ZzW2luZGV4XTtcbiBcbiBcdG5pb3YtXHUwMDNlZGVzYy5wcF9tYWdpYyA9IDA7XG5AQCAtMTEzLDEyICYjNDM7MTE0LDEzIEBAIHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmcobmlvdik7XG4gXHR1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7XG4mIzQzO1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuIFxuIFx0aWYgKFdBUk5fT04oIWdlbl9wb29sX2hhc19hZGRyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG4tXHRcdFx0XHQgICAgICAgUEFHRV9TSVpFKSkpXG4mIzQzO1x0XHRcdFx0ICAgICAgIG5pb3Zfc2l6ZSkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnZW5fcG9vbF9mcmVlKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsIFBBR0VfU0laRSk7XG4mIzQzO1x0Z2VuX3Bvb2xfZnJlZShiaW5kaW5nLVx1MDAzZWNodW5rX3Bvb2wsIGRtYV9hZGRyLCBuaW92X3NpemUpO1xuIH1cbiBcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbkBAIC0xNjMsNiAmIzQzOzE2NSw5IEBAIGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxuIFx0dTMyIHhhX2lkeDtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKVxuJiM0MztcdFx0bXBfcGFyYW1zLnJ4X3BhZ2Vfc2l6ZSA9IDFVIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQ7XG4mIzQzO1xuIFx0ZXJyID0gbmV0aWZfbXBfb3Blbl9yeHEoZGV2LCByeHFfaWR4LCBcdTAwMjZtcF9wYXJhbXMsIGV4dGFjayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE4NCwxMCAmIzQzOzE4OSwxMiBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XG4mIzQzO1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlvdl9zaGlmdDtcbiBcdHN0YXRpYyB1MzIgaWRfYWxsb2NfbmV4dDtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4gXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFxuIFx0YmluZGluZy1cdTAwM2VkZXYgPSBkZXY7XG4gXHRiaW5kaW5nLVx1MDAzZXZkZXYgPSB2ZGV2O1xuJiM0MztcdGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCA9IG5pb3Zfc2hpZnQ7XG4gXHR4YV9pbml0X2ZsYWdzKFx1MDAyNmJpbmRpbmctXHUwMDNlYm91bmRfcnhxcywgWEFfRkxBR1NfQUxMT0MpO1xuIFxuIFx0ZXJyID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNmJpbmRpbmctXHUwMDNlcmVmLFxuQEAgLTI0OCwxOCAmIzQzOzI1NiwxNCBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdFx0Z290byBlcnJfdW5tYXA7XG4gXHRcdH1cbiBcdFx0YmluZGluZy1cdTAwM2V0eF92ZWMgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCBuZXRfaW92ICosXG4tXHRcdFx0XHRcdFx0ZG1hYnVmLVx1MDAzZXNpemUgLyBQQUdFX1NJWkUpO1xuJiM0MztcdFx0XHRcdFx0XHRkbWFidWYtXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2Ugbmlvdl9zaGlmdCk7XG4gXHRcdGlmICghYmluZGluZy1cdTAwM2V0eF92ZWMpIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyX3VubWFwO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBGb3Igc2ltcGxpY2l0eSB3ZSBleHBlY3QgdG8gbWFrZSBQQUdFX1NJWkUgYWxsb2NhdGlvbnMsIGJ1dCB0aGVcbi1cdCAqIGJpbmRpbmcgY2FuIGJlIG11Y2ggbW9yZSBmbGV4aWJsZSB0aGFuIHRoYXQuIFdlIG1heSBiZSBhYmxlIHRvXG4tXHQgKiBhbGxvY2F0ZSBNVFUgc2l6ZWQgY2h1bmtzIGhlcmUuIExlYXZlIHRoYXQgZm9yIGZ1dHVyZSB3b3JrLi4uXG4tXHQgKi9cbi1cdGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZULFxuJiM0MztcdGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShuaW92X3NoaWZ0LFxuIFx0XHRcdFx0XHQgICAgICBkZXZfdG9fbm9kZShcdTAwMjZkZXYtXHUwMDNlZGV2KSk7XG4gXHRpZiAoIWJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuQEAgLTI3Myw5ICYjNDM7Mjc3LDEyIEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdFx0c2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpO1xuIFx0XHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcbiBcbi1cdFx0aWYgKCFJU19BTElHTkVEKGxlbiwgUEFHRV9TSVpFKSkge1xuJiM0MztcdFx0aWYgKCFJU19BTElHTkVEKGRtYV9hZGRyLCBuaW92X3NpemUpIHx8XG4mIzQzO1x0XHQgICAgIUlTX0FMSUdORUQobGVuLCBuaW92X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2RtYS1idWYgU0cgbGVuZ3RoIG11c3QgYmUgUEFHRV9TSVpFIGFsaWduZWRcJiMzNDspO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7ZG1hYnVmIHNnIGVudHJ5IChhZGRyPSVwYWQsIGxlbj0lenUpIG5vdCBhbGlnbmVkIHRvIG5pb3Ygc2l6ZSAlenVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZkbWFfYWRkciwgbGVuLCBuaW92X3NpemUpO1xuIFx0XHRcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xuIFx0XHR9XG4gXG5AQCAtMjg4LDcgJiM0MzsyOTUsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXG4gXHRcdG93bmVyLVx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsID0gdmlydHVhbDtcbiBcdFx0b3duZXItXHUwMDNlYmFzZV9kbWFfYWRkciA9IGRtYV9hZGRyO1xuLVx0XHRvd25lci1cdTAwM2VhcmVhLm51bV9uaW92cyA9IGxlbiAvIFBBR0VfU0laRTtcbiYjNDM7XHRcdG93bmVyLVx1MDAzZWFyZWEubnVtX25pb3ZzID0gbGVuIFx1MDAzZVx1MDAzZSBuaW92X3NoaWZ0O1xuIFx0XHRvd25lci1cdTAwM2ViaW5kaW5nID0gYmluZGluZztcbiBcbiBcdFx0ZXJyID0gZ2VuX3Bvb2xfYWRkX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG5AQCAtMzEzLDcgJiM0MzszMjAsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdFx0cGFnZV9wb29sX3NldF9kbWFfYWRkcl9uZXRtZW0obmV0X2lvdl90b19uZXRtZW0obmlvdiksXG4gXHRcdFx0XHRcdFx0ICAgICAgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdikpO1xuIFx0XHRcdGlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSlcbi1cdFx0XHRcdGJpbmRpbmctXHUwMDNldHhfdmVjW293bmVyLVx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsIC8gUEFHRV9TSVpFICYjNDM7IGldID0gbmlvdjtcbiYjNDM7XHRcdFx0XHRiaW5kaW5nLVx1MDAzZXR4X3ZlY1sob3duZXItXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgXHUwMDNlXHUwMDNlIG5pb3Zfc2hpZnQpICYjNDM7IGldID0gbmlvdjtcbiBcdFx0fVxuIFxuIFx0XHR2aXJ0dWFsICYjNDM7PSBsZW47XG5AQCAtNDMwLDEzICYjNDM7NDM3LDE1IEBAIHN0cnVjdCBuZXRfaW92ICpcbiBuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuIFx0XHQgICAgICAgc2l6ZV90IHZpcnRfYWRkciwgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSlcbiB7XG4mIzQzO1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuJiM0MztcbiBcdGlmICh2aXJ0X2FkZHIgXHUwMDNlPSBiaW5kaW5nLVx1MDAzZWRtYWJ1Zi1cdTAwM2VzaXplKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdCpvZmYgPSB2aXJ0X2FkZHIgJSBQQUdFX1NJWkU7XG4tXHQqc2l6ZSA9IFBBR0VfU0laRSAtICpvZmY7XG4mIzQzO1x0Km9mZiA9IHZpcnRfYWRkciBcdTAwMjYgKG5pb3Zfc2l6ZSAtIDEpO1xuJiM0MztcdCpzaXplID0gbmlvdl9zaXplIC0gKm9mZjtcbiBcbi1cdHJldHVybiBiaW5kaW5nLVx1MDAzZXR4X3ZlY1t2aXJ0X2FkZHIgLyBQQUdFX1NJWkVdO1xuJiM0MztcdHJldHVybiBiaW5kaW5nLVx1MDAzZXR4X3ZlY1t2aXJ0X2FkZHIgXHUwMDNlXHUwMDNlIGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdF07XG4gfVxuIFxuIC8qKiogXCYjMzQ7RG1hYnVmIGRldm1lbSBtZW1vcnkgcHJvdmlkZXJcJiMzNDsgKioqL1xuQEAgLTQ1NCw3ICYjNDM7NDYzLDcgQEAgaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxuIFx0cG9vbC1cdTAwM2VkbWFfc3luYyA9IGZhbHNlO1xuIFx0cG9vbC1cdTAwM2VkbWFfc3luY19mb3JfY3B1ID0gZmFsc2U7XG4gXG4tXHRpZiAocG9vbC1cdTAwM2VwLm9yZGVyICE9IDApXG4mIzQzO1x0aWYgKHBvb2wtXHUwMDNlcC5vcmRlciAhPSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUKVxuIFx0XHRyZXR1cm4gLUUyQklHO1xuIFxuIFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoYmluZGluZyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNDAuLjRhMjkzYTdkMTE0OWM4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5oXG5AQCAtNzEsNiAmIzQzOzcxLDggQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuIFx0ICovXG4gXHRzdHJ1Y3QgbmV0X2lvdiAqKnR4X3ZlYztcbiBcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdDtcbiYjNDM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5iaW5kX3c7XG4gfTtcbiBcbkBAIC05Myw3ICYjNDM7OTUsOCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKTtcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG5AQCAtMTIyLDEwICYjNDM7MTI1LDExIEBAIHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5ldF9pb3ZfdmlydHVhbF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxuIHtcbi1cdHN0cnVjdCBuZXRfaW92X2FyZWEgKm93bmVyID0gbmV0X2lvdl9vd25lcihuaW92KTtcbiYjNDM7XHRzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID1cbiYjNDM7XHRcdG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xuIFxuLVx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfdmlydHVhbCAmIzQzO1xuLVx0ICAgICAgICgodW5zaWduZWQgbG9uZyluZXRfaW92X2lkeChuaW92KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0cmV0dXJuIG5ldF9pb3Zfb3duZXIobmlvdiktXHUwMDNlYmFzZV92aXJ0dWFsICYjNDM7XG4mIzQzO1x0ICAgICAgICgodW5zaWduZWQgbG9uZyluZXRfaW92X2lkeChuaW92KSBcdTAwM2NcdTAwM2MgY28tXHUwMDNlYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sXG5AQCAtMTc1LDYgJiM0MzsxNzksNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1xuaW5kZXggZDE4Yzg5YjVhNmM3NTkuLmY4Mzc5MDM0MWVhZTY4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuIC8qIEludGVnZXIgdmFsdWUgcmFuZ2VzICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfcGFnZV9wb29sX2lkX3JhbmdlID0ge1xuQEAgLTI3LDYgJiM0MzsyOCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBuZXRkZXZfYV9uYXBpX2RlZmVyX2hhcmRfaXJxc19yYW5nZVxuIFx0Lm1heFx0PSBTMzJfTUFYLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UgPSB7XG4mIzQzO1x0Lm1pblx0PSBQQUdFX1NJWkUsXG4mIzQzO1x0Lm1heFx0PSBVMzJfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBDb21tb24gbmVzdGVkIHR5cGVzICovXG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCAmIzQzOyAxXSA9IHtcbiBcdFtORVRERVZfQV9MRUFTRV9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuQEAgLTEwNiwxMCAmIzQzOzExMiwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X3FzdGF0c19nZXRfbmxfcG9saWN5W05FVERFVl9BX1FTVEFUU19TQ09QRVxuIH07XG4gXG4gLyogTkVUREVWX0NNRF9CSU5EX1JYIC0gZG8gKi9cbi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5W05FVERFVl9BX0RNQUJVRl9GRCAmIzQzOyAxXSA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeVtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFICYjNDM7IDFdID0ge1xuIFx0W05FVERFVl9BX0RNQUJVRl9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuIFx0W05FVERFVl9BX0RNQUJVRl9GRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbiBcdFtORVRERVZfQV9ETUFCVUZfUVVFVUVTXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKG5ldGRldl9xdWV1ZV9pZF9ubF9wb2xpY3kpLFxuJiM0MztcdFtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZuZXRkZXZfYV9kbWFidWZfcnhfcGFnZV9zaXplX3JhbmdlKSxcbiB9O1xuIFxuIC8qIE5FVERFVl9DTURfTkFQSV9TRVQgLSBkbyAqL1xuQEAgLTIxOSw3ICYjNDM7MjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XG4gXHRcdC5jbWRcdFx0PSBORVRERVZfQ01EX0JJTkRfUlgsXG4gXHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcbiBcdFx0LnBvbGljeVx0XHQ9IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeSxcbi1cdFx0Lm1heGF0dHJcdD0gTkVUREVWX0FfRE1BQlVGX0ZELFxuJiM0MztcdFx0Lm1heGF0dHJcdD0gTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcbiBcdFx0LmZsYWdzXHRcdD0gR0VOTF9VTlNfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETyxcbiBcdH0sXG4gXHR7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmggYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaFxuaW5kZXggZDcxYjQzNWQ3MmMxOGYuLjNmYWU4OGU4ZjVjNTBlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGRldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCAmIzQzOyAxXTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuaW5kZXggYzE1ZDhkNGNhMWY4ZmEuLjBlZWE0ZWUyMmYyNDY3IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xuQEAgLTEwMTMsNiAmIzQzOzEwMTMsNyBAQCBuZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCxcbiBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xuJiM0MztcdHVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XG4gXHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuQEAgLTEwMzAsNiAmIzQzOzEwMzEsMTggQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmaW5kZXggPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RFVl9JRklOREVYXSk7XG4gXHRkbWFidWZfZmQgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9GRF0pO1xuIFxuJiM0MztcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdKSB7XG4mIzQzO1x0XHR1MzIgcnhfcGFnZV9zaXplID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc19wb3dlcl9vZl8yKHJ4X3BhZ2Vfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O3J4LXBhZ2Utc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMlwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bmlvdl9zaGlmdCA9IGlsb2cyKHJ4X3BhZ2Vfc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHByaXYgPSBnZW5sX3NrX3ByaXZfZ2V0KFx1MDAyNm5ldGRldl9ubF9mYW1pbHksIE5FVExJTktfQ0Ioc2tiKS5zayk7XG4gXHRpZiAoSVNfRVJSKHByaXYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2KTtcbkBAIC0xMDgwLDcgJiM0MzsxMDkzLDggQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdH1cbiBcbiBcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxuLVx0XHRcdFx0XHQgZG1hYnVmX2ZkLCBwcml2LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4mIzQzO1x0XHRcdFx0XHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxuJiM0MztcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcbiBcdFx0Z290byBlcnJfcnhxX2JpdG1hcDtcbkBAIC0xMjIxLDcgJiM0MzsxMjM1LDcgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LFxuIFx0XHRcdFx0XHQgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCxcbiBcdFx0XHRcdFx0IGRtYV9kZXYsIERNQV9UT19ERVZJQ0UsIGRtYWJ1Zl9mZCxcbi1cdFx0XHRcdFx0IHByaXYsIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHRcdCBQQUdFX1NISUZULCBwcml2LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG4gXHRcdGdvdG8gZXJyX3VubG9ja19iaW5kX2RldjtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5AQCAtMjE5LDYgJiM0MzsyMTksNyBAQCBlbnVtIHtcbiBcdE5FVERFVl9BX0RNQUJVRl9RVUVVRVMsXG4gXHRORVRERVZfQV9ETUFCVUZfRkQsXG4gXHRORVRERVZfQV9ETUFCVUZfSUQsXG4mIzQzO1x0TkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcbiBcbiBcdF9fTkVUREVWX0FfRE1BQlVGX01BWCxcbiBcdE5FVERFVl9BX0RNQUJVRl9NQVggPSAoX19ORVRERVZfQV9ETUFCVUZfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHlcbmluZGV4IDAzMWNmOTkwNWY2NTFjLi44MmMxMWZmYzRhZGQ3YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5XG5AQCAtMiw3ICYjNDM7Miw4IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIGZyb20gb3MgaW1wb3J0IHBhdGhcbi1mcm9tIGRldm1lbV9saWIgaW1wb3J0IHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzXG4mIzQzO2Zyb20gZGV2bWVtX2xpYiBpbXBvcnQgKHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdilcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52XG4gXG5AQCAtMzAsMTEgJiM0MzszMSwxNyBAQCBkZWYgY2hlY2tfcnhfaGRzKGNmZykgLVx1MDAzZSBOb25lOlxuICAgICBydW5fcnhfaGRzKGNmZylcbiBcbiBcbiYjNDM7ZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggcngtcGFnZS1zaXplID0gMTYgS2lCLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgcnVuX3J4X2xhcmdlX25pb3YoY2ZnKVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biB0aGUgZGV2bWVtIHRlc3QgY2FzZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcbiAgICAgICAgIHNldHVwX3Rlc3QoY2ZnLCBwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSAmIzQzOyBcJiMzNDsvbmNkZXZtZW1cJiMzNDspKVxuLSAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHNdLFxuJiM0MzsgICAgICAgIGtzZnRfcnVuKFtjaGVja19yeCwgY2hlY2tfdHgsIGNoZWNrX3R4X2NodW5rcywgY2hlY2tfcnhfaGRzLFxuJiM0MzsgICAgICAgICAgICAgICAgICBjaGVja19yeF9sYXJnZV9uaW92XSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5pbmRleCAwOTIxZmYwM2ViODFjNS4uNmM5MzIwMThiNDYzYTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5AQCAtMSw0ICYjNDM7MSw1IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUsdG9vLW1hbnktYXJndW1lbnRzXG4gXCYjMzQ7XCYjMzQ7XCYjMzQ7U2hhcmVkIGhlbHBlcnMgZm9yIGRldm1lbSBUQ1Agc2VsZnRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuIGltcG9ydCByZVxuQEAgLTgsNyAmIzQzOzksNyBAQCBmcm9tIGxpYi5weSBpbXBvcnQgKGJrZywgY21kLCBkZWZlciwgZXRodG9vbCwgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuLFxuICAgICAgICAgICAgICAgICAgICAgTmV0ZGV2RmFtaWx5KVxuIFxuIFxuLWRlZiByZXF1aXJlX2Rldm1lbShjZmcpOlxuJiM0MztkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Byb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbiYjMzk7dCBzdXBwb3J0ZWQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXCYjMzQ7ZGV2bWVtX3Byb2JlZFwmIzM0Oyk6XG4gICAgICAgICBwcm9iZV9jb21tYW5kID0gZlwmIzM0O3tjZmcuYmluX2xvY2FsfSAtZiB7Y2ZnLmlmbmFtZX1cJiMzNDtcbkBAIC0xOCw2ICYjNDM7MTksMTkgQEAgZGVmIHJlcXVpcmVfZGV2bWVtKGNmZyk6XG4gICAgIGlmIG5vdCBjZmcuZGV2bWVtX3N1cHBvcnRlZDpcbiAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7VGVzdCByZXF1aXJlcyBkZXZtZW0gc3VwcG9ydFwmIzM0OylcbiBcbiYjNDM7ICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcdTAwM2UgMDpcbiYjNDM7ICAgICAgICBpZiBub3QgaGFzYXR0cihjZmcsIFwmIzM0O2Rldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkXCYjMzQ7KTpcbiYjNDM7ICAgICAgICAgICAgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkID0ge31cbiYjNDM7XG4mIzQzOyAgICAgICAgaWYgcnhfcGFnZV9zaXplIG5vdCBpbiBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWQ6XG4mIzQzOyAgICAgICAgICAgIHByb2JlX2NvbW1hbmQgPSBmXCYjMzQ7e2NmZy5iaW5fbG9jYWx9IC1mIHtjZmcuaWZuYW1lfSAtYiB7cnhfcGFnZV9zaXplfVwmIzM0O1xuJiM0MzsgICAgICAgICAgICBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWRbcnhfcGFnZV9zaXplXSA9IFxcXG4mIzQzOyAgICAgICAgICAgICAgICBjbWQocHJvYmVfY29tbWFuZCwgZmFpbD1GYWxzZSwgc2hlbGw9VHJ1ZSkucmV0ID09IDBcbiYjNDM7XG4mIzQzOyAgICAgICAgaWYgbm90IGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZFtyeF9wYWdlX3NpemVdOlxuJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuJiM0MzsgICAgICAgICAgICAgICAgZlwmIzM0O1Rlc3QgcmVxdWlyZXMgZGV2bWVtIHJ4LXBhZ2Utc2l6ZT17cnhfcGFnZV9zaXplfSBzdXBwb3J0XCYjMzQ7KVxuJiM0MztcbiBcbiBkZWYgY29uZmlndXJlX25pYyhjZmcpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtDaGFubmVscywgcmluZ3MsIFJTUywgcXVldWUgbGVhc2UgZm9yIG5ldGtpdCBkZXZtZW0uXCYjMzQ7XCYjMzQ7XCYjMzQ7XG5AQCAtNzYsNyAmIzQzOzkwLDggQEAgZGVmIHNldF9mbG93X3J1bGUoY2ZnLCBwb3J0KTpcbiAgICAgcmV0dXJuIGludChyZS5zZWFyY2gociYjMzk7SUQgKFxcZCYjNDM7KSYjMzk7LCBvdXRwdXQpLmdyb3VwKDEpKVxuIFxuIFxuLWRlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSk6XG4mIzQzO2RlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSxcbiYjNDM7ICAgICAgICAgICAgICAgIHJ4X3BhZ2Vfc2l6ZT0wKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QnVpbGQgdGhlIG5jZGV2bWVtIFJYIGxpc3RlbmVyIGNvbW1hbmQuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIGlmIGhhc2F0dHIoY2ZnLCAmIzM5O25ldG5zJiMzOTspOlxuICAgICAgICAgZmxvd19ydWxlX2lkID0gc2V0X2Zsb3dfcnVsZShjZmcsIHBvcnQpXG5AQCAtOTYsNiAmIzQzOzExMSw4IEBAIGRlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSk6XG4gICAgICAgICBleHRyYXMuYXBwZW5kKFwmIzM0Oy12IDdcJiMzNDspXG4gICAgIGlmIGZhaWxfb25fbGluZWFyOlxuICAgICAgICAgZXh0cmFzLmFwcGVuZChcJiMzNDstTFwmIzM0OylcbiYjNDM7ICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcdTAwM2UgMDpcbiYjNDM7ICAgICAgICBleHRyYXMuYXBwZW5kKGZcJiMzNDstYiB7cnhfcGFnZV9zaXplfVwmIzM0OylcbiBcbiAgICAgcGFydHMgPSBbY2ZnLmJpbl9sb2NhbCwgXCYjMzQ7LWxcJiMzNDssIGZcJiMzNDstZiB7aWZuYW1lfVwmIzM0OywgZlwmIzM0Oy1zIHthZGRyfVwmIzM0OyxcbiAgICAgICAgICAgICAgZlwmIzM0Oy1wIHtwb3J0fVwmIzM0OywgKmV4dHJhc11cbkBAIC0yMDIsNiAmIzQzOzIxOSw0NCBAQCBkZWYgcnVuX3R4X2NodW5rcyhjZmcpOlxuICAgICBrc2Z0X2VxKHNvY2F0LnN0ZG91dC5zdHJpcCgpLCBcJiMzNDtoZWxsb1xcbndvcmxkXCYjMzQ7KVxuIFxuIFxuJiM0MztkZWYgX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzKGhwX2ZpbGUsIG5yX2h1Z2VwYWdlcyk6XG4mIzQzOyAgICB3aXRoIG9wZW4oaHBfZmlsZSwgJiMzOTt3JiMzOTssIGVuY29kaW5nPSYjMzk7dXRmLTgmIzM5OykgYXMgZjpcbiYjNDM7ICAgICAgICBmLndyaXRlKHN0cihucl9odWdlcGFnZXMpKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBydW5fcnhfbGFyZ2VfbmlvdihjZmcpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIHRoZSBkZXZtZW0gUlggdGVzdCB3aXRoIGEgbGFyZ2UgbmlvdiAocngtcGFnZS1zaXplIFx1MDAzZSBQQUdFX1NJWkUpLlxuJiM0MztcbiYjNDM7ICAgIFN3ZWVwIHBheWxvYWQgc2l6ZXMgdGhhdCBzdHJhZGRsZSB0aGUgbmlvdiBib3VuZGFyeTogYmVsb3csIGVxdWFsIHRvLFxuJiM0MzsgICAgYW5kIGFib3ZlIHJ4X3BhZ2Vfc2l6ZSwgdG8gZXhlcmNpc2Ugc3ViLW5pb3YsIGV4YWN0LW5pb3YsIGFuZCBtdWx0aS1uaW92XG4mIzQzOyAgICBSWCBwYXRocy5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgaHBfZmlsZSA9IFwmIzM0Oy9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXNcJiMzNDtcbiYjNDM7ICAgIHdpdGggb3BlbihocF9maWxlLCAmIzM5O3ImIzQzOyYjMzk7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIGY6XG4mIzQzOyAgICAgICAgbnJfaHVnZXBhZ2VzID0gaW50KGYucmVhZCgpLnN0cmlwKCkpXG4mIzQzOyAgICAgICAgaWYgbnJfaHVnZXBhZ2VzIFx1MDAzYyA2NDpcbiYjNDM7ICAgICAgICAgICAgZi5zZWVrKDApXG4mIzQzOyAgICAgICAgICAgIGYud3JpdGUoXCYjMzQ7NjRcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIGRlZmVyKF9yZXN0b3JlX25yX2h1Z2VwYWdlcywgaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKVxuJiM0MzsgICAgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MTYzODQpXG4mIzQzOyAgICBjb25maWd1cmVfbmljKGNmZylcbiYjNDM7ICAgIG5ldG5zID0gZ2V0YXR0cihjZmcsIFwmIzM0O25ldG5zXCYjMzQ7LCBOb25lKVxuJiM0MztcbiYjNDM7ICAgIGZvciBzaXplIGluIFsxMDI0LCA0MDk2LCA4MTkyLCAxNjM4NCwgMzI3NjgsIDY1NTM2XTpcbiYjNDM7ICAgICAgICBwb3J0ID0gcmFuZF9wb3J0KClcbiYjNDM7ICAgICAgICBzb2NhdCA9IHNvY2F0X3NlbmQoY2ZnLCBwb3J0KVxuJiM0MzsgICAgICAgIGxpc3Rlbl9jbWQgPSBuY2Rldm1lbV9yeChjZmcsIHBvcnQsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dfc3RlZXI9bm90IG5ldG5zLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9wYWdlX3NpemU9MTYzODQpXG4mIzQzOyAgICAgICAgZGF0YV9waXBlID0gKGZcJiMzNDt5ZXMgJChlY2hvIC1lIFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNikgfCBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgZlwmIzM0O2hlYWQgLWMge3NpemV9IHwge3NvY2F0fVwmIzM0OylcbiYjNDM7ICAgICAgICB3aXRoIGJrZyhsaXN0ZW5fY21kLCBleGl0X3dhaXQ9VHJ1ZSwgbnM9bmV0bnMpIGFzIG5jZGV2bWVtOlxuJiM0MzsgICAgICAgICAgICB3YWl0X3BvcnRfbGlzdGVuKHBvcnQsIHByb3RvPVwmIzM0O3RjcFwmIzM0OywgbnM9bmV0bnMpXG4mIzQzOyAgICAgICAgICAgIGNtZChkYXRhX3BpcGUsIGhvc3Q9Y2ZnLnJlbW90ZSwgc2hlbGw9VHJ1ZSlcbiYjNDM7ICAgICAgICBrc2Z0X2VxKG5jZGV2bWVtLnJldCwgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIGZcJiMzNDtsYXJnZS1uaW92IGZhaWxlZCBmb3IgcGF5bG9hZCBzaXplIHtzaXplfVwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBydW5fcnhfaGRzKGNmZyk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biB0aGUgSERTIHRlc3QgYnkgcnVubmluZyBkZXZtZW0gUlggYWNyb3NzIGEgc2VnbWVudCBzaXplIHN3ZWVwLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICByZXF1aXJlX2Rldm1lbShjZmcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbmluZGV4IGQ5NmU4YTNiNWE2NTI2Li5mZmU4ZWIwNWZhYzBkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbkBAIC00MCw2ICYjNDM7NDAsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkYXJnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuQEAgLTYxLDYgJiM0Mzs2Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3BhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRtYWJ1Zi5oXHUwMDNlXG5AQCAtNzksNiAmIzQzOzgxLDcgQEBcbiAjZGVmaW5lIFBBR0VfU0hJRlQgMTJcbiAjZGVmaW5lIFRFU1RfUFJFRklYIFwmIzM0O25jZGV2bWVtXCYjMzQ7XG4gI2RlZmluZSBOVU1fUEFHRVMgMTYwMDBcbiYjNDM7I2RlZmluZSBNQih4KSAoKHgpIFx1MDAzY1x1MDAzYyAyMClcbiBcbiAjaWZuZGVmIE1TR19TT0NLX0RFVk1FTVxuICNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFxuQEAgLTEwMCw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XG4gc3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcbiBzdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwO1xuIHN0YXRpYyBib29sIGZhaWxfb25fbGluZWFyO1xuJiM0MztzdGF0aWMgdWludDMyX3QgcnhfcGFnZV9zaXplO1xuIFxuIC8qIFN5c3RlbSBzdGF0ZSBsb2FkZWQgYnkgY3VycmVudF9jb25maWdfbG9hZCgpICovXG4gI2RlZmluZSBNQVhfRkxPV1NcdDhcbkBAIC0xNDIsNiAmIzQzOzE0Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgY3JlYXRlO1xuIFx0c3RydWN0IG1lbW9yeV9idWZmZXIgKmN0eDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWVtZmRfZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Y3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7XG5AQCAtMTU2LDkgJiM0MzsxNjEsMTQgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKVxuIFx0XHRnb3RvIGVycl9mcmVlX2N0eDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VtZW1mZCA9IG1lbWZkX2NyZWF0ZShcJiMzNDt1ZG1hYnVmLXRlc3RcJiMzNDssIE1GRF9BTExPV19TRUFMSU5HKTtcbiYjNDM7XHRtZW1mZF9mbGFncyA9IE1GRF9BTExPV19TRUFMSU5HO1xuJiM0MztcdGlmIChyeF9wYWdlX3NpemUgXHUwMDNlIGdldHBhZ2VzaXplKCkpXG4mIzQzO1x0XHRtZW1mZF9mbGFncyB8PSBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQjtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZW1lbWZkID0gbWVtZmRfY3JlYXRlKFwmIzM0O3VkbWFidWYtdGVzdFwmIzM0OywgbWVtZmRfZmxhZ3MpO1xuIFx0aWYgKGN0eC1cdTAwM2VtZW1mZCBcdTAwM2MgMCkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7W3NraXAsbm8tbWVtZmRdXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtbc2tpcCxuby1tZW1mZCVzXVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICAobWVtZmRfZmxhZ3MgXHUwMDI2IE1GRF9IVUdFVExCKSA/IFwmIzM0OyAobmVlZCBodWdlcGFnZXMpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfY2xvc2VfZGV2O1xuIFx0fVxuIFxuQEAgLTE2OCw2ICYjNDM7MTc4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcbiBcdFx0Z290byBlcnJfY2xvc2VfbWVtZmQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG1lbWZkX2ZsYWdzIFx1MDAyNiBNRkRfSFVHRVRMQikge1xuJiM0MztcdFx0c2l6ZSA9IHJvdW5kdXAoc2l6ZSwgTUIoMikpO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBmdHJ1bmNhdGUoY3R4LVx1MDAzZW1lbWZkLCBzaXplKTtcbiBcdGlmIChyZXQgPT0gLTEpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O1tGQUlMLG1lbWZkLXRydW5jYXRlXVwmIzM0Oyk7XG5AQCAtNjk5LDYgJiM0Mzs3MTQsOCBAQCBzdGF0aWMgaW50IGJpbmRfcnhfcXVldWUodW5zaWduZWQgaW50IGlmaW5kZXgsIHVuc2lnbmVkIGludCBkbWFidWZfZmQsXG4gXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X2lmaW5kZXgocmVxLCBpZmluZGV4KTtcbiBcdG5ldGRldl9iaW5kX3J4X3JlcV9zZXRfZmQocmVxLCBkbWFidWZfZmQpO1xuIFx0X19uZXRkZXZfYmluZF9yeF9yZXFfc2V0X3F1ZXVlcyhyZXEsIHF1ZXVlcywgbl9xdWV1ZV9pbmRleCk7XG4mIzQzO1x0aWYgKHJ4X3BhZ2Vfc2l6ZSlcbiYjNDM7XHRcdG5ldGRldl9iaW5kX3J4X3JlcV9zZXRfcnhfcGFnZV9zaXplKHJlcSwgcnhfcGFnZV9zaXplKTtcbiBcbiBcdHJzcCA9IG5ldGRldl9iaW5kX3J4KCp5cywgcmVxKTtcbiBcdGlmICghcnNwKSB7XG5AQCAtMTQxMSw3ICYjNDM7MTQyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpbnQgaXNfc2VydmVyID0gMCwgb3B0O1xuIFx0aW50IHJldCwgZXJyID0gMTtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O0xsczpjOnA6djpxOnQ6Zjp6Om5cJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O0xsczpjOnA6djpxOnQ6Zjp6Om5iOlwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTtMJiMzOTs6XG4gXHRcdFx0ZmFpbF9vbl9saW5lYXIgPSB0cnVlO1xuQEAgLTE0NDYsNiAmIzQzOzE0NjMsMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0Y2FzZSAmIzM5O24mIzM5OzpcbiBcdFx0XHRza2lwX2NvbmZpZyA9IDE7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7YiYjMzk7OiB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJybm8gPSAwO1xuJiM0MztcdFx0XHR2YWwgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICgodmFsID09IFVMT05HX01BWCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRVJBTkdFKSB8fFxuJiM0MztcdFx0XHQgICAgdmFsIFx1MDAzZSBVSU5UMzJfTUFYKSB7XG4mIzQzO1x0XHRcdFx0cHJfZXJyKFwmIzM0O2ludmFsaWQgcnhfcGFnZV9zaXplOiAlc1wmIzM0Oywgb3B0YXJnKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyeF9wYWdlX3NpemUgPSB2YWw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0XHRjYXNlICYjMzk7PyYjMzk7OlxuIFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDt1bmtub3duIG9wdGlvbjogJWNcXG5cJiMzNDssIG9wdG9wdCk7XG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5XG5pbmRleCAzMDBlZDJhNzBhYjQ0ZC4uNjFjNmYzMWYwMWU1MWUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weVxuQEAgLTMsNyAmIzQzOzMsOCBAQFxuIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgZGV2bWVtIFRDUCB3aXRoIG5ldGtpdC5cJiMzNDtcJiMzNDtcJiMzNDtcbiBcbiBpbXBvcnQgb3Ncbi1mcm9tIGRldm1lbV9saWIgaW1wb3J0IHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzXG4mIzQzO2Zyb20gZGV2bWVtX2xpYiBpbXBvcnQgKHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdilcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkNvbnRFbnZcbiBcbkBAIC0zMSw2ICYjNDM7MzIsMTEgQEAgZGVmIGNoZWNrX25rX3J4X2hkcyhjZmcpIC1cdTAwM2UgTm9uZTpcbiAgICAgcnVuX3J4X2hkcyhjZmcpXG4gXG4gXG4mIzQzO2RlZiBjaGVja19ua19yeF9sYXJnZV9uaW92KGNmZykgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIHRoZSBkZXZtZW0gUlggbGFyZ2UtbmlvdiB0ZXN0IHRocm91Z2ggbmV0a2l0LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgcnVuX3J4X2xhcmdlX25pb3YoY2ZnKVxuJiM0MztcbiYjNDM7XG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biB0aGUgbmV0a2l0IGRldm1lbSB0ZXN0IGNhc2VzLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICB3aXRoIE5ldERydkNvbnRFbnYoX19maWxlX18sIHJ4cXVldWVzPTIsIHByaW1hcnlfcnhfcmVkaXJlY3Q9VHJ1ZSkgYXMgY2ZnOlxuQEAgLTM4LDcgJiM0Mzs0NCw3IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7bmNkZXZtZW1cJiMzNDspKVxuICAgICAgICAga3NmdF9ydW4oW2NoZWNrX25rX3J4LCBjaGVja19ua190eCwgY2hlY2tfbmtfdHhfY2h1bmtzLFxuLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKVxuJiM0MzsgICAgICAgICAgICAgICAgICBjaGVja19ua19yeF9oZHMsIGNoZWNrX25rX3J4X2xhcmdlX25pb3ZdLCBhcmdzPShjZmcsKSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lOQ19GSUxFJiMzNDssCiAgICAmIzM0O1VETUFCVUYmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9hbGxvY19kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X25pb3ZfYXQmIzM0OywKICAgICYjMzQ7bXBfZG1hYnVmX2Rldm1lbV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgdGhlIFJYIHBhZ2Ugc2l6ZSBmb3IgZGV2bWVtIFRDUCB2aWEgdGhlIGByeC1wYWdlLXNpemVgIG5ldGxpbmsgYXR0cmlidXRlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBkZXZtZW0gVENQIGNvZGUgdG8gaGFuZGxlIG5vbi1QQUdFX1NJWkUgYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0a2l0IG9yIHZldGgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmUzYWFjMjdjZDAwNDliNDVlMjJkNTE5OWE1ZWI0MjQ5OTY5ZjcwMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDA4OjQzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sCmluZGV4IDVmMTQzZGE3NDU4Y2ZiLi4xZWU2NDM0MmRmMTFjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbApAQCAtNiw2ICYjNDM7NiwxMiBAQCBkb2M6ICZndDstCiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLgogCiBkZWZpbml0aW9uczoKJiM0MzsgIC0KJiM0MzsgICAgdHlwZTogY29uc3QKJiM0MzsgICAgbmFtZTogcGFnZS1zaXplCiYjNDM7ICAgIHZhbHVlOiAwICAjIGR1bW15OiBjb2RlZ2VuIG5lZWRzIGEgbnVtYmVyLCByZWFsIHZhbHVlIGlzIHRoZSBQQUdFX1NJWkUgbWFjcm8gKGhlYWRlcikKJiM0MzsgICAgaGVhZGVyOiBhc20vcGFnZS5oCiYjNDM7ICAgIHNjb3BlOiBrZXJuZWwKICAgLQogICAgIHR5cGU6IGZsYWdzCiAgICAgbmFtZTogeGRwLWFjdApAQCAtNTk4LDYgJiM0Mzs2MDQsMTYgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBjaGVja3M6CiAgICAgICAgICAgbWluOiAxCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcngtcGFnZS1zaXplCiYjNDM7ICAgICAgICBkb2M6IHwKJiM0MzsgICAgICAgICAgU2l6ZSBpbiBieXRlcyBvZiBlYWNoIGRldmljZSBwYWdlIHRoZSBOSUMgd3JpdGVzIGludG8gZnJvbSB0aGUgYm91bmQKJiM0MzsgICAgICAgICAgZG1hYnVmLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGFuZCAmZ3Q7PSBQQUdFX1NJWkU7IGRlZmF1bHRzIHRvCiYjNDM7ICAgICAgICAgIFBBR0VfU0laRS4KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgY2hlY2tzOgomIzQzOyAgICAgICAgICBtaW46IHBhZ2Utc2l6ZQomIzQzOyAgICAgICAgICBtYXg6IHUzMi1tYXgKIAogb3BlcmF0aW9uczoKICAgbGlzdDoKQEAgLTgxMiw2ICYjNDM7ODI4LDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gaWZpbmRleAogICAgICAgICAgICAgLSBmZAogICAgICAgICAgICAgLSBxdWV1ZXMKJiM0MzsgICAgICAgICAgICAtIHJ4LXBhZ2Utc2l6ZQogICAgICAgICByZXBseToKICAgICAgICAgICBhdHRyaWJ1dGVzOgogICAgICAgICAgICAgLSBpZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oCmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaApAQCAtMjE5LDYgJiM0MzsyMTksNyBAQCBlbnVtIHsKIAlORVRERVZfQV9ETUFCVUZfUVVFVUVTLAogCU5FVERFVl9BX0RNQUJVRl9GRCwKIAlORVRERVZfQV9ETUFCVUZfSUQsCiYjNDM7CU5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsCiAKIAlfX05FVERFVl9BX0RNQUJVRl9NQVgsCiAJTkVUREVWX0FfRE1BQlVGX01BWCA9IChfX05FVERFVl9BX0RNQUJVRl9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uYwppbmRleCA5NTdkNmI5NjIxNmIzMy4uYjAzNmYxNGNiMjNhMTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldm1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldm1lbS5jCkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdikKIAogCW93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7CiAJcmV0dXJuIG93bmVyLSZndDtiYXNlX2RtYV9hZGRyICYjNDM7Ci0JICAgICAgICgoZG1hX2FkZHJfdCluZXRfaW92X2lkeChuaW92KSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsJICAgICAgICgoZG1hX2FkZHJfdCluZXRfaW92X2lkeChuaW92KSAmbHQ7Jmx0OyBvd25lci0mZ3Q7YmluZGluZy0mZ3Q7bmlvdl9zaGlmdCk7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQpAQCAtOTMsMTMgJiM0Mzs5MywxNCBAQCBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZykKIAlzc2l6ZV90IG9mZnNldDsKIAlzc2l6ZV90IGluZGV4OwogCi0JZG1hX2FkZHIgPSBnZW5fcG9vbF9hbGxvY19vd25lcihiaW5kaW5nLSZndDtjaHVua19wb29sLCBQQUdFX1NJWkUsCiYjNDM7CWRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCwKJiM0MzsJCQkJCTFVTCAmbHQ7Jmx0OyBiaW5kaW5nLSZndDtuaW92X3NoaWZ0LAogCQkJCQkodm9pZCAqKikmYW1wO293bmVyKTsKIAlpZiAoIWRtYV9hZGRyKQogCQlyZXR1cm4gTlVMTDsKIAogCW9mZnNldCA9IGRtYV9hZGRyIC0gb3duZXItJmd0O2Jhc2VfZG1hX2FkZHI7Ci0JaW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7CiYjNDM7CWluZGV4ID0gb2Zmc2V0ICZndDsmZ3Q7IGJpbmRpbmctJmd0O25pb3Zfc2hpZnQ7CiAJbmlvdiA9ICZhbXA7b3duZXItJmd0O2FyZWEubmlvdnNbaW5kZXhdOwogCiAJbmlvdi0mZ3Q7ZGVzYy5wcF9tYWdpYyA9IDA7CkBAIC0xMTMsMTIgJiM0MzsxMTQsMTMgQEAgdm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpuaW92KQogewogCXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nID0gbmV0X2Rldm1lbV9pb3ZfYmluZGluZyhuaW92KTsKIAl1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7CiYjNDM7CXNpemVfdCBuaW92X3NpemUgPSAxVUwgJmx0OyZsdDsgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdDsKIAogCWlmIChXQVJOX09OKCFnZW5fcG9vbF9oYXNfYWRkcihiaW5kaW5nLSZndDtjaHVua19wb29sLCBkbWFfYWRkciwKLQkJCQkgICAgICAgUEFHRV9TSVpFKSkpCiYjNDM7CQkJCSAgICAgICBuaW92X3NpemUpKSkKIAkJcmV0dXJuOwogCi0JZ2VuX3Bvb2xfZnJlZShiaW5kaW5nLSZndDtjaHVua19wb29sLCBkbWFfYWRkciwgUEFHRV9TSVpFKTsKJiM0MzsJZ2VuX3Bvb2xfZnJlZShiaW5kaW5nLSZndDtjaHVua19wb29sLCBkbWFfYWRkciwgbmlvdl9zaXplKTsKIH0KIAogdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpCkBAIC0xNjMsNiAmIzQzOzE2NSw5IEBAIGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LAogCXUzMiB4YV9pZHg7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoYmluZGluZy0mZ3Q7bmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKQomIzQzOwkJbXBfcGFyYW1zLnJ4X3BhZ2Vfc2l6ZSA9IDFVICZsdDsmbHQ7IGJpbmRpbmctJmd0O25pb3Zfc2hpZnQ7CiYjNDM7CiAJZXJyID0gbmV0aWZfbXBfb3Blbl9yeHEoZGV2LCByeHFfaWR4LCAmYW1wO21wX3BhcmFtcywgZXh0YWNrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTg0LDEwICYjNDM7MTg5LDEyIEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICoKIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsCiAJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsCiYjNDM7CQkgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LAogCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nOwomIzQzOwlzaXplX3Qgbmlvdl9zaXplID0gMVVMICZsdDsmbHQ7IG5pb3Zfc2hpZnQ7CiAJc3RhdGljIHUzMiBpZF9hbGxvY19uZXh0OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCiAJYmluZGluZy0mZ3Q7ZGV2ID0gZGV2OwogCWJpbmRpbmctJmd0O3ZkZXYgPSB2ZGV2OwomIzQzOwliaW5kaW5nLSZndDtuaW92X3NoaWZ0ID0gbmlvdl9zaGlmdDsKIAl4YV9pbml0X2ZsYWdzKCZhbXA7YmluZGluZy0mZ3Q7Ym91bmRfcnhxcywgWEFfRkxBR1NfQUxMT0MpOwogCiAJZXJyID0gcGVyY3B1X3JlZl9pbml0KCZhbXA7YmluZGluZy0mZ3Q7cmVmLApAQCAtMjQ4LDE4ICYjNDM7MjU2LDE0IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJCWdvdG8gZXJyX3VubWFwOwogCQl9CiAJCWJpbmRpbmctJmd0O3R4X3ZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldF9pb3YgKiwKLQkJCQkJCWRtYWJ1Zi0mZ3Q7c2l6ZSAvIFBBR0VfU0laRSk7CiYjNDM7CQkJCQkJZG1hYnVmLSZndDtzaXplICZndDsmZ3Q7IG5pb3Zfc2hpZnQpOwogCQlpZiAoIWJpbmRpbmctJmd0O3R4X3ZlYykgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyX3VubWFwOwogCQl9CiAJfQogCi0JLyogRm9yIHNpbXBsaWNpdHkgd2UgZXhwZWN0IHRvIG1ha2UgUEFHRV9TSVpFIGFsbG9jYXRpb25zLCBidXQgdGhlCi0JICogYmluZGluZyBjYW4gYmUgbXVjaCBtb3JlIGZsZXhpYmxlIHRoYW4gdGhhdC4gV2UgbWF5IGJlIGFibGUgdG8KLQkgKiBhbGxvY2F0ZSBNVFUgc2l6ZWQgY2h1bmtzIGhlcmUuIExlYXZlIHRoYXQgZm9yIGZ1dHVyZSB3b3JrLi4uCi0JICovCi0JYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZULAomIzQzOwliaW5kaW5nLSZndDtjaHVua19wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKG5pb3Zfc2hpZnQsCiAJCQkJCSAgICAgIGRldl90b19ub2RlKCZhbXA7ZGV2LSZndDtkZXYpKTsKIAlpZiAoIWJpbmRpbmctJmd0O2NodW5rX3Bvb2wpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTI3Myw5ICYjNDM7Mjc3LDEyIEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJc2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCQlzdHJ1Y3QgbmV0X2lvdiAqbmlvdjsKIAotCQlpZiAoIUlTX0FMSUdORUQobGVuLCBQQUdFX1NJWkUpKSB7CiYjNDM7CQlpZiAoIUlTX0FMSUdORUQoZG1hX2FkZHIsIG5pb3Zfc2l6ZSkgfHwKJiM0MzsJCSAgICAhSVNfQUxJR05FRChsZW4sIG5pb3Zfc2l6ZSkpIHsKIAkJCWVyciA9IC1FSU5WQUw7Ci0JCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7ZG1hLWJ1ZiBTRyBsZW5ndGggbXVzdCBiZSBQQUdFX1NJWkUgYWxpZ25lZCYjMzQ7KTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtkbWFidWYgc2cgZW50cnkgKGFkZHI9JXBhZCwgbGVuPSV6dSkgbm90IGFsaWduZWQgdG8gbmlvdiBzaXplICV6dSYjMzQ7LAomIzQzOwkJCQkJICAgJmFtcDtkbWFfYWRkciwgbGVuLCBuaW92X3NpemUpOwogCQkJZ290byBlcnJfZnJlZV9jaHVua3M7CiAJCX0KIApAQCAtMjg4LDcgJiM0MzsyOTUsNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsCiAKIAkJb3duZXItJmd0O2FyZWEuYmFzZV92aXJ0dWFsID0gdmlydHVhbDsKIAkJb3duZXItJmd0O2Jhc2VfZG1hX2FkZHIgPSBkbWFfYWRkcjsKLQkJb3duZXItJmd0O2FyZWEubnVtX25pb3ZzID0gbGVuIC8gUEFHRV9TSVpFOwomIzQzOwkJb3duZXItJmd0O2FyZWEubnVtX25pb3ZzID0gbGVuICZndDsmZ3Q7IG5pb3Zfc2hpZnQ7CiAJCW93bmVyLSZndDtiaW5kaW5nID0gYmluZGluZzsKIAogCQllcnIgPSBnZW5fcG9vbF9hZGRfb3duZXIoYmluZGluZy0mZ3Q7Y2h1bmtfcG9vbCwgZG1hX2FkZHIsCkBAIC0zMTMsNyAmIzQzOzMyMCw3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJCXBhZ2VfcG9vbF9zZXRfZG1hX2FkZHJfbmV0bWVtKG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpLAogCQkJCQkJICAgICAgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdikpOwogCQkJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQkJCWJpbmRpbmctJmd0O3R4X3ZlY1tvd25lci0mZ3Q7YXJlYS5iYXNlX3ZpcnR1YWwgLyBQQUdFX1NJWkUgJiM0MzsgaV0gPSBuaW92OwomIzQzOwkJCQliaW5kaW5nLSZndDt0eF92ZWNbKG93bmVyLSZndDthcmVhLmJhc2VfdmlydHVhbCAmZ3Q7Jmd0OyBuaW92X3NoaWZ0KSAmIzQzOyBpXSA9IG5pb3Y7CiAJCX0KIAogCQl2aXJ0dWFsICYjNDM7PSBsZW47CkBAIC00MzAsMTMgJiM0Mzs0MzcsMTUgQEAgc3RydWN0IG5ldF9pb3YgKgogbmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZywKIAkJICAgICAgIHNpemVfdCB2aXJ0X2FkZHIsIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpCiB7CiYjNDM7CXNpemVfdCBuaW92X3NpemUgPSAxVUwgJmx0OyZsdDsgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdDsKJiM0MzsKIAlpZiAodmlydF9hZGRyICZndDs9IGJpbmRpbmctJmd0O2RtYWJ1Zi0mZ3Q7c2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkqb2ZmID0gdmlydF9hZGRyICUgUEFHRV9TSVpFOwotCSpzaXplID0gUEFHRV9TSVpFIC0gKm9mZjsKJiM0MzsJKm9mZiA9IHZpcnRfYWRkciAmYW1wOyAobmlvdl9zaXplIC0gMSk7CiYjNDM7CSpzaXplID0gbmlvdl9zaXplIC0gKm9mZjsKIAotCXJldHVybiBiaW5kaW5nLSZndDt0eF92ZWNbdmlydF9hZGRyIC8gUEFHRV9TSVpFXTsKJiM0MzsJcmV0dXJuIGJpbmRpbmctJmd0O3R4X3ZlY1t2aXJ0X2FkZHIgJmd0OyZndDsgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdF07CiB9CiAKIC8qKiogJiMzNDtEbWFidWYgZGV2bWVtIG1lbW9yeSBwcm92aWRlciYjMzQ7ICoqKi8KQEAgLTQ1NCw3ICYjNDM7NDYzLDcgQEAgaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKQogCXBvb2wtJmd0O2RtYV9zeW5jID0gZmFsc2U7CiAJcG9vbC0mZ3Q7ZG1hX3N5bmNfZm9yX2NwdSA9IGZhbHNlOwogCi0JaWYgKHBvb2wtJmd0O3Aub3JkZXIgIT0gMCkKJiM0MzsJaWYgKHBvb2wtJmd0O3Aub3JkZXIgIT0gYmluZGluZy0mZ3Q7bmlvdl9zaGlmdCAtIFBBR0VfU0hJRlQpCiAJCXJldHVybiAtRTJCSUc7CiAKIAluZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX2dldChiaW5kaW5nKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5oIGIvbmV0L2NvcmUvZGV2bWVtLmgKaW5kZXggMzg1MmE1NjAzNmNiNDAuLjRhMjkzYTdkMTE0OWM4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZtZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXZtZW0uaApAQCAtNzEsNiAmIzQzOzcxLDggQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgewogCSAqLwogCXN0cnVjdCBuZXRfaW92ICoqdHhfdmVjOwogCiYjNDM7CXVuc2lnbmVkIGludCBuaW92X3NoaWZ0OwomIzQzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdzsKIH07CiAKQEAgLTkzLDcgJiM0Mzs5NSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICoKIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldiwKIAkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsCiAJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLCBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsCiYjNDM7CQkgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LAogCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKTsKIHZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTsKQEAgLTEyMiwxMCAmIzQzOzEyNSwxMSBAQCBzdGF0aWMgaW5saW5lIHUzMiBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpCiB7Ci0Jc3RydWN0IG5ldF9pb3ZfYXJlYSAqb3duZXIgPSBuZXRfaW92X293bmVyKG5pb3YpOwomIzQzOwlzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID0KJiM0MzsJCW5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpOwogCi0JcmV0dXJuIG93bmVyLSZndDtiYXNlX3ZpcnR1YWwgJiM0MzsKLQkgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwlyZXR1cm4gbmV0X2lvdl9vd25lcihuaW92KS0mZ3Q7YmFzZV92aXJ0dWFsICYjNDM7CiYjNDM7CSAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgJmx0OyZsdDsgY28tJmd0O2JpbmRpbmctJmd0O25pb3Zfc2hpZnQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wKQEAgLTE3NSw2ICYjNDM7MTc5LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LAogCQkgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldiwKIAkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsCiAJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsCiAJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jCmluZGV4IGQxOGM4OWI1YTZjNzU5Li5mODM3OTAzNDFlYWU2OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGRldi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogCiAvKiBJbnRlZ2VyIHZhbHVlIHJhbmdlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfcGFnZV9wb29sX2lkX3JhbmdlID0gewpAQCAtMjcsNiAmIzQzOzI4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX25hcGlfZGVmZXJfaGFyZF9pcnFzX3JhbmdlCiAJLm1heAk9IFMzMl9NQVgsCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfZG1hYnVmX3J4X3BhZ2Vfc2l6ZV9yYW5nZSA9IHsKJiM0MzsJLm1pbgk9IFBBR0VfU0laRSwKJiM0MzsJLm1heAk9IFUzMl9NQVgsCiYjNDM7fTsKJiM0MzsKIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi8KIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9sZWFzZV9ubF9wb2xpY3lbTkVUREVWX0FfTEVBU0VfTkVUTlNfSUQgJiM0MzsgMV0gPSB7CiAJW05FVERFVl9BX0xFQVNFX0lGSU5ERVhdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksCkBAIC0xMDYsMTAgJiM0MzsxMTIsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9xc3RhdHNfZ2V0X25sX3BvbGljeVtORVRERVZfQV9RU1RBVFNfU0NPUEUKIH07CiAKIC8qIE5FVERFVl9DTURfQklORF9SWCAtIGRvICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5W05FVERFVl9BX0RNQUJVRl9GRCAmIzQzOyAxXSA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5W05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUgJiM0MzsgMV0gPSB7CiAJW05FVERFVl9BX0RNQUJVRl9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLAogCVtORVRERVZfQV9ETUFCVUZfRkRdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sCiAJW05FVERFVl9BX0RNQUJVRl9RVUVVRVNdID0gTkxBX1BPTElDWV9ORVNURUQobmV0ZGV2X3F1ZXVlX2lkX25sX3BvbGljeSksCiYjNDM7CVtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCAmYW1wO25ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UpLAogfTsKIAogLyogTkVUREVWX0NNRF9OQVBJX1NFVCAtIGRvICovCkBAIC0yMTksNyAmIzQzOzIyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0gewogCQkuY21kCQk9IE5FVERFVl9DTURfQklORF9SWCwKIAkJLmRvaXQJCT0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCwKIAkJLnBvbGljeQkJPSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3ksCi0JCS5tYXhhdHRyCT0gTkVUREVWX0FfRE1BQlVGX0ZELAomIzQzOwkJLm1heGF0dHIJPSBORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLAogCQkuZmxhZ3MJCT0gR0VOTF9VTlNfQURNSU5fUEVSTSB8IEdFTkxfQ01EX0NBUF9ETywKIAl9LAogCXsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgKaW5kZXggZDcxYjQzNWQ3MmMxOGYuLjNmYWU4OGU4ZjVjNTBlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKIAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbmV0ZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9uZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAKIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfbGVhc2VfbmxfcG9saWN5W05FVERFVl9BX0xFQVNFX05FVE5TX0lEICYjNDM7IDFdOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKaW5kZXggYzE1ZDhkNGNhMWY4ZmEuLjBlZWE0ZWUyMmYyNDY3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmMKQEAgLTEwMTMsNiAmIzQzOzEwMTMsNyBAQCBuZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCwKIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7CiYjNDM7CXVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDsKIAl1MzIgaWZpbmRleCwgZG1hYnVmX2ZkLCByeHFfaWR4OwogCXN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwpAQCAtMTAzMCw2ICYjNDM7MTAzMSwxOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmaW5kZXggPSBubGFfZ2V0X3UzMihpbmZvLSZndDthdHRyc1tORVRERVZfQV9ERVZfSUZJTkRFWF0pOwogCWRtYWJ1Zl9mZCA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW05FVERFVl9BX0RNQUJVRl9GRF0pOwogCiYjNDM7CWlmIChpbmZvLSZndDthdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSkgewomIzQzOwkJdTMyIHJ4X3BhZ2Vfc2l6ZSA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdKTsKJiM0MzsKJiM0MzsJCWlmICghaXNfcG93ZXJfb2ZfMihyeF9wYWdlX3NpemUpKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLSZndDtleHRhY2ssCiYjNDM7CQkJCQkgICAgaW5mby0mZ3Q7YXR0cnNbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0sCiYjNDM7CQkJCQkgICAgJiMzNDtyeC1wYWdlLXNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDImIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQluaW92X3NoaWZ0ID0gaWxvZzIocnhfcGFnZV9zaXplKTsKJiM0MzsJfQomIzQzOwogCXByaXYgPSBnZW5sX3NrX3ByaXZfZ2V0KCZhbXA7bmV0ZGV2X25sX2ZhbWlseSwgTkVUTElOS19DQihza2IpLnNrKTsKIAlpZiAoSVNfRVJSKHByaXYpKQogCQlyZXR1cm4gUFRSX0VSUihwcml2KTsKQEAgLTEwODAsNyAmIzQzOzEwOTMsOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCX0KIAogCWJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLAotCQkJCQkgZG1hYnVmX2ZkLCBwcml2LCBpbmZvLSZndDtleHRhY2spOwomIzQzOwkJCQkJIGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdiwKJiM0MzsJCQkJCSBpbmZvLSZndDtleHRhY2spOwogCWlmIChJU19FUlIoYmluZGluZykpIHsKIAkJZXJyID0gUFRSX0VSUihiaW5kaW5nKTsKIAkJZ290byBlcnJfcnhxX2JpdG1hcDsKQEAgLTEyMjEsNyAmIzQzOzEyMzUsNyBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LAogCQkJCQkgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCwKIAkJCQkJIGRtYV9kZXYsIERNQV9UT19ERVZJQ0UsIGRtYWJ1Zl9mZCwKLQkJCQkJIHByaXYsIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CQkJCQkgUEFHRV9TSElGVCwgcHJpdiwgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoSVNfRVJSKGJpbmRpbmcpKSB7CiAJCWVyciA9IFBUUl9FUlIoYmluZGluZyk7CiAJCWdvdG8gZXJyX3VubG9ja19iaW5kX2RldjsKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaAppbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmgKQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgZW51bSB7CiAJTkVUREVWX0FfRE1BQlVGX1FVRVVFUywKIAlORVRERVZfQV9ETUFCVUZfRkQsCiAJTkVUREVWX0FfRE1BQlVGX0lELAomIzQzOwlORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLAogCiAJX19ORVRERVZfQV9ETUFCVUZfTUFYLAogCU5FVERFVl9BX0RNQUJVRl9NQVggPSAoX19ORVRERVZfQV9ETUFCVUZfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weQppbmRleCAwMzFjZjk5MDVmNjUxYy4uODJjMTFmZmM0YWRkN2IgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHkKQEAgLTIsNyAmIzQzOzIsOCBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiBmcm9tIG9zIGltcG9ydCBwYXRoCi1mcm9tIGRldm1lbV9saWIgaW1wb3J0IHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzCiYjNDM7ZnJvbSBkZXZtZW1fbGliIGltcG9ydCAoc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3J4X2xhcmdlX25pb3YpCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlCiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYKIApAQCAtMzAsMTEgJiM0MzszMSwxNyBAQCBkZWYgY2hlY2tfcnhfaGRzKGNmZykgLSZndDsgTm9uZToKICAgICBydW5fcnhfaGRzKGNmZykKIAogCiYjNDM7ZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggcngtcGFnZS1zaXplID0gMTYgS2lCLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBydW5fcnhfbGFyZ2VfbmlvdihjZmcpCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIHRoZSBkZXZtZW0gdGVzdCBjYXNlcy4mIzM0OyYjMzQ7JiMzNDsKICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6CiAgICAgICAgIHNldHVwX3Rlc3QoY2ZnLCBwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSAmIzQzOyAmIzM0Oy9uY2Rldm1lbSYjMzQ7KSkKLSAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHNdLAomIzQzOyAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHMsCiYjNDM7ICAgICAgICAgICAgICAgICAgY2hlY2tfcnhfbGFyZ2Vfbmlvdl0sCiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKQogICAgIGtzZnRfZXhpdCgpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5CmluZGV4IDA5MjFmZjAzZWI4MWM1Li42YzkzMjAxOGI0NjNhMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtX2xpYi5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5CkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUsdG9vLW1hbnktYXJndW1lbnRzCiAmIzM0OyYjMzQ7JiMzNDtTaGFyZWQgaGVscGVycyBmb3IgZGV2bWVtIFRDUCBzZWxmdGVzdHMuJiMzNDsmIzM0OyYjMzQ7CiAKIGltcG9ydCByZQpAQCAtOCw3ICYjNDM7OSw3IEBAIGZyb20gbGliLnB5IGltcG9ydCAoYmtnLCBjbWQsIGRlZmVyLCBldGh0b29sLCByYW5kX3BvcnQsIHdhaXRfcG9ydF9saXN0ZW4sCiAgICAgICAgICAgICAgICAgICAgIE5ldGRldkZhbWlseSkKIAogCi1kZWYgcmVxdWlyZV9kZXZtZW0oY2ZnKToKJiM0MztkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UHJvYmUgbmNkZXZtZW0gb24gY2ZnLmlmbmFtZSBhbmQgU0tJUCB0aGUgdGVzdCBpZiBkZXZtZW0gaXNuJiMzOTt0IHN1cHBvcnRlZC4mIzM0OyYjMzQ7JiMzNDsKICAgICBpZiBub3QgaGFzYXR0cihjZmcsICYjMzQ7ZGV2bWVtX3Byb2JlZCYjMzQ7KToKICAgICAgICAgcHJvYmVfY29tbWFuZCA9IGYmIzM0O3tjZmcuYmluX2xvY2FsfSAtZiB7Y2ZnLmlmbmFtZX0mIzM0OwpAQCAtMTgsNiAmIzQzOzE5LDE5IEBAIGRlZiByZXF1aXJlX2Rldm1lbShjZmcpOgogICAgIGlmIG5vdCBjZmcuZGV2bWVtX3N1cHBvcnRlZDoKICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O1Rlc3QgcmVxdWlyZXMgZGV2bWVtIHN1cHBvcnQmIzM0OykKIAomIzQzOyAgICBpZiByeF9wYWdlX3NpemUgJmd0OyAwOgomIzQzOyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCAmIzM0O2Rldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkJiMzNDspOgomIzQzOyAgICAgICAgICAgIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZCA9IHt9CiYjNDM7CiYjNDM7ICAgICAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZDoKJiM0MzsgICAgICAgICAgICBwcm9iZV9jb21tYW5kID0gZiYjMzQ7e2NmZy5iaW5fbG9jYWx9IC1mIHtjZmcuaWZuYW1lfSAtYiB7cnhfcGFnZV9zaXplfSYjMzQ7CiYjNDM7ICAgICAgICAgICAgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkW3J4X3BhZ2Vfc2l6ZV0gPSBcCiYjNDM7ICAgICAgICAgICAgICAgIGNtZChwcm9iZV9jb21tYW5kLCBmYWlsPUZhbHNlLCBzaGVsbD1UcnVlKS5yZXQgPT0gMAomIzQzOwomIzQzOyAgICAgICAgaWYgbm90IGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZFtyeF9wYWdlX3NpemVdOgomIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoCiYjNDM7ICAgICAgICAgICAgICAgIGYmIzM0O1Rlc3QgcmVxdWlyZXMgZGV2bWVtIHJ4LXBhZ2Utc2l6ZT17cnhfcGFnZV9zaXplfSBzdXBwb3J0JiMzNDspCiYjNDM7CiAKIGRlZiBjb25maWd1cmVfbmljKGNmZyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7Q2hhbm5lbHMsIHJpbmdzLCBSU1MsIHF1ZXVlIGxlYXNlIGZvciBuZXRraXQgZGV2bWVtLiYjMzQ7JiMzNDsmIzM0OwpAQCAtNzYsNyAmIzQzOzkwLDggQEAgZGVmIHNldF9mbG93X3J1bGUoY2ZnLCBwb3J0KToKICAgICByZXR1cm4gaW50KHJlLnNlYXJjaChyJiMzOTtJRCAoXGQmIzQzOykmIzM5Oywgb3V0cHV0KS5ncm91cCgxKSkKIAogCi1kZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOgomIzQzO2RlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSwKJiM0MzsgICAgICAgICAgICAgICAgcnhfcGFnZV9zaXplPTApOgogICAgICYjMzQ7JiMzNDsmIzM0O0J1aWxkIHRoZSBuY2Rldm1lbSBSWCBsaXN0ZW5lciBjb21tYW5kLiYjMzQ7JiMzNDsmIzM0OwogICAgIGlmIGhhc2F0dHIoY2ZnLCAmIzM5O25ldG5zJiMzOTspOgogICAgICAgICBmbG93X3J1bGVfaWQgPSBzZXRfZmxvd19ydWxlKGNmZywgcG9ydCkKQEAgLTk2LDYgJiM0MzsxMTEsOCBAQCBkZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOgogICAgICAgICBleHRyYXMuYXBwZW5kKCYjMzQ7LXYgNyYjMzQ7KQogICAgIGlmIGZhaWxfb25fbGluZWFyOgogICAgICAgICBleHRyYXMuYXBwZW5kKCYjMzQ7LUwmIzM0OykKJiM0MzsgICAgaWYgcnhfcGFnZV9zaXplICZndDsgMDoKJiM0MzsgICAgICAgIGV4dHJhcy5hcHBlbmQoZiYjMzQ7LWIge3J4X3BhZ2Vfc2l6ZX0mIzM0OykKIAogICAgIHBhcnRzID0gW2NmZy5iaW5fbG9jYWwsICYjMzQ7LWwmIzM0OywgZiYjMzQ7LWYge2lmbmFtZX0mIzM0OywgZiYjMzQ7LXMge2FkZHJ9JiMzNDssCiAgICAgICAgICAgICAgZiYjMzQ7LXAge3BvcnR9JiMzNDssICpleHRyYXNdCkBAIC0yMDIsNiAmIzQzOzIxOSw0NCBAQCBkZWYgcnVuX3R4X2NodW5rcyhjZmcpOgogICAgIGtzZnRfZXEoc29jYXQuc3Rkb3V0LnN0cmlwKCksICYjMzQ7aGVsbG9cbndvcmxkJiMzNDspCiAKIAomIzQzO2RlZiBfcmVzdG9yZV9ucl9odWdlcGFnZXMoaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKToKJiM0MzsgICAgd2l0aCBvcGVuKGhwX2ZpbGUsICYjMzk7dyYjMzk7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIGY6CiYjNDM7ICAgICAgICBmLndyaXRlKHN0cihucl9odWdlcGFnZXMpKQomIzQzOwomIzQzOwomIzQzO2RlZiBydW5fcnhfbGFyZ2VfbmlvdihjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggYSBsYXJnZSBuaW92IChyeC1wYWdlLXNpemUgJmd0OyBQQUdFX1NJWkUpLgomIzQzOwomIzQzOyAgICBTd2VlcCBwYXlsb2FkIHNpemVzIHRoYXQgc3RyYWRkbGUgdGhlIG5pb3YgYm91bmRhcnk6IGJlbG93LCBlcXVhbCB0bywKJiM0MzsgICAgYW5kIGFib3ZlIHJ4X3BhZ2Vfc2l6ZSwgdG8gZXhlcmNpc2Ugc3ViLW5pb3YsIGV4YWN0LW5pb3YsIGFuZCBtdWx0aS1uaW92CiYjNDM7ICAgIFJYIHBhdGhzLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgaHBfZmlsZSA9ICYjMzQ7L3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcyYjMzQ7CiYjNDM7ICAgIHdpdGggb3BlbihocF9maWxlLCAmIzM5O3ImIzQzOyYjMzk7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIGY6CiYjNDM7ICAgICAgICBucl9odWdlcGFnZXMgPSBpbnQoZi5yZWFkKCkuc3RyaXAoKSkKJiM0MzsgICAgICAgIGlmIG5yX2h1Z2VwYWdlcyAmbHQ7IDY0OgomIzQzOyAgICAgICAgICAgIGYuc2VlaygwKQomIzQzOyAgICAgICAgICAgIGYud3JpdGUoJiMzNDs2NCYjMzQ7KQomIzQzOyAgICAgICAgICAgIGRlZmVyKF9yZXN0b3JlX25yX2h1Z2VwYWdlcywgaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKQomIzQzOyAgICByZXF1aXJlX2Rldm1lbShjZmcsIHJ4X3BhZ2Vfc2l6ZT0xNjM4NCkKJiM0MzsgICAgY29uZmlndXJlX25pYyhjZmcpCiYjNDM7ICAgIG5ldG5zID0gZ2V0YXR0cihjZmcsICYjMzQ7bmV0bnMmIzM0OywgTm9uZSkKJiM0MzsKJiM0MzsgICAgZm9yIHNpemUgaW4gWzEwMjQsIDQwOTYsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzZdOgomIzQzOyAgICAgICAgcG9ydCA9IHJhbmRfcG9ydCgpCiYjNDM7ICAgICAgICBzb2NhdCA9IHNvY2F0X3NlbmQoY2ZnLCBwb3J0KQomIzQzOyAgICAgICAgbGlzdGVuX2NtZCA9IG5jZGV2bWVtX3J4KGNmZywgcG9ydCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93X3N0ZWVyPW5vdCBuZXRucywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9wYWdlX3NpemU9MTYzODQpCiYjNDM7ICAgICAgICBkYXRhX3BpcGUgPSAoZiYjMzQ7eWVzICQoZWNobyAtZSBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDYpIHwgJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgICBmJiMzNDtoZWFkIC1jIHtzaXplfSB8IHtzb2NhdH0mIzM0OykKJiM0MzsgICAgICAgIHdpdGggYmtnKGxpc3Rlbl9jbWQsIGV4aXRfd2FpdD1UcnVlLCBucz1uZXRucykgYXMgbmNkZXZtZW06CiYjNDM7ICAgICAgICAgICAgd2FpdF9wb3J0X2xpc3Rlbihwb3J0LCBwcm90bz0mIzM0O3RjcCYjMzQ7LCBucz1uZXRucykKJiM0MzsgICAgICAgICAgICBjbWQoZGF0YV9waXBlLCBob3N0PWNmZy5yZW1vdGUsIHNoZWxsPVRydWUpCiYjNDM7ICAgICAgICBrc2Z0X2VxKG5jZGV2bWVtLnJldCwgMCwKJiM0MzsgICAgICAgICAgICAgICAgZiYjMzQ7bGFyZ2UtbmlvdiBmYWlsZWQgZm9yIHBheWxvYWQgc2l6ZSB7c2l6ZX0mIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBydW5fcnhfaGRzKGNmZyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIHRoZSBIRFMgdGVzdCBieSBydW5uaW5nIGRldm1lbSBSWCBhY3Jvc3MgYSBzZWdtZW50IHNpemUgc3dlZXAuJiMzNDsmIzM0OyYjMzQ7CiAgICAgcmVxdWlyZV9kZXZtZW0oY2ZnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMKaW5kZXggZDk2ZThhM2I1YTY1MjYuLmZmZThlYjA1ZmFjMGQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMKQEAgLTQwLDYgJiM0Mzs0MCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC91aW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKQEAgLTYxLDYgJiM0Mzs2Miw3IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9wYXJhbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkbWFidWYuaCZndDsKQEAgLTc5LDYgJiM0Mzs4MSw3IEBACiAjZGVmaW5lIFBBR0VfU0hJRlQgMTIKICNkZWZpbmUgVEVTVF9QUkVGSVggJiMzNDtuY2Rldm1lbSYjMzQ7CiAjZGVmaW5lIE5VTV9QQUdFUyAxNjAwMAomIzQzOyNkZWZpbmUgTUIoeCkgKCh4KSAmbHQ7Jmx0OyAyMCkKIAogI2lmbmRlZiBNU0dfU09DS19ERVZNRU0KICNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMApAQCAtMTAwLDYgJiM0MzsxMDMsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZDsKIHN0YXRpYyB1aW50MzJfdCB0eF9kbWFidWZfaWQ7CiBzdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwOwogc3RhdGljIGJvb2wgZmFpbF9vbl9saW5lYXI7CiYjNDM7c3RhdGljIHVpbnQzMl90IHJ4X3BhZ2Vfc2l6ZTsKIAogLyogU3lzdGVtIHN0YXRlIGxvYWRlZCBieSBjdXJyZW50X2NvbmZpZ19sb2FkKCkgKi8KICNkZWZpbmUgTUFYX0ZMT1dTCTgKQEAgLTE0Miw2ICYjNDM7MTQ2LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKQogewogCXN0cnVjdCB1ZG1hYnVmX2NyZWF0ZSBjcmVhdGU7CiAJc3RydWN0IG1lbW9yeV9idWZmZXIgKmN0eDsKJiM0MzsJdW5zaWduZWQgaW50IG1lbWZkX2ZsYWdzOwogCWludCByZXQ7CiAKIAljdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKQEAgLTE1Niw5ICYjNDM7MTYxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSkKIAkJZ290byBlcnJfZnJlZV9jdHg7CiAJfQogCi0JY3R4LSZndDttZW1mZCA9IG1lbWZkX2NyZWF0ZSgmIzM0O3VkbWFidWYtdGVzdCYjMzQ7LCBNRkRfQUxMT1dfU0VBTElORyk7CiYjNDM7CW1lbWZkX2ZsYWdzID0gTUZEX0FMTE9XX1NFQUxJTkc7CiYjNDM7CWlmIChyeF9wYWdlX3NpemUgJmd0OyBnZXRwYWdlc2l6ZSgpKQomIzQzOwkJbWVtZmRfZmxhZ3MgfD0gTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUI7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bWVtZmQgPSBtZW1mZF9jcmVhdGUoJiMzNDt1ZG1hYnVmLXRlc3QmIzM0OywgbWVtZmRfZmxhZ3MpOwogCWlmIChjdHgtJmd0O21lbWZkICZsdDsgMCkgewotCQlwcl9lcnIoJiMzNDtbc2tpcCxuby1tZW1mZF0mIzM0Oyk7CiYjNDM7CQlwcl9lcnIoJiMzNDtbc2tpcCxuby1tZW1mZCVzXSYjMzQ7LAomIzQzOwkJICAgICAgIChtZW1mZF9mbGFncyAmYW1wOyBNRkRfSFVHRVRMQikgPyAmIzM0OyAobmVlZCBodWdlcGFnZXMpJiMzNDsgOiAmIzM0OyYjMzQ7KTsKIAkJZ290byBlcnJfY2xvc2VfZGV2OwogCX0KIApAQCAtMTY4LDYgJiM0MzsxNzgsMTEgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKQogCQlnb3RvIGVycl9jbG9zZV9tZW1mZDsKIAl9CiAKJiM0MzsJaWYgKG1lbWZkX2ZsYWdzICZhbXA7IE1GRF9IVUdFVExCKSB7CiYjNDM7CQlzaXplID0gcm91bmR1cChzaXplLCBNQigyKSk7CiYjNDM7CQljdHgtJmd0O3NpemUgPSBzaXplOwomIzQzOwl9CiYjNDM7CiAJcmV0ID0gZnRydW5jYXRlKGN0eC0mZ3Q7bWVtZmQsIHNpemUpOwogCWlmIChyZXQgPT0gLTEpIHsKIAkJcHJfZXJyKCYjMzQ7W0ZBSUwsbWVtZmQtdHJ1bmNhdGVdJiMzNDspOwpAQCAtNjk5LDYgJiM0Mzs3MTQsOCBAQCBzdGF0aWMgaW50IGJpbmRfcnhfcXVldWUodW5zaWduZWQgaW50IGlmaW5kZXgsIHVuc2lnbmVkIGludCBkbWFidWZfZmQsCiAJbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9pZmluZGV4KHJlcSwgaWZpbmRleCk7CiAJbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9mZChyZXEsIGRtYWJ1Zl9mZCk7CiAJX19uZXRkZXZfYmluZF9yeF9yZXFfc2V0X3F1ZXVlcyhyZXEsIHF1ZXVlcywgbl9xdWV1ZV9pbmRleCk7CiYjNDM7CWlmIChyeF9wYWdlX3NpemUpCiYjNDM7CQluZXRkZXZfYmluZF9yeF9yZXFfc2V0X3J4X3BhZ2Vfc2l6ZShyZXEsIHJ4X3BhZ2Vfc2l6ZSk7CiAKIAlyc3AgPSBuZXRkZXZfYmluZF9yeCgqeXMsIHJlcSk7CiAJaWYgKCFyc3ApIHsKQEAgLTE0MTEsNyAmIzQzOzE0MjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludCBpc19zZXJ2ZXIgPSAwLCBvcHQ7CiAJaW50IHJldCwgZXJyID0gMTsKIAotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7TGxzOmM6cDp2OnE6dDpmOno6biYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtMbHM6YzpwOnY6cTp0OmY6ejpuYjomIzM0OykpICE9IC0xKSB7CiAJCXN3aXRjaCAob3B0KSB7CiAJCWNhc2UgJiMzOTtMJiMzOTs6CiAJCQlmYWlsX29uX2xpbmVhciA9IHRydWU7CkBAIC0xNDQ2LDYgJiM0MzsxNDYzLDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWNhc2UgJiMzOTtuJiMzOTs6CiAJCQlza2lwX2NvbmZpZyA9IDE7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtiJiMzOTs6IHsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsKJiM0MzsJCQllcnJubyA9IDA7CiYjNDM7CQkJdmFsID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICgodmFsID09IFVMT05HX01BWCAmYW1wOyZhbXA7IGVycm5vID09IEVSQU5HRSkgfHwKJiM0MzsJCQkgICAgdmFsICZndDsgVUlOVDMyX01BWCkgewomIzQzOwkJCQlwcl9lcnIoJiMzNDtpbnZhbGlkIHJ4X3BhZ2Vfc2l6ZTogJXMmIzM0Oywgb3B0YXJnKTsKJiM0MzsJCQkJcmV0dXJuIDE7CiYjNDM7CQkJfQomIzQzOwkJCXJ4X3BhZ2Vfc2l6ZSA9IHZhbDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJY2FzZSAmIzM5Oz8mIzM5OzoKIAkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3Vua25vd24gb3B0aW9uOiAlY1xuJiMzNDssIG9wdG9wdCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weQppbmRleCAzMDBlZDJhNzBhYjQ0ZC4uNjFjNmYzMWYwMWU1MWUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHkKQEAgLTMsNyAmIzQzOzMsOCBAQAogJiMzNDsmIzM0OyYjMzQ7VGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LiYjMzQ7JiMzNDsmIzM0OwogCiBpbXBvcnQgb3MKLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMKJiM0Mztmcm9tIGRldm1lbV9saWIgaW1wb3J0IChzZXR1cF90ZXN0LCBydW5fcngsIHJ1bl90eCwgcnVuX3R4X2NodW5rcywgcnVuX3J4X2hkcywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdikKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X2Rpc3J1cHRpdmUKIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZDb250RW52CiAKQEAgLTMxLDYgJiM0MzszMiwxMSBAQCBkZWYgY2hlY2tfbmtfcnhfaGRzKGNmZykgLSZndDsgTm9uZToKICAgICBydW5fcnhfaGRzKGNmZykKIAogCiYjNDM7ZGVmIGNoZWNrX25rX3J4X2xhcmdlX25pb3YoY2ZnKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIGRldm1lbSBSWCBsYXJnZS1uaW92IHRlc3QgdGhyb3VnaCBuZXRraXQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZykKJiM0MzsKJiM0MzsKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gdGhlIG5ldGtpdCBkZXZtZW0gdGVzdCBjYXNlcy4mIzM0OyYjMzQ7JiMzNDsKICAgICB3aXRoIE5ldERydkNvbnRFbnYoX19maWxlX18sIHJ4cXVldWVzPTIsIHByaW1hcnlfcnhfcmVkaXJlY3Q9VHJ1ZSkgYXMgY2ZnOgpAQCAtMzgsNyAmIzQzOzQ0LDcgQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7bmNkZXZtZW0mIzM0OykpCiAgICAgICAgIGtzZnRfcnVuKFtjaGVja19ua19yeCwgY2hlY2tfbmtfdHgsIGNoZWNrX25rX3R4X2NodW5rcywKLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKQomIzQzOyAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkcywgY2hlY2tfbmtfcnhfbGFyZ2Vfbmlvdl0sIGFyZ3M9KGNmZywpKQogICAgIGtzZnRfZXhpdCgpCiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJYIFBhZ2UgU2l6ZSBOZXRsaW5rIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGByeC1wYWdlLXNpemVgIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIG5ldGRldiBnZW5lcmljIG5ldGxpbmsgZmFtaWx5LCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgTkVUREVWX0NNRF9CSU5EX1JYYCBjb21tYW5kLiBUaGUgaWRlYSBpcyB0byBsZXQgdXMgY29uZmlndXJlIHRoZSBwYWdlIHNpemUgdGhhdCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSB1c2VzIHdoZW4gd3JpdGluZyBkYXRhIGludG8gdGhlIGJvdW5kIERNQSBidWZmZXIuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCBmZWF0dXJlLCBmb2N1c2VkIG9uIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgRE1BIGJ1ZmZlciBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1bmN0aW9uYWw/IExvb2tpbmcgZGVlcGVyLCBpdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBuZXR3b3JraW5nIGZpbGVzOiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBgbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY2AuIE9rYXksIHNvIGl0JiMzOTtzIG5vdCBzb21lIG9ic2N1cmUsIG5pY2hlIGRyaXZlcjsgdGhpcyBpcyB0b3VjaGluZyB0aGUgYWN0dWFsIGRldm1lbSBUQ1AgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgYSBzb2xpZCB2b3RlIG9mIGNvbmZpZGVuY2UuCgpOZXh0IHF1ZXN0aW9uOiBpcyB0aGlzIHRlc3RhYmxlIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UmIzM5O3JlIG9mdGVuIHN0dWNrIHdpdGggdGVzdGluZyB0aGVzZSBsb3dlci1sZXZlbCB0aGluZ3Mgb24gcmVhbCBoYXJkd2FyZSwgd2hpY2ggaXMgYSBwYWluLiBCdXQgaG9sZCBvbi4uLiBpdCBtZW50aW9ucyBgbmV0a2l0YCBhbmQgYHZldGhgIGRldmljZXMsIGFuZCB0aGVyZSBhcmUgc2VsZnRlc3RzIGxpa2UgYG5rX2Rldm1lbS5weWAgdGhhdCB1dGlsaXplIGBOZXREcnZDb250RW52YCAobmV0a2l0KS4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB3ZSAqY2FuKiB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBUaGUgc2VsZnRlc3QgaXRzZWxmIGxpdGVyYWxseSBzdGF0ZXMgJiMzNDtUZXN0IGRldm1lbSBUQ1Agd2l0aCBuZXRraXQsJiMzNDsgc28gdGhlIGFuc3dlciBpcyB5ZXMuIFZlcnkgZ29vZC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyB0aGVtc2VsdmVzLiBJbiBgbmV0L2NvcmUvZGV2bWVtLmNgLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHVzZSBvZiBgUEFHRV9TSElGVGAgdG8gYGJpbmRpbmctJmd0O25pb3Zfc2hpZnRgLiBPa2F5LCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ug4oCTIHJlcGxhY2luZyBhIGZpeGVkIHBhZ2Ugc2l6ZSB3aXRoIGEgY29uZmlndXJhYmxlIG9uZSwgYmFzZWQgb24gdGhlIGJpbmRpbmcuIFdlIG5lZWQgdG8gY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDoKCiogICBgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHJgCiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgCiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAKKiAgIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgCgpUaGF0IGxpc3QgY29uZmlybXMgdGhlIGNoYW5nZSBpcyBpbmZsdWVuY2luZyBjb3JlIGJ1ZmZlciBhbGxvY2F0aW9uLCBiaW5kaW5nLCBhbmQgbWFuYWdlbWVudC4KCkluIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNjb3BlZCB0byB0aGUgTmV0bGluayBjb21tYW5kIGhhbmRsZXJzOgoKKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YAoqICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgCgpPa2F5LCB0aGlzIGFsbCBsaW5lcyB1cDogd2UgaGF2ZSBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSB0aGF0IHdlIGZlZWQgaW50byB0aGUgYE5FVERFVl9DTURfQklORF9SWGAgY29tbWFuZCBoYW5kbGVyLCB3aGljaCB0aGVuIGFmZmVjdHMgdGhlIGBkZXZtZW1gIFRDUCByb3V0aW5lcyBhbmQgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIE92ZXJhbGwsIHRoZSBsb2dpYyBhcHBlYXJzIHNvdW5kLCBidXQgSSBuZWVkIHRvIGV4YW1pbmUgdGhlIG5ldyBhdHRyaWJ1dGUmIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgYW5kIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB3b3JrIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jPTE0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIG5ldGRldl9ubF9vcHNbXSA9IHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjYtXHRcdC5jbWRcdFx0PSBORVRERVZfQ01EX0JJTkRfUlgsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyMjc6XHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTIyOC1cdFx0LnBvbGljeVx0XHQ9IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeSxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaD0zNj1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0zNy1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaDozODppbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oLTM5LWludCBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTk4OT1uZXRkZXZfbmxfZ2V0X2RtYV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgbG9uZyAqcnhxX2JpdG1hcCxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTItXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwMTM6aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTAxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBOZXRsaW5rL0Rldm1lbSBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgZm91bmRhdGlvbmFsIHN0dWZmIOKAkyBjb3JlIG5ldGRldiBuZXRsaW5rIGNvZGUgYW5kIHRoZSBkZXZtZW0gcm91dGluZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIGFib3V0IHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBCZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJICpuZWVkKiB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gU28sIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgKmFic29sdXRlbHkqIG5lY2Vzc2FyeSBmb3IgdGhpcyBkZXZtZW0gaW50ZXJhY3Rpb24gdG8gZXZlbiBmdW5jdGlvbiBwcm9wZXJseT8mIzM0OyBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IGNvcnJlY3RseSBiZWZvcmUgSSB3YXN0ZSBteSB0aW1lIHRyeWluZyB0byBkZWJ1Zy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZXF1aXJlZCBzbyBJIGNhbiBwcm9jZWVkIHdpdGggYSBjbGVhbiBiaWxsIG9mIGhlYWx0aC4gV2hhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdD8gTWF5YmUgSSBzaG91bGQgdHJhY2sgZG93biBkb2N1bWVudGF0aW9uIGFib3V0IGRldm1lbSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVk1FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcbi0tXG5uZXQvS2NvbmZpZy02OC1cbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXG5uZXQvS2NvbmZpZy03MC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIEZsYWcqKgoKT2theSwgc28gSSBzZWUgYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYSBgZGVmX2Jvb2wgeWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBxdWVzdGlvbiBpbiBteSBtaW5kLiBBIGBkZWZfYm9vbGAgc3VnZ2VzdHMgYSBkZWZhdWx0ICYjMzk7eWVzJiMzOTsgY29uZmlndXJhdGlvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIGBuZXQvS2NvbmZpZ2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQuIElzIGl0IHRpZWQgdG8gb3RoZXIgbmV0d29yayBmZWF0dXJlcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nIGF0IGZpcnN0IGdsYW5jZT8gSSB3YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgKndoeSogdGhpcyBkZWZhdWx0IGlzICYjMzk7eSYjMzk7IGFuZCB3aGF0IHBvdGVudGlhbCBpbXBhY3RzIGFyZSBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdGNvbmZpZyBORVRfUkVESVJFQ1RcbiAgNjE6XHRcdGJvb2xcbiAgNjI6XHRcbiAgNjM6XHRjb25maWcgU0tCX0RFQ1JZUFRFRFxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKkV4YW1pbmluZyBEZXBlbmRlbmNpZXMgaW4gYSBEZXZpY2UgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTkVUX0RFVk1FTWAgaGVyZSwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgcmVsYXRlZCB0byBuZXR3b3JrIGRldmljZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGl0cyBkZXBlbmRlbmN5IGNoYWluLiBJIGtub3cgYE5FVF9ERVZNRU1gIHJlbGllcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSB0aGVzZSBvbmUgYXQgYSB0aW1lLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgYFBBR0VfUE9PTGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkIGluIGEgbW9kZXJuIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBmaW5lLiBNeSBtYWluIGNvbmNlcm4gaXMgcmVhbGx5IGBETUFfU0hBUkVEX0JVRkZFUmAgc2luY2UgdGhhdCYjMzk7cyB0aGUgbW9yZSBzcGVjaWZpYyBkZXBlbmRlbmN5LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBhdHRlbnRpb24gdGhlcmUgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgdGhlIERNQSBTaGFyZWQgQnVmZmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRE1BLUJVRiBhcmUgZGVmaW5lZCwgaW5jbHVkaW5nIHRoZSBgRE1BX1NIQVJFRF9CVUZGRVJgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoYXQgb3B0aW9uIGNvbnRyb2xzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGdyb3VuZGluZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHJlbWVtYmVyIHNlZWluZyBgY29uZmlnIERNQV9TSEFSRURfQlVGRkVSYCBkZWZpbmVkIHNvbWV3aGVyZSwgYW5kIEkgdGhpbmsgaXQgd2FzIGluIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2AuIExldCBtZSBnbyBjaGVjayB0aGF0IGZpbGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZXhhY3RseSB0aGF0IG9wdGlvbiBpcyBjb250cm9sbGluZyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBHb3R0YSBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuIDIyMDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIGJ1ZmZlci1zaGFyaW5nIGJldHdlZW5cbiAyMjE6XHRcdCAgbXVsdGlwbGUgZHJpdmVycy4gQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSB1c2luZyBkcml2ZXJcbiAyMjI6XHRcdCAgQVBJcyBleHRlbnNpb247IHRoZSBmaWxlJiMzOTtzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXG4gMjIzOlx0XHQgIGRyaXZlci5cbiAyMjQ6XHRcbiAyMjU6XHRjb25maWcgRE1BX0ZFTkNFX1RSQUNFXG4gMjI2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1wmIzM0O1xuIDIyNzpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuIDIyODpcdFx0aGVscFxuIDIyOTpcdFx0ICBFbmFibGUgdGhlIERNQV9GRU5DRV9UUkFDRSBwcmludGtzLiBUaGlzIHdpbGwgYWRkIGV4dHJhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTYxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRE1BIFNoYXJlZCBCdWZmZXIgYW5kIERldm1lbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBjdXJyZW50bHkgYSBib29sZWFuLCBkZWZhdWx0aW5nIHRvICYjMzk7biYjMzk7LiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIHRoaXMuIFdhaXQgYSBzZWNvbmQsIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzIGludGVyZXN0aW5nLiBgTkVUX0RFVk1FTWAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAsIGJ1dCBpdCBkZXBlbmRzIG9uIGBETUFfU0hBUkVEX0JVRkZFUmAuIFNvLCBpZiB3ZSBlbmFibGUgYERNQV9TSEFSRURfQlVGRkVSYCwgYE5FVF9ERVZNRU1gIHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5LiBUaGF0IG1ha2VzIHRoaW5ncyBlYXNpZXIuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2UgbmVlZCB0byBjb25zaWRlci4gVGhlIHBhdGNoIGFmZmVjdHMgYG5ldC9jb3JlL2Rldm1lbS5jYCBhbmQgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBzbyB0aG9zZSBhcmUgdGhlIGFyZWFzIHRvIGZvY3VzIG9uLgoKVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmU6CgoqICAgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgCiogICBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYAoqICAgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYAoqICAgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAKCkxldCYjMzk7cyBzZWUgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LCBhbmQgd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4gYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGluIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCBhbmQgaXMgbm90IHN0YXRpYywgbWVhbmluZyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIG5vbi1zdGF0aWMuIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBub24tc3RhdGljLiBGaW5hbGx5LCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBuZXQvY29yZS9kZXZtZW0uY2AuIEdvb2QsIGFsbCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUuCgpMZXQgbWUganVzdCBsaXN0IHRob3NlIGZ1bmN0aW9ucyBvbmUgbW9yZSB0aW1lIHRvIGtlZXAgdGhlbSB0b3Agb2YgbWluZDoKCiogICBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAKKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgCiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYAoKTm93IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzIEkmIzM5O20gbWlzc2luZy4gUmlnaHQsIGBQQUdFX1BPT0xgIGlzIGEgZ29vZCBvbmUgdG8gcmVtZW1iZXI7IG5ldHdvcmtpbmcgZHJpdmVycyBjb21tb25seSBzZWxlY3QgdGhhdC4gTG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGFnYWluLCBgTkVUX0RFVk1FTWAgaXMgYGRlZl9ib29sIHlgIGFuZCBkZXBlbmRzIG9uICpib3RoKiBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gU28sIHdlICpzdGlsbCogbmVlZCBgRE1BX1NIQVJFRF9CVUZGRVJgLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgIGFnYWluIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fYWxsb2NfZG1hYnVmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTg3PXN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5jOjg4Om5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxubmV0L2NvcmUvZGV2bWVtLmMtODkte1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTQ3Mz1uZXRtZW1fcmVmIG1wX2RtYWJ1Zl9kZXZtZW1fYWxsb2NfbmV0bWVtcyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtNDc4LVxubmV0L2NvcmUvZGV2bWVtLmM6NDc5Olx0bmlvdiA9IG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKGJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmMtNDgwLVx0aWYgKCFuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE1MD1zdHJ1Y3QgbmV0X2lvdiAqXG5uZXQvY29yZS9kZXZtZW0uaDoxNTE6bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmgtMTUyLXZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIwOTpuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbm5ldC9jb3JlL2Rldm1lbS5oLTIxMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODI1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgRE1BIEJ1ZmZlciBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gTmV0d29yayBEZXZpY2UgTWVtb3J5KioKClJpZ2h0LCBzbyBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgIGlzIGRlZmluaXRpdmVseSBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93OyBpdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZnJlZWluZyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIHN0YXlzIHRpZHkgYW5kIHByZWRpY3RhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbG9jYXRpb25zIGFyZSBkZWFsbG9jYXRlZCBhdCBzb21lIHBvaW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBkb2luZyBpdHMgam9iIGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBzYW1lIGFjY2Vzc2liaWxpdHkgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fZnJlZV9kbWFidWYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9ODg9bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTEyLVxubmV0L2NvcmUvZGV2bWVtLmM6MTEzOnZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbm5ldC9jb3JlL2Rldm1lbS5jLTExNC17XG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9NDk5PWJvb2wgbXBfZG1hYnVmX2Rldm1lbV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0pXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtNTEwLVxubmV0L2NvcmUvZGV2bWVtLmM6NTExOlx0bmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihuZXRtZW1fdG9fbmV0X2lvdihuZXRtZW0pKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTUxMi1cbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTE9bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmg6MTUyOnZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpO1xubmV0L2NvcmUvZGV2bWVtLmgtMTUzLVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIwOT1uZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC0yMTMtXG5uZXQvY29yZS9kZXZtZW0uaDoyMTQ6c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKnBwaW92KVxubmV0L2NvcmUvZGV2bWVtLmgtMjE1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqQW5hbHl6aW5nIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBhbmQgUG90ZW50aWFsIFF1ZXVlIEJpbmRpbmcqKgoKUmlnaHQsIHNvIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIHdhbnRlZCB0byBjb25maXJtLiBOb3cgdGhhdCB0aGF0JiMzOTtzIGNsZWFyZWQgdXAsIGl0JiMzOTtzIHRpbWUgdG8gc2hpZnQgZm9jdXMgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiByZWxhdGlvbiB0byBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAuIEdpdmVuIHRoYXQgSSBrbm93IHRoZSBmb3JtZXIgaXNuJiMzOTt0IHN0YXRpYywgaG93IG1pZ2h0IHRoYXQgZmFjdG9yIGludG8gdGhlIHF1ZXVlIGJpbmRpbmcgcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgY3Jvc3MtcmVmZXJlbmNlcyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0xNTUtXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTAyPXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwNC1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xOTk9c3RhdGljIGlubGluZSBpbnRcbm5ldC9jb3JlL2Rldm1lbS5oOjIwMDpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVx0XHRcdFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVx0Zm9yX2VhY2hfc2V0X2JpdChyeHFfaWR4LCByeHFfYml0bWFwLCBuZXRkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XHRcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVx0XHRcdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMjEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludGVybmFsIFJldmlldyBvZiBETUEgQnVmZmVyIEJpbmRpbmcqKgoKUmlnaHQsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gVGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQsIGdpdmVuIGl0cyBsaWtlbHkgcm9sZSBpbiBleHRlcm5hbCBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHJlLXVzZS4gTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcXVldWUtc3BlY2lmaWMgZnVuY3Rpb24gdG8gZ2V0IGEgZnVsbCBncmFzcCBvZiB0aGUgYmluZGluZyBwcm9jZXNzIGFuZCBhbnkgcG9zc2libGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24uIFRoaXMgaXMgdGhlIGNvcmUgZmxvdywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGltcGxpY2F0aW9ucyBpcyBrZXkgZm9yIHRoaXMgbGV2ZWwgb2YgYW5hbHlzaXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cbm5ldC9jb3JlL2Rldm1lbS5jOjE1NjppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1Ny1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz0xODg9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmM6MTg5Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5jLTE5MC1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9OTQ9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6OTU6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxubmV0L2NvcmUvZGV2bWVtLmgtOTYtXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTEwMj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG5uZXQvY29yZS9kZXZtZW0uaDoxMDM6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uaC0xMDQtXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTc4Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5oLTE3OS1cdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTk5PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQvY29yZS9kZXZtZW0uaDoyMDA6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcbm5ldC9jb3JlL2Rldm1lbS5oLTIwMS1cdFx0XHRcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTAxMz1pbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5NC1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTA5NTpcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDk2LVx0XHRcdFx0XHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwMy1cdGZvcl9lYWNoX3NldF9iaXQocnhxX2lkeCwgcnhxX2JpdG1hcCwgbmV0ZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcykge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMTA0Olx0XHRlcnIgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKG5ldGRldiwgcnhxX2lkeCwgYmluZGluZyxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwNS1cdFx0XHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMTY5PWludCBuZXRkZXZfbmxfYmluZF90eF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM0LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMjM1Olx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEyMzYtXHRcdFx0XHRcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ3NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGtub3dsZWRnZWFibGUgYWJvdXQgdGhlIHN1YmplY3Q6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG5ldF9kZXZtZW1gIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBTbywgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGlzIGNvbmZpcm1lZCAqbm90KiB0byBiZSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IG9wZW5zIHVwIGNlcnRhaW4gcG9zc2liaWxpdGllcyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGl0IG91dHNpZGUgb2YgaXRzIHR5cGljYWwgY29udGV4dC4gTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBzaGlmdCBteSBmb2N1cyBvdmVyIHRvIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28uIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBpcyBwcm92aWRpbmcgc29tZSBvZiB0aGUgZm91bmRhdGlvbmFsIGRhdGEgb3IgbWVjaGFuaXNtcyB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB1dGlsaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdHMgb3V0cHV0IGlzIHVzZWQuIFRoaXMgbWlnaHQgcmV2ZWFsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIG9yIG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdCBpbiB0aGUgYG5ldF9kZXZtZW1gIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9nZXRfbmlvdl9hdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03MjctXHRcdHZpcnRfYWRkciA9IChzaXplX3QpaXRlcl9pb3ZfYWRkcihmcm9tKTtcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzI4Olx0XHRuaW92ID0gbmV0X2Rldm1lbV9nZXRfbmlvdl9hdChiaW5kaW5nLCB2aXJ0X2FkZHIsIFx1MDAyNm9mZiwgXHUwMDI2c2l6ZSk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcyOS1cdFx0aWYgKCFuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTQzNj1zdHJ1Y3QgbmV0X2lvdiAqXG5uZXQvY29yZS9kZXZtZW0uYzo0Mzc6bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbm5ldC9jb3JlL2Rldm1lbS5jLTQzOC1cdFx0ICAgICAgIHNpemVfdCB2aXJ0X2FkZHIsIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTU3PXN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE1ODpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcbm5ldC9jb3JlL2Rldm1lbS5oLTE1OS1cdFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpO1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIzND1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfaW92ICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIzNTpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcbm5ldC9jb3JlL2Rldm1lbS5oLTIzNi1cdFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjA5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6CgoqKkFuYWx5emluZyBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAgYW5kIFJlbGF0ZWQgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRoYXQgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgbGV0JiMzOTtzIHBpdm90IHRvIGludmVzdGlnYXRpbmcgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgd29ya3MuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoaXMgYWxsIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIERNQUJVRiBpbXBsZW1lbnRhdGlvbiB0aWVzIGludG8gdGhlIG1lbW9yeSBkZXZpY2UgYW5kIG5ldCBpbnRlcmZhY2UsIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGZlYXR1cmUgbGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wX2RtYWJ1Zl9kZXZtZW1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz00Mzc9bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy00NTItXG5uZXQvY29yZS9kZXZtZW0uYzo0NTM6aW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxubmV0L2NvcmUvZGV2bWVtLmMtNDU0LXtcbi0tXG5uZXQvY29yZS9kZXZtZW0uYz01NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzID0ge1xubmV0L2NvcmUvZGV2bWVtLmM6NTQ4Olx0LmluaXRcdFx0XHQ9IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdCxcbm5ldC9jb3JlL2Rldm1lbS5jLTU0OS1cdC5kZXN0cm95XHRcdD0gbXBfZG1hYnVmX2Rldm1lbV9kZXN0cm95LFxuLS1cbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xMy0jaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVk1FTSlcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoxNDppbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpO1xubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTE1LVxuLS1cbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaD0yMD1ib29sIG1wX2RtYWJ1Zl9kZXZtZW1fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIG5ldG1lbV9yZWYgbmV0bWVtKTtcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0yMS0jZWxzZVxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oOjIyOnN0YXRpYyBpbmxpbmUgaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGRtYWJ1ZiBEZXZtZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQmIzM5O3MgaW1wb3J0YW50LiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCB0ZWxscyBtZSB0aGUgbGlrZWx5IGZvY3VzIHN5bWJvbHMgYXJlIHRoZSBvbmVzIHRoYXQgdXNlIG9yIGNhbGwgaXQuIFNvLCB0aGF0IGxpc3Qgc2hvdWxkIGluY2x1ZGU6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLCBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAsIGFuZCwgb2YgY291cnNlLCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpdHNlbGYuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIFJpZ2h0LCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpcyBjYWxsZWQgYnkgYHBhZ2VfcG9vbF9pbml0YCB3aGVuIHdlJiMzOTtyZSB1c2luZyBkbWFidWYgYXMgdGhlIG1lbW9yeSBwcm92aWRlci4gT2theSwgdGhhdCYjMzk7cyBjcnVjaWFsIGNvbnRleHQuIEFuZCBJIHNlZSB0aGF0IGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBpc24mIzM5O3QgZnVuZGFtZW50YWxseSBhbHRlcmVkOyBpdCBqdXN0IGluY29ycG9yYXRlcyBgUEFHRV9TSElGVGAgbm93LCBidXQgaXQmIzM5O3MgcGFydCBvZiB0aGUgZmVhdHVyZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAgdG8gcGFyc2UgdGhpcyBgTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRWAgYXR0cmlidXRlLgoKTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9ucz8gV2hhdCYjMzk7cyAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIHdvcms/IEkga25vdyBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGZvciBgTkVUX0RFVk1FTWAuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3PigKYgUmlnaHQsIGBORVRfREVWTUVNYCBpcyBhICYjMzQ7ZGVmX2Jvb2wgeSYjMzQ7IGRlcGVuZGVudCBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgICphbmQqIGBQQUdFX1BPT0xgLiBBbmQgYFBBR0VfUE9PTGAgaXMgYSAmIzM0O2Jvb2wmIzM0OyBvcHRpb24sIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycy4gQ2FuIEkgZW5hYmxlIGBQQUdFX1BPT0xgIGRpcmVjdGx5PyBObywgc2VlbXMgbGlrZSBpdCYjMzk7cyBzZWxlY3RlZC4gSSBjYW4gbGlzdCBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLCBidXQgYERNQV9TSEFSRURfQlVGRkVSYCBzaG91bGQgYmUgc3VmZmljaWVudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IG9uIGBuZXQvS2NvbmZpZ2AgZm9yIGBQQUdFX1BPT0xgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBPcHRpb25zIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgUEFHRV9QT09MYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiB3aXRob3V0IGEgcHJvbXB0LiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgZml4ZWQgc2VsZWN0aW9uLCBsaWtlbHkgY29udHJvbGxlZCBieSB0aGUgZHJpdmVyIGl0c2VsZiwgYW5kIGNhbiYjMzk7dCBiZSBzZXQgZGlyZWN0bHkgaW4gdGhlIGNvbmZpZyBtZW51LiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgbGlzdGVkIGluIGBFbmFibGVDb25maWdzYC4gUHJvYmFibHkgbm90LCBzaW5jZSBpdCYjMzk7cyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiBCdXQgbWF5YmUgaXQgd291bGRuJiMzOTt0IGh1cnQsIGp1c3QgZm9yIGNvbXBsZXRlbmVzcywgYnV0IEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuCgpIb2xkIG9uLi4uIEkmIzM5O20gcmVtaW5kZWQgdGhhdCBzeXprYWxsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gZW5hYmxlIGl0IGRpcmVjdGx5IGlmIGl0IGhhcyBubyBwcm9tcHQ7IHNpbmNlIHRoYXQmIzM5O3MgbXkgY29uY2VybiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYERNQV9TSEFSRURfQlVGRkVSYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSBoYXZpbmcgYSBwcm9tcHQsIHdoaWNoIHdvdWxkIGJlIGV4cGVjdGVkIGZvciB1c2VyLWNvbmZpZ3VyYWJsZSBvcHRpb25zLiBBaCwgYnV0IHdhaXQgYSBzZWNvbmQuLi4gaXMgbXkgbWVtb3J5IGNvcnJlY3Q/IExldCBtZSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBiZSBzdXJlOyBpdCYjMzk7cyBhIGBib29sYCB3aXRob3V0IGEgcHJvbXB0IGluIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2A/IE9rYXksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZXJlYWQgYGRyaXZlcnMvYmFzZS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBkZWZpbml0aW9ucyBhbmQgYXZvaWQgbWFraW5nIG1pc3Rha2VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0Ym9vbFxuIDIxMTpcdFx0c2VsZWN0IEdMT0JcbiAyMTI6XHRcbiAyMTM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG4gMjE0Olx0XG4gMjE1Olx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG4gMjE2Olx0XHRib29sXG4gMjE3Olx0XHRkZWZhdWx0IG5cbiAyMTg6XHRcdHNlbGVjdCBJUlFfV09SS1xuIDIxOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQyOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeTogRE1BX1NIQVJFRF9CVUZGRVIqKgoKUmlnaHQsIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgZGVmaW5lZCBhcyBhIGBib29sYCAqd2l0aG91dCogYW55IGFzc29jaWF0ZWQgcHJvbXB0LiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc3VzcGljaW9uIOKAkyBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgaW1wbGljaXRseSBzZWxlY3RlZCBieSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIGEgZGVyaXZlZCBjb25maWd1cmF0aW9uLCBhIGJ1aWxkaW5nIGJsb2NrLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QgYSBkaXJlY3RseSB1c2VyLWZhY2luZyBvcHRpb247IGl0cyAqdmFsdWUqIGlzIGRldGVybWluZWQgZWxzZXdoZXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBwdWxsaW5nIGl0IGluLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgZGVzaWduIGFuZCBob3cgYERNQV9TSEFSRURfQlVGRkVSYCBpbmZsdWVuY2VzIHRoZSBmaW5hbCBidWlsZCBhbmQgc3lzdGVtIGJlaGF2aW9yLiBUaW1lIHRvIHRyYWNlIHRoZSBzZWxlY3RzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0PTY1PUFueSBleHBvcnRlcnMgb3IgdXNlcnMgb2YgdGhlIGRtYS1idWYgYnVmZmVyIHNoYXJpbmcgZnJhbWV3b3JrIG11c3QgaGF2ZSBhXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q6NjY6JiMzOTtzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVImIzM5OyBpbiB0aGVpciByZXNwZWN0aXZlIEtjb25maWdzLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0LTY3LVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnPTY9Y29uZmlnIERSTV9BQ0NFTF9IQUJBTkFMQUJTXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTItXHRzZWxlY3QgSFdNT05cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZy0xNC1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQ9Y29uZmlnIFNZTkNfRklMRVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYtXHRkZWZhdWx0IG5cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NTI9Y29uZmlnIERNQUJVRl9LVU5JVF9URVNUXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTQtXHRkZXBlbmRzIG9uIEtVTklUXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTYwPW1lbnVjb25maWcgRE1BQlVGX0hFQVBTXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBVc2VybGFuZCBNZW1vcnkgSGVhcHNcJiMzNDtcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYyOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cdGhlbHBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXG4tLVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTMtXHRzZWxlY3QgSTJDXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxNDpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXHRzZWxlY3QgU1lOQ19GSUxFXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xuLS1cbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXHRib29sIFwmIzM0O0VuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXCYjMzQ7XG5kcml2ZXJzL2lpby9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cdGRlcGVuZHMgb24gIUFMUEhBXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVx0c2VsZWN0IElSUV9QT0xMXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cdGRlcGVuZHMgb24gTU1VXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0zOT1jb25maWcgSU9NTVVGRF9URVNUXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDQtXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDU6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQ2LVx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9Mz1jb25maWcgVklERU9CVUYyX0NPUkVcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTUtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTEzPWNvbmZpZyBWSURFT0JVRjJfRE1BX0NPTlRJR1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTE5PWNvbmZpZyBWSURFT0JVRjJfVk1BTExPQ1xuLS1cbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTIyLVx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yNC1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZz0xPWNvbmZpZyBWSURFT19URUdSQV9WREVcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBWSURFT19ERVZcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTgtXHRzZWxlY3QgSU9NTVVfSU9WQVxuLS1cbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMwMT1jb25maWcgUUNPTV9GQVNUUlBDXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctMzA0LVx0ZGVwZW5kcyBvbiBSUE1TR1xuZHJpdmVycy9taXNjL0tjb25maWc6MzA1Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDYtXHRzZWxlY3QgUUNPTV9TQ01cbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG5kcml2ZXJzL3RlZS9LY29uZmlnOjc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvdGVlL0tjb25maWctOC1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTE5Mj1jb25maWcgVVNCX0ZfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE5MzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTk0LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTE0NT1jb25maWcgWEVOX0dOVERFVl9ETUFCVUZcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cdGRlcGVuZHMgb24gWEVOX0dOVERFViBcdTAwMjZcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xuZHJpdmVycy94ZW4vS2NvbmZpZzoxNDg6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVx0aGVscFxuLS1cbnNhbXBsZXMvS2NvbmZpZz0yMzA9Y29uZmlnIFNBTVBMRV9WRklPX01ERVZfTUJPQ0hTXG4tLVxuc2FtcGxlcy9LY29uZmlnLTIzMy1cdHNlbGVjdCBWRklPX01ERVZcbnNhbXBsZXMvS2NvbmZpZzoyMzQ6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNhbXBsZXMvS2NvbmZpZy0yMzUtXHRoZWxwXG4tLVxuc291bmQvc29jL2ZzbC9LY29uZmlnPTY9Y29uZmlnIFNORF9TT0NfRlNMX0FTUkNcbi0tXG5zb3VuZC9zb2MvZnNsL0tjb25maWctOC1cdGRlcGVuZHMgb24gSEFTX0RNQVxuc291bmQvc29jL2ZzbC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZy0xMC1cdHNlbGVjdCBSRUdNQVBfTU1JT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ2NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYERNQV9TSEFSRURfQlVGRkVSYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYERNQV9TSEFSRURfQlVGRkVSYCBnZXRzIGVuYWJsZWQgaW4gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG9wdGlvbiwgYnV0IGl0JiMzOTtzICpwdWxsZWQgaW4qIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIHN1YnN5c3RlbXMuIEkmIzM5O20gc2VlaW5nIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgYERSTWAsIGBJTkZJTklCQU5EYCwgYFZJREVPQlVGMl9DT1JFYCwgYFRFRWAgYW5kIHByb2JhYmx5IG1vcmUsIGFsbCBkZXBlbmRpbmcgb24gaXQuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgaWYgSSB3YW50IHRvIHR1cm4gb24gYERNQV9TSEFSRURfQlVGRkVSYCwgSSBjYW4gc2ltcGx5IGVuYWJsZSBhbnkgb2YgdGhvc2UgZGVwZW5kZW50IGZlYXR1cmVzLCBsaWtlIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgb3IgYERSTWAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGRlc2lnbiBjaG9pY2UsIHNpbXBsaWZ5aW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBETUFCVUZfSEVBUFNgLi4udGhhdCYjMzk7cyBhIG1lbnVjb25maWcgZW50cnkgd2l0aCBpdHMgb3duIHByb21wdCwgJiMzNDtETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwcyYjMzQ7LiBJIHNob3VsZCByZWFsbHkgZHJpbGwgZG93biBpbnRvIHRoYXQuIEl0IHNlZW1zIHRvIHN1Z2dlc3QgYSBtb3JlIGRpcmVjdCwgdXNlci1jb250cm9sbGFibGUgd2F5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIGBETUFfU0hBUkVEX0JVRkZFUmAuIFNvLCBsZXQmIzM5O3MgZ28gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBETUFCVUZfSEVBUFNgLCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERNQS1CVUYgaGVhcHMgY2FuIGJlIGNvbmZpZ3VyZWQsIGFuZCB3aGljaCB1c2VybGFuZCBjb21wb25lbnRzIHVzZSB0aGVzZSBoZWFwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQUJVRl9IRUFQUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1Rcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01OS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYwOm1lbnVjb25maWcgRE1BQlVGX0hFQVBTXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBVc2VybGFuZCBNZW1vcnkgSGVhcHNcJiMzNDtcbi0tXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzoxOmNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7RE1BLUJVRiBTeXN0ZW0gSGVhcFwmIzM0O1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnLTctXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzo4OmNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNX0NDX1NIQVJFRFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBTeXN0ZW0gSGVhcCBmb3IgZGVjcnlwdGVkIENvQ28gVk1zXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzoxNjpjb25maWcgRE1BQlVGX0hFQVBTX0NNQVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtETUEtQlVGIENNQSBIZWFwXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIERNQS1CVUYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIGlmIEkganVzdCBkZWNsYXJlIGBETUFCVUZfSEVBUFNgLCB0aGUgc3lzdGVtIHdpbGwgYXV0b21hdGljYWxseSBjaG9vc2UgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGFuZGxlIHRoZSBzZWxlY3Rpb24gY29ycmVjdGx5IGlmIEkganVzdCBnaXZlIGl0IHRoZSBvcHRpb24gdGhhdCAqc2VsZWN0cyogaXQ/IE9yIGNvdWxkIEkganVzdCBzcGVjaWZ5IGBETUFfU0hBUkVEX0JVRkZFUmAgZGlyZWN0bHksIGFuZCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gd2lsbCB1bmRlcnN0YW5kIGl0JiMzOTtzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQ/IEhtbW0sIG5vLCBpZiB0aGVyZSYjMzk7cyBubyBwcm9tcHQsIHN5emthbGxlciBwcm9iYWJseSBjYW4mIzM5O3QgZW5hYmxlIGl0IGRpcmVjdGx5OyBpdCAqbmVlZHMqIHNvbWV0aGluZyB0aGF0IHRyaWdnZXJzIHRoZSBzZWxlY3Rpb24uIEFscmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2sgLSBgU1lOQ19GSUxFYCBpcyBhIGJvb2xlYW4gaW4gYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCBkZWZpbmVkIGFzICYjMzQ7QVBJIGZvciB1c2VyLXNwYWNlIHN5bmNocm9uaXphdGlvbiYjMzQ7LiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O0RNQUJVRiBvcHRpb25zXCYjMzQ7XG4gICAzOlx0XG4gICA0Olx0Y29uZmlnIFNZTkNfRklMRVxuICAgNTpcdFx0Ym9vbCBcJiMzNDtFeHBsaWNpdCBTeW5jaHJvbml6YXRpb24gRnJhbWV3b3JrXCYjMzQ7XG4gICA2Olx0XHRkZWZhdWx0IG5cbiAgIDc6XHRcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBUaGUgU3luYyBGaWxlIEZyYW1ld29yayBhZGRzIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiB2aWFcbiAgMTA6XHRcdCAgdXNlcnNwYWNlLiBJdCBlbmFibGVzIHNlbmQvcmVjZWl2ZSAmIzM5O3N0cnVjdCBkbWFfZmVuY2UmIzM5OyBvYmplY3RzIHRvL2Zyb21cbiAgMTE6XHRcdCAgdXNlcnNwYWNlIHZpYSBTeW5jIEZpbGUgZmRzIGZvciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBkcml2ZXJzIHZpYVxuICAxMjpcdFx0ICB1c2Vyc3BhY2UgY29tcG9uZW50cy4gSXQgaGFzIGJlZW4gcG9ydGVkIGZyb20gQW5kcm9pZC5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVGhlIGZpcnN0IGFuZCBtYWluIHVzZXIgZm9yIHRoaXMgaXMgZ3JhcGhpY3MgaW4gd2hpY2ggYSBmZW5jZSBpc1xuICAxNTpcdFx0ICBhc3NvY2lhdGVkIHdpdGggYSBidWZmZXIuIFdoZW4gYSBqb2IgaXMgc3VibWl0dGVkIHRvIHRoZSBHUFUgYSBmZW5jZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc3MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgU1lOQ19GSUxFYCBpcyBkZWZpbml0ZWx5IHNldCB1cCB0byBwcm9tcHQgdGhlIHVzZXIgYW5kIHVsdGltYXRlbHkgc2VsZWN0cyBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF04oCZcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBHaXZlbiB0aGlzLCBpdCBzZWVtcyBwZXJmZWN0bHkgcmVhc29uYWJsZSB0byBhZGQgYFNZTkNfRklMRWAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBCdXQgYmVmb3JlIEkgZ2V0IHRvbyBhaGVhZCBvZiBteXNlbGYsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBXaGF0IGFib3V0IGBQQUdFX1BPT0xgPyBIbW0sIGl0IGRvZXNu4oCZdCBzZWVtIHRvIGhhdmUgYSB1c2VyIHByb21wdCBvZiBpdHMgb3duLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zLCBpZiBhbnksIGFyZSAqc2VsZWN0aW5nKiBpdC4gR290dGEgdHJhY2UgdGhhdCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM3Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ4Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDktXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cdHNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5EXG5kcml2ZXJzL25ldC9LY29uZmlnOjU0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ5LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNTg5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NjA0PWNvbmZpZyBORVRERVZTSU1cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc9MTg9Y29uZmlnIE5FVF9BSVJPSEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cdHNlbGVjdCBORVRfQUlST0hBX05QVVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc9MTg9Y29uZmlnIEFMSUJBQkFfRUVBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiA2NEJJVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6ODE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgyLVx0c2VsZWN0IEJST0FEQ09NX1BIWSBpZiBBUkNIX0JDTTI4MzVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIxNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjE1LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjYyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjMtXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6Mjc2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnPTY9Y29uZmlnIEVOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZy0xMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnPTE5PWNvbmZpZyBUU05FUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnOjI0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZy0yNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0yMz1jb25maWcgRkVDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXHRzZWxlY3QgRklYRURfUEhZXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzozMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMzLVx0aW1wbHkgUEFHRV9QT09MX1NUQVRTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc9MTg9Y29uZmlnIEdWRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo5NTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTE0Nz1jb25maWcgSElCTUNHRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cdHNlbGVjdCBSRUFMVEVLX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6MTU0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMTU1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZz02PWNvbmZpZyBISU5JQzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc6MTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc9ND1jb25maWcgTElCRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEV0aGVybmV0IGxpYnJhcnkgKGxpYmV0aClcJiMzNDsgaWYgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9NTk9Y29uZmlnIE1WTkVUQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02My1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjU6XHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTg2PWNvbmZpZyBNVlBQMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cdHNlbGVjdCBQSFlMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6OTE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0zMT1jb25maWcgT0NURU9OVFgyX1BGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZz0xND1jb25maWcgTkVUX01FRElBVEVLX1NPQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc6MjE6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cdHNlbGVjdCBQQ1NfTVRLX0xZTlhJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWctOS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZzoxMDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cdHNlbGVjdCBNTFg0X0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMzEtXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXHUwMDI2XHUwMDI2IEVUSEVSTkVUIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IE1MWDVfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMzpcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTM0LVx0c2VsZWN0IERJTUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNy1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOS1cdHNlbGVjdCBQQ1NfWFBDU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc9MT1jb25maWcgTEFOOTY2WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy0xMC1cdHNlbGVjdCBWQ0FQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnPTI4PWNvbmZpZyBMQU45NjlYX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cdGRlcGVuZHMgb24gU1BBUlg1X1NXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE4PWNvbmZpZyBNSUNST1NPRlRfTUFOQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNi1cdHNlbGVjdCBORVRfU0hBUEVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI1LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjctXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0xMTA9Y29uZmlnIFJUQVNFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExMy1cdHNlbGVjdCBDUkMzMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTI5PWNvbmZpZyBSQVZCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM1LVx0c2VsZWN0IE1ESU9fQklUQkFOR1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTM3LVx0c2VsZWN0IFBIWUxJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnPTI1PWNvbmZpZyBTTklfTkVUU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMjgtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTMwLVx0c2VsZWN0IE1JSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mj1jb25maWcgU1RNTUFDX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctOC1cdHNlbGVjdCBQQ1NfWFBDU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xMC1cdHNlbGVjdCBQSFlMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc9MjY9Y29uZmlnIFRFSFVUSV9UTjQwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMjgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZy0zMC1cdHNlbGVjdCBGV19MT0FERVJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTUwPWNvbmZpZyBUSV9DUFNXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01NS1cdHNlbGVjdCBNRkRfU1lTQ09OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy01Ny1cdHNlbGVjdCBSRUdNQVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTY1PWNvbmZpZyBUSV9DUFNXX1NXSVRDSERFVlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNjktXHRkZXBlbmRzIG9uIFRJX0NQVFMgfHwgIVRJX0NQVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTcxLVx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDEtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTEwMy1cdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9MjA0PWNvbmZpZyBUSV9JQ1NTR19QUlVFVEhfU1IxXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMDgtXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0yMTAtXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMy1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc9Mj1jb25maWcgTVQ3Nl9DT1JFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy01LVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzctXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERNQSBTaGFyZWQgQnVmZmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYFBBR0VfUE9PTGAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIHRoZSBzeXprYWxsZXIgY29uZmlncywgc2luY2UgYEJQRl9TWVNDQUxMYCBhbmQgYFZFVEhgIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhhdCBhbHNvIHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgYFNZTkNfRklMRWAgaXMgZ29pbmcgdG8gZ2V0IG1lIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGVuYWJsaW5nIGZsZXhpYmxlIERNQSBidWZmZXIgc2l6ZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRWAgdG8gYG5ldGRldl9iaW5kX3J4X25sX3BvbGljeWAsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gVGhlbiwgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGNoYW5nZWQgdG8gcGFyc2UgdGhhdCBuZXcgcGFyYW1ldGVyLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB0byB0YWtlIGBuaW92X3NoaWZ0YCwgYW5kIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAgYW5kIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBhcmUgbW9kaWZpZWQgdG8gYWxsb2NhdGUgYW5kIGZyZWUgYnVmZmVycyB1c2luZyB0aGUgY2FsY3VsYXRlZCBzaXplIGJhc2VkIG9uIHRoZSBzaGlmdCAodXNpbmcgYDFVTCAmbHQ7Jmx0OyBiaW5kaW5nLSZndDtuaW92X3NoaWZ0YCkuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBzZXRzIGBtcF9wYXJhbXMucnhfcGFnZV9zaXplYCBiYXNlZCBvbiB0aGlzIGBuaW92X3NoaWZ0YCwgYW5kIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCB1c2VzIGl0IHRvby4gRmluYWxseSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgbm93IGNoZWNrcyB0aGUgcGFnZSBvcmRlciBhZ2FpbnN0IHRoZSBiaW5kaW5nJiMzOTtzIGBuaW92X3NoaWZ0YC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgZGV2bWVtIFRDUCwgd2hpY2ggaXMgZ3JlYXQgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuCgpTbywgdG8gc3VtbWFyaXplIHRoZSByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmUga2V5IHRvIHRoZSBmdW5jdGlvbmFsaXR5LCBJJiMzOTttIGZvY3VzaW5nIG9uOgoKKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YAoqICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgIChzaW5jZSBSWCBoYXMgVFgpCiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgCiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAKKiAgIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgCgpBIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0uLi4gYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbm90IHN0YXRpYywgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGluIGBuZXQvY29yZS9kZXZtZW0uY2AsIHNvIGl0JiMzOTtzIGFjY2Vzc2libGUuIFRoaXMgbmVlZHMgZnVydGhlciBleHBsb3JhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBhZ2FpbiwgYnV0IHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcF9kbWFidWZfZGV2bWVtX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9NDM3PW5ldF9kZXZtZW1fZ2V0X25pb3ZfYXQoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtNDUyLVxubmV0L2NvcmUvZGV2bWVtLmM6NDUzOmludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcbm5ldC9jb3JlL2Rldm1lbS5jLTQ1NC17XG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3Byb3ZpZGVyX29wcyBkbWFidWZfZGV2bWVtX29wcyA9IHtcbm5ldC9jb3JlL2Rldm1lbS5jOjU0ODpcdC5pbml0XHRcdFx0PSBtcF9kbWFidWZfZGV2bWVtX2luaXQsXG5uZXQvY29yZS9kZXZtZW0uYy01NDktXHQuZGVzdHJveVx0XHQ9IG1wX2RtYWJ1Zl9kZXZtZW1fZGVzdHJveSxcbi0tXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTMtI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MTQ6aW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKTtcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xNS1cbi0tXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg9MjA9Ym9vbCBtcF9kbWFidWZfZGV2bWVtX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSk7XG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMjEtI2Vsc2Vcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoyMjpzdGF0aWMgaW5saW5lIGludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0yMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODA3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCByZWZsZWN0aW5nIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBETUEgQWRkcmVzcyBSZXRyaWV2YWwgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIHRoaXMgY29kZSBzZWdtZW50JiMzOTtzIGZvY3VzIGlzIG9uIHNvbWV0aGluZyB0aGF0JiMzOTtzIG5vdCwgd2VsbCwgc3RhdGljLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBhc3N1bXB0aW9uLCBhbmQgaXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyYCBpcyAqYWN0dWFsbHkqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gaGVyZS4gS25vd2luZyBpdHMgc2NvcGUg4oCTIHdoZXRoZXIgaXQmIzM5O3MgY29uZmluZWQgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IG9yIHZpc2libGUgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIOKAkyBpcyB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgaG93IGl0IGNhbiBiZSB1dGlsaXplZCAob3IsIG1vcmUgaW1wb3J0YW50bHksICpub3QqIHV0aWxpemVkKSBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2dldF9kbWFfYWRkciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0zMz1zdGF0aWMgdm9pZCBuZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyKHN0cnVjdCBnZW5fcG9vbCAqZ2VucG9vbCxcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy00Mi1cbm5ldC9jb3JlL2Rldm1lbS5jOjQzOnN0YXRpYyBkbWFfYWRkcl90IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxubmV0L2NvcmUvZGV2bWVtLmMtNDQte1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTExMz12b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMTE1LVx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xubmV0L2NvcmUvZGV2bWVtLmM6MTE2Olx0dW5zaWduZWQgbG9uZyBkbWFfYWRkciA9IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpO1xubmV0L2NvcmUvZGV2bWVtLmMtMTE3LVx0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5jPTE4OT1uZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmMtMzIwLVx0XHRcdHBhZ2VfcG9vbF9zZXRfZG1hX2FkZHJfbmV0bWVtKG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpLFxubmV0L2NvcmUvZGV2bWVtLmM6MzIxOlx0XHRcdFx0XHRcdCAgICAgIG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpKTtcbm5ldC9jb3JlL2Rldm1lbS5jLTMyMi1cdFx0XHRpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDQ3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIHRvdWNoZWQgYW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBmb3IgdGhpcy4KCkZpcnN0LCB0aGUgYG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyYCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkmIzM5O20gbm90IGdvaW5nIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Qgb2YgRm9jdXNTeW1ib2xzLiBBbmQgSSYjMzk7bSBub3QgZ29pbmcgdG8gaW5jbHVkZSBgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmYCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgcGFydCBvZiB0aGUgbGlmZWN5Y2xlLCBzaW5jZSBpdCYjMzk7cyBub3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4KClNvLCBoZXJlJiMzOTtzIG15IGluaXRpYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHM6CiogICBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAKKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YAoqICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgCiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgCiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAKKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYAoqICAgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgCiogICBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YAoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgaW5kZWVkIG1vZGlmaWVkLiBJIHNlZSB0aGF0IGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCBpcyBjaGFuZ2VkIHRvIHBhc3MgYFBBR0VfU0hJRlRgIHRvIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYC4gR29vZC4gVGhlbiwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGl0c2VsZiBpcyBtb2RpZmllZCB0byB0YWtlIGBuaW92X3NoaWZ0YC4gT2theSwgYW5kIHRoZSBjaGFuZ2VzIHJpcHBsZSBkb3duLiBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgLCBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAsIGFuZCBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAgYXJlIGFsbCB1cGRhdGVkIHRvIHVzZSBgYmluZGluZy0mZ3Q7bmlvdl9zaGlmdGAsIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgbW9kaWZpZWQgdG8gc2V0IGBtcF9wYXJhbXMucnhfcGFnZV9zaXplYC4gRmluYWxseSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgYHBvb2wtJmd0O3Aub3JkZXIgIT0gYmluZGluZy0mZ3Q7bmlvdl9zaGlmdCAtIFBBR0VfU0hJRlRgLiBMb29rcyBsaWtlIGFsbCBhcmUgdG91Y2hlZC4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgdGhlIG1pbmltdW0gY29uZmlnIG9wdGlvbnMgbmVlZGVkIHRvIHJlYWNoIHRoaXMgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgY29kZSByZWxhdGVkIHRvIGBTWU5DX0ZJTEVgLCB3aGljaCBzZWxlY3RzIGBETUFfU0hBUkVEX0JVRkZFUmAuIEJ1dCBgTkVUX0RFVk1FTWAgZGVwZW5kcyBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGVyZWZvcmUsIEkgY2FuIGp1c3QgbGlzdCBlaXRoZXIgYFNZTkNfRklMRWAgb3IgYERNQV9TSEFSRURfQlVGRkVSYC4gV2FpdCwgaWYgSSBsaXN0IGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBpdCBoYXMgbm8gcHJvbXB0LCBzeXprYWxsZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gZW5hYmxlIGl0IGRpcmVjdGx5LiBTbywgbGlzdGluZyBgU1lOQ19GSUxFYCB3aGljaCBoYXMgYSBwcm9tcHQgaXMgYmV0dGVyLiBBbHRlcm5hdGl2ZWx5LCBgRE1BQlVGX0hFQVBTYCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuIEkmIzM5O2xsIGp1c3QgbGlzdCBgU1lOQ19GSUxFYC4gSSYjMzk7bGwgZ28gYmFjayBhbmQgY2hlY2sgYG5ldC9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3IgYE5FVF9ERVZNRU1gIHRoYXQgSSBhbSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA4NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5IGZvciBORVRfREVWTUVNIFRlc3RpbmcqKgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSYjMzk7bSBhcHByb2FjaGluZyBlbmFibGluZyBgTkVUX0RFVk1FTWAgZm9yIHRlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIGFyZSBtZXQgc28gc3l6a2FsbGVyIGNhbiBidWlsZCBhIHZhbGlkIGtlcm5lbCBjb25maWcuIEluaXRpYWxseSwgSSB0aG91Z2h0IEkmIzM5O2QgaGF2ZSB0byBleHBsaWNpdGx5IGxpc3QgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYmVjYXVzZSBgTkVUX0RFVk1FTWAgZGVwZW5kcyBvbiB0aGVtLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgaG93IHN5emthbGxlciBoYW5kbGVzIGBkZXBlbmRzIG9uYDogaXQgYXR0ZW1wdHMgdG8gZW5hYmxlIHRoZSBkZXBlbmRlbmNpZXMuIElmIHRoZXkmIzM5O3JlIHVucHJvbXB0ZWQsIHRoaXMgY291bGQgc3RpbGwgZmFpbC4KCkkga25vdyBgU1lOQ19GSUxFYCBzZWxlY3RzIGBETUFfU0hBUkVEX0JVRkZFUmAsIHNvIGxpc3RpbmcgYFNZTkNfRklMRWAgc2hvdWxkIHNhdGlzZnkgdGhhdCBkZXBlbmRlbmN5LiBBbmQsIGBQQUdFX1BPT0xgIGlzIHNlbGVjdGVkIGJ5IGJvdGggYFZFVEhgIGFuZCBgQlBGX1NZU0NBTExgLCB3aGljaCBhcmUgZ2VuZXJhbGx5IGVuYWJsZWQsIHNvIEkgdGhvdWdodCBqdXN0IGxpc3RpbmcgaXQgd2FzIGVub3VnaC4gSnVzdCB0byBiZSBzYWZlLCB0aG91Z2gsIGxldCYjMzk7cyBpbmNsdWRlIGBETUFfU0hBUkVEX0JVRkZFUmAgZXhwbGljaXRseSBpbiB0aGUgY29uZmlnIGFzIHdlbGwuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zIQoKSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBORVRfREVWTUVNYCBpcyBhIGBkZWZfYm9vbCB5YCwgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdCwgdGhvdWdoLgoKUmlnaHQsIHNvIHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gY29uZmlndXJlIHRoZSBSWCBwYWdlIHNpemUgaW4gZGV2bWVtIFRDUC4gSXQgZGlyZWN0bHkgbW9kaWZpZXMgY3JpdGljYWwgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdG8gbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBleHBvc2VkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhlIGNvZGUsIGFuZCBJIGtub3cgdGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbjogYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCwgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAsIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCwgYW5kIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgLgoKVGhlcmVmb3JlLCB0byBiZSBhcyBjb25maWRlbnQgYXMgcG9zc2libGUgaW4gbXkgY29uZmlndXJhdGlvbiwgSSYjMzk7bSBnb2luZyB0byBsaXN0IGBETUFfU0hBUkVEX0JVRkZFUmAsIGBTWU5DX0ZJTEVgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpCdXQgd2FpdCwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gT2theSwgSSBzZWUgdGhhdCBgR0VORVJJQ19BTExPQ0FUT1JgIGlzIGFsc28gc2VsZWN0ZWQgYnkgYE5FVF9ERVZNRU1gLgoKQW5kIGZpbmFsbHksIGxvb2tpbmcgYXQgdGhlIHNlbGZ0ZXN0LCBpdCB1c2VzIGBuY2Rldm1lbWAsIHdoaWNoIGluIHR1cm4gdXNlcyBgbWVtZmRfY3JlYXRlYCBhbmQgYHVkbWFidWZgLiBTbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgVURNQUJVRmAgaXMgc2V0IHRvby4gT2theSwgbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVRE1BQlVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipBZGRpbmcgYFVETUFCVUZgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBVRE1BQlVGYCBpcyBjbGVhcmx5IGEgYm9vbGVhbiBjb25maWcgb3B0aW9uIHdpdGggYSBwcm9tcHQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgdGhlIHVzZXIgZ2V0cyBhIGNob2ljZSBhYm91dCBpdC4gTW9yZSBpbXBvcnRhbnRseSwgaXQgc2VlbXMgdGhpcyBpcyBob3cgZG1hYnVmcyBhcmUgY3JlYXRlZCBmcm9tIHVzZXIgc3BhY2UgbWVtb3J5LiBUaGF0JiMzOTtzICpleGFjdGx5KiB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBpbiBhIHNlbGZ0ZXN0IHNjZW5hcmlvLCBhbmQgaXQmIzM5O3MgYWxzbyB0aGUgbGlrZWx5IHBhdGggc3l6a2FsbGVyIHdvdWxkIHRha2UgdG8gZnV6eiB0aGlzIGZ1bmN0aW9uYWxpdHkuIFNvLCBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCB0byBpbmNsdWRlLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBhZGQgYFVETUFCVUZgIHRvIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSB0cmFja2luZy4gTm93LCBiZWZvcmUgd2UgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBldmVyeXRoaW5nIGl0IGRlcGVuZHMgb24uIExldCYjMzk7cyBkaWcgaW50byBgVURNQUJVRmAmIzM5O3MgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8ga25vdyB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBvciB3aGljaCBjYW4gYWZmZWN0IGl0cyBiZWhhdmlvdXIgYW5kIGF0dGFjayBzdXJmYWNlLiBUaGF0JiMzOTtzIG5leHQgb24gdGhlIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIFdBUk5JTkc6IGltcHJvcGVyIHVzZSBvZiB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsXG4gIDMxOlx0XHQgIGRyaXZlcnMgZnJvbSB1c2Vyc3BhY2UuIEludGVuZGVkIGZvciB0ZXN0IGFuZCBkZWJ1ZyBvbmx5LlxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBVRE1BQlVGXG4gIDM0Olx0XHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiAgMzU6XHRcdGRlZmF1bHQgblxuICAzNjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICAzNzpcdFx0ZGVwZW5kcyBvbiBNRU1GRF9DUkVBVEUgfHwgQ09NUElMRV9URVNUXG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1NVVxuICAzOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFVETUFCVUZgIGhlcmUuIFJpZ2h0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBkZXBlbmRzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYE1FTUZEX0NSRUFURWAuIE1ha2VzIHNlbnNlLCByaWdodD8gTm93LCB0aGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhpczogaWYgZW5hYmxpbmcgYFVETUFCVUZgICpyZXF1aXJlcyogYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAgZG9lc24mIzM5O3QgZXZlbiBoYXZlIGEgcHJvbXB0LCBob3cgb24gZWFydGggaXMgYSB1c2VyIHN1cHBvc2VkIHRvIGFjdHVhbGx5ICplbmFibGUqIGBVRE1BQlVGYD8gVGhhdCBmZWVscyBsaWtlIGEgZ2xhcmluZyBvbWlzc2lvbi4KCkFoYSEgR290IGl0LiBJIHNob3VsZCBoYXZlIGNvbnNpZGVyZWQgdGhhdCBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGxpa2VseSBzZWxlY3RlZCBieSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcmlnaHQ/IExldCYjMzk7cyBzZWUuLi5pZiB3ZSBlbmFibGUgYFNZTkNfRklMRWAsIGJvb20sIGBETUFfU0hBUkVEX0JVRkZFUmAgZ2V0cyBwdWxsZWQgaW4uIEFuZCAqdGhlbiogd2UgY2FuIGVuYWJsZSBgVURNQUJVRmAuIFRoYXQgZXhwbGFpbnMgaXQuIFNvLCBhIHVzZXIgd2FudGluZyBgVURNQUJVRmAgd2lsbCBsaWtlbHkgbmVlZCB0byBlbmFibGUgYFNZTkNfRklMRWAuCgpTbywgdGhlIGtleSBvcHRpb25zIHRvIGNvbnNpZGVyIHdvdWxkIGJlOgoKKiAgIGBTWU5DX0ZJTEVgICh0aGlzIGluZGlyZWN0bHkgZW5hYmxlcyBgRE1BX1NIQVJFRF9CVUZGRVJgKQoqICAgYFVETUFCVUZgICh0aGUgZGVzaXJlZCBvcHRpb24pCiogICBgRE1BX1NIQVJFRF9CVUZGRVJgIChhIGRlcGVuZGVuY3kgb2YgYFVETUFCVUZgKQoqICAgYFBBR0VfUE9PTGAgKGNvdWxkIGJlIHJlbGV2YW50IGRlcGVuZGluZyBvbiB0aGUgdXNlIGNhc2UpCgpOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgc2l0dWF0aW9uIHdpdGggYE1FTUZEX0NSRUFURWAsIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUZEX0NSRUFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzNTA9Y29uZmlnIEtNQVBfTE9DQUxfTk9OX0xJTkVBUl9QVEVfQVJSQVlcbi0tXG5tbS9LY29uZmlnLTEzNTItXG5tbS9LY29uZmlnOjEzNTM6Y29uZmlnIE1FTUZEX0NSRUFURVxubW0vS2NvbmZpZy0xMzU0LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtZmRfY3JlYXRlKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDY0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyBLZXJuZWwgRE1BIEJ1ZmZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBNRU1GRF9DUkVBVEVgIGlzIGdlbmVyYWxseSBlbmFibGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBpbmZsdWVuY2VzIGhvdyB3ZSYjMzk7cmUgYXBwcm9hY2hpbmcgdGhpcyBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb24uCgpHaXZlbiB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgU1lOQ19GSUxFYCwgYFVETUFCVUZgLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQgc2V0IG9mIGNvbmZpZ3Mgc2hvdWxkIHN1cHBvcnQgdGhlIGludGVuZGVkIHVzZSBjYXNlLgoKTm93LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRob3NlIGBGb2N1c1N5bWJvbHNgIHdlIGlkZW50aWZpZWQgZWFybGllci4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIHN0aWxsIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIHRob3NlOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgLCBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCwgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgLCBhbmQgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZS4KCkhhdmUgdGhlcmUgYmVlbiBhbnkgKm90aGVyKiBmdW5jdGlvbnMsIG91dHNpZGUgb2YgdGhpcyBmb2N1c2VkIHNldCwgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZD8gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvZGV2bWVtLmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz00Mz1zdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy00Ni1cbm5ldC9jb3JlL2Rldm1lbS5jOjQ3Olx0b3duZXIgPSBuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lcihuaW92KTtcbm5ldC9jb3JlL2Rldm1lbS5jLTQ4LVx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfZG1hX2FkZHIgJiM0Mztcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xMDc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTA4Om5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxubmV0L2NvcmUvZGV2bWVtLmgtMTA5LXtcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xMTY9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbm5ldC9jb3JlL2Rldm1lbS5oLTExNy17XG5uZXQvY29yZS9kZXZtZW0uaDoxMTg6XHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdiktXHUwMDNlYmluZGluZztcbm5ldC9jb3JlL2Rldm1lbS5oLTExOS19XG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTI2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuZXRfaW92X3ZpcnR1YWxfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC0xMjgtXHRzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID1cbm5ldC9jb3JlL2Rldm1lbS5oOjEyOTpcdFx0bmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XG5uZXQvY29yZS9kZXZtZW0uaC0xMzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDAwCgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnk6CgoqKkZvY3VzIFN5bWJvbCBWZXJpZmljYXRpb24gQ29tcGxldGUqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCBiZWVuIGxvb2tpbmcgYXQgYG5ldF9pb3ZfdmlydHVhbF9hZGRyYC4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgIGFuZCwgYXMgZXhwZWN0ZWQsIGl0JiMzOTtzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gU2luY2Ugd2Ugc3BlY2lmaWNhbGx5IGV4Y2x1ZGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgdGhhdCBtZWFucyB0aGUgZXhjbHVzaW9uIHByb2Nlc3Mgd29ya2VkIGFzIGl0IHNob3VsZC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IG9uZS4KCkdvb2QuIEl0IGxvb2tzIGxpa2UgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgc3RhYmxlIGFuZCBhY2N1cmF0ZSBhdCB0aGlzIHBvaW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lOQ19GSUxFJiMzNDssCiAgICAmIzM0O1VETUFCVUYmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX2JpbmRfcnhfZG9pdCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfbmxfYmluZF90eF9kb2l0JiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9hbGxvY19kbWFidWYmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X25pb3ZfYXQmIzM0OywKICAgICYjMzQ7bXBfZG1hYnVmX2Rldm1lbV9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgdGhlIFJYIHBhZ2Ugc2l6ZSBmb3IgZGV2bWVtIFRDUCB2aWEgdGhlIGByeC1wYWdlLXNpemVgIG5ldGxpbmsgYXR0cmlidXRlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBkZXZtZW0gVENQIGNvZGUgdG8gaGFuZGxlIG5vbi1QQUdFX1NJWkUgYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0a2l0IG9yIHZldGgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTWU5DX0ZJTEUmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfYmluZF9yeF9kb2l0JiMzNDssCiAgICAmIzM0O25ldGRldl9ubF9iaW5kX3R4X2RvaXQmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDtuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfbmlvdl9hdCYjMzQ7LAogICAgJiMzNDttcF9kbWFidWZfZGV2bWVtX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjb25maWd1cmluZyB0aGUgUlggcGFnZSBzaXplIGZvciBkZXZtZW0gVENQIHZpYSB0aGUgYHJ4LXBhZ2Utc2l6ZWAgbmV0bGluayBhdHRyaWJ1dGUuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGRldm1lbSBUQ1AgY29kZSB0byBoYW5kbGUgbm9uLVBBR0VfU0laRSBhbGxvY2F0aW9ucyBhbmQgbWFwcGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRraXQgb3IgdmV0aCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0MzoxNy4zNTMxNTc5MzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM4NDM0NTU1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lOQ19GSUxFXCIsXG4gICAgXCJVRE1BQlVGXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiLFxuICAgIFwibmV0ZGV2X25sX2JpbmRfdHhfZG9pdFwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9hbGxvY19kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fZnJlZV9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVcIixcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRcIixcbiAgICBcIm1wX2RtYWJ1Zl9kZXZtZW1faW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgdGhlIFJYIHBhZ2Ugc2l6ZSBmb3IgZGV2bWVtIFRDUCB2aWEgdGhlIGByeC1wYWdlLXNpemVgIG5ldGxpbmsgYXR0cmlidXRlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBkZXZtZW0gVENQIGNvZGUgdG8gaGFuZGxlIG5vbi1QQUdFX1NJWkUgYWxsb2NhdGlvbnMgYW5kIG1hcHBpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdXNpbmcgbmV0a2l0IG9yIHZldGgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0MzoxNy4zNTMyOTczMDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDcxMDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZlM2FhYzI3Y2QwMDQ5YjQ1ZTIyZDUxOTlhNWViNDI0OTk2OWY3MDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDg6NDM6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sXFxuaW5kZXggNWYxNDNkYTc0NThjZmIuLjFlZTY0MzQyZGYxMWMzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxcbkBAIC02LDYgKzYsMTIgQEAgZG9jOiBcXHUwMDNlLVxcbiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLlxcbiBcXG4gZGVmaW5pdGlvbnM6XFxuKyAgLVxcbisgICAgdHlwZTogY29uc3RcXG4rICAgIG5hbWU6IHBhZ2Utc2l6ZVxcbisgICAgdmFsdWU6IDAgICMgZHVtbXk6IGNvZGVnZW4gbmVlZHMgYSBudW1iZXIsIHJlYWwgdmFsdWUgaXMgdGhlIFBBR0VfU0laRSBtYWNybyAoaGVhZGVyKVxcbisgICAgaGVhZGVyOiBhc20vcGFnZS5oXFxuKyAgICBzY29wZToga2VybmVsXFxuICAgLVxcbiAgICAgdHlwZTogZmxhZ3NcXG4gICAgIG5hbWU6IHhkcC1hY3RcXG5AQCAtNTk4LDYgKzYwNCwxNiBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBjaGVja3M6XFxuICAgICAgICAgICBtaW46IDFcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHJ4LXBhZ2Utc2l6ZVxcbisgICAgICAgIGRvYzogfFxcbisgICAgICAgICAgU2l6ZSBpbiBieXRlcyBvZiBlYWNoIGRldmljZSBwYWdlIHRoZSBOSUMgd3JpdGVzIGludG8gZnJvbSB0aGUgYm91bmRcXG4rICAgICAgICAgIGRtYWJ1Zi4gTXVzdCBiZSBhIHBvd2VyIG9mIHR3byBhbmQgXFx1MDAzZT0gUEFHRV9TSVpFOyBkZWZhdWx0cyB0b1xcbisgICAgICAgICAgUEFHRV9TSVpFLlxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGNoZWNrczpcXG4rICAgICAgICAgIG1pbjogcGFnZS1zaXplXFxuKyAgICAgICAgICBtYXg6IHUzMi1tYXhcXG4gXFxuIG9wZXJhdGlvbnM6XFxuICAgbGlzdDpcXG5AQCAtODEyLDYgKzgyOCw3IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICAgIC0gaWZpbmRleFxcbiAgICAgICAgICAgICAtIGZkXFxuICAgICAgICAgICAgIC0gcXVldWVzXFxuKyAgICAgICAgICAgIC0gcngtcGFnZS1zaXplXFxuICAgICAgICAgcmVwbHk6XFxuICAgICAgICAgICBhdHRyaWJ1dGVzOlxcbiAgICAgICAgICAgICAtIGlkXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxcbmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcXG5AQCAtMjE5LDYgKzIxOSw3IEBAIGVudW0ge1xcbiBcXHRORVRERVZfQV9ETUFCVUZfUVVFVUVTLFxcbiBcXHRORVRERVZfQV9ETUFCVUZfRkQsXFxuIFxcdE5FVERFVl9BX0RNQUJVRl9JRCxcXG4rXFx0TkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcXG4gXFxuIFxcdF9fTkVUREVWX0FfRE1BQlVGX01BWCxcXG4gXFx0TkVUREVWX0FfRE1BQlVGX01BWCA9IChfX05FVERFVl9BX0RNQUJVRl9NQVggLSAxKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZtZW0uYyBiL25ldC9jb3JlL2Rldm1lbS5jXFxuaW5kZXggOTU3ZDZiOTYyMTZiMzMuLmIwMzZmMTRjYjIzYTE0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldm1lbS5jXFxuKysrIGIvbmV0L2NvcmUvZGV2bWVtLmNcXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4gXFxuIFxcdG93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XFxuIFxcdHJldHVybiBvd25lci1cXHUwMDNlYmFzZV9kbWFfYWRkciArXFxuLVxcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuK1xcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2Mgb3duZXItXFx1MDAzZWJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG5AQCAtOTMsMTMgKzkzLDE0IEBAIG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiBcXHRzc2l6ZV90IG9mZnNldDtcXG4gXFx0c3NpemVfdCBpbmRleDtcXG4gXFxuLVxcdGRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCwgUEFHRV9TSVpFLFxcbitcXHRkbWFfYWRkciA9IGdlbl9wb29sX2FsbG9jX293bmVyKGJpbmRpbmctXFx1MDAzZWNodW5rX3Bvb2wsXFxuK1xcdFxcdFxcdFxcdFxcdDFVTCBcXHUwMDNjXFx1MDAzYyBiaW5kaW5nLVxcdTAwM2VuaW92X3NoaWZ0LFxcbiBcXHRcXHRcXHRcXHRcXHQodm9pZCAqKilcXHUwMDI2b3duZXIpO1xcbiBcXHRpZiAoIWRtYV9hZGRyKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdG9mZnNldCA9IGRtYV9hZGRyIC0gb3duZXItXFx1MDAzZWJhc2VfZG1hX2FkZHI7XFxuLVxcdGluZGV4ID0gb2Zmc2V0IC8gUEFHRV9TSVpFO1xcbitcXHRpbmRleCA9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBiaW5kaW5nLVxcdTAwM2VuaW92X3NoaWZ0O1xcbiBcXHRuaW92ID0gXFx1MDAyNm93bmVyLVxcdTAwM2VhcmVhLm5pb3ZzW2luZGV4XTtcXG4gXFxuIFxcdG5pb3YtXFx1MDAzZWRlc2MucHBfbWFnaWMgPSAwO1xcbkBAIC0xMTMsMTIgKzExNCwxMyBAQCB2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7XFxuK1xcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2MgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdDtcXG4gXFxuIFxcdGlmIChXQVJOX09OKCFnZW5fcG9vbF9oYXNfYWRkcihiaW5kaW5nLVxcdTAwM2VjaHVua19wb29sLCBkbWFfYWRkcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFBBR0VfU0laRSkpKVxcbitcXHRcXHRcXHRcXHQgICAgICAgbmlvdl9zaXplKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsIFBBR0VfU0laRSk7XFxuK1xcdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsIG5pb3Zfc2l6ZSk7XFxuIH1cXG4gXFxuIHZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbkBAIC0xNjMsNiArMTY1LDkgQEAgaW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxuIFxcdHUzMiB4YV9pZHg7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdCAhPSBQQUdFX1NISUZUKVxcbitcXHRcXHRtcF9wYXJhbXMucnhfcGFnZV9zaXplID0gMVUgXFx1MDAzY1xcdTAwM2MgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdDtcXG4rXFxuIFxcdGVyciA9IG5ldGlmX21wX29wZW5fcnhxKGRldiwgcnhxX2lkeCwgXFx1MDAyNm1wX3BhcmFtcywgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTg0LDEwICsxODksMTIgQEAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XFxuK1xcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2Mgbmlvdl9zaGlmdDtcXG4gXFx0c3RhdGljIHUzMiBpZF9hbGxvY19uZXh0O1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbiBcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbkBAIC0yMTMsNiArMjIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXG4gXFx0YmluZGluZy1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXHRiaW5kaW5nLVxcdTAwM2V2ZGV2ID0gdmRldjtcXG4rXFx0YmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdCA9IG5pb3Zfc2hpZnQ7XFxuIFxcdHhhX2luaXRfZmxhZ3MoXFx1MDAyNmJpbmRpbmctXFx1MDAzZWJvdW5kX3J4cXMsIFhBX0ZMQUdTX0FMTE9DKTtcXG4gXFxuIFxcdGVyciA9IHBlcmNwdV9yZWZfaW5pdChcXHUwMDI2YmluZGluZy1cXHUwMDNlcmVmLFxcbkBAIC0yNDgsMTggKzI1NiwxNCBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdFxcdGdvdG8gZXJyX3VubWFwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJpbmRpbmctXFx1MDAzZXR4X3ZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldF9pb3YgKixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZG1hYnVmLVxcdTAwM2VzaXplIC8gUEFHRV9TSVpFKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZG1hYnVmLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIG5pb3Zfc2hpZnQpO1xcbiBcXHRcXHRpZiAoIWJpbmRpbmctXFx1MDAzZXR4X3ZlYykge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGVycl91bm1hcDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHQvKiBGb3Igc2ltcGxpY2l0eSB3ZSBleHBlY3QgdG8gbWFrZSBQQUdFX1NJWkUgYWxsb2NhdGlvbnMsIGJ1dCB0aGVcXG4tXFx0ICogYmluZGluZyBjYW4gYmUgbXVjaCBtb3JlIGZsZXhpYmxlIHRoYW4gdGhhdC4gV2UgbWF5IGJlIGFibGUgdG9cXG4tXFx0ICogYWxsb2NhdGUgTVRVIHNpemVkIGNodW5rcyBoZXJlLiBMZWF2ZSB0aGF0IGZvciBmdXR1cmUgd29yay4uLlxcbi1cXHQgKi9cXG4tXFx0YmluZGluZy1cXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZULFxcbitcXHRiaW5kaW5nLVxcdTAwM2VjaHVua19wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKG5pb3Zfc2hpZnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGRldl90b19ub2RlKFxcdTAwMjZkZXYtXFx1MDAzZWRldikpO1xcbiBcXHRpZiAoIWJpbmRpbmctXFx1MDAzZWNodW5rX3Bvb2wpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG5AQCAtMjczLDkgKzI3NywxMiBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdHNpemVfdCBsZW4gPSBzZ19kbWFfbGVuKHNnKTtcXG4gXFx0XFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuIFxcbi1cXHRcXHRpZiAoIUlTX0FMSUdORUQobGVuLCBQQUdFX1NJWkUpKSB7XFxuK1xcdFxcdGlmICghSVNfQUxJR05FRChkbWFfYWRkciwgbmlvdl9zaXplKSB8fFxcbitcXHRcXHQgICAgIUlTX0FMSUdORUQobGVuLCBuaW92X3NpemUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcImRtYS1idWYgU0cgbGVuZ3RoIG11c3QgYmUgUEFHRV9TSVpFIGFsaWduZWRcXFwiKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcImRtYWJ1ZiBzZyBlbnRyeSAoYWRkcj0lcGFkLCBsZW49JXp1KSBub3QgYWxpZ25lZCB0byBuaW92IHNpemUgJXp1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmRtYV9hZGRyLCBsZW4sIG5pb3Zfc2l6ZSk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY2h1bmtzO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yODgsNyArMjk1LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXG4gXFx0XFx0b3duZXItXFx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsID0gdmlydHVhbDtcXG4gXFx0XFx0b3duZXItXFx1MDAzZWJhc2VfZG1hX2FkZHIgPSBkbWFfYWRkcjtcXG4tXFx0XFx0b3duZXItXFx1MDAzZWFyZWEubnVtX25pb3ZzID0gbGVuIC8gUEFHRV9TSVpFO1xcbitcXHRcXHRvd25lci1cXHUwMDNlYXJlYS5udW1fbmlvdnMgPSBsZW4gXFx1MDAzZVxcdTAwM2Ugbmlvdl9zaGlmdDtcXG4gXFx0XFx0b3duZXItXFx1MDAzZWJpbmRpbmcgPSBiaW5kaW5nO1xcbiBcXG4gXFx0XFx0ZXJyID0gZ2VuX3Bvb2xfYWRkX293bmVyKGJpbmRpbmctXFx1MDAzZWNodW5rX3Bvb2wsIGRtYV9hZGRyLFxcbkBAIC0zMTMsNyArMzIwLDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXHRcXHRcXHRwYWdlX3Bvb2xfc2V0X2RtYV9hZGRyX25ldG1lbShuZXRfaW92X3RvX25ldG1lbShuaW92KSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdikpO1xcbiBcXHRcXHRcXHRpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpXFxuLVxcdFxcdFxcdFxcdGJpbmRpbmctXFx1MDAzZXR4X3ZlY1tvd25lci1cXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgLyBQQUdFX1NJWkUgKyBpXSA9IG5pb3Y7XFxuK1xcdFxcdFxcdFxcdGJpbmRpbmctXFx1MDAzZXR4X3ZlY1sob3duZXItXFx1MDAzZWFyZWEuYmFzZV92aXJ0dWFsIFxcdTAwM2VcXHUwMDNlIG5pb3Zfc2hpZnQpICsgaV0gPSBuaW92O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR2aXJ0dWFsICs9IGxlbjtcXG5AQCAtNDMwLDEzICs0MzcsMTUgQEAgc3RydWN0IG5ldF9pb3YgKlxcbiBuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbiBcXHRcXHQgICAgICAgc2l6ZV90IHZpcnRfYWRkciwgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSlcXG4ge1xcbitcXHRzaXplX3Qgbmlvdl9zaXplID0gMVVMIFxcdTAwM2NcXHUwMDNjIGJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQ7XFxuK1xcbiBcXHRpZiAodmlydF9hZGRyIFxcdTAwM2U9IGJpbmRpbmctXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHQqb2ZmID0gdmlydF9hZGRyICUgUEFHRV9TSVpFO1xcbi1cXHQqc2l6ZSA9IFBBR0VfU0laRSAtICpvZmY7XFxuK1xcdCpvZmYgPSB2aXJ0X2FkZHIgXFx1MDAyNiAobmlvdl9zaXplIC0gMSk7XFxuK1xcdCpzaXplID0gbmlvdl9zaXplIC0gKm9mZjtcXG4gXFxuLVxcdHJldHVybiBiaW5kaW5nLVxcdTAwM2V0eF92ZWNbdmlydF9hZGRyIC8gUEFHRV9TSVpFXTtcXG4rXFx0cmV0dXJuIGJpbmRpbmctXFx1MDAzZXR4X3ZlY1t2aXJ0X2FkZHIgXFx1MDAzZVxcdTAwM2UgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdF07XFxuIH1cXG4gXFxuIC8qKiogXFxcIkRtYWJ1ZiBkZXZtZW0gbWVtb3J5IHByb3ZpZGVyXFxcIiAqKiovXFxuQEAgLTQ1NCw3ICs0NjMsNyBAQCBpbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxuIFxcdHBvb2wtXFx1MDAzZWRtYV9zeW5jID0gZmFsc2U7XFxuIFxcdHBvb2wtXFx1MDAzZWRtYV9zeW5jX2Zvcl9jcHUgPSBmYWxzZTtcXG4gXFxuLVxcdGlmIChwb29sLVxcdTAwM2VwLm9yZGVyICE9IDApXFxuK1xcdGlmIChwb29sLVxcdTAwM2VwLm9yZGVyICE9IGJpbmRpbmctXFx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUKVxcbiBcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiBcXG4gXFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoYmluZGluZyk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldm1lbS5oIGIvbmV0L2NvcmUvZGV2bWVtLmhcXG5pbmRleCAzODUyYTU2MDM2Y2I0MC4uNGEyOTNhN2QxMTQ5YzggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcXG4rKysgYi9uZXQvY29yZS9kZXZtZW0uaFxcbkBAIC03MSw2ICs3MSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBuZXRfaW92ICoqdHhfdmVjO1xcbiBcXG4rXFx0dW5zaWduZWQgaW50IG5pb3Zfc2hpZnQ7XFxuK1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5iaW5kX3c7XFxuIH07XFxuIFxcbkBAIC05Myw3ICs5NSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG4gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4gXFx0XFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxcbitcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fbG9va3VwX2RtYWJ1Zih1MzIgaWQpO1xcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XFxuQEAgLTEyMiwxMCArMTI1LDExIEBAIHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9pb3ZfYXJlYSAqb3duZXIgPSBuZXRfaW92X293bmVyKG5pb3YpO1xcbitcXHRzdHJ1Y3QgZG1hYnVmX2dlbnBvb2xfY2h1bmtfb3duZXIgKmNvID1cXG4rXFx0XFx0bmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XFxuIFxcbi1cXHRyZXR1cm4gb3duZXItXFx1MDAzZWJhc2VfdmlydHVhbCArXFxuLVxcdCAgICAgICAoKHVuc2lnbmVkIGxvbmcpbmV0X2lvdl9pZHgobmlvdikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuK1xcdHJldHVybiBuZXRfaW92X293bmVyKG5pb3YpLVxcdTAwM2ViYXNlX3ZpcnR1YWwgK1xcbitcXHQgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpIFxcdTAwM2NcXHUwMDNjIGNvLVxcdTAwM2ViaW5kaW5nLVxcdTAwM2VuaW92X3NoaWZ0KTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sXFxuQEAgLTE3NSw2ICsxNzksNyBAQCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbiBcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiBcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCxcXG4rXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcXG5pbmRleCBkMThjODliNWE2Yzc1OS4uZjgzNzkwMzQxZWFlNjggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcXG4rKysgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1xcbkBAIC0xMSw2ICsxMSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gXFxuIC8qIEludGVnZXIgdmFsdWUgcmFuZ2VzICovXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX3BhZ2VfcG9vbF9pZF9yYW5nZSA9IHtcXG5AQCAtMjcsNiArMjgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfbmFwaV9kZWZlcl9oYXJkX2lycXNfcmFuZ2VcXG4gXFx0Lm1heFxcdD0gUzMyX01BWCxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UgPSB7XFxuK1xcdC5taW5cXHQ9IFBBR0VfU0laRSxcXG4rXFx0Lm1heFxcdD0gVTMyX01BWCxcXG4rfTtcXG4rXFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cXG4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCArIDFdID0ge1xcbiBcXHRbTkVUREVWX0FfTEVBU0VfSUZJTkRFWF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSxcXG5AQCAtMTA2LDEwICsxMTIsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9xc3RhdHNfZ2V0X25sX3BvbGljeVtORVRERVZfQV9RU1RBVFNfU0NPUEVcXG4gfTtcXG4gXFxuIC8qIE5FVERFVl9DTURfQklORF9SWCAtIGRvICovXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3lbTkVUREVWX0FfRE1BQlVGX0ZEICsgMV0gPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3lbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSArIDFdID0ge1xcbiBcXHRbTkVUREVWX0FfRE1BQlVGX0lGSU5ERVhdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXFxuIFxcdFtORVRERVZfQV9ETUFCVUZfRkRdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuIFxcdFtORVRERVZfQV9ETUFCVUZfUVVFVUVTXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKG5ldGRldl9xdWV1ZV9pZF9ubF9wb2xpY3kpLFxcbitcXHRbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm5ldGRldl9hX2RtYWJ1Zl9yeF9wYWdlX3NpemVfcmFuZ2UpLFxcbiB9O1xcbiBcXG4gLyogTkVUREVWX0NNRF9OQVBJX1NFVCAtIGRvICovXFxuQEAgLTIxOSw3ICsyMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIG5ldGRldl9ubF9vcHNbXSA9IHtcXG4gXFx0XFx0LmNtZFxcdFxcdD0gTkVUREVWX0NNRF9CSU5EX1JYLFxcbiBcXHRcXHQuZG9pdFxcdFxcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcXG4gXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxcbi1cXHRcXHQubWF4YXR0clxcdD0gTkVUREVWX0FfRE1BQlVGX0ZELFxcbitcXHRcXHQubWF4YXR0clxcdD0gTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRSxcXG4gXFx0XFx0LmZsYWdzXFx0XFx0PSBHRU5MX1VOU19BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxcbiBcXHR9LFxcbiBcXHR7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcXG5pbmRleCBkNzFiNDM1ZDcyYzE4Zi4uM2ZhZTg4ZThmNWM1MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcXG4rKysgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaFxcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9uZXRkZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gXFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9sZWFzZV9ubF9wb2xpY3lbTkVUREVWX0FfTEVBU0VfTkVUTlNfSUQgKyAxXTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuYyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmNcXG5pbmRleCBjMTVkOGQ0Y2ExZjhmYS4uMGVlYTRlZTIyZjI0NjcgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY1xcbisrKyBiL25ldC9jb3JlL25ldGRldi1nZW5sLmNcXG5AQCAtMTAxMyw2ICsxMDEzLDcgQEAgbmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXFxuIGludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XFxuK1xcdHVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDtcXG4gXFx0dTMyIGlmaW5kZXgsIGRtYWJ1Zl9mZCwgcnhxX2lkeDtcXG4gXFx0c3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbkBAIC0xMDMwLDYgKzEwMzEsMTggQEAgaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWZpbmRleCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RFVl9JRklOREVYXSk7XFxuIFxcdGRtYWJ1Zl9mZCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9GRF0pO1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdKSB7XFxuK1xcdFxcdHUzMiByeF9wYWdlX3NpemUgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSk7XFxuK1xcbitcXHRcXHRpZiAoIWlzX3Bvd2VyX29mXzIocnhfcGFnZV9zaXplKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW05FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkVdLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcInJ4LXBhZ2Utc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMlxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRuaW92X3NoaWZ0ID0gaWxvZzIocnhfcGFnZV9zaXplKTtcXG4rXFx0fVxcbitcXG4gXFx0cHJpdiA9IGdlbmxfc2tfcHJpdl9nZXQoXFx1MDAyNm5ldGRldl9ubF9mYW1pbHksIE5FVExJTktfQ0Ioc2tiKS5zayk7XFxuIFxcdGlmIChJU19FUlIocHJpdikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYpO1xcbkBAIC0xMDgwLDcgKzEwOTMsOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHR9XFxuIFxcbiBcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihuZXRkZXYsIE5VTEwsIGRtYV9kZXYsIERNQV9GUk9NX0RFVklDRSxcXG4tXFx0XFx0XFx0XFx0XFx0IGRtYWJ1Zl9mZCwgcHJpdiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcXG4gXFx0XFx0Z290byBlcnJfcnhxX2JpdG1hcDtcXG5AQCAtMTIyMSw3ICsxMjM1LDcgQEAgaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgZG1hX2RldiwgRE1BX1RPX0RFVklDRSwgZG1hYnVmX2ZkLFxcbi1cXHRcXHRcXHRcXHRcXHQgcHJpdiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0IFBBR0VfU0hJRlQsIHByaXYsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcXG4gXFx0XFx0Z290byBlcnJfdW5sb2NrX2JpbmRfZGV2O1xcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcXG5pbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXFxuQEAgLTIxOSw2ICsyMTksNyBAQCBlbnVtIHtcXG4gXFx0TkVUREVWX0FfRE1BQlVGX1FVRVVFUyxcXG4gXFx0TkVUREVWX0FfRE1BQlVGX0ZELFxcbiBcXHRORVRERVZfQV9ETUFCVUZfSUQsXFxuK1xcdE5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsXFxuIFxcbiBcXHRfX05FVERFVl9BX0RNQUJVRl9NQVgsXFxuIFxcdE5FVERFVl9BX0RNQUJVRl9NQVggPSAoX19ORVRERVZfQV9ETUFCVUZfTUFYIC0gMSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5XFxuaW5kZXggMDMxY2Y5OTA1ZjY1MWMuLjgyYzExZmZjNGFkZDdiIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxcbkBAIC0yLDcgKzIsOCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiBmcm9tIG9zIGltcG9ydCBwYXRoXFxuLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHNcXG4rZnJvbSBkZXZtZW1fbGliIGltcG9ydCAoc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9yeF9sYXJnZV9uaW92KVxcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXFxuIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudlxcbiBcXG5AQCAtMzAsMTEgKzMxLDE3IEBAIGRlZiBjaGVja19yeF9oZHMoY2ZnKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgcnVuX3J4X2hkcyhjZmcpXFxuIFxcbiBcXG4rZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiUnVuIHRoZSBkZXZtZW0gUlggdGVzdCB3aXRoIHJ4LXBhZ2Utc2l6ZSA9IDE2IEtpQi5cXFwiXFxcIlxcXCJcXG4rICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZylcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gdGhlIGRldm1lbSB0ZXN0IGNhc2VzLlxcXCJcXFwiXFxcIlxcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxcbiAgICAgICAgIHNldHVwX3Rlc3QoY2ZnLCBwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArIFxcXCIvbmNkZXZtZW1cXFwiKSlcXG4tICAgICAgICBrc2Z0X3J1bihbY2hlY2tfcngsIGNoZWNrX3R4LCBjaGVja190eF9jaHVua3MsIGNoZWNrX3J4X2hkc10sXFxuKyAgICAgICAga3NmdF9ydW4oW2NoZWNrX3J4LCBjaGVja190eCwgY2hlY2tfdHhfY2h1bmtzLCBjaGVja19yeF9oZHMsXFxuKyAgICAgICAgICAgICAgICAgIGNoZWNrX3J4X2xhcmdlX25pb3ZdLFxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKVxcbiAgICAga3NmdF9leGl0KClcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XFxuaW5kZXggMDkyMWZmMDNlYjgxYzUuLjZjOTMyMDE4YjQ2M2EyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lLHRvby1tYW55LWFyZ3VtZW50c1xcbiBcXFwiXFxcIlxcXCJTaGFyZWQgaGVscGVycyBmb3IgZGV2bWVtIFRDUCBzZWxmdGVzdHMuXFxcIlxcXCJcXFwiXFxuIFxcbiBpbXBvcnQgcmVcXG5AQCAtOCw3ICs5LDcgQEAgZnJvbSBsaWIucHkgaW1wb3J0IChia2csIGNtZCwgZGVmZXIsIGV0aHRvb2wsIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlbixcXG4gICAgICAgICAgICAgICAgICAgICBOZXRkZXZGYW1pbHkpXFxuIFxcbiBcXG4tZGVmIHJlcXVpcmVfZGV2bWVtKGNmZyk6XFxuK2RlZiByZXF1aXJlX2Rldm1lbShjZmcsIHJ4X3BhZ2Vfc2l6ZT0wKTpcXG4gICAgIFxcXCJcXFwiXFxcIlByb2JlIG5jZGV2bWVtIG9uIGNmZy5pZm5hbWUgYW5kIFNLSVAgdGhlIHRlc3QgaWYgZGV2bWVtIGlzbid0IHN1cHBvcnRlZC5cXFwiXFxcIlxcXCJcXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXFxcImRldm1lbV9wcm9iZWRcXFwiKTpcXG4gICAgICAgICBwcm9iZV9jb21tYW5kID0gZlxcXCJ7Y2ZnLmJpbl9sb2NhbH0gLWYge2NmZy5pZm5hbWV9XFxcIlxcbkBAIC0xOCw2ICsxOSwxOSBAQCBkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnKTpcXG4gICAgIGlmIG5vdCBjZmcuZGV2bWVtX3N1cHBvcnRlZDpcXG4gICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJUZXN0IHJlcXVpcmVzIGRldm1lbSBzdXBwb3J0XFxcIilcXG4gXFxuKyAgICBpZiByeF9wYWdlX3NpemUgXFx1MDAzZSAwOlxcbisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXFxcImRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkXFxcIik6XFxuKyAgICAgICAgICAgIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZCA9IHt9XFxuK1xcbisgICAgICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBub3QgaW4gY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkOlxcbisgICAgICAgICAgICBwcm9iZV9jb21tYW5kID0gZlxcXCJ7Y2ZnLmJpbl9sb2NhbH0gLWYge2NmZy5pZm5hbWV9IC1iIHtyeF9wYWdlX3NpemV9XFxcIlxcbisgICAgICAgICAgICBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWRbcnhfcGFnZV9zaXplXSA9IFxcXFxcXG4rICAgICAgICAgICAgICAgIGNtZChwcm9iZV9jb21tYW5kLCBmYWlsPUZhbHNlLCBzaGVsbD1UcnVlKS5yZXQgPT0gMFxcbitcXG4rICAgICAgICBpZiBub3QgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkW3J4X3BhZ2Vfc2l6ZV06XFxuKyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxuKyAgICAgICAgICAgICAgICBmXFxcIlRlc3QgcmVxdWlyZXMgZGV2bWVtIHJ4LXBhZ2Utc2l6ZT17cnhfcGFnZV9zaXplfSBzdXBwb3J0XFxcIilcXG4rXFxuIFxcbiBkZWYgY29uZmlndXJlX25pYyhjZmcpOlxcbiAgICAgXFxcIlxcXCJcXFwiQ2hhbm5lbHMsIHJpbmdzLCBSU1MsIHF1ZXVlIGxlYXNlIGZvciBuZXRraXQgZGV2bWVtLlxcXCJcXFwiXFxcIlxcbkBAIC03Niw3ICs5MCw4IEBAIGRlZiBzZXRfZmxvd19ydWxlKGNmZywgcG9ydCk6XFxuICAgICByZXR1cm4gaW50KHJlLnNlYXJjaChyJ0lEIChcXFxcZCspJywgb3V0cHV0KS5ncm91cCgxKSlcXG4gXFxuIFxcbi1kZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOlxcbitkZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UsXFxuKyAgICAgICAgICAgICAgICByeF9wYWdlX3NpemU9MCk6XFxuICAgICBcXFwiXFxcIlxcXCJCdWlsZCB0aGUgbmNkZXZtZW0gUlggbGlzdGVuZXIgY29tbWFuZC5cXFwiXFxcIlxcXCJcXG4gICAgIGlmIGhhc2F0dHIoY2ZnLCAnbmV0bnMnKTpcXG4gICAgICAgICBmbG93X3J1bGVfaWQgPSBzZXRfZmxvd19ydWxlKGNmZywgcG9ydClcXG5AQCAtOTYsNiArMTExLDggQEAgZGVmIG5jZGV2bWVtX3J4KGNmZywgcG9ydCwgdmVyaWZ5PVRydWUsIGZhaWxfb25fbGluZWFyPUZhbHNlLCBmbG93X3N0ZWVyPUZhbHNlKTpcXG4gICAgICAgICBleHRyYXMuYXBwZW5kKFxcXCItdiA3XFxcIilcXG4gICAgIGlmIGZhaWxfb25fbGluZWFyOlxcbiAgICAgICAgIGV4dHJhcy5hcHBlbmQoXFxcIi1MXFxcIilcXG4rICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcXHUwMDNlIDA6XFxuKyAgICAgICAgZXh0cmFzLmFwcGVuZChmXFxcIi1iIHtyeF9wYWdlX3NpemV9XFxcIilcXG4gXFxuICAgICBwYXJ0cyA9IFtjZmcuYmluX2xvY2FsLCBcXFwiLWxcXFwiLCBmXFxcIi1mIHtpZm5hbWV9XFxcIiwgZlxcXCItcyB7YWRkcn1cXFwiLFxcbiAgICAgICAgICAgICAgZlxcXCItcCB7cG9ydH1cXFwiLCAqZXh0cmFzXVxcbkBAIC0yMDIsNiArMjE5LDQ0IEBAIGRlZiBydW5fdHhfY2h1bmtzKGNmZyk6XFxuICAgICBrc2Z0X2VxKHNvY2F0LnN0ZG91dC5zdHJpcCgpLCBcXFwiaGVsbG9cXFxcbndvcmxkXFxcIilcXG4gXFxuIFxcbitkZWYgX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzKGhwX2ZpbGUsIG5yX2h1Z2VwYWdlcyk6XFxuKyAgICB3aXRoIG9wZW4oaHBfZmlsZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOlxcbisgICAgICAgIGYud3JpdGUoc3RyKG5yX2h1Z2VwYWdlcykpXFxuK1xcbitcXG4rZGVmIHJ1bl9yeF9sYXJnZV9uaW92KGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggYSBsYXJnZSBuaW92IChyeC1wYWdlLXNpemUgXFx1MDAzZSBQQUdFX1NJWkUpLlxcbitcXG4rICAgIFN3ZWVwIHBheWxvYWQgc2l6ZXMgdGhhdCBzdHJhZGRsZSB0aGUgbmlvdiBib3VuZGFyeTogYmVsb3csIGVxdWFsIHRvLFxcbisgICAgYW5kIGFib3ZlIHJ4X3BhZ2Vfc2l6ZSwgdG8gZXhlcmNpc2Ugc3ViLW5pb3YsIGV4YWN0LW5pb3YsIGFuZCBtdWx0aS1uaW92XFxuKyAgICBSWCBwYXRocy5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgaHBfZmlsZSA9IFxcXCIvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzXFxcIlxcbisgICAgd2l0aCBvcGVuKGhwX2ZpbGUsICdyKycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6XFxuKyAgICAgICAgbnJfaHVnZXBhZ2VzID0gaW50KGYucmVhZCgpLnN0cmlwKCkpXFxuKyAgICAgICAgaWYgbnJfaHVnZXBhZ2VzIFxcdTAwM2MgNjQ6XFxuKyAgICAgICAgICAgIGYuc2VlaygwKVxcbisgICAgICAgICAgICBmLndyaXRlKFxcXCI2NFxcXCIpXFxuKyAgICAgICAgICAgIGRlZmVyKF9yZXN0b3JlX25yX2h1Z2VwYWdlcywgaHBfZmlsZSwgbnJfaHVnZXBhZ2VzKVxcbisgICAgcmVxdWlyZV9kZXZtZW0oY2ZnLCByeF9wYWdlX3NpemU9MTYzODQpXFxuKyAgICBjb25maWd1cmVfbmljKGNmZylcXG4rICAgIG5ldG5zID0gZ2V0YXR0cihjZmcsIFxcXCJuZXRuc1xcXCIsIE5vbmUpXFxuK1xcbisgICAgZm9yIHNpemUgaW4gWzEwMjQsIDQwOTYsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzZdOlxcbisgICAgICAgIHBvcnQgPSByYW5kX3BvcnQoKVxcbisgICAgICAgIHNvY2F0ID0gc29jYXRfc2VuZChjZmcsIHBvcnQpXFxuKyAgICAgICAgbGlzdGVuX2NtZCA9IG5jZGV2bWVtX3J4KGNmZywgcG9ydCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvd19zdGVlcj1ub3QgbmV0bnMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3BhZ2Vfc2l6ZT0xNjM4NClcXG4rICAgICAgICBkYXRhX3BpcGUgPSAoZlxcXCJ5ZXMgJChlY2hvIC1lIFxcXFx4MDFcXFxceDAyXFxcXHgwM1xcXFx4MDRcXFxceDA1XFxcXHgwNikgfCBcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgIGZcXFwiaGVhZCAtYyB7c2l6ZX0gfCB7c29jYXR9XFxcIilcXG4rICAgICAgICB3aXRoIGJrZyhsaXN0ZW5fY21kLCBleGl0X3dhaXQ9VHJ1ZSwgbnM9bmV0bnMpIGFzIG5jZGV2bWVtOlxcbisgICAgICAgICAgICB3YWl0X3BvcnRfbGlzdGVuKHBvcnQsIHByb3RvPVxcXCJ0Y3BcXFwiLCBucz1uZXRucylcXG4rICAgICAgICAgICAgY21kKGRhdGFfcGlwZSwgaG9zdD1jZmcucmVtb3RlLCBzaGVsbD1UcnVlKVxcbisgICAgICAgIGtzZnRfZXEobmNkZXZtZW0ucmV0LCAwLFxcbisgICAgICAgICAgICAgICAgZlxcXCJsYXJnZS1uaW92IGZhaWxlZCBmb3IgcGF5bG9hZCBzaXplIHtzaXplfVxcXCIpXFxuK1xcbitcXG4gZGVmIHJ1bl9yeF9oZHMoY2ZnKTpcXG4gICAgIFxcXCJcXFwiXFxcIlJ1biB0aGUgSERTIHRlc3QgYnkgcnVubmluZyBkZXZtZW0gUlggYWNyb3NzIGEgc2VnbWVudCBzaXplIHN3ZWVwLlxcXCJcXFwiXFxcIlxcbiAgICAgcmVxdWlyZV9kZXZtZW0oY2ZnKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uY1xcbmluZGV4IGQ5NmU4YTNiNWE2NTI2Li5mZmU4ZWIwNWZhYzBkOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uY1xcbkBAIC00MCw2ICs0MCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRhcmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuQEAgLTYxLDYgKzYyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90aW1lLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9wYXJhbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJycXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkbWFidWYuaFxcdTAwM2VcXG5AQCAtNzksNiArODEsNyBAQFxcbiAjZGVmaW5lIFBBR0VfU0hJRlQgMTJcXG4gI2RlZmluZSBURVNUX1BSRUZJWCBcXFwibmNkZXZtZW1cXFwiXFxuICNkZWZpbmUgTlVNX1BBR0VTIDE2MDAwXFxuKyNkZWZpbmUgTUIoeCkgKCh4KSBcXHUwMDNjXFx1MDAzYyAyMClcXG4gXFxuICNpZm5kZWYgTVNHX1NPQ0tfREVWTUVNXFxuICNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFxcbkBAIC0xMDAsNiArMTAzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XFxuIHN0YXRpYyB1aW50MzJfdCB0eF9kbWFidWZfaWQ7XFxuIHN0YXRpYyBpbnQgd2FpdHRpbWVfbXMgPSA1MDA7XFxuIHN0YXRpYyBib29sIGZhaWxfb25fbGluZWFyO1xcbitzdGF0aWMgdWludDMyX3QgcnhfcGFnZV9zaXplO1xcbiBcXG4gLyogU3lzdGVtIHN0YXRlIGxvYWRlZCBieSBjdXJyZW50X2NvbmZpZ19sb2FkKCkgKi9cXG4gI2RlZmluZSBNQVhfRkxPV1NcXHQ4XFxuQEAgLTE0Miw2ICsxNDYsNyBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0c3RydWN0IHVkbWFidWZfY3JlYXRlIGNyZWF0ZTtcXG4gXFx0c3RydWN0IG1lbW9yeV9idWZmZXIgKmN0eDtcXG4rXFx0dW5zaWduZWQgaW50IG1lbWZkX2ZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0Y3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7XFxuQEAgLTE1Niw5ICsxNjEsMTQgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfYnVmZmVyICp1ZG1hYnVmX2FsbG9jKHNpemVfdCBzaXplKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlX2N0eDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4LVxcdTAwM2VtZW1mZCA9IG1lbWZkX2NyZWF0ZShcXFwidWRtYWJ1Zi10ZXN0XFxcIiwgTUZEX0FMTE9XX1NFQUxJTkcpO1xcbitcXHRtZW1mZF9mbGFncyA9IE1GRF9BTExPV19TRUFMSU5HO1xcbitcXHRpZiAocnhfcGFnZV9zaXplIFxcdTAwM2UgZ2V0cGFnZXNpemUoKSlcXG4rXFx0XFx0bWVtZmRfZmxhZ3MgfD0gTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUI7XFxuK1xcbitcXHRjdHgtXFx1MDAzZW1lbWZkID0gbWVtZmRfY3JlYXRlKFxcXCJ1ZG1hYnVmLXRlc3RcXFwiLCBtZW1mZF9mbGFncyk7XFxuIFxcdGlmIChjdHgtXFx1MDAzZW1lbWZkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIltza2lwLG5vLW1lbWZkXVxcXCIpO1xcbitcXHRcXHRwcl9lcnIoXFxcIltza2lwLG5vLW1lbWZkJXNdXFxcIixcXG4rXFx0XFx0ICAgICAgIChtZW1mZF9mbGFncyBcXHUwMDI2IE1GRF9IVUdFVExCKSA/IFxcXCIgKG5lZWQgaHVnZXBhZ2VzKVxcXCIgOiBcXFwiXFxcIik7XFxuIFxcdFxcdGdvdG8gZXJyX2Nsb3NlX2RldjtcXG4gXFx0fVxcbiBcXG5AQCAtMTY4LDYgKzE3OCwxMSBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXFxuIFxcdFxcdGdvdG8gZXJyX2Nsb3NlX21lbWZkO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobWVtZmRfZmxhZ3MgXFx1MDAyNiBNRkRfSFVHRVRMQikge1xcbitcXHRcXHRzaXplID0gcm91bmR1cChzaXplLCBNQigyKSk7XFxuK1xcdFxcdGN0eC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IGZ0cnVuY2F0ZShjdHgtXFx1MDAzZW1lbWZkLCBzaXplKTtcXG4gXFx0aWYgKHJldCA9PSAtMSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIltGQUlMLG1lbWZkLXRydW5jYXRlXVxcXCIpO1xcbkBAIC02OTksNiArNzE0LDggQEAgc3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxcbiBcXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X2lmaW5kZXgocmVxLCBpZmluZGV4KTtcXG4gXFx0bmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9mZChyZXEsIGRtYWJ1Zl9mZCk7XFxuIFxcdF9fbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9xdWV1ZXMocmVxLCBxdWV1ZXMsIG5fcXVldWVfaW5kZXgpO1xcbitcXHRpZiAocnhfcGFnZV9zaXplKVxcbitcXHRcXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X3J4X3BhZ2Vfc2l6ZShyZXEsIHJ4X3BhZ2Vfc2l6ZSk7XFxuIFxcbiBcXHRyc3AgPSBuZXRkZXZfYmluZF9yeCgqeXMsIHJlcSk7XFxuIFxcdGlmICghcnNwKSB7XFxuQEAgLTE0MTEsNyArMTQyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGludCBpc19zZXJ2ZXIgPSAwLCBvcHQ7XFxuIFxcdGludCByZXQsIGVyciA9IDE7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiTGxzOmM6cDp2OnE6dDpmOno6blxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiTGxzOmM6cDp2OnE6dDpmOno6bmI6XFxcIikpICE9IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAob3B0KSB7XFxuIFxcdFxcdGNhc2UgJ0wnOlxcbiBcXHRcXHRcXHRmYWlsX29uX2xpbmVhciA9IHRydWU7XFxuQEAgLTE0NDYsNiArMTQ2MywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRjYXNlICduJzpcXG4gXFx0XFx0XFx0c2tpcF9jb25maWcgPSAxO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnYic6IHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcbitcXHRcXHRcXHRlcnJubyA9IDA7XFxuK1xcdFxcdFxcdHZhbCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCh2YWwgPT0gVUxPTkdfTUFYIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVSQU5HRSkgfHxcXG4rXFx0XFx0XFx0ICAgIHZhbCBcXHUwMDNlIFVJTlQzMl9NQVgpIHtcXG4rXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJpbnZhbGlkIHJ4X3BhZ2Vfc2l6ZTogJXNcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyeF9wYWdlX3NpemUgPSB2YWw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgJz8nOlxcbiBcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInVua25vd24gb3B0aW9uOiAlY1xcXFxuXFxcIiwgb3B0b3B0KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weVxcbmluZGV4IDMwMGVkMmE3MGFiNDRkLi42MWM2ZjMxZjAxZTUxZSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcXG5AQCAtMyw3ICszLDggQEBcXG4gXFxcIlxcXCJcXFwiVGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LlxcXCJcXFwiXFxcIlxcbiBcXG4gaW1wb3J0IG9zXFxuLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHNcXG4rZnJvbSBkZXZtZW1fbGliIGltcG9ydCAoc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHMsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9yeF9sYXJnZV9uaW92KVxcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXFxuIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZDb250RW52XFxuIFxcbkBAIC0zMSw2ICszMiwxMSBAQCBkZWYgY2hlY2tfbmtfcnhfaGRzKGNmZykgLVxcdTAwM2UgTm9uZTpcXG4gICAgIHJ1bl9yeF9oZHMoY2ZnKVxcbiBcXG4gXFxuK2RlZiBjaGVja19ua19yeF9sYXJnZV9uaW92KGNmZykgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlJ1biB0aGUgZGV2bWVtIFJYIGxhcmdlLW5pb3YgdGVzdCB0aHJvdWdoIG5ldGtpdC5cXFwiXFxcIlxcXCJcXG4rICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZylcXG4rXFxuK1xcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gdGhlIG5ldGtpdCBkZXZtZW0gdGVzdCBjYXNlcy5cXFwiXFxcIlxcXCJcXG4gICAgIHdpdGggTmV0RHJ2Q29udEVudihfX2ZpbGVfXywgcnhxdWV1ZXM9MiwgcHJpbWFyeV9yeF9yZWRpcmVjdD1UcnVlKSBhcyBjZmc6XFxuQEAgLTM4LDcgKzQ0LDcgQEAgZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibmNkZXZtZW1cXFwiKSlcXG4gICAgICAgICBrc2Z0X3J1bihbY2hlY2tfbmtfcngsIGNoZWNrX25rX3R4LCBjaGVja19ua190eF9jaHVua3MsXFxuLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKVxcbisgICAgICAgICAgICAgICAgICBjaGVja19ua19yeF9oZHMsIGNoZWNrX25rX3J4X2xhcmdlX25pb3ZdLCBhcmdzPShjZmcsKSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MTguMjQ2NzA0NjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjAyOTQ5ODk0OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZTkNfRklMRVwiLFxuICAgIFwiVURNQUJVRlwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9ubF9iaW5kX3J4X2RvaXRcIixcbiAgICBcIm5ldGRldl9ubF9iaW5kX3R4X2RvaXRcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlXCIsXG4gICAgXCJuZXRfZGV2bWVtX2dldF9uaW92X2F0XCIsXG4gICAgXCJtcF9kbWFidWZfZGV2bWVtX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBSWCBwYWdlIHNpemUgZm9yIGRldm1lbSBUQ1AgdmlhIHRoZSBgcngtcGFnZS1zaXplYCBuZXRsaW5rIGF0dHJpYnV0ZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgZGV2bWVtIFRDUCBjb2RlIHRvIGhhbmRsZSBub24tUEFHRV9TSVpFIGFsbG9jYXRpb25zIGFuZCBtYXBwaW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHVzaW5nIG5ldGtpdCBvciB2ZXRoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmUzYWFjMjdjZDAwNDliNDVlMjJkNTE5OWE1ZWI0MjQ5OTY5ZjcwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA4OjQzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25ldGRldi55YW1sXG5pbmRleCA1ZjE0M2RhNzQ1OGNmYi4uMWVlNjQzNDJkZjExYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmV0ZGV2LnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9uZXRkZXYueWFtbFxuQEAgLTYsNiArNiwxMiBAQCBkb2M6IFx1MDAzZS1cbiAgIG5ldGRldiBjb25maWd1cmF0aW9uIG92ZXIgZ2VuZXJpYyBuZXRsaW5rLlxuIFxuIGRlZmluaXRpb25zOlxuKyAgLVxuKyAgICB0eXBlOiBjb25zdFxuKyAgICBuYW1lOiBwYWdlLXNpemVcbisgICAgdmFsdWU6IDAgICMgZHVtbXk6IGNvZGVnZW4gbmVlZHMgYSBudW1iZXIsIHJlYWwgdmFsdWUgaXMgdGhlIFBBR0VfU0laRSBtYWNybyAoaGVhZGVyKVxuKyAgICBoZWFkZXI6IGFzbS9wYWdlLmhcbisgICAgc2NvcGU6IGtlcm5lbFxuICAgLVxuICAgICB0eXBlOiBmbGFnc1xuICAgICBuYW1lOiB4ZHAtYWN0XG5AQCAtNTk4LDYgKzYwNCwxNiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgY2hlY2tzOlxuICAgICAgICAgICBtaW46IDFcbisgICAgICAtXG4rICAgICAgICBuYW1lOiByeC1wYWdlLXNpemVcbisgICAgICAgIGRvYzogfFxuKyAgICAgICAgICBTaXplIGluIGJ5dGVzIG9mIGVhY2ggZGV2aWNlIHBhZ2UgdGhlIE5JQyB3cml0ZXMgaW50byBmcm9tIHRoZSBib3VuZFxuKyAgICAgICAgICBkbWFidWYuIE11c3QgYmUgYSBwb3dlciBvZiB0d28gYW5kIFx1MDAzZT0gUEFHRV9TSVpFOyBkZWZhdWx0cyB0b1xuKyAgICAgICAgICBQQUdFX1NJWkUuXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGNoZWNrczpcbisgICAgICAgICAgbWluOiBwYWdlLXNpemVcbisgICAgICAgICAgbWF4OiB1MzItbWF4XG4gXG4gb3BlcmF0aW9uczpcbiAgIGxpc3Q6XG5AQCAtODEyLDYgKzgyOCw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBpZmluZGV4XG4gICAgICAgICAgICAgLSBmZFxuICAgICAgICAgICAgIC0gcXVldWVzXG4rICAgICAgICAgICAgLSByeC1wYWdlLXNpemVcbiAgICAgICAgIHJlcGx5OlxuICAgICAgICAgICBhdHRyaWJ1dGVzOlxuICAgICAgICAgICAgIC0gaWRcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbmluZGV4IDJmM2FiNzVlOGNjMGY2Li4zNWZmMDgzMjIxYzcxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5AQCAtMjE5LDYgKzIxOSw3IEBAIGVudW0ge1xuIFx0TkVUREVWX0FfRE1BQlVGX1FVRVVFUyxcbiBcdE5FVERFVl9BX0RNQUJVRl9GRCxcbiBcdE5FVERFVl9BX0RNQUJVRl9JRCxcbitcdE5FVERFVl9BX0RNQUJVRl9SWF9QQUdFX1NJWkUsXG4gXG4gXHRfX05FVERFVl9BX0RNQUJVRl9NQVgsXG4gXHRORVRERVZfQV9ETUFCVUZfTUFYID0gKF9fTkVUREVWX0FfRE1BQlVGX01BWCAtIDEpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmMgYi9uZXQvY29yZS9kZXZtZW0uY1xuaW5kZXggOTU3ZDZiOTYyMTZiMzMuLmIwMzZmMTRjYjIzYTE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmNcbisrKyBiL25ldC9jb3JlL2Rldm1lbS5jXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiBcbiBcdG93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XG4gXHRyZXR1cm4gb3duZXItXHUwMDNlYmFzZV9kbWFfYWRkciArXG4tXHQgICAgICAgKChkbWFfYWRkcl90KW5ldF9pb3ZfaWR4KG5pb3YpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdCAgICAgICAoKGRtYV9hZGRyX3QpbmV0X2lvdl9pZHgobmlvdikgXHUwMDNjXHUwMDNjIG93bmVyLVx1MDAzZWJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuQEAgLTkzLDEzICs5MywxNCBAQCBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiBcdHNzaXplX3Qgb2Zmc2V0O1xuIFx0c3NpemVfdCBpbmRleDtcbiBcbi1cdGRtYV9hZGRyID0gZ2VuX3Bvb2xfYWxsb2Nfb3duZXIoYmluZGluZy1cdTAwM2VjaHVua19wb29sLCBQQUdFX1NJWkUsXG4rXHRkbWFfYWRkciA9IGdlbl9wb29sX2FsbG9jX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCxcbitcdFx0XHRcdFx0MVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQsXG4gXHRcdFx0XHRcdCh2b2lkICoqKVx1MDAyNm93bmVyKTtcbiBcdGlmICghZG1hX2FkZHIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0b2Zmc2V0ID0gZG1hX2FkZHIgLSBvd25lci1cdTAwM2ViYXNlX2RtYV9hZGRyO1xuLVx0aW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7XG4rXHRpbmRleCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuIFx0bmlvdiA9IFx1MDAyNm93bmVyLVx1MDAzZWFyZWEubmlvdnNbaW5kZXhdO1xuIFxuIFx0bmlvdi1cdTAwM2VkZXNjLnBwX21hZ2ljID0gMDtcbkBAIC0xMTMsMTIgKzExNCwxMyBAQCB2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xuIFx0dW5zaWduZWQgbG9uZyBkbWFfYWRkciA9IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpO1xuK1x0c2l6ZV90IG5pb3Zfc2l6ZSA9IDFVTCBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuIFxuIFx0aWYgKFdBUk5fT04oIWdlbl9wb29sX2hhc19hZGRyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG4tXHRcdFx0XHQgICAgICAgUEFHRV9TSVpFKSkpXG4rXHRcdFx0XHQgICAgICAgbmlvdl9zaXplKSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cdTAwM2VjaHVua19wb29sLCBkbWFfYWRkciwgUEFHRV9TSVpFKTtcbitcdGdlbl9wb29sX2ZyZWUoYmluZGluZy1cdTAwM2VjaHVua19wb29sLCBkbWFfYWRkciwgbmlvdl9zaXplKTtcbiB9XG4gXG4gdm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG5AQCAtMTYzLDYgKzE2NSw5IEBAIGludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxuIFx0dTMyIHhhX2lkeDtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0ICE9IFBBR0VfU0hJRlQpXG4rXHRcdG1wX3BhcmFtcy5yeF9wYWdlX3NpemUgPSAxVSBcdTAwM2NcdTAwM2MgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0O1xuK1xuIFx0ZXJyID0gbmV0aWZfbXBfb3Blbl9yeHEoZGV2LCByeHFfaWR4LCBcdTAwMjZtcF9wYXJhbXMsIGV4dGFjayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE4NCwxMCArMTg5LDEyIEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXG4rXHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmc7XG4rXHRzaXplX3Qgbmlvdl9zaXplID0gMVVMIFx1MDAzY1x1MDAzYyBuaW92X3NoaWZ0O1xuIFx0c3RhdGljIHUzMiBpZF9hbGxvY19uZXh0O1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG5AQCAtMjEzLDYgKzIyMCw3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcbiBcdGJpbmRpbmctXHUwMDNlZGV2ID0gZGV2O1xuIFx0YmluZGluZy1cdTAwM2V2ZGV2ID0gdmRldjtcbitcdGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdCA9IG5pb3Zfc2hpZnQ7XG4gXHR4YV9pbml0X2ZsYWdzKFx1MDAyNmJpbmRpbmctXHUwMDNlYm91bmRfcnhxcywgWEFfRkxBR1NfQUxMT0MpO1xuIFxuIFx0ZXJyID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNmJpbmRpbmctXHUwMDNlcmVmLFxuQEAgLTI0OCwxOCArMjU2LDE0IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdFx0XHRnb3RvIGVycl91bm1hcDtcbiBcdFx0fVxuIFx0XHRiaW5kaW5nLVx1MDAzZXR4X3ZlYyA9IGt2bWFsbG9jX29ianMoc3RydWN0IG5ldF9pb3YgKixcbi1cdFx0XHRcdFx0XHRkbWFidWYtXHUwMDNlc2l6ZSAvIFBBR0VfU0laRSk7XG4rXHRcdFx0XHRcdFx0ZG1hYnVmLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIG5pb3Zfc2hpZnQpO1xuIFx0XHRpZiAoIWJpbmRpbmctXHUwMDNldHhfdmVjKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycl91bm1hcDtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0LyogRm9yIHNpbXBsaWNpdHkgd2UgZXhwZWN0IHRvIG1ha2UgUEFHRV9TSVpFIGFsbG9jYXRpb25zLCBidXQgdGhlXG4tXHQgKiBiaW5kaW5nIGNhbiBiZSBtdWNoIG1vcmUgZmxleGlibGUgdGhhbiB0aGF0LiBXZSBtYXkgYmUgYWJsZSB0b1xuLVx0ICogYWxsb2NhdGUgTVRVIHNpemVkIGNodW5rcyBoZXJlLiBMZWF2ZSB0aGF0IGZvciBmdXR1cmUgd29yay4uLlxuLVx0ICovXG4tXHRiaW5kaW5nLVx1MDAzZWNodW5rX3Bvb2wgPSBnZW5fcG9vbF9jcmVhdGUoUEFHRV9TSElGVCxcbitcdGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCA9IGdlbl9wb29sX2NyZWF0ZShuaW92X3NoaWZ0LFxuIFx0XHRcdFx0XHQgICAgICBkZXZfdG9fbm9kZShcdTAwMjZkZXYtXHUwMDNlZGV2KSk7XG4gXHRpZiAoIWJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuQEAgLTI3Myw5ICsyNzcsMTIgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHRzaXplX3QgbGVuID0gc2dfZG1hX2xlbihzZyk7XG4gXHRcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuIFxuLVx0XHRpZiAoIUlTX0FMSUdORUQobGVuLCBQQUdFX1NJWkUpKSB7XG4rXHRcdGlmICghSVNfQUxJR05FRChkbWFfYWRkciwgbmlvdl9zaXplKSB8fFxuK1x0XHQgICAgIUlTX0FMSUdORUQobGVuLCBuaW92X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiZG1hLWJ1ZiBTRyBsZW5ndGggbXVzdCBiZSBQQUdFX1NJWkUgYWxpZ25lZFwiKTtcbitcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcImRtYWJ1ZiBzZyBlbnRyeSAoYWRkcj0lcGFkLCBsZW49JXp1KSBub3QgYWxpZ25lZCB0byBuaW92IHNpemUgJXp1XCIsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmRtYV9hZGRyLCBsZW4sIG5pb3Zfc2l6ZSk7XG4gXHRcdFx0Z290byBlcnJfZnJlZV9jaHVua3M7XG4gXHRcdH1cbiBcbkBAIC0yODgsNyArMjk1LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFxuIFx0XHRvd25lci1cdTAwM2VhcmVhLmJhc2VfdmlydHVhbCA9IHZpcnR1YWw7XG4gXHRcdG93bmVyLVx1MDAzZWJhc2VfZG1hX2FkZHIgPSBkbWFfYWRkcjtcbi1cdFx0b3duZXItXHUwMDNlYXJlYS5udW1fbmlvdnMgPSBsZW4gLyBQQUdFX1NJWkU7XG4rXHRcdG93bmVyLVx1MDAzZWFyZWEubnVtX25pb3ZzID0gbGVuIFx1MDAzZVx1MDAzZSBuaW92X3NoaWZ0O1xuIFx0XHRvd25lci1cdTAwM2ViaW5kaW5nID0gYmluZGluZztcbiBcbiBcdFx0ZXJyID0gZ2VuX3Bvb2xfYWRkX293bmVyKGJpbmRpbmctXHUwMDNlY2h1bmtfcG9vbCwgZG1hX2FkZHIsXG5AQCAtMzEzLDcgKzMyMCw3IEBAIG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiBcdFx0XHRwYWdlX3Bvb2xfc2V0X2RtYV9hZGRyX25ldG1lbShuZXRfaW92X3RvX25ldG1lbShuaW92KSxcbiBcdFx0XHRcdFx0XHQgICAgICBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihuaW92KSk7XG4gXHRcdFx0aWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKVxuLVx0XHRcdFx0YmluZGluZy1cdTAwM2V0eF92ZWNbb3duZXItXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgLyBQQUdFX1NJWkUgKyBpXSA9IG5pb3Y7XG4rXHRcdFx0XHRiaW5kaW5nLVx1MDAzZXR4X3ZlY1sob3duZXItXHUwMDNlYXJlYS5iYXNlX3ZpcnR1YWwgXHUwMDNlXHUwMDNlIG5pb3Zfc2hpZnQpICsgaV0gPSBuaW92O1xuIFx0XHR9XG4gXG4gXHRcdHZpcnR1YWwgKz0gbGVuO1xuQEAgLTQzMCwxMyArNDM3LDE1IEBAIHN0cnVjdCBuZXRfaW92ICpcbiBuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuIFx0XHQgICAgICAgc2l6ZV90IHZpcnRfYWRkciwgc2l6ZV90ICpvZmYsIHNpemVfdCAqc2l6ZSlcbiB7XG4rXHRzaXplX3Qgbmlvdl9zaXplID0gMVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQ7XG4rXG4gXHRpZiAodmlydF9hZGRyIFx1MDAzZT0gYmluZGluZy1cdTAwM2VkbWFidWYtXHUwMDNlc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHQqb2ZmID0gdmlydF9hZGRyICUgUEFHRV9TSVpFO1xuLVx0KnNpemUgPSBQQUdFX1NJWkUgLSAqb2ZmO1xuK1x0Km9mZiA9IHZpcnRfYWRkciBcdTAwMjYgKG5pb3Zfc2l6ZSAtIDEpO1xuK1x0KnNpemUgPSBuaW92X3NpemUgLSAqb2ZmO1xuIFxuLVx0cmV0dXJuIGJpbmRpbmctXHUwMDNldHhfdmVjW3ZpcnRfYWRkciAvIFBBR0VfU0laRV07XG4rXHRyZXR1cm4gYmluZGluZy1cdTAwM2V0eF92ZWNbdmlydF9hZGRyIFx1MDAzZVx1MDAzZSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnRdO1xuIH1cbiBcbiAvKioqIFwiRG1hYnVmIGRldm1lbSBtZW1vcnkgcHJvdmlkZXJcIiAqKiovXG5AQCAtNDU0LDcgKzQ2Myw3IEBAIGludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcbiBcdHBvb2wtXHUwMDNlZG1hX3N5bmMgPSBmYWxzZTtcbiBcdHBvb2wtXHUwMDNlZG1hX3N5bmNfZm9yX2NwdSA9IGZhbHNlO1xuIFxuLVx0aWYgKHBvb2wtXHUwMDNlcC5vcmRlciAhPSAwKVxuK1x0aWYgKHBvb2wtXHUwMDNlcC5vcmRlciAhPSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUKVxuIFx0XHRyZXR1cm4gLUUyQklHO1xuIFxuIFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19nZXQoYmluZGluZyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2bWVtLmggYi9uZXQvY29yZS9kZXZtZW0uaFxuaW5kZXggMzg1MmE1NjAzNmNiNDAuLjRhMjkzYTdkMTE0OWM4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2bWVtLmhcbisrKyBiL25ldC9jb3JlL2Rldm1lbS5oXG5AQCAtNzEsNiArNzEsOCBAQCBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyB7XG4gXHQgKi9cbiBcdHN0cnVjdCBuZXRfaW92ICoqdHhfdmVjO1xuIFxuK1x0dW5zaWduZWQgaW50IG5pb3Zfc2hpZnQ7XG4rXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5iaW5kX3c7XG4gfTtcbiBcbkBAIC05Myw3ICs5NSw4IEBAIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbiBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuIFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXG4rXHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKTtcbiB2b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG5AQCAtMTIyLDEwICsxMjUsMTEgQEAgc3RhdGljIGlubGluZSB1MzIgbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4ge1xuLVx0c3RydWN0IG5ldF9pb3ZfYXJlYSAqb3duZXIgPSBuZXRfaW92X293bmVyKG5pb3YpO1xuK1x0c3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyICpjbyA9XG4rXHRcdG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xuIFxuLVx0cmV0dXJuIG93bmVyLVx1MDAzZWJhc2VfdmlydHVhbCArXG4tXHQgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdHJldHVybiBuZXRfaW92X293bmVyKG5pb3YpLVx1MDAzZWJhc2VfdmlydHVhbCArXG4rXHQgICAgICAgKCh1bnNpZ25lZCBsb25nKW5ldF9pb3ZfaWR4KG5pb3YpIFx1MDAzY1x1MDAzYyBjby1cdTAwM2ViaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2xcbkBAIC0xNzUsNiArMTc5LDcgQEAgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuIFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiBcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdCxcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfbmxfc29jayAqcHJpdixcbiBcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uY1xuaW5kZXggZDE4Yzg5YjVhNmM3NTkuLmY4Mzc5MDM0MWVhZTY4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmNcbisrKyBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jXG5AQCAtMTEsNiArMTEsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiBcbiAvKiBJbnRlZ2VyIHZhbHVlIHJhbmdlcyAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5ldGRldl9hX3BhZ2VfcG9vbF9pZF9yYW5nZSA9IHtcbkBAIC0yNyw2ICsyOCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBuZXRkZXZfYV9uYXBpX2RlZmVyX2hhcmRfaXJxc19yYW5nZVxuIFx0Lm1heFx0PSBTMzJfTUFYLFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmV0ZGV2X2FfZG1hYnVmX3J4X3BhZ2Vfc2l6ZV9yYW5nZSA9IHtcbitcdC5taW5cdD0gUEFHRV9TSVpFLFxuK1x0Lm1heFx0PSBVMzJfTUFYLFxuK307XG4rXG4gLyogQ29tbW9uIG5lc3RlZCB0eXBlcyAqL1xuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9sZWFzZV9ubF9wb2xpY3lbTkVUREVWX0FfTEVBU0VfTkVUTlNfSUQgKyAxXSA9IHtcbiBcdFtORVRERVZfQV9MRUFTRV9JRklOREVYXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9VMzIsIDEpLFxuQEAgLTEwNiwxMCArMTEyLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfcXN0YXRzX2dldF9ubF9wb2xpY3lbTkVUREVWX0FfUVNUQVRTX1NDT1BFXG4gfTtcbiBcbiAvKiBORVRERVZfQ01EX0JJTkRfUlggLSBkbyAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZXRkZXZfYmluZF9yeF9ubF9wb2xpY3lbTkVUREVWX0FfRE1BQlVGX0ZEICsgMV0gPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeVtORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFICsgMV0gPSB7XG4gXHRbTkVUREVWX0FfRE1BQlVGX0lGSU5ERVhdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXG4gXHRbTkVUREVWX0FfRE1BQlVGX0ZEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuIFx0W05FVERFVl9BX0RNQUJVRl9RVUVVRVNdID0gTkxBX1BPTElDWV9ORVNURUQobmV0ZGV2X3F1ZXVlX2lkX25sX3BvbGljeSksXG4rXHRbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXHUwMDI2bmV0ZGV2X2FfZG1hYnVmX3J4X3BhZ2Vfc2l6ZV9yYW5nZSksXG4gfTtcbiBcbiAvKiBORVRERVZfQ01EX05BUElfU0VUIC0gZG8gKi9cbkBAIC0yMTksNyArMjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XG4gXHRcdC5jbWRcdFx0PSBORVRERVZfQ01EX0JJTkRfUlgsXG4gXHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcbiBcdFx0LnBvbGljeVx0XHQ9IG5ldGRldl9iaW5kX3J4X25sX3BvbGljeSxcbi1cdFx0Lm1heGF0dHJcdD0gTkVUREVWX0FfRE1BQlVGX0ZELFxuK1x0XHQubWF4YXR0clx0PSBORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLFxuIFx0XHQuZmxhZ3NcdFx0PSBHRU5MX1VOU19BRE1JTl9QRVJNIHwgR0VOTF9DTURfQ0FQX0RPLFxuIFx0fSxcbiBcdHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaCBiL25ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oXG5pbmRleCBkNzFiNDM1ZDcyYzE4Zi4uM2ZhZTg4ZThmNWM1MGUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaFxuKysrIGIvbmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuIC8qIENvbW1vbiBuZXN0ZWQgdHlwZXMgKi9cbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmV0ZGV2X2xlYXNlX25sX3BvbGljeVtORVRERVZfQV9MRUFTRV9ORVROU19JRCArIDFdO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldi1nZW5sLmMgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5pbmRleCBjMTVkOGQ0Y2ExZjhmYS4uMGVlYTRlZTIyZjI0NjcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG4rKysgYi9uZXQvY29yZS9uZXRkZXYtZ2VubC5jXG5AQCAtMTAxMyw2ICsxMDEzLDcgQEAgbmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXG4gaW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbitcdHVuc2lnbmVkIGludCBuaW92X3NoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHUzMiBpZmluZGV4LCBkbWFidWZfZmQsIHJ4cV9pZHg7XG4gXHRzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuQEAgLTEwMzAsNiArMTAzMSwxOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWZpbmRleCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfREVWX0lGSU5ERVhdKTtcbiBcdGRtYWJ1Zl9mZCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfRE1BQlVGX0ZEXSk7XG4gXG4rXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSkge1xuK1x0XHR1MzIgcnhfcGFnZV9zaXplID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFXSk7XG4rXG4rXHRcdGlmICghaXNfcG93ZXJfb2ZfMihyeF9wYWdlX3NpemUpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRV0sXG4rXHRcdFx0XHRcdCAgICBcInJ4LXBhZ2Utc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMlwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRuaW92X3NoaWZ0ID0gaWxvZzIocnhfcGFnZV9zaXplKTtcbitcdH1cbitcbiBcdHByaXYgPSBnZW5sX3NrX3ByaXZfZ2V0KFx1MDAyNm5ldGRldl9ubF9mYW1pbHksIE5FVExJTktfQ0Ioc2tiKS5zayk7XG4gXHRpZiAoSVNfRVJSKHByaXYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2KTtcbkBAIC0xMDgwLDcgKzEwOTMsOCBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0fVxuIFxuIFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYobmV0ZGV2LCBOVUxMLCBkbWFfZGV2LCBETUFfRlJPTV9ERVZJQ0UsXG4tXHRcdFx0XHRcdCBkbWFidWZfZmQsIHByaXYsIGluZm8tXHUwMDNlZXh0YWNrKTtcbitcdFx0XHRcdFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcbitcdFx0XHRcdFx0IGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcbiBcdFx0Z290byBlcnJfcnhxX2JpdG1hcDtcbkBAIC0xMjIxLDcgKzEyMzUsNyBAQCBpbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXG4gXHRcdFx0XHRcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxuIFx0XHRcdFx0XHQgZG1hX2RldiwgRE1BX1RPX0RFVklDRSwgZG1hYnVmX2ZkLFxuLVx0XHRcdFx0XHQgcHJpdiwgaW5mby1cdTAwM2VleHRhY2spO1xuK1x0XHRcdFx0XHQgUEFHRV9TSElGVCwgcHJpdiwgaW5mby1cdTAwM2VleHRhY2spO1xuIFx0aWYgKElTX0VSUihiaW5kaW5nKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xuIFx0XHRnb3RvIGVycl91bmxvY2tfYmluZF9kZXY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L25ldGRldi5oXG5pbmRleCAyZjNhYjc1ZThjYzBmNi4uMzVmZjA4MzIyMWM3MTkgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZGV2LmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9uZXRkZXYuaFxuQEAgLTIxOSw2ICsyMTksNyBAQCBlbnVtIHtcbiBcdE5FVERFVl9BX0RNQUJVRl9RVUVVRVMsXG4gXHRORVRERVZfQV9ETUFCVUZfRkQsXG4gXHRORVRERVZfQV9ETUFCVUZfSUQsXG4rXHRORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFLFxuIFxuIFx0X19ORVRERVZfQV9ETUFCVUZfTUFYLFxuIFx0TkVUREVWX0FfRE1BQlVGX01BWCA9IChfX05FVERFVl9BX0RNQUJVRl9NQVggLSAxKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbS5weVxuaW5kZXggMDMxY2Y5OTA1ZjY1MWMuLjgyYzExZmZjNGFkZDdiIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvZGV2bWVtLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW0ucHlcbkBAIC0yLDcgKzIsOCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiBmcm9tIG9zIGltcG9ydCBwYXRoXG4tZnJvbSBkZXZtZW1fbGliIGltcG9ydCBzZXR1cF90ZXN0LCBydW5fcngsIHJ1bl90eCwgcnVuX3R4X2NodW5rcywgcnVuX3J4X2hkc1xuK2Zyb20gZGV2bWVtX2xpYiBpbXBvcnQgKHNldHVwX3Rlc3QsIHJ1bl9yeCwgcnVuX3R4LCBydW5fdHhfY2h1bmtzLCBydW5fcnhfaGRzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9yeF9sYXJnZV9uaW92KVxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X2Rpc3J1cHRpdmVcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnZcbiBcbkBAIC0zMCwxMSArMzEsMTcgQEAgZGVmIGNoZWNrX3J4X2hkcyhjZmcpIC1cdTAwM2UgTm9uZTpcbiAgICAgcnVuX3J4X2hkcyhjZmcpXG4gXG4gXG4rZGVmIGNoZWNrX3J4X2xhcmdlX25pb3YoY2ZnKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlJ1biB0aGUgZGV2bWVtIFJYIHRlc3Qgd2l0aCByeC1wYWdlLXNpemUgPSAxNiBLaUIuXCJcIlwiXG4rICAgIHJ1bl9yeF9sYXJnZV9uaW92KGNmZylcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiUnVuIHRoZSBkZXZtZW0gdGVzdCBjYXNlcy5cIlwiXCJcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuICAgICAgICAgc2V0dXBfdGVzdChjZmcsIHBhdGguYWJzcGF0aChwYXRoLmRpcm5hbWUoX19maWxlX18pICsgXCIvbmNkZXZtZW1cIikpXG4tICAgICAgICBrc2Z0X3J1bihbY2hlY2tfcngsIGNoZWNrX3R4LCBjaGVja190eF9jaHVua3MsIGNoZWNrX3J4X2hkc10sXG4rICAgICAgICBrc2Z0X3J1bihbY2hlY2tfcngsIGNoZWNrX3R4LCBjaGVja190eF9jaHVua3MsIGNoZWNrX3J4X2hkcyxcbisgICAgICAgICAgICAgICAgICBjaGVja19yeF9sYXJnZV9uaW92XSxcbiAgICAgICAgICAgICAgICAgIGFyZ3M9KGNmZywpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2Rldm1lbV9saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5pbmRleCAwOTIxZmYwM2ViODFjNS4uNmM5MzIwMThiNDYzYTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9kZXZtZW1fbGliLnB5XG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lLHRvby1tYW55LWFyZ3VtZW50c1xuIFwiXCJcIlNoYXJlZCBoZWxwZXJzIGZvciBkZXZtZW0gVENQIHNlbGZ0ZXN0cy5cIlwiXCJcbiBcbiBpbXBvcnQgcmVcbkBAIC04LDcgKzksNyBAQCBmcm9tIGxpYi5weSBpbXBvcnQgKGJrZywgY21kLCBkZWZlciwgZXRodG9vbCwgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuLFxuICAgICAgICAgICAgICAgICAgICAgTmV0ZGV2RmFtaWx5KVxuIFxuIFxuLWRlZiByZXF1aXJlX2Rldm1lbShjZmcpOlxuK2RlZiByZXF1aXJlX2Rldm1lbShjZmcsIHJ4X3BhZ2Vfc2l6ZT0wKTpcbiAgICAgXCJcIlwiUHJvYmUgbmNkZXZtZW0gb24gY2ZnLmlmbmFtZSBhbmQgU0tJUCB0aGUgdGVzdCBpZiBkZXZtZW0gaXNuJ3Qgc3VwcG9ydGVkLlwiXCJcIlxuICAgICBpZiBub3QgaGFzYXR0cihjZmcsIFwiZGV2bWVtX3Byb2JlZFwiKTpcbiAgICAgICAgIHByb2JlX2NvbW1hbmQgPSBmXCJ7Y2ZnLmJpbl9sb2NhbH0gLWYge2NmZy5pZm5hbWV9XCJcbkBAIC0xOCw2ICsxOSwxOSBAQCBkZWYgcmVxdWlyZV9kZXZtZW0oY2ZnKTpcbiAgICAgaWYgbm90IGNmZy5kZXZtZW1fc3VwcG9ydGVkOlxuICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIlRlc3QgcmVxdWlyZXMgZGV2bWVtIHN1cHBvcnRcIilcbiBcbisgICAgaWYgcnhfcGFnZV9zaXplIFx1MDAzZSAwOlxuKyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCBcImRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkXCIpOlxuKyAgICAgICAgICAgIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZCA9IHt9XG4rXG4rICAgICAgICBpZiByeF9wYWdlX3NpemUgbm90IGluIGNmZy5kZXZtZW1fcnhfcGFnZV9zaXplX3Byb2JlZDpcbisgICAgICAgICAgICBwcm9iZV9jb21tYW5kID0gZlwie2NmZy5iaW5fbG9jYWx9IC1mIHtjZmcuaWZuYW1lfSAtYiB7cnhfcGFnZV9zaXplfVwiXG4rICAgICAgICAgICAgY2ZnLmRldm1lbV9yeF9wYWdlX3NpemVfcHJvYmVkW3J4X3BhZ2Vfc2l6ZV0gPSBcXFxuKyAgICAgICAgICAgICAgICBjbWQocHJvYmVfY29tbWFuZCwgZmFpbD1GYWxzZSwgc2hlbGw9VHJ1ZSkucmV0ID09IDBcbitcbisgICAgICAgIGlmIG5vdCBjZmcuZGV2bWVtX3J4X3BhZ2Vfc2l6ZV9wcm9iZWRbcnhfcGFnZV9zaXplXTpcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuKyAgICAgICAgICAgICAgICBmXCJUZXN0IHJlcXVpcmVzIGRldm1lbSByeC1wYWdlLXNpemU9e3J4X3BhZ2Vfc2l6ZX0gc3VwcG9ydFwiKVxuK1xuIFxuIGRlZiBjb25maWd1cmVfbmljKGNmZyk6XG4gICAgIFwiXCJcIkNoYW5uZWxzLCByaW5ncywgUlNTLCBxdWV1ZSBsZWFzZSBmb3IgbmV0a2l0IGRldm1lbS5cIlwiXCJcbkBAIC03Niw3ICs5MCw4IEBAIGRlZiBzZXRfZmxvd19ydWxlKGNmZywgcG9ydCk6XG4gICAgIHJldHVybiBpbnQocmUuc2VhcmNoKHInSUQgKFxcZCspJywgb3V0cHV0KS5ncm91cCgxKSlcbiBcbiBcbi1kZWYgbmNkZXZtZW1fcngoY2ZnLCBwb3J0LCB2ZXJpZnk9VHJ1ZSwgZmFpbF9vbl9saW5lYXI9RmFsc2UsIGZsb3dfc3RlZXI9RmFsc2UpOlxuK2RlZiBuY2Rldm1lbV9yeChjZmcsIHBvcnQsIHZlcmlmeT1UcnVlLCBmYWlsX29uX2xpbmVhcj1GYWxzZSwgZmxvd19zdGVlcj1GYWxzZSxcbisgICAgICAgICAgICAgICAgcnhfcGFnZV9zaXplPTApOlxuICAgICBcIlwiXCJCdWlsZCB0aGUgbmNkZXZtZW0gUlggbGlzdGVuZXIgY29tbWFuZC5cIlwiXCJcbiAgICAgaWYgaGFzYXR0cihjZmcsICduZXRucycpOlxuICAgICAgICAgZmxvd19ydWxlX2lkID0gc2V0X2Zsb3dfcnVsZShjZmcsIHBvcnQpXG5AQCAtOTYsNiArMTExLDggQEAgZGVmIG5jZGV2bWVtX3J4KGNmZywgcG9ydCwgdmVyaWZ5PVRydWUsIGZhaWxfb25fbGluZWFyPUZhbHNlLCBmbG93X3N0ZWVyPUZhbHNlKTpcbiAgICAgICAgIGV4dHJhcy5hcHBlbmQoXCItdiA3XCIpXG4gICAgIGlmIGZhaWxfb25fbGluZWFyOlxuICAgICAgICAgZXh0cmFzLmFwcGVuZChcIi1MXCIpXG4rICAgIGlmIHJ4X3BhZ2Vfc2l6ZSBcdTAwM2UgMDpcbisgICAgICAgIGV4dHJhcy5hcHBlbmQoZlwiLWIge3J4X3BhZ2Vfc2l6ZX1cIilcbiBcbiAgICAgcGFydHMgPSBbY2ZnLmJpbl9sb2NhbCwgXCItbFwiLCBmXCItZiB7aWZuYW1lfVwiLCBmXCItcyB7YWRkcn1cIixcbiAgICAgICAgICAgICAgZlwiLXAge3BvcnR9XCIsICpleHRyYXNdXG5AQCAtMjAyLDYgKzIxOSw0NCBAQCBkZWYgcnVuX3R4X2NodW5rcyhjZmcpOlxuICAgICBrc2Z0X2VxKHNvY2F0LnN0ZG91dC5zdHJpcCgpLCBcImhlbGxvXFxud29ybGRcIilcbiBcbiBcbitkZWYgX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzKGhwX2ZpbGUsIG5yX2h1Z2VwYWdlcyk6XG4rICAgIHdpdGggb3BlbihocF9maWxlLCAndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6XG4rICAgICAgICBmLndyaXRlKHN0cihucl9odWdlcGFnZXMpKVxuK1xuK1xuK2RlZiBydW5fcnhfbGFyZ2VfbmlvdihjZmcpOlxuKyAgICBcIlwiXCJSdW4gdGhlIGRldm1lbSBSWCB0ZXN0IHdpdGggYSBsYXJnZSBuaW92IChyeC1wYWdlLXNpemUgXHUwMDNlIFBBR0VfU0laRSkuXG4rXG4rICAgIFN3ZWVwIHBheWxvYWQgc2l6ZXMgdGhhdCBzdHJhZGRsZSB0aGUgbmlvdiBib3VuZGFyeTogYmVsb3csIGVxdWFsIHRvLFxuKyAgICBhbmQgYWJvdmUgcnhfcGFnZV9zaXplLCB0byBleGVyY2lzZSBzdWItbmlvdiwgZXhhY3QtbmlvdiwgYW5kIG11bHRpLW5pb3ZcbisgICAgUlggcGF0aHMuXG4rICAgIFwiXCJcIlxuKyAgICBocF9maWxlID0gXCIvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzXCJcbisgICAgd2l0aCBvcGVuKGhwX2ZpbGUsICdyKycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6XG4rICAgICAgICBucl9odWdlcGFnZXMgPSBpbnQoZi5yZWFkKCkuc3RyaXAoKSlcbisgICAgICAgIGlmIG5yX2h1Z2VwYWdlcyBcdTAwM2MgNjQ6XG4rICAgICAgICAgICAgZi5zZWVrKDApXG4rICAgICAgICAgICAgZi53cml0ZShcIjY0XCIpXG4rICAgICAgICAgICAgZGVmZXIoX3Jlc3RvcmVfbnJfaHVnZXBhZ2VzLCBocF9maWxlLCBucl9odWdlcGFnZXMpXG4rICAgIHJlcXVpcmVfZGV2bWVtKGNmZywgcnhfcGFnZV9zaXplPTE2Mzg0KVxuKyAgICBjb25maWd1cmVfbmljKGNmZylcbisgICAgbmV0bnMgPSBnZXRhdHRyKGNmZywgXCJuZXRuc1wiLCBOb25lKVxuK1xuKyAgICBmb3Igc2l6ZSBpbiBbMTAyNCwgNDA5NiwgODE5MiwgMTYzODQsIDMyNzY4LCA2NTUzNl06XG4rICAgICAgICBwb3J0ID0gcmFuZF9wb3J0KClcbisgICAgICAgIHNvY2F0ID0gc29jYXRfc2VuZChjZmcsIHBvcnQpXG4rICAgICAgICBsaXN0ZW5fY21kID0gbmNkZXZtZW1fcngoY2ZnLCBwb3J0LFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dfc3RlZXI9bm90IG5ldG5zLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3BhZ2Vfc2l6ZT0xNjM4NClcbisgICAgICAgIGRhdGFfcGlwZSA9IChmXCJ5ZXMgJChlY2hvIC1lIFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNikgfCBcIlxuKyAgICAgICAgICAgICAgICAgICAgIGZcImhlYWQgLWMge3NpemV9IHwge3NvY2F0fVwiKVxuKyAgICAgICAgd2l0aCBia2cobGlzdGVuX2NtZCwgZXhpdF93YWl0PVRydWUsIG5zPW5ldG5zKSBhcyBuY2Rldm1lbTpcbisgICAgICAgICAgICB3YWl0X3BvcnRfbGlzdGVuKHBvcnQsIHByb3RvPVwidGNwXCIsIG5zPW5ldG5zKVxuKyAgICAgICAgICAgIGNtZChkYXRhX3BpcGUsIGhvc3Q9Y2ZnLnJlbW90ZSwgc2hlbGw9VHJ1ZSlcbisgICAgICAgIGtzZnRfZXEobmNkZXZtZW0ucmV0LCAwLFxuKyAgICAgICAgICAgICAgICBmXCJsYXJnZS1uaW92IGZhaWxlZCBmb3IgcGF5bG9hZCBzaXplIHtzaXplfVwiKVxuK1xuK1xuIGRlZiBydW5fcnhfaGRzKGNmZyk6XG4gICAgIFwiXCJcIlJ1biB0aGUgSERTIHRlc3QgYnkgcnVubmluZyBkZXZtZW0gUlggYWNyb3NzIGEgc2VnbWVudCBzaXplIHN3ZWVwLlwiXCJcIlxuICAgICByZXF1aXJlX2Rldm1lbShjZmcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbmluZGV4IGQ5NmU4YTNiNWE2NTI2Li5mZmU4ZWIwNWZhYzBkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbkBAIC02MSw2ICs2Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZG1hYnVmLmhcdTAwM2VcbkBAIC03OSw2ICs4MSw3IEBAXG4gI2RlZmluZSBQQUdFX1NISUZUIDEyXG4gI2RlZmluZSBURVNUX1BSRUZJWCBcIm5jZGV2bWVtXCJcbiAjZGVmaW5lIE5VTV9QQUdFUyAxNjAwMFxuKyNkZWZpbmUgTUIoeCkgKCh4KSBcdTAwM2NcdTAwM2MgMjApXG4gXG4gI2lmbmRlZiBNU0dfU09DS19ERVZNRU1cbiAjZGVmaW5lIE1TR19TT0NLX0RFVk1FTSAweDIwMDAwMDBcbkBAIC0xMDAsNiArMTAzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkbWFidWZfaWQ7XG4gc3RhdGljIHVpbnQzMl90IHR4X2RtYWJ1Zl9pZDtcbiBzdGF0aWMgaW50IHdhaXR0aW1lX21zID0gNTAwO1xuIHN0YXRpYyBib29sIGZhaWxfb25fbGluZWFyO1xuK3N0YXRpYyB1aW50MzJfdCByeF9wYWdlX3NpemU7XG4gXG4gLyogU3lzdGVtIHN0YXRlIGxvYWRlZCBieSBjdXJyZW50X2NvbmZpZ19sb2FkKCkgKi9cbiAjZGVmaW5lIE1BWF9GTE9XU1x0OFxuQEAgLTE0Miw2ICsxNDYsNyBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXG4ge1xuIFx0c3RydWN0IHVkbWFidWZfY3JlYXRlIGNyZWF0ZTtcbiBcdHN0cnVjdCBtZW1vcnlfYnVmZmVyICpjdHg7XG4rXHR1bnNpZ25lZCBpbnQgbWVtZmRfZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Y3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSk7XG5AQCAtMTU2LDkgKzE2MSwxNCBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV9idWZmZXIgKnVkbWFidWZfYWxsb2Moc2l6ZV90IHNpemUpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfY3R4O1xuIFx0fVxuIFxuLVx0Y3R4LVx1MDAzZW1lbWZkID0gbWVtZmRfY3JlYXRlKFwidWRtYWJ1Zi10ZXN0XCIsIE1GRF9BTExPV19TRUFMSU5HKTtcbitcdG1lbWZkX2ZsYWdzID0gTUZEX0FMTE9XX1NFQUxJTkc7XG4rXHRpZiAocnhfcGFnZV9zaXplIFx1MDAzZSBnZXRwYWdlc2l6ZSgpKVxuK1x0XHRtZW1mZF9mbGFncyB8PSBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzJNQjtcbitcbitcdGN0eC1cdTAwM2VtZW1mZCA9IG1lbWZkX2NyZWF0ZShcInVkbWFidWYtdGVzdFwiLCBtZW1mZF9mbGFncyk7XG4gXHRpZiAoY3R4LVx1MDAzZW1lbWZkIFx1MDAzYyAwKSB7XG4tXHRcdHByX2VycihcIltza2lwLG5vLW1lbWZkXVwiKTtcbitcdFx0cHJfZXJyKFwiW3NraXAsbm8tbWVtZmQlc11cIixcbitcdFx0ICAgICAgIChtZW1mZF9mbGFncyBcdTAwMjYgTUZEX0hVR0VUTEIpID8gXCIgKG5lZWQgaHVnZXBhZ2VzKVwiIDogXCJcIik7XG4gXHRcdGdvdG8gZXJyX2Nsb3NlX2RldjtcbiBcdH1cbiBcbkBAIC0xNjgsNiArMTc4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqdWRtYWJ1Zl9hbGxvYyhzaXplX3Qgc2l6ZSlcbiBcdFx0Z290byBlcnJfY2xvc2VfbWVtZmQ7XG4gXHR9XG4gXG4rXHRpZiAobWVtZmRfZmxhZ3MgXHUwMDI2IE1GRF9IVUdFVExCKSB7XG4rXHRcdHNpemUgPSByb3VuZHVwKHNpemUsIE1CKDIpKTtcbitcdFx0Y3R4LVx1MDAzZXNpemUgPSBzaXplO1xuK1x0fVxuK1xuIFx0cmV0ID0gZnRydW5jYXRlKGN0eC1cdTAwM2VtZW1mZCwgc2l6ZSk7XG4gXHRpZiAocmV0ID09IC0xKSB7XG4gXHRcdHByX2VycihcIltGQUlMLG1lbWZkLXRydW5jYXRlXVwiKTtcbkBAIC02OTksNiArNzE0LDggQEAgc3RhdGljIGludCBiaW5kX3J4X3F1ZXVlKHVuc2lnbmVkIGludCBpZmluZGV4LCB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxuIFx0bmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9pZmluZGV4KHJlcSwgaWZpbmRleCk7XG4gXHRuZXRkZXZfYmluZF9yeF9yZXFfc2V0X2ZkKHJlcSwgZG1hYnVmX2ZkKTtcbiBcdF9fbmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9xdWV1ZXMocmVxLCBxdWV1ZXMsIG5fcXVldWVfaW5kZXgpO1xuK1x0aWYgKHJ4X3BhZ2Vfc2l6ZSlcbitcdFx0bmV0ZGV2X2JpbmRfcnhfcmVxX3NldF9yeF9wYWdlX3NpemUocmVxLCByeF9wYWdlX3NpemUpO1xuIFxuIFx0cnNwID0gbmV0ZGV2X2JpbmRfcngoKnlzLCByZXEpO1xuIFx0aWYgKCFyc3ApIHtcbkBAIC0xNDExLDcgKzE0MjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aW50IGlzX3NlcnZlciA9IDAsIG9wdDtcbiBcdGludCByZXQsIGVyciA9IDE7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIkxsczpjOnA6djpxOnQ6Zjp6Om5cIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIkxsczpjOnA6djpxOnQ6Zjp6Om5iOlwiKSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAnTCc6XG4gXHRcdFx0ZmFpbF9vbl9saW5lYXIgPSB0cnVlO1xuQEAgLTE0NDYsNiArMTQ2MywxOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRza2lwX2NvbmZpZyA9IDE7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2InOiB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyB2YWw7XG4rXG4rXHRcdFx0ZXJybm8gPSAwO1xuK1x0XHRcdHZhbCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoKHZhbCA9PSBVTE9OR19NQVggXHUwMDI2XHUwMDI2IGVycm5vID09IEVSQU5HRSkgfHxcbitcdFx0XHQgICAgdmFsIFx1MDAzZSBVSU5UMzJfTUFYKSB7XG4rXHRcdFx0XHRwcl9lcnIoXCJpbnZhbGlkIHJ4X3BhZ2Vfc2l6ZTogJXNcIiwgb3B0YXJnKTtcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdH1cbitcdFx0XHRyeF9wYWdlX3NpemUgPSB2YWw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0Y2FzZSAnPyc6XG4gXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwidW5rbm93biBvcHRpb246ICVjXFxuXCIsIG9wdG9wdCk7XG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZGV2bWVtLnB5XG5pbmRleCAzMDBlZDJhNzBhYjQ0ZC4uNjFjNmYzMWYwMWU1MWUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19kZXZtZW0ucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2Rldm1lbS5weVxuQEAgLTMsNyArMyw4IEBAXG4gXCJcIlwiVGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LlwiXCJcIlxuIFxuIGltcG9ydCBvc1xuLWZyb20gZGV2bWVtX2xpYiBpbXBvcnQgc2V0dXBfdGVzdCwgcnVuX3J4LCBydW5fdHgsIHJ1bl90eF9jaHVua3MsIHJ1bl9yeF9oZHNcbitmcm9tIGRldm1lbV9saWIgaW1wb3J0IChzZXR1cF90ZXN0LCBydW5fcngsIHJ1bl90eCwgcnVuX3R4X2NodW5rcywgcnVuX3J4X2hkcyxcbisgICAgICAgICAgICAgICAgICAgICAgICBydW5fcnhfbGFyZ2VfbmlvdilcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9kaXNydXB0aXZlXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkNvbnRFbnZcbiBcbkBAIC0zMSw2ICszMiwxMSBAQCBkZWYgY2hlY2tfbmtfcnhfaGRzKGNmZykgLVx1MDAzZSBOb25lOlxuICAgICBydW5fcnhfaGRzKGNmZylcbiBcbiBcbitkZWYgY2hlY2tfbmtfcnhfbGFyZ2VfbmlvdihjZmcpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiUnVuIHRoZSBkZXZtZW0gUlggbGFyZ2UtbmlvdiB0ZXN0IHRocm91Z2ggbmV0a2l0LlwiXCJcIlxuKyAgICBydW5fcnhfbGFyZ2VfbmlvdihjZmcpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIlJ1biB0aGUgbmV0a2l0IGRldm1lbSB0ZXN0IGNhc2VzLlwiXCJcIlxuICAgICB3aXRoIE5ldERydkNvbnRFbnYoX19maWxlX18sIHJ4cXVldWVzPTIsIHByaW1hcnlfcnhfcmVkaXJlY3Q9VHJ1ZSkgYXMgY2ZnOlxuQEAgLTM4LDcgKzQ0LDcgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5jZGV2bWVtXCIpKVxuICAgICAgICAga3NmdF9ydW4oW2NoZWNrX25rX3J4LCBjaGVja19ua190eCwgY2hlY2tfbmtfdHhfY2h1bmtzLFxuLSAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkc10sIGFyZ3M9KGNmZywpKVxuKyAgICAgICAgICAgICAgICAgIGNoZWNrX25rX3J4X2hkcywgY2hlY2tfbmtfcnhfbGFyZ2Vfbmlvdl0sIGFyZ3M9KGNmZywpKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MTguMjQ2NzA4MjQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0Mjg2NzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJYIFBhZ2UgU2l6ZSBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBhIG5ldyBgcngtcGFnZS1zaXplYCBhdHRyaWJ1dGUgd2l0aGluIHRoZSBuZXRkZXYgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYE5FVERFVl9DTURfQklORF9SWGAgY29tbWFuZC4gVGhlIGlkZWEgaXMgdG8gbGV0IHVzIGNvbmZpZ3VyZSB0aGUgcGFnZSBzaXplIHRoYXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgdXNlcyB3aGVuIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSBib3VuZCBETUEgYnVmZmVyLiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgdGFyZ2V0ZWQgZmVhdHVyZSwgZm9jdXNlZCBvbiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIERNQSBidWZmZXIgYmVoYXZpb3IuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1bmN0aW9uYWw/IExvb2tpbmcgZGVlcGVyLCBpdCdzIG1vZGlmeWluZyBjb3JlIG5ldHdvcmtpbmcgZmlsZXM6IGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYC4gT2theSwgc28gaXQncyBub3Qgc29tZSBvYnNjdXJlLCBuaWNoZSBkcml2ZXI7IHRoaXMgaXMgdG91Y2hpbmcgdGhlIGFjdHVhbCBkZXZtZW0gVENQIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgYSBzb2xpZCB2b3RlIG9mIGNvbmZpZGVuY2UuXG5cbk5leHQgcXVlc3Rpb246IGlzIHRoaXMgdGVzdGFibGUgYW5kIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBXZSdyZSBvZnRlbiBzdHVjayB3aXRoIHRlc3RpbmcgdGhlc2UgbG93ZXItbGV2ZWwgdGhpbmdzIG9uIHJlYWwgaGFyZHdhcmUsIHdoaWNoIGlzIGEgcGFpbi4gQnV0IGhvbGQgb24uLi4gaXQgbWVudGlvbnMgYG5ldGtpdGAgYW5kIGB2ZXRoYCBkZXZpY2VzLCBhbmQgdGhlcmUgYXJlIHNlbGZ0ZXN0cyBsaWtlIGBua19kZXZtZW0ucHlgIHRoYXQgdXRpbGl6ZSBgTmV0RHJ2Q29udEVudmAgKG5ldGtpdCkuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgKmNhbiogdGVzdCB0aGlzIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhlIHNlbGZ0ZXN0IGl0c2VsZiBsaXRlcmFsbHkgc3RhdGVzIFwiVGVzdCBkZXZtZW0gVENQIHdpdGggbmV0a2l0LFwiIHNvIHRoZSBhbnN3ZXIgaXMgeWVzLiBWZXJ5IGdvb2QuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29kZSBtb2RpZmljYXRpb25zIHRoZW1zZWx2ZXMuIEluIGBuZXQvY29yZS9kZXZtZW0uY2AsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgdXNlIG9mIGBQQUdFX1NISUZUYCB0byBgYmluZGluZy1cdTAwM2VuaW92X3NoaWZ0YC4gT2theSwgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ug4oCTIHJlcGxhY2luZyBhIGZpeGVkIHBhZ2Ugc2l6ZSB3aXRoIGEgY29uZmlndXJhYmxlIG9uZSwgYmFzZWQgb24gdGhlIGJpbmRpbmcuIFdlIG5lZWQgdG8gY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDpcblxuKiAgIGBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcmBcbiogICBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgXG4qICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgXG4qICAgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGBcblxuVGhhdCBsaXN0IGNvbmZpcm1zIHRoZSBjaGFuZ2UgaXMgaW5mbHVlbmNpbmcgY29yZSBidWZmZXIgYWxsb2NhdGlvbiwgYmluZGluZywgYW5kIG1hbmFnZW1lbnQuXG5cbkluIGBuZXQvY29yZS9uZXRkZXYtZ2VubC5jYCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHNjb3BlZCB0byB0aGUgTmV0bGluayBjb21tYW5kIGhhbmRsZXJzOlxuXG4qICAgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgXG4qICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgXG5cbk9rYXksIHRoaXMgYWxsIGxpbmVzIHVwOiB3ZSBoYXZlIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIHRoYXQgd2UgZmVlZCBpbnRvIHRoZSBgTkVUREVWX0NNRF9CSU5EX1JYYCBjb21tYW5kIGhhbmRsZXIsIHdoaWNoIHRoZW4gYWZmZWN0cyB0aGUgYGRldm1lbWAgVENQIHJvdXRpbmVzIGFuZCBhc3NvY2lhdGVkIHNlbGZ0ZXN0cy4gT3ZlcmFsbCwgdGhlIGxvZ2ljIGFwcGVhcnMgc291bmQsIGJ1dCBJIG5lZWQgdG8gZXhhbWluZSB0aGUgbmV3IGF0dHJpYnV0ZSdzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAgd29yayBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODU5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MjYuNTg5NTc4NTcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mjc3NjMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X25sX2JpbmRfcnhfZG9pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYz0xNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBuZXRkZXZfbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjYtXFx0XFx0LmNtZFxcdFxcdD0gTkVUREVWX0NNRF9CSU5EX1JYLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jOjIyNzpcXHRcXHQuZG9pdFxcdFxcdD0gbmV0ZGV2X25sX2JpbmRfcnhfZG9pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjgtXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X2JpbmRfcnhfbmxfcG9saWN5LFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg9MzY9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oLTM3LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6Mzg6aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMzktaW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05ODk9bmV0ZGV2X25sX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGxvbmcgKnJ4cV9iaXRtYXAsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwMTItXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDEzOmludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6MzIuMzE3MzQ4MjAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3Mjk2NjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0bGluay9EZXZtZW0gUGF0Y2gqKlxuXG5SaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgZm91bmRhdGlvbmFsIHN0dWZmIOKAkyBjb3JlIG5ldGRldiBuZXRsaW5rIGNvZGUgYW5kIHRoZSBkZXZtZW0gcm91dGluZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIGFib3V0IHRoZSBwcmVyZXF1aXNpdGVzIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBCZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJICpuZWVkKiB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gU28sIEknbSB0aGlua2luZywgXCJPa2F5LCB3aGF0IGtlcm5lbCBjb25maWdzIGFyZSAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IGZvciB0aGlzIGRldm1lbSBpbnRlcmFjdGlvbiB0byBldmVuIGZ1bmN0aW9uIHByb3Blcmx5P1wiIFRoYXQncyB0aGUgYmFzZWxpbmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCBjb3JyZWN0bHkgYmVmb3JlIEkgd2FzdGUgbXkgdGltZSB0cnlpbmcgdG8gZGVidWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyByZXF1aXJlZCBzbyBJIGNhbiBwcm9jZWVkIHdpdGggYSBjbGVhbiBiaWxsIG9mIGhlYWx0aC4gV2hhdCdzIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0PyBNYXliZSBJIHNob3VsZCB0cmFjayBkb3duIGRvY3VtZW50YXRpb24gYWJvdXQgZGV2bWVtIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQzOjM2LjM5MDMxNjk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTI2MjQ0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9ERVZNRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuLS1cXG5uZXQvS2NvbmZpZy02OC1cXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxcbm5ldC9LY29uZmlnLTcwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6NDAuMzAyOTUwMjE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczNDM2MzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRmxhZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYGRlZl9ib29sIHlgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcXVlc3Rpb24gaW4gbXkgbWluZC4gQSBgZGVmX2Jvb2xgIHN1Z2dlc3RzIGEgZGVmYXVsdCAneWVzJyBjb25maWd1cmF0aW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbG9naWMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBgbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkLiBJcyBpdCB0aWVkIHRvIG90aGVyIG5ldHdvcmsgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEknbSBtaXNzaW5nIGF0IGZpcnN0IGdsYW5jZT8gSSB3YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgKndoeSogdGhpcyBkZWZhdWx0IGlzICd5JyBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wYWN0cyBhcmUgaW52b2x2ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJ20gbG9va2luZyBmb3IgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQzOjQ3LjAzNzMxNzEyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0Mzo0Ny4wMzc3ODgzODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNjc5MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipFeGFtaW5pbmcgRGVwZW5kZW5jaWVzIGluIGEgRGV2aWNlIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBORVRfREVWTUVNYCBoZXJlLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyByZWxhdGVkIHRvIG5ldHdvcmsgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgaXRzIGRlcGVuZGVuY3kgY2hhaW4uIEkga25vdyBgTkVUX0RFVk1FTWAgcmVsaWVzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIEFscmlnaHQsIGxldCdzIHRha2UgdGhlc2Ugb25lIGF0IGEgdGltZS4gSSdtIGFzc3VtaW5nIHRoYXQgYFBBR0VfUE9PTGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkIGluIGEgbW9kZXJuIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGZpbmUuIE15IG1haW4gY29uY2VybiBpcyByZWFsbHkgYERNQV9TSEFSRURfQlVGRkVSYCBzaW5jZSB0aGF0J3MgdGhlIG1vcmUgc3BlY2lmaWMgZGVwZW5kZW5jeS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCdzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIzMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6NTAuNjA4NDcyMTA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkwOTE0ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0Mzo1NC44OTkzOTU3OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMzAyMTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIHRoZSBETUEgU2hhcmVkIEJ1ZmZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBETUEtQlVGIGFyZSBkZWZpbmVkLCBpbmNsdWRpbmcgdGhlIGBETUFfU0hBUkVEX0JVRkZFUmAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBvcHRpb24gY29udHJvbHMgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgZ3JvdW5kaW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQzOjU3LjgwMjQyMDE2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDEzNjU2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDM6NTcuOTMwNDQzOTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTk0NDkzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSByZW1lbWJlciBzZWVpbmcgYGNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUmAgZGVmaW5lZCBzb21ld2hlcmUsIGFuZCBJIHRoaW5rIGl0IHdhcyBpbiBgZHJpdmVycy9iYXNlL0tjb25maWdgLiBMZXQgbWUgZ28gY2hlY2sgdGhhdCBmaWxlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgdGhhdCBvcHRpb24gaXMgY29udHJvbGxpbmcgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcy4gR290dGEgZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjAwLjc0OTg5NzA1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdFxcdGJvb2xcXG4gMjExOlxcdFxcdHNlbGVjdCBHTE9CXFxuIDIxMjpcXHRcXG4gMjEzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjE2OlxcdFxcdGJvb2xcXG4gMjE3OlxcdFxcdGRlZmF1bHQgblxcbiAyMTg6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDIxOTpcXHRcXHRoZWxwXFxuIDIyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxcbiAyMjE6XFx0XFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxcbiAyMjI6XFx0XFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUncyBkZXNjcmlwdG9yIGNhbiB0aGVuIGJlIHBhc3NlZCBvbiB0byBvdGhlclxcbiAyMjM6XFx0XFx0ICBkcml2ZXIuXFxuIDIyNDpcXHRcXG4gMjI1OlxcdGNvbmZpZyBETUFfRkVOQ0VfVFJBQ0VcXG4gMjI2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1xcXCJcXG4gMjI3OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjI4OlxcdFxcdGhlbHBcXG4gMjI5OlxcdFxcdCAgRW5hYmxlIHRoZSBETUFfRkVOQ0VfVFJBQ0UgcHJpbnRrcy4gVGhpcyB3aWxsIGFkZCBleHRyYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDowMC43NTAwNDIzMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NjQ1OTc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERNQSBTaGFyZWQgQnVmZmVyIGFuZCBEZXZtZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBjdXJyZW50bHkgYSBib29sZWFuLCBkZWZhdWx0aW5nIHRvICduJy4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSB0aGlzLiBXYWl0IGEgc2Vjb25kLCB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBpbnRlcmVzdGluZy4gYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLCBidXQgaXQgZGVwZW5kcyBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBTbywgaWYgd2UgZW5hYmxlIGBETUFfU0hBUkVEX0JVRkZFUmAsIGBORVRfREVWTUVNYCB3aWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseS4gVGhhdCBtYWtlcyB0aGluZ3MgZWFzaWVyLlxuXG5Ob3csIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2UgbmVlZCB0byBjb25zaWRlci4gVGhlIHBhdGNoIGFmZmVjdHMgYG5ldC9jb3JlL2Rldm1lbS5jYCBhbmQgYG5ldC9jb3JlL25ldGRldi1nZW5sLmNgLCBzbyB0aG9zZSBhcmUgdGhlIGFyZWFzIHRvIGZvY3VzIG9uLlxuXG5UaGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGFyZTpcblxuKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YFxuKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YFxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcblxuTGV0J3Mgc2VlIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIG5vdCwgYW5kIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCBpcyBpbiBgbmV0L2NvcmUvbmV0ZGV2LWdlbmwuY2AgYW5kIGlzIG5vdCBzdGF0aWMsIG1lYW5pbmcgaXQncyBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMuIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9kZXZtZW0uY2AgYW5kIGlzIG5vbi1zdGF0aWMuIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBpbiBgbmV0L2NvcmUvZGV2bWVtLmNgIGFuZCBub24tc3RhdGljLiBGaW5hbGx5LCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBuZXQvY29yZS9kZXZtZW0uY2AuIEdvb2QsIGFsbCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUuXG5cbkxldCBtZSBqdXN0IGxpc3QgdGhvc2UgZnVuY3Rpb25zIG9uZSBtb3JlIHRpbWUgdG8ga2VlcCB0aGVtIHRvcCBvZiBtaW5kOlxuXG4qICAgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgXG4qICAgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgXG4qICAgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgXG4qICAgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYFxuXG5Ob3cgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgSSdtIG1pc3NpbmcuIFJpZ2h0LCBgUEFHRV9QT09MYCBpcyBhIGdvb2Qgb25lIHRvIHJlbWVtYmVyOyBuZXR3b3JraW5nIGRyaXZlcnMgY29tbW9ubHkgc2VsZWN0IHRoYXQuIExvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBhZ2FpbiwgYE5FVF9ERVZNRU1gIGlzIGBkZWZfYm9vbCB5YCBhbmQgZGVwZW5kcyBvbiAqYm90aCogYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFNvLCB3ZSAqc3RpbGwqIG5lZWQgYERNQV9TSEFSRURfQlVGRkVSYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSB1c2FnZSBvZiBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgIGFnYWluIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MDguOTA2NTA2MDI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIxODE5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTg3PXN0cnVjdCBuZXRfaW92ICpcXG5uZXQvY29yZS9kZXZtZW0uYzo4ODpuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG5uZXQvY29yZS9kZXZtZW0uYy04OS17XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYz00NzM9bmV0bWVtX3JlZiBtcF9kbWFidWZfZGV2bWVtX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtNDc4LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQ3OTpcXHRuaW92ID0gbmV0X2Rldm1lbV9hbGxvY19kbWFidWYoYmluZGluZyk7XFxubmV0L2NvcmUvZGV2bWVtLmMtNDgwLVxcdGlmICghbmlvdilcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTE1MD1zdHJ1Y3QgbmV0X2lvdiAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MTUxOm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG5uZXQvY29yZS9kZXZtZW0uaC0xNTItdm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdik7XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yMDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2lvdiAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MjA5Om5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbm5ldC9jb3JlL2Rldm1lbS5oLTIxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjEzLjEyODMzMTMzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU3ODA3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBETUEgQnVmZmVyIEFsbG9jYXRpb24gYW5kIERlYWxsb2NhdGlvbiBpbiBOZXR3b3JrIERldmljZSBNZW1vcnkqKlxuXG5SaWdodCwgc28gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBpcyBkZWZpbml0aXZlbHkgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgZ29vZCB0byBrbm93OyBpdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgZ2l2ZW4gdGhhdCBpdCdzIGFjY2Vzc2libGUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JyZXNwb25kaW5nIGZyZWVpbmcgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyBzdGF5cyB0aWR5IGFuZCBwcmVkaWN0YWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW9ucyBhcmUgZGVhbGxvY2F0ZWQgYXQgc29tZSBwb2ludC4gTGV0J3MgbWFrZSBzdXJlIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCBpcyBkb2luZyBpdHMgam9iIGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBzYW1lIGFjY2Vzc2liaWxpdHkgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODI1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MTYuMTg2MTQ0NTQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYxNjUzNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fZnJlZV9kbWFidWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2bWVtLmM9ODg9bmV0X2Rldm1lbV9hbGxvY19kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0xMTItXFxubmV0L2NvcmUvZGV2bWVtLmM6MTEzOnZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG5uZXQvY29yZS9kZXZtZW0uYy0xMTQte1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9NDk5PWJvb2wgbXBfZG1hYnVmX2Rldm1lbV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0pXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy01MTAtXFxubmV0L2NvcmUvZGV2bWVtLmM6NTExOlxcdG5ldF9kZXZtZW1fZnJlZV9kbWFidWYobmV0bWVtX3RvX25ldF9pb3YobmV0bWVtKSk7XFxubmV0L2NvcmUvZGV2bWVtLmMtNTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTUxPW5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKTtcXG5uZXQvY29yZS9kZXZtZW0uaDoxNTI6dm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdik7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTUzLVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MjA5PW5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmgtMjEzLVxcbm5ldC9jb3JlL2Rldm1lbS5oOjIxNDpzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjE1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MjIuMDQ3ODA1NzIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTYwOTkyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeTpcblxuKipBbmFseXppbmcgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgIGFuZCBQb3RlbnRpYWwgUXVldWUgQmluZGluZyoqXG5cblJpZ2h0LCBzbyBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAgaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBzb21ldGhpbmcgSSB3YW50ZWQgdG8gY29uZmlybS4gTm93IHRoYXQgdGhhdCdzIGNsZWFyZWQgdXAsIGl0J3MgdGltZSB0byBzaGlmdCBmb2N1cyBhbmQgc3RhcnQgaW52ZXN0aWdhdGluZyBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHJlbGF0aW9uIHRvIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYC4gR2l2ZW4gdGhhdCBJIGtub3cgdGhlIGZvcm1lciBpc24ndCBzdGF0aWMsIGhvdyBtaWdodCB0aGF0IGZhY3RvciBpbnRvIHRoZSBxdWV1ZSBiaW5kaW5nIHByb2Nlc3MuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgbG9va2luZyBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgY3Jvc3MtcmVmZXJlbmNlcyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjI1LjI2MzkxNjczM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1MTM0Njc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTE1NS1cXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTEwMj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XFxubmV0L2NvcmUvZGV2bWVtLmg6MTAzOmludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwNC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xOTk9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvY29yZS9kZXZtZW0uaDoyMDA6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uaC0yMDEtXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEwMTM9aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwMy1cXHRmb3JfZWFjaF9zZXRfYml0KHJ4cV9pZHgsIHJ4cV9iaXRtYXAsIG5ldGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMTA0OlxcdFxcdGVyciA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUobmV0ZGV2LCByeHFfaWR4LCBiaW5kaW5nLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDoyOS40MTUyNjkzMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NDI3MDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnRlcm5hbCBSZXZpZXcgb2YgRE1BIEJ1ZmZlciBCaW5kaW5nKipcblxuUmlnaHQsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gVGhhdCdzIHdoYXQgSSBleHBlY3RlZCwgZ2l2ZW4gaXRzIGxpa2VseSByb2xlIGluIGV4dGVybmFsIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgcmUtdXNlLiBOb3csIGxldCdzIHBpdm90IHRvIGV4YW1pbmUgdGhlIGNhbGxpbmcgZnVuY3Rpb24sIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHF1ZXVlLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGdldCBhIGZ1bGwgZ3Jhc3Agb2YgdGhlIGJpbmRpbmcgcHJvY2VzcyBhbmQgYW55IHBvc3NpYmxlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIGlzIHRoZSBjb3JlIGZsb3csIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMgaXMga2V5IGZvciB0aGlzIGxldmVsIG9mIGFuYWx5c2lzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6MzIuNTY5NTQzOTUxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ1Mjk0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjE1NjppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9MTg4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uYzoxODk6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5jLTE5MC1cXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTk0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDo5NTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtOTYtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xMDI9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uaC0xMDQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE3ODpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtMTc5LVxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTk5PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L2NvcmUvZGV2bWVtLmg6MjAwOm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTQtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDk1OlxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5Ni1cXHRcXHRcXHRcXHRcXHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVxcdGZvcl9lYWNoX3NldF9iaXQocnhxX2lkeCwgcnhxX2JpdG1hcCwgbmV0ZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XFx0XFx0ZXJyID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShuZXRkZXYsIHJ4cV9pZHgsIGJpbmRpbmcsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExNjk9aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzNC1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEyMzU6XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM2LVxcdFxcdFxcdFxcdFxcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDozNy40MTQ5MDI3ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODQ1MzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGtub3dsZWRnZWFibGUgYWJvdXQgdGhlIHN1YmplY3Q6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgbmV0X2Rldm1lbWAgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBTbywgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIGlzIGNvbmZpcm1lZCAqbm90KiB0byBiZSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgb3BlbnMgdXAgY2VydGFpbiBwb3NzaWJpbGl0aWVzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBpdCBvdXRzaWRlIG9mIGl0cyB0eXBpY2FsIGNvbnRleHQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgc2hpZnQgbXkgZm9jdXMgb3ZlciB0byBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvLiBJdCdzIGxpa2VseSB0aGF0IGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBpcyBwcm92aWRpbmcgc29tZSBvZiB0aGUgZm91bmRhdGlvbmFsIGRhdGEgb3IgbWVjaGFuaXNtcyB0aGF0IGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCB1dGlsaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdHMgb3V0cHV0IGlzIHVzZWQuIFRoaXMgbWlnaHQgcmV2ZWFsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIG9yIG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdCBpbiB0aGUgYG5ldF9kZXZtZW1gIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NDo0MC43OTMzNjA1NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg3MjM5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9nZXRfbmlvdl9hdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcyNy1cXHRcXHR2aXJ0X2FkZHIgPSAoc2l6ZV90KWl0ZXJfaW92X2FkZHIoZnJvbSk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3Mjg6XFx0XFx0bmlvdiA9IG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXQoYmluZGluZywgdmlydF9hZGRyLCBcXHUwMDI2b2ZmLCBcXHUwMDI2c2l6ZSk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MjktXFx0XFx0aWYgKCFuaW92KVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9NDM2PXN0cnVjdCBuZXRfaW92ICpcXG5uZXQvY29yZS9kZXZtZW0uYzo0Mzc6bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG5uZXQvY29yZS9kZXZtZW0uYy00MzgtXFx0XFx0ICAgICAgIHNpemVfdCB2aXJ0X2FkZHIsIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTc9c3RydWN0IG5ldF9pb3YgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1ODpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcXG5uZXQvY29yZS9kZXZtZW0uaC0xNTktXFx0XFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpO1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MjM0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9pb3YgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjIzNTpuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcXG5uZXQvY29yZS9kZXZtZW0uaC0yMzYtXFx0XFx0ICAgICAgIHNpemVfdCAqb2ZmLCBzaXplX3QgKnNpemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjQ1LjM2MjA5NDI3NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1MDIzMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBhbmQgUmVsYXRlZCBJbml0aWFsaXphdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGF0IGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIE5vdywgbGV0J3MgcGl2b3QgdG8gaW52ZXN0aWdhdGluZyB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGBtcF9kbWFidWZfZGV2bWVtX2luaXRgIHdvcmtzLiBJdCdzIGEga2V5IHBhcnQgb2YgaG93IHRoaXMgYWxsIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIERNQUJVRiBpbXBsZW1lbnRhdGlvbiB0aWVzIGludG8gdGhlIG1lbW9yeSBkZXZpY2UgYW5kIG5ldCBpbnRlcmZhY2UsIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGZlYXR1cmUgbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjA5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6NDguNDc3MTIwODMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDUwMjEwMDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wX2RtYWJ1Zl9kZXZtZW1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz00Mzc9bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ1Mi1cXG5uZXQvY29yZS9kZXZtZW0uYzo0NTM6aW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ1NC17XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYz01NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfcHJvdmlkZXJfb3BzIGRtYWJ1Zl9kZXZtZW1fb3BzID0ge1xcbm5ldC9jb3JlL2Rldm1lbS5jOjU0ODpcXHQuaW5pdFxcdFxcdFxcdD0gbXBfZG1hYnVmX2Rldm1lbV9pbml0LFxcbm5ldC9jb3JlL2Rldm1lbS5jLTU0OS1cXHQuZGVzdHJveVxcdFxcdD0gbXBfZG1hYnVmX2Rldm1lbV9kZXN0cm95LFxcbi0tXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTEzLSNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoxNDppbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpO1xcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xNS1cXG4tLVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaD0yMD1ib29sIG1wX2RtYWJ1Zl9kZXZtZW1fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIG5ldG1lbV9yZWYgbmV0bWVtKTtcXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMjEtI2Vsc2VcXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MjI6c3RhdGljIGlubGluZSBpbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDQ6NTIuNTI3MzM3MDc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzI2NDI4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGRtYWJ1ZiBEZXZtZW0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQncyBpbXBvcnRhbnQuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpc24ndCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgdGhlIGxpa2VseSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgb25lcyB0aGF0IHVzZSBvciBjYWxsIGl0LiBTbywgdGhhdCBsaXN0IHNob3VsZCBpbmNsdWRlOiBgbmV0ZGV2X25sX2JpbmRfcnhfZG9pdGAsIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgLCBgbmV0X2Rldm1lbV9hbGxvY19kbWFidWZgLCBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlYCwgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgLCBhbmQsIG9mIGNvdXJzZSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXRzZWxmLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIFJpZ2h0LCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBpcyBjYWxsZWQgYnkgYHBhZ2VfcG9vbF9pbml0YCB3aGVuIHdlJ3JlIHVzaW5nIGRtYWJ1ZiBhcyB0aGUgbWVtb3J5IHByb3ZpZGVyLiBPa2F5LCB0aGF0J3MgY3J1Y2lhbCBjb250ZXh0LiBBbmQgSSBzZWUgdGhhdCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAgaXNuJ3QgZnVuZGFtZW50YWxseSBhbHRlcmVkOyBpdCBqdXN0IGluY29ycG9yYXRlcyBgUEFHRV9TSElGVGAgbm93LCBidXQgaXQncyBwYXJ0IG9mIHRoZSBmZWF0dXJlLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCB0byBwYXJzZSB0aGlzIGBORVRERVZfQV9ETUFCVUZfUlhfUEFHRV9TSVpFYCBhdHRyaWJ1dGUuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFdoYXQncyAqcmVxdWlyZWQqIGZvciB0aGlzIHRvIHdvcms/IEkga25vdyBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGZvciBgTkVUX0RFVk1FTWAuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3PigKYgUmlnaHQsIGBORVRfREVWTUVNYCBpcyBhIFwiZGVmX2Jvb2wgeVwiIGRlcGVuZGVudCBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgICphbmQqIGBQQUdFX1BPT0xgLiBBbmQgYFBBR0VfUE9PTGAgaXMgYSBcImJvb2xcIiBvcHRpb24sIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZHJpdmVycy4gQ2FuIEkgZW5hYmxlIGBQQUdFX1BPT0xgIGRpcmVjdGx5PyBObywgc2VlbXMgbGlrZSBpdCdzIHNlbGVjdGVkLiBJIGNhbiBsaXN0IGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAsIGJ1dCBgRE1BX1NIQVJFRF9CVUZGRVJgIHNob3VsZCBiZSBzdWZmaWNpZW50LiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgb24gYG5ldC9LY29uZmlnYCBmb3IgYFBBR0VfUE9PTGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODY3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ0OjU4Ljg1OTk4Mzk1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MDMzMTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcXG4tLVxcbm5ldC9LY29uZmlnLTQ5MC1cXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxcbm5ldC9LY29uZmlnLTQ5Mi1cXHRib29sXFxubmV0L0tjb25maWctNDkzLVxcbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXFxubmV0L0tjb25maWctNDk1LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTowMy4yMjAzMjA2NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5ODMzMzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIEtjb25maWcgT3B0aW9ucyBhbmQgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBQQUdFX1BPT0xgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQuIFRoYXQgbWVhbnMgaXQncyBhIGZpeGVkIHNlbGVjdGlvbiwgbGlrZWx5IGNvbnRyb2xsZWQgYnkgdGhlIGRyaXZlciBpdHNlbGYsIGFuZCBjYW4ndCBiZSBzZXQgZGlyZWN0bHkgaW4gdGhlIGNvbmZpZyBtZW51LiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgbGlzdGVkIGluIGBFbmFibGVDb25maWdzYC4gUHJvYmFibHkgbm90LCBzaW5jZSBpdCdzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuIEJ1dCBtYXliZSBpdCB3b3VsZG4ndCBodXJ0LCBqdXN0IGZvciBjb21wbGV0ZW5lc3MsIGJ1dCBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoaXMuXG5cbkhvbGQgb24uLi4gSSdtIHJlbWluZGVkIHRoYXQgc3l6a2FsbGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGVuYWJsZSBpdCBkaXJlY3RseSBpZiBpdCBoYXMgbm8gcHJvbXB0OyBzaW5jZSB0aGF0J3MgbXkgY29uY2VybiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlLlxuXG5UaGVuLCB0aGVyZSdzIGBETUFfU0hBUkVEX0JVRkZFUmAuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUgaGF2aW5nIGEgcHJvbXB0LCB3aGljaCB3b3VsZCBiZSBleHBlY3RlZCBmb3IgdXNlci1jb25maWd1cmFibGUgb3B0aW9ucy4gQWgsIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzIG15IG1lbW9yeSBjb3JyZWN0PyBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIG5lZWQgdG8gYmUgc3VyZTsgaXQncyBhIGBib29sYCB3aXRob3V0IGEgcHJvbXB0IGluIGBkcml2ZXJzL2Jhc2UvS2NvbmZpZ2A/IE9rYXksIEknbSBnb2luZyB0byBxdWlja2x5IHJlcmVhZCBgZHJpdmVycy9iYXNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlZmluaXRpb25zIGFuZCBhdm9pZCBtYWtpbmcgbWlzdGFrZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MDcuMzE4NjU3NTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRib29sXFxuIDIxMTpcXHRcXHRzZWxlY3QgR0xPQlxcbiAyMTI6XFx0XFxuIDIxMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1xcXCJcXG4gMjE0OlxcdFxcbiAyMTU6XFx0Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuIDIxNjpcXHRcXHRib29sXFxuIDIxNzpcXHRcXHRkZWZhdWx0IG5cXG4gMjE4OlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAyMTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTowNy4zMTg3NzEyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ0NDYyNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3k6IERNQV9TSEFSRURfQlVGRkVSKipcblxuUmlnaHQsIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgZGVmaW5lZCBhcyBhIGBib29sYCAqd2l0aG91dCogYW55IGFzc29jaWF0ZWQgcHJvbXB0LiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc3VzcGljaW9uIOKAkyBpdCdzIGxpa2VseSBiZWluZyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBhIGRlcml2ZWQgY29uZmlndXJhdGlvbiwgYSBidWlsZGluZyBibG9jay4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgdHJhY2luZyB0aGVzZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXNuJ3QgYSBkaXJlY3RseSB1c2VyLWZhY2luZyBvcHRpb247IGl0cyAqdmFsdWUqIGlzIGRldGVybWluZWQgZWxzZXdoZXJlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgcHVsbGluZyBpdCBpbi4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY29uZmlndXJhdGlvbnMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgZGVzaWduIGFuZCBob3cgYERNQV9TSEFSRURfQlVGRkVSYCBpbmZsdWVuY2VzIHRoZSBmaW5hbCBidWlsZCBhbmQgc3lzdGVtIGJlaGF2aW9yLiBUaW1lIHRvIHRyYWNlIHRoZSBzZWxlY3RzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MTAuNzYzMjM2NTQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE2MTA3NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q9NjU9QW55IGV4cG9ydGVycyBvciB1c2VycyBvZiB0aGUgZG1hLWJ1ZiBidWZmZXIgc2hhcmluZyBmcmFtZXdvcmsgbXVzdCBoYXZlIGFcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q6NjY6J3NlbGVjdCBETUFfU0hBUkVEX0JVRkZFUicgaW4gdGhlaXIgcmVzcGVjdGl2ZSBLY29uZmlncy5cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3QtNjctXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZz02PWNvbmZpZyBEUk1fQUNDRUxfSEFCQU5BTEFCU1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTItXFx0c2VsZWN0IEhXTU9OXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc6MTM6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWctMTQtXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz00PWNvbmZpZyBTWU5DX0ZJTEVcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYtXFx0ZGVmYXVsdCBuXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTUyPWNvbmZpZyBETUFCVUZfS1VOSVRfVEVTVFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTQtXFx0ZGVwZW5kcyBvbiBLVU5JVFxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjU1OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTU2LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz02MD1tZW51Y29uZmlnIERNQUJVRl9IRUFQU1xcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYxLVxcdGJvb2wgXFxcIkRNQS1CVUYgVXNlcmxhbmQgTWVtb3J5IEhlYXBzXFxcIlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjYyOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTg9bWVudWNvbmZpZyBEUk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTEzLVxcdHNlbGVjdCBJMkNcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoxNDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xNS1cXHRzZWxlY3QgU1lOQ19GSUxFXFxuLS1cXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZz02PWNvbmZpZyBURUdSQV9IT1NUMVhcXG4tLVxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTgtXFx0ZGVwZW5kcyBvbiBBUkNIX1RFR1JBIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctMTAtXFx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xcbi0tXFxuZHJpdmVycy9paW8vS2NvbmZpZz0xNT1jb25maWcgSUlPX0JVRkZFUlxcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ1ZmZlciBzdXBwb3J0IHdpdGhpbiBJSU9cXFwiXFxuZHJpdmVycy9paW8vS2NvbmZpZzoxNzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gIUFMUEhBXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVxcdHNlbGVjdCBJUlFfUE9MTFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ3LVxcdGRlcGVuZHMgb24gTU1VXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDg6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz0zOT1jb25maWcgSU9NTVVGRF9URVNUXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00NC1cXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjQ1OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQ2LVxcdHNlbGVjdCBJT01NVUZEX0RSSVZFUlxcbi0tXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9Mz1jb25maWcgVklERU9CVUYyX0NPUkVcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZzo0OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTUtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTEzPWNvbmZpZyBWSURFT0JVRjJfRE1BX0NPTlRJR1xcbi0tXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTYtXFx0c2VsZWN0IFZJREVPQlVGMl9NRU1PUFNcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZzoxNzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0xOT1jb25maWcgVklERU9CVUYyX1ZNQUxMT0NcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTIyLVxcdHNlbGVjdCBWSURFT0JVRjJfTUVNT1BTXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MjM6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMjQtXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZz0xPWNvbmZpZyBWSURFT19URUdSQV9WREVcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiBWSURFT19ERVZcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZzo3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTgtXFx0c2VsZWN0IElPTU1VX0lPVkFcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMwMT1jb25maWcgUUNPTV9GQVNUUlBDXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDQtXFx0ZGVwZW5kcyBvbiBSUE1TR1xcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMwNTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMDYtXFx0c2VsZWN0IFFDT01fU0NNXFxuLS1cXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcXG4tLVxcbmRyaXZlcnMvdGVlL0tjb25maWctNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuZHJpdmVycy90ZWUvS2NvbmZpZzo3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvdGVlL0tjb25maWctOC1cXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTE5Mj1jb25maWcgVVNCX0ZfRlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxOTM6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTk0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnPTE0NT1jb25maWcgWEVOX0dOVERFVl9ETUFCVUZcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWctMTQ3LVxcdGRlcGVuZHMgb24gWEVOX0dOVERFViBcXHUwMDI2XFx1MDAyNiBYRU5fR1JBTlRfRE1BX0FMTE9DXFxuZHJpdmVycy94ZW4vS2NvbmZpZzoxNDg6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy94ZW4vS2NvbmZpZy0xNDktXFx0aGVscFxcbi0tXFxuc2FtcGxlcy9LY29uZmlnPTIzMD1jb25maWcgU0FNUExFX1ZGSU9fTURFVl9NQk9DSFNcXG4tLVxcbnNhbXBsZXMvS2NvbmZpZy0yMzMtXFx0c2VsZWN0IFZGSU9fTURFVlxcbnNhbXBsZXMvS2NvbmZpZzoyMzQ6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuc2FtcGxlcy9LY29uZmlnLTIzNS1cXHRoZWxwXFxuLS1cXG5zb3VuZC9zb2MvZnNsL0tjb25maWc9Nj1jb25maWcgU05EX1NPQ19GU0xfQVNSQ1xcbi0tXFxuc291bmQvc29jL2ZzbC9LY29uZmlnLTgtXFx0ZGVwZW5kcyBvbiBIQVNfRE1BXFxuc291bmQvc29jL2ZzbC9LY29uZmlnOjk6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuc291bmQvc29jL2ZzbC9LY29uZmlnLTEwLVxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NToxNC45NzkzNDkzNDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzODE0OTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYERNQV9TSEFSRURfQlVGRkVSYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBETUFfU0hBUkVEX0JVRkZFUmAgZ2V0cyBlbmFibGVkIGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgY2xlYXIgdGhhdCBpdCdzIGEgZnVuZGFtZW50YWwgb3B0aW9uLCBidXQgaXQncyAqcHVsbGVkIGluKiBieSBhIHdpZGUgdmFyaWV0eSBvZiBzdWJzeXN0ZW1zLiBJJ20gc2VlaW5nIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgYERSTWAsIGBJTkZJTklCQU5EYCwgYFZJREVPQlVGMl9DT1JFYCwgYFRFRWAgYW5kIHByb2JhYmx5IG1vcmUsIGFsbCBkZXBlbmRpbmcgb24gaXQuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgaWYgSSB3YW50IHRvIHR1cm4gb24gYERNQV9TSEFSRURfQlVGRkVSYCwgSSBjYW4gc2ltcGx5IGVuYWJsZSBhbnkgb2YgdGhvc2UgZGVwZW5kZW50IGZlYXR1cmVzLCBsaWtlIGBTWU5DX0ZJTEVgLCBgRE1BQlVGX0hFQVBTYCwgb3IgYERSTWAuIFRoYXQncyBhIHJlYXNvbmFibGUgZGVzaWduIGNob2ljZSwgc2ltcGxpZnlpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgRE1BQlVGX0hFQVBTYC4uLnRoYXQncyBhIG1lbnVjb25maWcgZW50cnkgd2l0aCBpdHMgb3duIHByb21wdCwgXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1wiLiBJIHNob3VsZCByZWFsbHkgZHJpbGwgZG93biBpbnRvIHRoYXQuIEl0IHNlZW1zIHRvIHN1Z2dlc3QgYSBtb3JlIGRpcmVjdCwgdXNlci1jb250cm9sbGFibGUgd2F5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIGBETUFfU0hBUkVEX0JVRkZFUmAuIFNvLCBsZXQncyBnbyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYERNQUJVRl9IRUFQU2AsIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgRE1BLUJVRiBoZWFwcyBjYW4gYmUgY29uZmlndXJlZCwgYW5kIHdoaWNoIHVzZXJsYW5kIGNvbXBvbmVudHMgdXNlIHRoZXNlIGhlYXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ2NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NToxOS4zMTc1MDMwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4ODM3NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BQlVGX0hFQVBTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTUyPWNvbmZpZyBETUFCVUZfS1VOSVRfVEVTVFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNTktXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6NjA6bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cXHRib29sIFxcXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1xcXCJcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnOjE6Y29uZmlnIERNQUJVRl9IRUFQU19TWVNURU1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJETUEtQlVGIFN5c3RlbSBIZWFwXFxcIlxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctNy1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzo4OmNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNX0NDX1NIQVJFRFxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnLTktXFx0Ym9vbCBcXFwiRE1BLUJVRiBTeXN0ZW0gSGVhcCBmb3IgZGVjcnlwdGVkIENvQ28gVk1zXFxcIlxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWc6MTY6Y29uZmlnIERNQUJVRl9IRUFQU19DTUFcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiRE1BLUJVRiBDTUEgSGVhcFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MjIuNTA1ODg4MDYxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzYxNzcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRE1BLUJVRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBpZiBJIGp1c3QgZGVjbGFyZSBgRE1BQlVGX0hFQVBTYCwgdGhlIHN5c3RlbSB3aWxsIGF1dG9tYXRpY2FsbHkgY2hvb3NlIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFdhaXQsIGRvZXMgc3l6a2FsbGVyIGhhbmRsZSB0aGUgc2VsZWN0aW9uIGNvcnJlY3RseSBpZiBJIGp1c3QgZ2l2ZSBpdCB0aGUgb3B0aW9uIHRoYXQgKnNlbGVjdHMqIGl0PyBPciBjb3VsZCBJIGp1c3Qgc3BlY2lmeSBgRE1BX1NIQVJFRF9CVUZGRVJgIGRpcmVjdGx5LCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHdpbGwgdW5kZXJzdGFuZCBpdCdzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQ/IEhtbW0sIG5vLCBpZiB0aGVyZSdzIG5vIHByb21wdCwgc3l6a2FsbGVyIHByb2JhYmx5IGNhbid0IGVuYWJsZSBpdCBkaXJlY3RseTsgaXQgKm5lZWRzKiBzb21ldGhpbmcgdGhhdCB0cmlnZ2VycyB0aGUgc2VsZWN0aW9uLiBBbHJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrIC0gYFNZTkNfRklMRWAgaXMgYSBib29sZWFuIGluIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZGVmaW5lZCBhcyBcIkFQSSBmb3IgdXNlci1zcGFjZSBzeW5jaHJvbml6YXRpb25cIi4gTGV0J3MgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjA0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjI2LjU4MjA2OTE2N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnUgXFxcIkRNQUJVRiBvcHRpb25zXFxcIlxcbiAgIDM6XFx0XFxuICAgNDpcXHRjb25maWcgU1lOQ19GSUxFXFxuICAgNTpcXHRcXHRib29sIFxcXCJFeHBsaWNpdCBTeW5jaHJvbml6YXRpb24gRnJhbWV3b3JrXFxcIlxcbiAgIDY6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNzpcXHRcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhlIFN5bmMgRmlsZSBGcmFtZXdvcmsgYWRkcyBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gdmlhXFxuICAxMDpcXHRcXHQgIHVzZXJzcGFjZS4gSXQgZW5hYmxlcyBzZW5kL3JlY2VpdmUgJ3N0cnVjdCBkbWFfZmVuY2UnIG9iamVjdHMgdG8vZnJvbVxcbiAgMTE6XFx0XFx0ICB1c2Vyc3BhY2UgdmlhIFN5bmMgRmlsZSBmZHMgZm9yIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGRyaXZlcnMgdmlhXFxuICAxMjpcXHRcXHQgIHVzZXJzcGFjZSBjb21wb25lbnRzLiBJdCBoYXMgYmVlbiBwb3J0ZWQgZnJvbSBBbmRyb2lkLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRoZSBmaXJzdCBhbmQgbWFpbiB1c2VyIGZvciB0aGlzIGlzIGdyYXBoaWNzIGluIHdoaWNoIGEgZmVuY2UgaXNcXG4gIDE1OlxcdFxcdCAgYXNzb2NpYXRlZCB3aXRoIGEgYnVmZmVyLiBXaGVuIGEgam9iIGlzIHN1Ym1pdHRlZCB0byB0aGUgR1BVIGEgZmVuY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDU6MjYuNTgyMjA3ODg3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mzc1NDYxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYFNZTkNfRklMRWAgaXMgZGVmaW5pdGVseSBzZXQgdXAgdG8gcHJvbXB0IHRoZSB1c2VyIGFuZCB1bHRpbWF0ZWx5IHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhhdOKAmXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gR2l2ZW4gdGhpcywgaXQgc2VlbXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8gYWRkIGBTWU5DX0ZJTEVgIHRvIGBFbmFibGVDb25maWdzYC4gQnV0IGJlZm9yZSBJIGdldCB0b28gYWhlYWQgb2YgbXlzZWxmLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gV2hhdCBhYm91dCBgUEFHRV9QT09MYD8gSG1tLCBpdCBkb2VzbuKAmXQgc2VlbSB0byBoYXZlIGEgdXNlciBwcm9tcHQgb2YgaXRzIG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBhcmUgKnNlbGVjdGluZyogaXQuIEdvdHRhIHRyYWNlIHRoYXQgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NzAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjMwLjIxOTc1NzU4N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMTcxODU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgUEFHRV9QT09MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0Mzc6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTg4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gNjRCSVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo4MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cXHRzZWxlY3QgQlJPQURDT01fUEhZIGlmIEFSQ0hfQkNNMjgzNVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXFx0c2VsZWN0IEZJWEVEX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjMyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cXHRzZWxlY3QgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXFxcIiBpZiBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz01OT1jb25maWcgTVZORVRBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo2NTpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05MC1cXHRzZWxlY3QgUEhZTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo5MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVxcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjAtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMy1cXHRzZWxlY3QgUENTX01US19MWU5YSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjMzOlxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zNC1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTMzPWNvbmZpZyBNTFhTV19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IE1MWFNXX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTM3LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI3LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI5LVxcdHNlbGVjdCBQQ1NfWFBDU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZz0xPWNvbmZpZyBMQU45NjZYX1NXSVRDSFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy04LVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTEwLVxcdHNlbGVjdCBWQ0FQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc9Mjg9Y29uZmlnIExBTjk2OVhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzAtXFx0ZGVwZW5kcyBvbiBTUEFSWDVfU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWctMzItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc9MTg9Y29uZmlnIE1JQ1JPU09GVF9NQU5BXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0yNC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjU6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI2LVxcdHNlbGVjdCBORVRfU0hBUEVSXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNy1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTExMD1jb25maWcgUlRBU0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTMtXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9Mjk9Y29uZmlnIFJBVkJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTURJT19CSVRCQU5HXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzctXFx0c2VsZWN0IFBIWUxJQlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc9MjU9Y29uZmlnIFNOSV9ORVRTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTI4LVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMzAtXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTgtXFx0c2VsZWN0IFBDU19YUENTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEwLVxcdHNlbGVjdCBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZz0yNj1jb25maWcgVEVIVVRJX1RONDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTI4LVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTMwLVxcdHNlbGVjdCBGV19MT0FERVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NTA9Y29uZmlnIFRJX0NQU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTUtXFx0c2VsZWN0IE1GRF9TWVNDT05cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU3LVxcdHNlbGVjdCBSRUdNQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTY5LVxcdGRlcGVuZHMgb24gVElfQ1BUUyB8fCAhVElfQ1BUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzEtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAxLVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAzLVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0yMDQ9Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjA4LVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIxMC1cXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTk9Y29uZmlnIExJQldYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIzLVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0yPWNvbmZpZyBNVDc2X0NPUkVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzo0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNS1cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjM0LjAyMTQ4MjM0NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTE0MjI1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBETUEgU2hhcmVkIEJ1ZmZlciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYFBBR0VfUE9PTGAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIHRoZSBzeXprYWxsZXIgY29uZmlncywgc2luY2UgYEJQRl9TWVNDQUxMYCBhbmQgYFZFVEhgIGFyZSBhbHdheXMgZW5hYmxlZC4gVGhhdCBhbHNvIHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgYFNZTkNfRklMRWAgaXMgZ29pbmcgdG8gZ2V0IG1lIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGVuYWJsaW5nIGZsZXhpYmxlIERNQSBidWZmZXIgc2l6ZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgTkVUREVWX0FfRE1BQlVGX1JYX1BBR0VfU0laRWAgdG8gYG5ldGRldl9iaW5kX3J4X25sX3BvbGljeWAsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gVGhlbiwgYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgIGlzIGNoYW5nZWQgdG8gcGFyc2UgdGhhdCBuZXcgcGFyYW1ldGVyLiBXZSdyZSBtb2RpZnlpbmcgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZgIHRvIHRha2UgYG5pb3Zfc2hpZnRgLCBhbmQgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCBhbmQgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgIGFyZSBtb2RpZmllZCB0byBhbGxvY2F0ZSBhbmQgZnJlZSBidWZmZXJzIHVzaW5nIHRoZSBjYWxjdWxhdGVkIHNpemUgYmFzZWQgb24gdGhlIHNoaWZ0ICh1c2luZyBgMVVMIFx1MDAzY1x1MDAzYyBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnRgKS4gYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgIHNldHMgYG1wX3BhcmFtcy5yeF9wYWdlX3NpemVgIGJhc2VkIG9uIHRoaXMgYG5pb3Zfc2hpZnRgLCBhbmQgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgIHVzZXMgaXQgdG9vLiBGaW5hbGx5LCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBub3cgY2hlY2tzIHRoZSBwYWdlIG9yZGVyIGFnYWluc3QgdGhlIGJpbmRpbmcncyBgbmlvdl9zaGlmdGAuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgZGV2bWVtIFRDUCwgd2hpY2ggaXMgZ3JlYXQgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuXG5cblNvLCB0byBzdW1tYXJpemUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IGFyZSBrZXkgdG8gdGhlIGZ1bmN0aW9uYWxpdHksIEknbSBmb2N1c2luZyBvbjpcblxuKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YFxuKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YCAoc2luY2UgUlggaGFzIFRYKVxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcbiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGBcbiogICBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YFxuXG5BIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0uLi4gYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbm90IHN0YXRpYywgaXQncyBleHBvcnRlZCBhbmQgaW4gYG5ldC9jb3JlL2Rldm1lbS5jYCwgc28gaXQncyBhY2Nlc3NpYmxlLiBUaGlzIG5lZWRzIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YCBhZ2FpbiwgYnV0IHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIwNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTo0MS41MzU3MTA4NjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTI2Mjk4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXBfZG1hYnVmX2Rldm1lbV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTQzNz1uZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtNDUyLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQ1MzppbnQgbXBfZG1hYnVmX2Rldm1lbV9pbml0KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxubmV0L2NvcmUvZGV2bWVtLmMtNDU0LXtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTU0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9wcm92aWRlcl9vcHMgZG1hYnVmX2Rldm1lbV9vcHMgPSB7XFxubmV0L2NvcmUvZGV2bWVtLmM6NTQ4OlxcdC5pbml0XFx0XFx0XFx0PSBtcF9kbWFidWZfZGV2bWVtX2luaXQsXFxubmV0L2NvcmUvZGV2bWVtLmMtNTQ5LVxcdC5kZXN0cm95XFx0XFx0PSBtcF9kbWFidWZfZGV2bWVtX2Rlc3Ryb3ksXFxuLS1cXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTMtI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oOjE0OmludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCk7XFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTE1LVxcbi0tXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oPTIwPWJvb2wgbXBfZG1hYnVmX2Rldm1lbV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0pO1xcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0yMS0jZWxzZVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaDoyMjpzdGF0aWMgaW5saW5lIGludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTo0NS40MjgzNDYwMjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMTY4NzI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgcmVmbGVjdGluZyBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgYSBETUEgQWRkcmVzcyBSZXRyaWV2YWwgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gdGhpcyBjb2RlIHNlZ21lbnQncyBmb2N1cyBpcyBvbiBzb21ldGhpbmcgdGhhdCdzIG5vdCwgd2VsbCwgc3RhdGljLiBUaGF0J3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGFuZCBpdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHJgIGlzICphY3R1YWxseSogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIGhlcmUuIEtub3dpbmcgaXRzIHNjb3BlIOKAkyB3aGV0aGVyIGl0J3MgY29uZmluZWQgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IG9yIHZpc2libGUgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIOKAkyBpcyB2aXRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgaG93IGl0IGNhbiBiZSB1dGlsaXplZCAob3IsIG1vcmUgaW1wb3J0YW50bHksICpub3QqIHV0aWxpemVkKSBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTgwNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ1OjQ4LjYzMDAzODY2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg4MTQ4NjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2dldF9kbWFfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zMz1zdGF0aWMgdm9pZCBuZXRfZGV2bWVtX2RtYWJ1Zl9mcmVlX2NodW5rX293bmVyKHN0cnVjdCBnZW5fcG9vbCAqZ2VucG9vbCxcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQyLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQzOnN0YXRpYyBkbWFfYWRkcl90IG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ0LXtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTExMz12b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0xMTUtXFx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nKG5pb3YpO1xcbm5ldC9jb3JlL2Rldm1lbS5jOjExNjpcXHR1bnNpZ25lZCBsb25nIGRtYV9hZGRyID0gbmV0X2Rldm1lbV9nZXRfZG1hX2FkZHIobmlvdik7XFxubmV0L2NvcmUvZGV2bWVtLmMtMTE3LVxcdHNpemVfdCBuaW92X3NpemUgPSAxVUwgXFx1MDAzY1xcdTAwM2MgYmluZGluZy1cXHUwMDNlbmlvdl9zaGlmdDtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jPTE4OT1uZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0zMjAtXFx0XFx0XFx0cGFnZV9wb29sX3NldF9kbWFfYWRkcl9uZXRtZW0obmV0X2lvdl90b19uZXRtZW0obmlvdiksXFxubmV0L2NvcmUvZGV2bWVtLmM6MzIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5ldF9kZXZtZW1fZ2V0X2RtYV9hZGRyKG5pb3YpKTtcXG5uZXQvY29yZS9kZXZtZW0uYy0zMjItXFx0XFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NTo1Mi41MTE1MzQxODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg0Mjk0NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb2N1cyBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZ29pbmcgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgdG91Y2hlZCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGZvciB0aGlzLlxuXG5GaXJzdCwgdGhlIGBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcmAgZnVuY3Rpb24gaXMgc3RhdGljLCBzbyBJJ20gbm90IGdvaW5nIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Qgb2YgRm9jdXNTeW1ib2xzLiBBbmQgSSdtIG5vdCBnb2luZyB0byBpbmNsdWRlIGBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWZgLCBldmVuIHRob3VnaCBpdCdzIHBhcnQgb2YgdGhlIGxpZmVjeWNsZSwgc2luY2UgaXQncyBub3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC5cblxuU28sIGhlcmUncyBteSBpbml0aWFsIGxpc3Qgb2YgRm9jdXNTeW1ib2xzOlxuKiAgIGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YFxuKiAgIGBuZXRkZXZfbmxfYmluZF90eF9kb2l0YFxuKiAgIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYFxuKiAgIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZmBcbiogICBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWBcbiogICBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGBcbiogICBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YFxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGluZGVlZCBtb2RpZmllZC4gSSBzZWUgdGhhdCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAgaXMgY2hhbmdlZCB0byBwYXNzIGBQQUdFX1NISUZUYCB0byBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAuIEdvb2QuIFRoZW4sIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCBpdHNlbGYgaXMgbW9kaWZpZWQgdG8gdGFrZSBgbmlvdl9zaGlmdGAuIE9rYXksIGFuZCB0aGUgY2hhbmdlcyByaXBwbGUgZG93bi4gYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCwgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgLCBhbmQgYG5ldF9kZXZtZW1fZ2V0X25pb3ZfYXRgIGFyZSBhbGwgdXBkYXRlZCB0byB1c2UgYGJpbmRpbmctXHUwMDNlbmlvdl9zaGlmdGAsIGFuZCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAgaXMgbW9kaWZpZWQgdG8gc2V0IGBtcF9wYXJhbXMucnhfcGFnZV9zaXplYC4gRmluYWxseSwgYG1wX2RtYWJ1Zl9kZXZtZW1faW5pdGAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgYHBvb2wtXHUwMDNlcC5vcmRlciAhPSBiaW5kaW5nLVx1MDAzZW5pb3Zfc2hpZnQgLSBQQUdFX1NISUZUYC4gTG9va3MgbGlrZSBhbGwgYXJlIHRvdWNoZWQuXG5cbk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkndmUgZ290IHRvIGRldGVybWluZSB0aGUgbWluaW11bSBjb25maWcgb3B0aW9ucyBuZWVkZWQgdG8gcmVhY2ggdGhpcyBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb2RlIHJlbGF0ZWQgdG8gYFNZTkNfRklMRWAsIHdoaWNoIHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYC4gQnV0IGBORVRfREVWTUVNYCBkZXBlbmRzIG9uIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoZXJlZm9yZSwgSSBjYW4ganVzdCBsaXN0IGVpdGhlciBgU1lOQ19GSUxFYCBvciBgRE1BX1NIQVJFRF9CVUZGRVJgLiBXYWl0LCBpZiBJIGxpc3QgYERNQV9TSEFSRURfQlVGRkVSYCwgYW5kIGl0IGhhcyBubyBwcm9tcHQsIHN5emthbGxlciBtaWdodCBub3QgYmUgYWJsZSB0byBlbmFibGUgaXQgZGlyZWN0bHkuIFNvLCBsaXN0aW5nIGBTWU5DX0ZJTEVgIHdoaWNoIGhhcyBhIHByb21wdCBpcyBiZXR0ZXIuIEFsdGVybmF0aXZlbHksIGBETUFCVUZfSEVBUFNgIGlzIGFsc28gYSBnb29kIGNob2ljZS4gSSdsbCBqdXN0IGxpc3QgYFNZTkNfRklMRWAuIEknbGwgZ28gYmFjayBhbmQgY2hlY2sgYG5ldC9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3IgYE5FVF9ERVZNRU1gIHRoYXQgSSBhbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NjowMi4zNTQ0ODQ4NjJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcbiAgNjY6XFx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXFxuICA2NzpcXHRcXHRib29sXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBORVRfREVWTUVNXFxuICA3MDpcXHRcXHRkZWZfYm9vbCB5XFxuICA3MTpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDczOlxcdFxcdGRlcGVuZHMgb24gUEFHRV9QT09MXFxuICA3NDpcXHRcXG4gIDc1OlxcdGNvbmZpZyBORVRfU0hBUEVSXFxuICA3NjpcXHRcXHRib29sXFxuICA3NzpcXHRcXG4gIDc4OlxcdGNvbmZpZyBORVRfQ1JDMzJDXFxuICA3OTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjAyLjM1NDYxNTY0MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjk0NzA4MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIE5FVF9ERVZNRU0gVGVzdGluZyoqXG5cbk9rYXksIGhlcmUncyBob3cgSSdtIGFwcHJvYWNoaW5nIGVuYWJsaW5nIGBORVRfREVWTUVNYCBmb3IgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldCBzbyBzeXprYWxsZXIgY2FuIGJ1aWxkIGEgdmFsaWQga2VybmVsIGNvbmZpZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSdkIGhhdmUgdG8gZXhwbGljaXRseSBsaXN0IGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGJlY2F1c2UgYE5FVF9ERVZNRU1gIGRlcGVuZHMgb24gdGhlbS4gQnV0IHRoZW4gSSByZW1lbWJlcmVkIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBgZGVwZW5kcyBvbmA6IGl0IGF0dGVtcHRzIHRvIGVuYWJsZSB0aGUgZGVwZW5kZW5jaWVzLiBJZiB0aGV5J3JlIHVucHJvbXB0ZWQsIHRoaXMgY291bGQgc3RpbGwgZmFpbC5cblxuSSBrbm93IGBTWU5DX0ZJTEVgIHNlbGVjdHMgYERNQV9TSEFSRURfQlVGRkVSYCwgc28gbGlzdGluZyBgU1lOQ19GSUxFYCBzaG91bGQgc2F0aXNmeSB0aGF0IGRlcGVuZGVuY3kuIEFuZCwgYFBBR0VfUE9PTGAgaXMgc2VsZWN0ZWQgYnkgYm90aCBgVkVUSGAgYW5kIGBCUEZfU1lTQ0FMTGAsIHdoaWNoIGFyZSBnZW5lcmFsbHkgZW5hYmxlZCwgc28gSSB0aG91Z2h0IGp1c3QgbGlzdGluZyBpdCB3YXMgZW5vdWdoLiBKdXN0IHRvIGJlIHNhZmUsIHRob3VnaCwgbGV0J3MgaW5jbHVkZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGV4cGxpY2l0bHkgaW4gdGhlIGNvbmZpZyBhcyB3ZWxsLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyFcblxuSG93ZXZlciwgb24gc2Vjb25kIHRob3VnaHQsIGBORVRfREVWTUVNYCBpcyBhIGBkZWZfYm9vbCB5YCwgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGNvcnJlY3QsIHRob3VnaC5cblxuUmlnaHQsIHNvIHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gY29uZmlndXJlIHRoZSBSWCBwYWdlIHNpemUgaW4gZGV2bWVtIFRDUC4gSXQgZGlyZWN0bHkgbW9kaWZpZXMgY3JpdGljYWwgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdG8gbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhhdCdzIHNvbWV0aGluZyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGV4cG9zZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhlIGNvZGUsIGFuZCBJIGtub3cgdGhlc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbjogYG5ldGRldl9ubF9iaW5kX3J4X2RvaXRgLCBgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdGAsIGBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmYCwgYG5ldF9kZXZtZW1fZnJlZV9kbWFidWZgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZWAsIGBuZXRfZGV2bWVtX2dldF9uaW92X2F0YCwgYW5kIGBtcF9kbWFidWZfZGV2bWVtX2luaXRgLlxuXG5UaGVyZWZvcmUsIHRvIGJlIGFzIGNvbmZpZGVudCBhcyBwb3NzaWJsZSBpbiBteSBjb25maWd1cmF0aW9uLCBJJ20gZ29pbmcgdG8gbGlzdCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBgU1lOQ19GSUxFYCwgYW5kIGBQQUdFX1BPT0xgLiBUaGF0IHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5CdXQgd2FpdCwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gT2theSwgSSBzZWUgdGhhdCBgR0VORVJJQ19BTExPQ0FUT1JgIGlzIGFsc28gc2VsZWN0ZWQgYnkgYE5FVF9ERVZNRU1gLlxuXG5BbmQgZmluYWxseSwgbG9va2luZyBhdCB0aGUgc2VsZnRlc3QsIGl0IHVzZXMgYG5jZGV2bWVtYCwgd2hpY2ggaW4gdHVybiB1c2VzIGBtZW1mZF9jcmVhdGVgIGFuZCBgdWRtYWJ1ZmAuIFNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBVRE1BQlVGYCBpcyBzZXQgdG9vLiBPa2F5LCBsZXQncyBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA4NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjEwLjY0OTMyNzA3MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2OTUxOTU5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVURNQUJVRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJ1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwODo0NjoxNC4zMTg4NTIwNjhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNDgyMjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQWRkaW5nIGBVRE1BQlVGYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBVRE1BQlVGYCBpcyBjbGVhcmx5IGEgYm9vbGVhbiBjb25maWcgb3B0aW9uIHdpdGggYSBwcm9tcHQsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB0aGUgdXNlciBnZXRzIGEgY2hvaWNlIGFib3V0IGl0LiBNb3JlIGltcG9ydGFudGx5LCBpdCBzZWVtcyB0aGlzIGlzIGhvdyBkbWFidWZzIGFyZSBjcmVhdGVkIGZyb20gdXNlciBzcGFjZSBtZW1vcnkuIFRoYXQncyAqZXhhY3RseSogd2hhdCBJJ2QgZXhwZWN0IHRvIHNlZSBpbiBhIHNlbGZ0ZXN0IHNjZW5hcmlvLCBhbmQgaXQncyBhbHNvIHRoZSBsaWtlbHkgcGF0aCBzeXprYWxsZXIgd291bGQgdGFrZSB0byBmdXp6IHRoaXMgZnVuY3Rpb25hbGl0eS4gU28sIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSBuZWVkIHRvIGluY2x1ZGUuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblRoZXJlZm9yZSwgbGV0J3MgZ28gYWhlYWQgYW5kIGFkZCBgVURNQUJVRmAgdG8gdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgd2UncmUgdHJhY2tpbmcuIE5vdywgYmVmb3JlIHdlIHByb2NlZWQgZnVydGhlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpdCBkZXBlbmRzIG9uLiBMZXQncyBkaWcgaW50byBgVURNQUJVRmAncyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBrbm93IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYXJlIHJlcXVpcmVkIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHksIG9yIHdoaWNoIGNhbiBhZmZlY3QgaXRzIGJlaGF2aW91ciBhbmQgYXR0YWNrIHN1cmZhY2UuIFRoYXQncyBuZXh0IG9uIHRoZSBsaXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM1NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjE4LjQyMzY3NzIzM1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0ICBXQVJOSU5HOiBpbXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbFxcbiAgMzE6XFx0XFx0ICBkcml2ZXJzIGZyb20gdXNlcnNwYWNlLiBJbnRlbmRlZCBmb3IgdGVzdCBhbmQgZGVidWcgb25seS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIFVETUFCVUZcXG4gIDM0OlxcdFxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuICAzNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTUVNRkRfQ1JFQVRFIHx8IENPTVBJTEVfVEVTVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gIDM5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MTguNDIzODI1OTQzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTEwMDc4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgVURNQUJVRmAgaGVyZS4gUmlnaHQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgZGVwZW5kcyBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBNRU1GRF9DUkVBVEVgLiBNYWtlcyBzZW5zZSwgcmlnaHQ/IE5vdywgdGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoaXM6IGlmIGVuYWJsaW5nIGBVRE1BQlVGYCAqcmVxdWlyZXMqIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgIGRvZXNuJ3QgZXZlbiBoYXZlIGEgcHJvbXB0LCBob3cgb24gZWFydGggaXMgYSB1c2VyIHN1cHBvc2VkIHRvIGFjdHVhbGx5ICplbmFibGUqIGBVRE1BQlVGYD8gVGhhdCBmZWVscyBsaWtlIGEgZ2xhcmluZyBvbWlzc2lvbi5cblxuQWhhISBHb3QgaXQuIEkgc2hvdWxkIGhhdmUgY29uc2lkZXJlZCB0aGF0IGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgbGlrZWx5IHNlbGVjdGVkIGJ5ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zLCByaWdodD8gTGV0J3Mgc2VlLi4uaWYgd2UgZW5hYmxlIGBTWU5DX0ZJTEVgLCBib29tLCBgRE1BX1NIQVJFRF9CVUZGRVJgIGdldHMgcHVsbGVkIGluLiBBbmQgKnRoZW4qIHdlIGNhbiBlbmFibGUgYFVETUFCVUZgLiBUaGF0IGV4cGxhaW5zIGl0LiBTbywgYSB1c2VyIHdhbnRpbmcgYFVETUFCVUZgIHdpbGwgbGlrZWx5IG5lZWQgdG8gZW5hYmxlIGBTWU5DX0ZJTEVgLlxuXG5TbywgdGhlIGtleSBvcHRpb25zIHRvIGNvbnNpZGVyIHdvdWxkIGJlOlxuXG4qICAgYFNZTkNfRklMRWAgKHRoaXMgaW5kaXJlY3RseSBlbmFibGVzIGBETUFfU0hBUkVEX0JVRkZFUmApXG4qICAgYFVETUFCVUZgICh0aGUgZGVzaXJlZCBvcHRpb24pXG4qICAgYERNQV9TSEFSRURfQlVGRkVSYCAoYSBkZXBlbmRlbmN5IG9mIGBVRE1BQlVGYClcbiogICBgUEFHRV9QT09MYCAoY291bGQgYmUgcmVsZXZhbnQgZGVwZW5kaW5nIG9uIHRoZSB1c2UgY2FzZSlcblxuTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHNpdHVhdGlvbiB3aXRoIGBNRU1GRF9DUkVBVEVgLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODU0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MjMuMTE0ODM3MzE3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ1NjQ5Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1GRF9DUkVBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzUwPWNvbmZpZyBLTUFQX0xPQ0FMX05PTl9MSU5FQVJfUFRFX0FSUkFZXFxuLS1cXG5tbS9LY29uZmlnLTEzNTItXFxubW0vS2NvbmZpZzoxMzUzOmNvbmZpZyBNRU1GRF9DUkVBVEVcXG5tbS9LY29uZmlnLTEzNTQtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbWZkX2NyZWF0ZSgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MjcuMTYwNDkzMzI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODY2ODY3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmV2aWV3aW5nIEtlcm5lbCBETUEgQnVmZmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgTUVNRkRfQ1JFQVRFYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgaW5mbHVlbmNlcyBob3cgd2UncmUgYXBwcm9hY2hpbmcgdGhpcyBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb24uXG5cbkdpdmVuIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Uga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBTWU5DX0ZJTEVgLCBgVURNQUJVRmAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBzZXQgb2YgY29uZmlncyBzaG91bGQgc3VwcG9ydCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UuXG5cbk5vdywgbGV0J3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRob3NlIGBGb2N1c1N5bWJvbHNgIHdlIGlkZW50aWZpZWQgZWFybGllci4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gc3RpbGwgb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggdGhvc2U6IGBuZXRkZXZfbmxfYmluZF9yeF9kb2l0YCwgYG5ldGRldl9ubF9iaW5kX3R4X2RvaXRgLCBgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZmAsIGBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmYCwgYG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWVgLCBgbmV0X2Rldm1lbV9nZXRfbmlvdl9hdGAsIGFuZCBgbXBfZG1hYnVmX2Rldm1lbV9pbml0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lLlxuXG5IYXZlIHRoZXJlIGJlZW4gYW55ICpvdGhlciogZnVuY3Rpb25zLCBvdXRzaWRlIG9mIHRoaXMgZm9jdXNlZCBzZXQsIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ/IExldCdzIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvZGV2bWVtLmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA4OjQ2OjMxLjc0NzE4NDYyN1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjE3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2lvdl90b19jaHVua19vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz00Mz1zdGF0aWMgZG1hX2FkZHJfdCBuZXRfZGV2bWVtX2dldF9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5jLTQ2LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjQ3OlxcdG93bmVyID0gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdik7XFxubmV0L2NvcmUvZGV2bWVtLmMtNDgtXFx0cmV0dXJuIG93bmVyLVxcdTAwM2ViYXNlX2RtYV9hZGRyICtcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTEwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciAqXFxubmV0L2NvcmUvZGV2bWVtLmg6MTA4Om5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbm5ldC9jb3JlL2Rldm1lbS5oLTEwOS17XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xMTY9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG5uZXQvY29yZS9kZXZtZW0uaC0xMTcte1xcbm5ldC9jb3JlL2Rldm1lbS5oOjExODpcXHRyZXR1cm4gbmV0X2Rldm1lbV9pb3ZfdG9fY2h1bmtfb3duZXIobmlvdiktXFx1MDAzZWJpbmRpbmc7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTE5LX1cXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTEyNj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaC0xMjgtXFx0c3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyICpjbyA9XFxubmV0L2NvcmUvZGV2bWVtLmg6MTI5OlxcdFxcdG5ldF9kZXZtZW1faW92X3RvX2NodW5rX293bmVyKG5pb3YpO1xcbm5ldC9jb3JlL2Rldm1lbS5oLTEzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6MzYuMTA5MzkwNzYzWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDQzMDAxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5OlxuXG4qKkZvY3VzIFN5bWJvbCBWZXJpZmljYXRpb24gQ29tcGxldGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0IGBuZXRfaW92X3ZpcnR1YWxfYWRkcmAuIEkgc2VlIGl0J3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgIGFuZCwgYXMgZXhwZWN0ZWQsIGl0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBTaW5jZSB3ZSBzcGVjaWZpY2FsbHkgZXhjbHVkZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0IG1lYW5zIHRoZSBleGNsdXNpb24gcHJvY2VzcyB3b3JrZWQgYXMgaXQgc2hvdWxkLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgb25lLlxuXG5Hb29kLiBJdCBsb29rcyBsaWtlIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIHN0YWJsZSBhbmQgYWNjdXJhdGUgYXQgdGhpcyBwb2ludC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0MDAsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDg6NDY6NDEuMDEzNjk0MjZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI5MDA0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZTkNfRklMRVwiLFxuICAgIFwiVURNQUJVRlwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9ubF9iaW5kX3J4X2RvaXRcIixcbiAgICBcIm5ldGRldl9ubF9iaW5kX3R4X2RvaXRcIixcbiAgICBcIm5ldF9kZXZtZW1fYmluZF9kbWFidWZcIixcbiAgICBcIm5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlXCIsXG4gICAgXCJuZXRfZGV2bWVtX2dldF9uaW92X2F0XCIsXG4gICAgXCJtcF9kbWFidWZfZGV2bWVtX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBSWCBwYWdlIHNpemUgZm9yIGRldm1lbSBUQ1AgdmlhIHRoZSBgcngtcGFnZS1zaXplYCBuZXRsaW5rIGF0dHJpYnV0ZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgZGV2bWVtIFRDUCBjb2RlIHRvIGhhbmRsZSBub24tUEFHRV9TSVpFIGFsbG9jYXRpb25zIGFuZCBtYXBwaW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHVzaW5nIG5ldGtpdCBvciB2ZXRoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWU5DX0ZJTEVcIixcbiAgICBcIlVETUFCVUZcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfYmluZF9yeF9kb2l0XCIsXG4gICAgXCJuZXRkZXZfbmxfYmluZF90eF9kb2l0XCIsXG4gICAgXCJuZXRfZGV2bWVtX2JpbmRfZG1hYnVmXCIsXG4gICAgXCJuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZlwiLFxuICAgIFwibmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZVwiLFxuICAgIFwibmV0X2Rldm1lbV9nZXRfbmlvdl9hdFwiLFxuICAgIFwibXBfZG1hYnVmX2Rldm1lbV9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBjb25maWd1cmluZyB0aGUgUlggcGFnZSBzaXplIGZvciBkZXZtZW0gVENQIHZpYSB0aGUgYHJ4LXBhZ2Utc2l6ZWAgbmV0bGluayBhdHRyaWJ1dGUuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGRldm1lbSBUQ1AgY29kZSB0byBoYW5kbGUgbm9uLVBBR0VfU0laRSBhbGxvY2F0aW9ucyBhbmQgbWFwcGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB1c2luZyBuZXRraXQgb3IgdmV0aCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlbgdh[1] Phase: Succeeded StartedAt: 2026-07-26 08:46:53 +0000 UTC FinishedAt: 2026-07-26 08:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 08:46:53 +0000 UTC FinishedAt: 2026-07-26 08:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2] Phase: Succeeded StartedAt: 2026-07-26 08:46:53 +0000 UTC FinishedAt: 2026-07-26 13:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 08:46:53 +0000 UTC FinishedAt: 2026-07-26 13:33:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 08:46:53 +0000 UTC FinishedAt: 2026-07-26 08:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 08:46:53 +0000 UTC FinishedAt: 2026-07-26 08:47:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowlbgdh/series-workflowlbgdh-convert-artifact-2841693748/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 08:47:32 +0000 UTC FinishedAt: 2026-07-26 09:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 08:47:32 +0000 UTC FinishedAt: 2026-07-26 09:37:31 +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:*aeb2796f-558d-4d53-b5b8-213e14d217ec,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-workflowlbgdh/series-workflowlbgdh-convert-artifact-2841693748/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": "fef691f9-59a2-4ffc-bdc4-00f88f83a169", "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-workflowlbgdh/series-workflowlbgdh-build-action-96764978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 08:47:32 +0000 UTC FinishedAt: 2026-07-26 09:37:21 +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:*aeb2796f-558d-4d53-b5b8-213e14d217ec,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-workflowlbgdh/series-workflowlbgdh-convert-artifact-2841693748/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": "fef691f9-59a2-4ffc-bdc4-00f88f83a169", "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-workflowlbgdh/series-workflowlbgdh-build-action-96764978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 09:37:31 +0000 UTC FinishedAt: 2026-07-26 09:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 09:37:31 +0000 UTC FinishedAt: 2026-07-26 09:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 09:37:31 +0000 UTC FinishedAt: 2026-07-26 09:37:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 09:37:31 +0000 UTC FinishedAt: 2026-07-26 09:37:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowlbgdh/series-workflowlbgdh-convert-artifact-3459682291/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 09:37:41 +0000 UTC FinishedAt: 2026-07-26 09:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 09:37:41 +0000 UTC FinishedAt: 2026-07-26 09:39:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fef691f9-59a2-4ffc-bdc4-00f88f83a169,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-workflowlbgdh/series-workflowlbgdh-build-action-96764978/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-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 09:39:45 +0000 UTC FinishedAt: 2026-07-26 09:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 09:39:45 +0000 UTC FinishedAt: 2026-07-26 09:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 09:39:45 +0000 UTC FinishedAt: 2026-07-26 10:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 09:39:45 +0000 UTC FinishedAt: 2026-07-26 10:29:47 +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:*aeb2796f-558d-4d53-b5b8-213e14d217ec,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-workflowlbgdh/series-workflowlbgdh-convert-artifact-3459682291/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": "4e7d2e89-90d4-4ea6-9b5e-3657342ca236", "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-workflowlbgdh/series-workflowlbgdh-build-action-861751207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 09:39:45 +0000 UTC FinishedAt: 2026-07-26 10:29:37 +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:*aeb2796f-558d-4d53-b5b8-213e14d217ec,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-workflowlbgdh/series-workflowlbgdh-convert-artifact-3459682291/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": "4e7d2e89-90d4-4ea6-9b5e-3657342ca236", "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-workflowlbgdh/series-workflowlbgdh-build-action-861751207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 10:29:47 +0000 UTC FinishedAt: 2026-07-26 10:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 10:29:47 +0000 UTC FinishedAt: 2026-07-26 10:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 10:29:47 +0000 UTC FinishedAt: 2026-07-26 10:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 10:29:47 +0000 UTC FinishedAt: 2026-07-26 10:31:36 +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:*4e7d2e89-90d4-4ea6-9b5e-3657342ca236,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-workflowlbgdh/series-workflowlbgdh-build-action-861751207/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-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 13:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 13:33:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fef691f9-59a2-4ffc-bdc4-00f88f83a169,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e7d2e89-90d4-4ea6-9b5e-3657342ca236,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-workflowlbgdh/series-workflowlbgdh-build-action-96764978/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-workflowlbgdh/series-workflowlbgdh-build-action-861751207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 10:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 10:31:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlbgdh/series-workflowlbgdh-convert-artifact-2908068588/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 10:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 10:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 10:31:46 +0000 UTC FinishedAt: 2026-07-26 10:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 10:31:56 +0000 UTC FinishedAt: 2026-07-26 13:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlbgdh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_bind_rx_doit","netdev_nl_bind_tx_doit","net_devmem_bind_dmabuf","net_devmem_alloc_dmabuf","net_devmem_free_dmabuf","net_devmem_bind_dmabuf_to_queue","net_devmem_get_niov_at","mp_dmabuf_devmem_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYNC_FILE","UDMABUF","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"d64e8b99-6897-4c72-96fa-30aa17439b79","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 10:31:56 +0000 UTC FinishedAt: 2026-07-26 13:33:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fef691f9-59a2-4ffc-bdc4-00f88f83a169,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e7d2e89-90d4-4ea6-9b5e-3657342ca236,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-workflowlbgdh/series-workflowlbgdh-build-action-96764978/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-workflowlbgdh/series-workflowlbgdh-build-action-861751207/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-workflowlbgdh/series-workflowlbgdh-convert-artifact-2908068588/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,}