Name: series-workflowwp8br Phase: Succeeded StartedAt: 2026-07-06 13:15:47 +0000 UTC FinishedAt: 2026-07-06 15:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[0] Phase: Succeeded StartedAt: 2026-07-06 13:15:47 +0000 UTC FinishedAt: 2026-07-06 13:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 13:15:47 +0000 UTC FinishedAt: 2026-07-06 13:49:57 +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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETXEN_NIC" ], "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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETXEN_NIC" ], "series_id": "8aa0fcb4-c456-45a3-8588-21c0e6c7fd82" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netxen_rom_range_valid", "netxen_rom_table_valid", "netxen_rom_entry_valid", "nx_get_table_desc", "netxen_nic_validate_header", "netxen_nic_validate_bootld", "netxen_nic_validate_fw", "netxen_nic_validate_product_offs", "nx_get_data_desc" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFhFTl9OSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkJiMzNDssCiAgICAmIzM0O25ldHhlbl9yb21fdGFibGVfdmFsaWQmIzM0OywKICAgICYjMzQ7bmV0eGVuX3JvbV9lbnRyeV92YWxpZCYjMzQ7LAogICAgJiMzNDtueF9nZXRfdGFibGVfZGVzYyYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlciYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3JiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzJiMzNDssCiAgICAmIzM0O254X2dldF9kYXRhX2Rlc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIGZpcm13YXJlIHBhcnNpbmcgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGaXJtd2FyZSBwYXJzaW5nIGlzIHJlYWNoYWJsZSB2aWEgYHJlcXVlc3RfZmlybXdhcmVgIHdoZW4gdGhlIGRyaXZlciBwcm9iZXMgYSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgY2FuIGZ1enogdGhpcyBieSBpbmplY3RpbmcgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIHRoaXMgbG9naWMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgY29ycmVjdGx5IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI0MjYwMjQ5MDE3ZjFkMzUzNTZjZWE1OWNjM2JlNGVmMTA5MGNkMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDEzOjQzOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXG5pbmRleCA4YmM0ZTJiNjk1NjllNS4uNTcyMmM1NWZhMGNjZTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXG5AQCAtNTYxLDIwICYjNDM7NTYxLDU1IEBAIGludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKm54X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIGludCBzZWN0aW9uKVxuJiM0MzsjZGVmaW5lIE5YX1VOSV9ESVJfVFlQRV9PRkZcdFx0OFxuJiM0MzsjZGVmaW5lIE5YX1VOSV9ESVJfRU5UUllfTUlOX1NJWkUgXFxcbiYjNDM7XHQoKE5YX1VOSV9ESVJfVFlQRV9PRkYgJiM0MzsgMSkgKiBzaXplb2YodTMyKSlcbiYjNDM7I2RlZmluZSBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSBcXFxuJiM0MztcdCgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgJiM0MzsgMSkgKiBzaXplb2YodTMyKSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5ldHhlbl9yb21fcmFuZ2VfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBsZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2ZmIFx1MDAzYz0gc2l6ZSBcdTAwMjZcdTAwMjYgbGVuIFx1MDAzYz0gc2l6ZSAtIG9mZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmV0eGVuX3JvbV90YWJsZV92YWxpZChzaXplX3Qgc2l6ZSwgdTMyIG9mZiwgdTMyIG4sIHUzMiBlc3opXG4mIzQzO3tcbiYjNDM7XHRpZiAob2ZmIFx1MDAzZSBzaXplKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICghZXN6KVxuJiM0MztcdFx0cmV0dXJuIG4gPT0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG4gXHUwMDNjPSAoc2l6ZSAtIG9mZikgLyBlc3o7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5ldHhlbl9yb21fZW50cnlfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBlc3osIHUzMiBpZHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWVzeiB8fCBvZmYgXHUwMDNlIHNpemUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZHggXHUwMDNjIChzaXplIC0gb2ZmKSAvIGVzejtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqXG4mIzQzO254X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIHNpemVfdCBmd19zaXplLCBpbnQgc2VjdGlvbilcbiB7XG4tXHR1aW50MzJfdCBpO1xuIFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbi1cdF9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbiYjNDM7XHR1MzIgZW50cmllcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VudW1fZW50cmllcyk7XG4mIzQzO1x0dTMyIGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZW50cnlfc2l6ZSk7XG4mIzQzO1x0dTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdHUzMiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRpZiAoZW50cnlfc2l6ZSBcdTAwM2MgTlhfVU5JX0RJUl9FTlRSWV9NSU5fU0laRSB8fFxuJiM0MztcdCAgICAhbmV0eGVuX3JvbV90YWJsZV92YWxpZChmd19zaXplLCBmaW5kZXgsIGVudHJpZXMsIGVudHJ5X3NpemUpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRcdF9fbGUzMiBvZmZzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0XHRcdChpICogY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWVudHJ5X3NpemUpKTtcbi1cdFx0X19sZTMyIHRhYl90eXBlID0gY3B1X3RvX2xlMzIoKigodTMyICopXHUwMDI2dW5pcm9tW29mZnNdICYjNDM7IDgpKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2l6ZV90IG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdClpICogZW50cnlfc2l6ZTtcbiYjNDM7XHRcdHUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKVx1MDAyNnVuaXJvbVtvZmZzXSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHROWF9VTklfRElSX1RZUEVfT0ZGKSk7XG4gXG4gXHRcdGlmICh0YWJfdHlwZSA9PSBzZWN0aW9uKVxuLVx0XHRcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVtvZmZzXTtcbiYjNDM7XHRcdFx0cmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC01ODYsMjAgJiM0Mzs2MjEsMTggQEAgc3RhdGljIGludFxuIG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRjb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbiYjNDM7XHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKmRpcmVjdG9yeSA9IChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKilcdTAwMjZ1bmlyb21bMF07XG4gXHR1MzIgZndfZmlsZV9zaXplID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0X19sZTMyIGVudHJpZXM7XG4tXHRfX2xlMzIgZW50cnlfc2l6ZTtcbiYjNDM7XHR1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4O1xuIFxuIFx0aWYgKGZ3X2ZpbGVfc2l6ZSBcdTAwM2MgUUxDTklDX0ZJTEVIRUFERVJfU0laRSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbiBcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZW50cnlfc2l6ZSk7XG4tXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VmaW5kZXgpICYjNDM7IChlbnRyaWVzICogZW50cnlfc2l6ZSk7XG4mIzQzO1x0ZmluZGV4ID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWZpbmRleCk7XG4gXG4tXHRpZiAoZndfZmlsZV9zaXplIFx1MDAzYyB0YWJfc2l6ZSlcbiYjNDM7XHRpZiAoIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoZndfZmlsZV9zaXplLCBmaW5kZXgsIGVudHJpZXMsIGVudHJ5X3NpemUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTYxMSwzMCAmIzQzOzY0NCwzMCBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xuIFx0c3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyO1xuIFx0Y29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlZGF0YTtcbi1cdF9fbGUzMiBpZHggPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bYWRhcHRlci1cdTAwM2VmaWxlX3ByZF9vZmZdICYjNDM7XG4tXHRcdFx0XHROWF9VTklfQk9PVExEX0lEWF9PRkYpKTtcbi1cdHUzMiBvZmZzO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0dTMyIGRhdGFfc2l6ZTtcbiYjNDM7XHR1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDtcbiYjNDM7XHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9CT09UTEQ7XG4mIzQzO1x0c2l6ZV90IG9mZnM7XG4gXG4tXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX0JPT1RMRCk7XG4mIzQzO1x0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW2FkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmXSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIE5YX1VOSV9CT09UTERfSURYX09GRikpO1xuJiM0MztcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFxuIFx0aWYgKCF0YWJfZGVzYylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICYjNDM7IDEpKTtcbi1cbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIHRhYl9zaXplKVxuJiM0MztcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VlbnRyeV9zaXplKTtcbiYjNDM7XHRmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBzaXplb2YoKmRlc2NyKSB8fFxuJiM0MztcdCAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGZpbmRleCwgZW50cnlfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIGlkeCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xuJiM0MztcdG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xuIFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4mIzQzO1x0ZGF0YV9vZmYgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdGRhdGFfbGVuID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlc2l6ZSk7XG4gXG4tXHRkYXRhX3NpemUgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpICYjNDM7IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgZGF0YV9zaXplKVxuJiM0MztcdGlmICghbmV0eGVuX3JvbV9yYW5nZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjQ2LDI5ICYjNDM7Njc5LDMwIEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfZncoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICp0YWJfZGVzYztcbiBcdHN0cnVjdCB1bmlfZGF0YV9kZXNjICpkZXNjcjtcbiBcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZWRhdGE7XG4tXHRfX2xlMzIgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW2FkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmXSAmIzQzO1xuLVx0XHRcdFx0TlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKTtcbi1cdHUzMiBvZmZzO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0dTMyIGRhdGFfc2l6ZTtcbiYjNDM7XHR1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDtcbiYjNDM7XHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9GVztcbiYjNDM7XHRzaXplX3Qgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfRlcpO1xuJiM0MztcdGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVthZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZl0gJiM0MztcbiYjNDM7XHRcdFx0ICAgICBOWF9VTklfRklSTVdBUkVfSURYX09GRikpO1xuJiM0MztcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFxuIFx0aWYgKCF0YWJfZGVzYylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICYjNDM7IDEpKTtcbi1cbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIHRhYl9zaXplKVxuJiM0MztcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VlbnRyeV9zaXplKTtcbiYjNDM7XHRmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBzaXplb2YoKmRlc2NyKSB8fFxuJiM0MztcdCAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGZpbmRleCwgZW50cnlfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIGlkeCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xuJiM0MztcdG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xuIFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4tXHRkYXRhX3NpemUgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpICYjNDM7IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuJiM0MztcdGRhdGFfb2ZmID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlZmluZGV4KTtcbiYjNDM7XHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuIFxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgZGF0YV9zaXplKVxuJiM0MztcdGlmICghbmV0eGVuX3JvbV9yYW5nZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjgyLDM5ICYjNDM7NzE2LDM3IEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiBcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZWRhdGE7XG4gXHRpbnQgbW5fcHJlc2VudCA9IChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLVx1MDAzZWFody5yZXZpc2lvbl9pZCkpID9cbiBcdFx0XHQxIDogbmV0eGVuX3AzX2hhc19tbihhZGFwdGVyKTtcbi1cdF9fbGUzMiBlbnRyaWVzO1xuLVx0X19sZTMyIGVudHJ5X3NpemU7XG4tXHR1MzIgdGFiX3NpemU7XG4tXHR1MzIgaTtcbiYjNDM7XHR1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4LCBpO1xuJiM0MztcdHUzMiBzZWN0aW9uID0gTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMO1xuIFxuLVx0cHRhYl9kZXNjciA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMKTtcbiYjNDM7XHRwdGFiX2Rlc2NyID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFx0aWYgKHB0YWJfZGVzY3IgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VudW1fZW50cmllcyk7XG4gXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VlbnRyeV9zaXplKTtcbi1cdHRhYl9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VmaW5kZXgpICYjNDM7IChlbnRyaWVzICogZW50cnlfc2l6ZSk7XG4tXG4tXHRpZiAoYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplIFx1MDAzYyB0YWJfc2l6ZSlcbiYjNDM7XHRmaW5kZXggPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWZpbmRleCk7XG4mIzQzO1x0aWYgKGVudHJ5X3NpemUgXHUwMDNjIE5YX1VOSV9QUk9EVUNUX0VOVFJZX01JTl9TSVpFIHx8XG4mIzQzO1x0ICAgICFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgZmluZGV4LCBlbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgICAgZW50cnlfc2l6ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIG5vbW46XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuLVxuLVx0XHRfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldiwgb2ZmcztcbiYjNDM7XHRcdHNpemVfdCBvZmZzO1xuJiM0MztcdFx0X19sZTMyIGZsYWdzLCBmaWxlX2NoaXByZXY7XG4gXHRcdHU4IGNoaXByZXYgPSBhZGFwdGVyLVx1MDAzZWFody5yZXZpc2lvbl9pZDtcbiBcdFx0dWludDMyX3QgZmxhZ2JpdDtcbiBcbi1cdFx0b2ZmcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItXHUwMDNlZmluZGV4KSAmIzQzO1xuLVx0XHRcdFx0KGkgKiBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWVudHJ5X3NpemUpKTtcbiYjNDM7XHRcdG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdClpICogZW50cnlfc2l6ZTtcbiBcdFx0ZmxhZ3MgPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bb2Zmc10gJiM0MzsgTlhfVU5JX0ZMQUdTX09GRikpO1xuIFx0XHRmaWxlX2NoaXByZXYgPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bb2Zmc10gJiM0Mztcbi1cdFx0XHRcdFx0XHRcdE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcbiBcbiBcdFx0ZmxhZ2JpdCA9IG1uX3ByZXNlbnQgPyAxIDogMjtcbiBcbiBcdFx0aWYgKChjaGlwcmV2ID09IGZpbGVfY2hpcHJldikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCgoMVVMTCBcdTAwM2NcdTAwM2MgZmxhZ2JpdCkgXHUwMDI2IGZsYWdzKSkge1xuJiM0MztcdFx0ICAgICgoMVVMTCBcdTAwM2NcdTAwM2MgZmxhZ2JpdCkgXHUwMDI2IGZsYWdzKSkge1xuIFx0XHRcdGFkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmID0gb2ZmcztcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTc2Nyw3ICYjNDM7Nzk5LDcgQEAgc3RhdGljIHN0cnVjdCB1bmlfZGF0YV9kZXNjICpueF9nZXRfZGF0YV9kZXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcbiBcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7XG4gXHRfX2xlMzIgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBzZWN0aW9uKTtcbiYjNDM7XHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplLCBzZWN0aW9uKTtcbiBcbiBcdGlmICh0YWJfZGVzYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRYRU5fTklDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0eGVuX3JvbV9yYW5nZV92YWxpZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkJiMzNDssCiAgICAmIzM0O25ldHhlbl9yb21fZW50cnlfdmFsaWQmIzM0OywKICAgICYjMzQ7bnhfZ2V0X3RhYmxlX2Rlc2MmIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXImIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9ib290bGQmIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9mdyYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2ZmcyYjMzQ7LAogICAgJiMzNDtueF9nZXRfZGF0YV9kZXNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciBmaXJtd2FyZSBwYXJzaW5nIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRmlybXdhcmUgcGFyc2luZyBpcyByZWFjaGFibGUgdmlhIGByZXF1ZXN0X2Zpcm13YXJlYCB3aGVuIHRoZSBkcml2ZXIgcHJvYmVzIGEgZGV2aWNlLCBhbmQgc3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgYnkgaW5qZWN0aW5nIG1hbGZvcm1lZCBmaXJtd2FyZSBibG9icy4gRnV6emluZyB0aGlzIGxvZ2ljIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGNvcnJlY3RseSBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MjYwMjQ5MDE3ZjFkMzUzNTZjZWE1OWNjM2JlNGVmMTA5MGNkMWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDEzOjQzOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggOGJjNGUyYjY5NTY5ZTUuLjU3MjJjNTVmYTBjY2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTU2MSwyMCAmIzQzOzU2MSw1NSBAQCBpbnQgbmV0eGVuX3Bpbml0X2Zyb21fcm9tKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqbnhfZ2V0X3RhYmxlX2Rlc2MoY29uc3QgdTggKnVuaXJvbSwgaW50IHNlY3Rpb24pCiYjNDM7I2RlZmluZSBOWF9VTklfRElSX1RZUEVfT0ZGCQk4CiYjNDM7I2RlZmluZSBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIFwKJiM0MzsJKChOWF9VTklfRElSX1RZUEVfT0ZGICYjNDM7IDEpICogc2l6ZW9mKHUzMikpCiYjNDM7I2RlZmluZSBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSBcCiYjNDM7CSgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgJiM0MzsgMSkgKiBzaXplb2YodTMyKSkKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKHNpemVfdCBzaXplLCB1MzIgb2ZmLCB1MzIgbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9mZiAmbHQ7PSBzaXplICZhbXA7JmFtcDsgbGVuICZsdDs9IHNpemUgLSBvZmY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5ldHhlbl9yb21fdGFibGVfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBuLCB1MzIgZXN6KQomIzQzO3sKJiM0MzsJaWYgKG9mZiAmZ3Q7IHNpemUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghZXN6KQomIzQzOwkJcmV0dXJuIG4gPT0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG4gJmx0Oz0gKHNpemUgLSBvZmYpIC8gZXN6OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKHNpemVfdCBzaXplLCB1MzIgb2ZmLCB1MzIgZXN6LCB1MzIgaWR4KQomIzQzO3sKJiM0MzsJaWYgKCFlc3ogfHwgb2ZmICZndDsgc2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkeCAmbHQ7IChzaXplIC0gb2ZmKSAvIGVzejsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqCiYjNDM7bnhfZ2V0X3RhYmxlX2Rlc2MoY29uc3QgdTggKnVuaXJvbSwgc2l6ZV90IGZ3X3NpemUsIGludCBzZWN0aW9uKQogewotCXVpbnQzMl90IGk7CiAJc3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopICZhbXA7dW5pcm9tWzBdOwotCV9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtudW1fZW50cmllcyk7CiYjNDM7CXUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtudW1fZW50cmllcyk7CiYjNDM7CXUzMiBlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtlbnRyeV9zaXplKTsKJiM0MzsJdTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS0mZ3Q7ZmluZGV4KTsKJiM0MzsJdTMyIGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJaWYgKGVudHJ5X3NpemUgJmx0OyBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIHx8CiYjNDM7CSAgICAhbmV0eGVuX3JvbV90YWJsZV92YWxpZChmd19zaXplLCBmaW5kZXgsIGVudHJpZXMsIGVudHJ5X3NpemUpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAKLQkJX19sZTMyIG9mZnMgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktJmd0O2ZpbmRleCkgJiM0MzsKLQkJCQkoaSAqIGNwdV90b19sZTMyKGRpcmVjdG9yeS0mZ3Q7ZW50cnlfc2l6ZSkpOwotCQlfX2xlMzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKikmYW1wO3VuaXJvbVtvZmZzXSAmIzQzOyA4KSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2l6ZV90IG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdClpICogZW50cnlfc2l6ZTsKJiM0MzsJCXUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKSZhbXA7dW5pcm9tW29mZnNdICYjNDM7CiYjNDM7CQkJCQkJTlhfVU5JX0RJUl9UWVBFX09GRikpOwogCiAJCWlmICh0YWJfdHlwZSA9PSBzZWN0aW9uKQotCQkJcmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikgJmFtcDt1bmlyb21bb2Zmc107CiYjNDM7CQkJcmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikmYW1wO3VuaXJvbVtvZmZzXTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTU4NiwyMCAmIzQzOzYyMSwxOCBAQCBzdGF0aWMgaW50CiBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItJmd0O2Z3LSZndDtkYXRhOwotCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKSAmYW1wO3VuaXJvbVswXTsKJiM0MzsJc3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopJmFtcDt1bmlyb21bMF07CiAJdTMyIGZ3X2ZpbGVfc2l6ZSA9IGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplOwotCXUzMiB0YWJfc2l6ZTsKLQlfX2xlMzIgZW50cmllczsKLQlfX2xlMzIgZW50cnlfc2l6ZTsKJiM0MzsJdTMyIGVudHJpZXMsIGVudHJ5X3NpemUsIGZpbmRleDsKIAogCWlmIChmd19maWxlX3NpemUgJmx0OyBRTENOSUNfRklMRUhFQURFUl9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVudHJpZXMgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktJmd0O251bV9lbnRyaWVzKTsKIAllbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtlbnRyeV9zaXplKTsKLQl0YWJfc2l6ZSA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS0mZ3Q7ZmluZGV4KSAmIzQzOyAoZW50cmllcyAqIGVudHJ5X3NpemUpOwomIzQzOwlmaW5kZXggPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktJmd0O2ZpbmRleCk7CiAKLQlpZiAoZndfZmlsZV9zaXplICZsdDsgdGFiX3NpemUpCiYjNDM7CWlmICghbmV0eGVuX3JvbV90YWJsZV92YWxpZChmd19maWxlX3NpemUsIGZpbmRleCwgZW50cmllcywgZW50cnlfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CkBAIC02MTEsMzAgJiM0Mzs2NDQsMzAgQEAgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CiAJc3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyOwogCWNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLSZndDtmdy0mZ3Q7ZGF0YTsKLQlfX2xlMzIgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwotCQkJCU5YX1VOSV9CT09UTERfSURYX09GRikpOwotCXUzMiBvZmZzOwotCXUzMiB0YWJfc2l6ZTsKLQl1MzIgZGF0YV9zaXplOwomIzQzOwl1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDsKJiM0MzsJdTMyIHNlY3Rpb24gPSBOWF9VTklfRElSX1NFQ1RfQk9PVExEOwomIzQzOwlzaXplX3Qgb2ZmczsKIAotCXRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfQk9PVExEKTsKJiM0MzsJaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwomIzQzOwkJCSAgICAgTlhfVU5JX0JPT1RMRF9JRFhfT0ZGKSk7CiYjNDM7CXRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSwgc2VjdGlvbik7CiAKIAlpZiAoIXRhYl9kZXNjKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXRhYl9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtJmd0O2ZpbmRleCkgJiM0MzsKLQkJCShjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZW50cnlfc2l6ZSkgKiAoaWR4ICYjNDM7IDEpKTsKLQotCWlmIChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSAmbHQ7IHRhYl9zaXplKQomIzQzOwllbnRyeV9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtJmd0O2VudHJ5X3NpemUpOwomIzQzOwlmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZmluZGV4KTsKJiM0MzsJaWYgKGVudHJ5X3NpemUgJmx0OyBzaXplb2YoKmRlc2NyKSB8fAomIzQzOwkgICAgIW5ldHhlbl9yb21fZW50cnlfdmFsaWQoYWRhcHRlci0mZ3Q7ZnctJmd0O3NpemUsIGZpbmRleCwgZW50cnlfc2l6ZSwKJiM0MzsJCQkJICAgICBpZHgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW9mZnMgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZmluZGV4KSAmIzQzOwotCQkoY3B1X3RvX2xlMzIodGFiX2Rlc2MtJmd0O2VudHJ5X3NpemUpICogKGlkeCkpOwomIzQzOwlvZmZzID0gZmluZGV4ICYjNDM7IChzaXplX3QpZW50cnlfc2l6ZSAqIGlkeDsKIAlkZXNjciA9IChzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqKSZhbXA7dW5pcm9tW29mZnNdOwomIzQzOwlkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtmaW5kZXgpOwomIzQzOwlkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtzaXplKTsKIAotCWRhdGFfc2l6ZSA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtmaW5kZXgpICYjNDM7IGNwdV90b19sZTMyKGRlc2NyLSZndDtzaXplKTsKLQotCWlmIChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSAmbHQ7IGRhdGFfc2l6ZSkKJiM0MzsJaWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBkYXRhX29mZiwgZGF0YV9sZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtNjQ2LDI5ICYjNDM7Njc5LDMwIEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfZncoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CiAJc3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyOwogCWNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLSZndDtmdy0mZ3Q7ZGF0YTsKLQlfX2xlMzIgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwotCQkJCU5YX1VOSV9GSVJNV0FSRV9JRFhfT0ZGKSk7Ci0JdTMyIG9mZnM7Ci0JdTMyIHRhYl9zaXplOwotCXUzMiBkYXRhX3NpemU7CiYjNDM7CXUzMiBkYXRhX2xlbiwgZGF0YV9vZmYsIGVudHJ5X3NpemUsIGZpbmRleCwgaWR4OwomIzQzOwl1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9GVzsKJiM0MzsJc2l6ZV90IG9mZnM7CiAKLQl0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX0ZXKTsKJiM0MzsJaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwomIzQzOwkJCSAgICAgTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKTsKJiM0MzsJdGFiX2Rlc2MgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBzZWN0aW9uKTsKIAogCWlmICghdGFiX2Rlc2MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdGFiX3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZmluZGV4KSAmIzQzOwotCQkJKGNwdV90b19sZTMyKHRhYl9kZXNjLSZndDtlbnRyeV9zaXplKSAqIChpZHggJiM0MzsgMSkpOwotCi0JaWYgKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplICZsdDsgdGFiX3NpemUpCiYjNDM7CWVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZW50cnlfc2l6ZSk7CiYjNDM7CWZpbmRleCA9IGNwdV90b19sZTMyKHRhYl9kZXNjLSZndDtmaW5kZXgpOwomIzQzOwlpZiAoZW50cnlfc2l6ZSAmbHQ7IHNpemVvZigqZGVzY3IpIHx8CiYjNDM7CSAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSwgZmluZGV4LCBlbnRyeV9zaXplLAomIzQzOwkJCQkgICAgIGlkeCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jb2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLSZndDtmaW5kZXgpICYjNDM7Ci0JCShjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZW50cnlfc2l6ZSkgKiAoaWR4KSk7CiYjNDM7CW9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdCllbnRyeV9zaXplICogaWR4OwogCWRlc2NyID0gKHN0cnVjdCB1bmlfZGF0YV9kZXNjICopJmFtcDt1bmlyb21bb2Zmc107Ci0JZGF0YV9zaXplID0gY3B1X3RvX2xlMzIoZGVzY3ItJmd0O2ZpbmRleCkgJiM0MzsgY3B1X3RvX2xlMzIoZGVzY3ItJmd0O3NpemUpOwomIzQzOwlkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtmaW5kZXgpOwomIzQzOwlkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtzaXplKTsKIAotCWlmIChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSAmbHQ7IGRhdGFfc2l6ZSkKJiM0MzsJaWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBkYXRhX29mZiwgZGF0YV9sZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtNjgyLDM5ICYjNDM7NzE2LDM3IEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIAljb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci0mZ3Q7ZnctJmd0O2RhdGE7CiAJaW50IG1uX3ByZXNlbnQgPSAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0mZ3Q7YWh3LnJldmlzaW9uX2lkKSkgPwogCQkJMSA6IG5ldHhlbl9wM19oYXNfbW4oYWRhcHRlcik7Ci0JX19sZTMyIGVudHJpZXM7Ci0JX19sZTMyIGVudHJ5X3NpemU7Ci0JdTMyIHRhYl9zaXplOwotCXUzMiBpOwomIzQzOwl1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4LCBpOwomIzQzOwl1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTDsKIAotCXB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTCk7CiYjNDM7CXB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBzZWN0aW9uKTsKIAlpZiAocHRhYl9kZXNjciA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVudHJpZXMgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLSZndDtudW1fZW50cmllcyk7CiAJZW50cnlfc2l6ZSA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItJmd0O2VudHJ5X3NpemUpOwotCXRhYl9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci0mZ3Q7ZmluZGV4KSAmIzQzOyAoZW50cmllcyAqIGVudHJ5X3NpemUpOwotCi0JaWYgKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplICZsdDsgdGFiX3NpemUpCiYjNDM7CWZpbmRleCA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItJmd0O2ZpbmRleCk7CiYjNDM7CWlmIChlbnRyeV9zaXplICZsdDsgTlhfVU5JX1BST0RVQ1RfRU5UUllfTUlOX1NJWkUgfHwKJiM0MzsJICAgICFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBmaW5kZXgsIGVudHJpZXMsCiYjNDM7CQkJCSAgICAgZW50cnlfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiBub21uOgogCWZvciAoaSA9IDA7IGkgJmx0OyBlbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCi0JCV9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2LCBvZmZzOwomIzQzOwkJc2l6ZV90IG9mZnM7CiYjNDM7CQlfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldjsKIAkJdTggY2hpcHJldiA9IGFkYXB0ZXItJmd0O2Fody5yZXZpc2lvbl9pZDsKIAkJdWludDMyX3QgZmxhZ2JpdDsKIAotCQlvZmZzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci0mZ3Q7ZmluZGV4KSAmIzQzOwotCQkJCShpICogY3B1X3RvX2xlMzIocHRhYl9kZXNjci0mZ3Q7ZW50cnlfc2l6ZSkpOwomIzQzOwkJb2ZmcyA9IGZpbmRleCAmIzQzOyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplOwogCQlmbGFncyA9IGNwdV90b19sZTMyKCooKGludCAqKSZhbXA7dW5pcm9tW29mZnNdICYjNDM7IE5YX1VOSV9GTEFHU19PRkYpKTsKIAkJZmlsZV9jaGlwcmV2ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bb2Zmc10gJiM0MzsKLQkJCQkJCQlOWF9VTklfQ0hJUF9SRVZfT0ZGKSk7CiYjNDM7CQkJCQkJICAgIE5YX1VOSV9DSElQX1JFVl9PRkYpKTsKIAogCQlmbGFnYml0ID0gbW5fcHJlc2VudCA/IDEgOiAyOwogCiAJCWlmICgoY2hpcHJldiA9PSBmaWxlX2NoaXByZXYpICZhbXA7JmFtcDsKLQkJCQkJKCgxVUxMICZsdDsmbHQ7IGZsYWdiaXQpICZhbXA7IGZsYWdzKSkgewomIzQzOwkJICAgICgoMVVMTCAmbHQ7Jmx0OyBmbGFnYml0KSAmYW1wOyBmbGFncykpIHsKIAkJCWFkYXB0ZXItJmd0O2ZpbGVfcHJkX29mZiA9IG9mZnM7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNzY3LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgc3RydWN0IHVuaV9kYXRhX2Rlc2MgKm54X2dldF9kYXRhX2Rlc2Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CiAJX19sZTMyIG9mZnM7CiAKLQl0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgc2VjdGlvbik7CiYjNDM7CXRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSwgc2VjdGlvbik7CiAKIAlpZiAodGFiX2Rlc2MgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRYZW4gTklDIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgdGhlIGBuZXR4ZW5gIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY2AuIFRoaXMgaXMgZm9jdXNlZCBvbiBlbmhhbmNpbmcgdGhlIHNlY3VyaXR5IG9mIGZpcm13YXJlIHBhcnNpbmcsIHdoaWNoIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gVGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgYm91bmRzIGNoZWNraW5nLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZmlybXdhcmUgdnVsbmVyYWJpbGl0aWVzLiBUaGV5JiMzOTt2ZSB1cGRhdGVkIHNldmVyYWwgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBwYXJzaW5nIHByb2Nlc3M6IGBueF9nZXRfdGFibGVfZGVzY2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYW5kIGBueF9nZXRfZGF0YV9kZXNjYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hpY2ggYXJlYXMgdGhleSYjMzk7dmUgaW1wcm92ZWQuCgpUaGUgY29udGV4dCBoZXJlIGlzIGEgUUxvZ2ljL05ldFhlbiBHYkUgTklDIGRyaXZlci4gVGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYW5kIGludGVycHJldGluZyBmaXJtd2FyZSwgZWl0aGVyIGZyb20gYSBmaWxlIG9yIGRpcmVjdGx5IGZyb20gUk9NLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGF0dGFjayBzdXJmYWNlcy4gSG93IHZ1bG5lcmFibGUgaXMgdGhpcyB0byBhIGNvbXByb21pc2VkIGZpcm13YXJlIGltYWdlPyBJcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIGV2ZW4gZXhwbG9pdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gRG9lcyB0aGlzIGRyaXZlciBhY3R1YWxseSAqcmVxdWlyZSogdGhlIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgdG8gcHJvYmUgYW5kIGxvYWQgdGhlIGZpcm13YXJlLCBvciBpcyB0aGVyZSBhIHNvZnR3YXJlIGVtdWxhdG9yIG9yIHByb2JlIGluamVjdGlvbiBtZWNoYW5pc20gdGhhdCBjb3VsZCBvcGVuIHVwIGF0dGFjayB2ZWN0b3JzPyBJdOKAmXMgY3J1Y2lhbCB0byBrbm93IGhvdyBhIG1hbGljaW91cyBhY3RvciBjb3VsZCBldmVuIHRyaWdnZXIgdGhpcyBjb2RlIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgYG5ldHhlbmAgaXMgYSBQQ0kgZHJpdmVyIHNpbmNlIHRoYXQgZ2l2ZXMgbWUgc29tZSBjbHVlcyBvbiByZWFjaGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlci4qbmV0eGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ0OD1zdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTUtI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NTY6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZuZXR4ZW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ1Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDSSBEcml2ZXIgQXNzZXNzbWVudCBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBQQ0kgZHJpdmVyIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgY2FuIHdlIGVmZmVjdGl2ZWx5IGZ1enogaXQ/IFN5emthbGxlciBoYXMgc2hvd24gcHJvbWlzZSBpbiB0aGUgcGFzdCB3aXRoIFBDSSBkZXZpY2UgZW11bGF0aW9uOyBJJiMzOTt2ZSBzZWVuIGl0IHdvcmsgd2l0aCB0aGluZ3MgbGlrZSB2aGNpIG9yIGV2ZW4gdGhlIGUxMDAwZS4gQnV0IHRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIGl0IG9mZmVycyBzdXBwb3J0IGZvciB0aGlzIHBhcnRpY3VsYXIgbmV0eGVuIGRldmljZS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gU28sIG15IG5leHQgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBvciBjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgbmV0eGVuIGhhcmR3YXJlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGJlZ2luLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgbmV0eGVuIERyaXZlcioqCgpPa2F5LCBmaXJzdCB0aG91Z2h0OiBXaGVyZSAqaXMqIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBzeXprYWxsZXIgdGFyZ2V0PyBXYWl0LCBpdCYjMzk7cyBub3QgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBhIHBhdGggdG8gYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlLiBHZW5lcmFsbHksIFBDSSBkcml2ZXJzIGFyZSBhIHBhaW4gdG8gZnV6eiBkaXJlY3RseSB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3IgaW4gUUVNVSBvciBhIHNwZWNpYWwga2VybmVsIG1lY2hhbmlzbSBvciwgcGVyaGFwcywgYSBnZW5lcmljIFBDSSBmdXp6ZXIuCgpIbW0sIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGdlbmVyaWMgZm9yIFBDST8gU29tZXRoaW5nIGxpa2UgYHN5el9wY2l2ZmlvYCBvciBpbmplY3RpbmcgZGV2aWNlcyB2aWEgYSBkdW1teSBidXM/IFdhaXQsIGRvZXMgc3l6a2FsbGVyIGV4cG9zZSBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsPyBObywgbm8sIHN5emthbGxlciBtb3N0bHkgZnV6emVzIFBDSSB0aHJvdWdoIGB2ZmlvYCBvciB0aGUgYHBjaWAgc3Vic3lzdGVtIGlmIHRoZXkmIzM5O3JlIGVuYWJsZWQuIEl0IHVzdWFsbHkgZG9lc24mIzM5O3QgZGlnIGRlZXAgaW50byBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHVubGVzcyBRRU1VIGVtdWxhdGVzIHRoZW0gKGxpa2UgZTEwMDBlLCBydGw4MTM5LCB0aG9zZSBraW5kcyBvZiBkZXZpY2VzLCBvciBpZiB0aGVyZSYjMzk7cyBhIHNvZnR3YXJlIGRyaXZlciBsaWtlIGB2aGNpYCkuCgpMZXQgbWUgc2VlIGlmIFFFTVUgZXZlbiAqc3VwcG9ydHMqIG5ldHhlbi4gUUVNVSBuZXR3b3JrIGRldmljZXPigKYgZTEwMDAsIGUxMDAwZSwgaWdiLCBldGMuIE5vcGUsIG5vIG5ldHhlbiBvbiB0aGF0IGxpc3QuIERhbW4uCgpTbywgaW4gYSBzdGFuZGFyZCBWTSwgd2l0aG91dCB0aGUgKmFjdHVhbCogaGFyZHdhcmUsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgYHZoY2lgLWxpa2UgYXBwcm9hY2ggZm9yIFVTQiwgYnV0IGZvciBQQ0ksIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgbm8sIGl0IHNlZW1zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBpcyB0aGUgd2F5IHRvIGRvIGl0LiBXYWl0LCBkb2VzIHN5emthbGxlciBldmVuIGhhdmUgYSBQQ0kgZnV6emVyIHVzaW5nIGB2ZmlvYD8gTm9wZSwgaXMgdGhlcmUgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGw/IE5vLgoKQWN0dWFsbHksIGRpZG7igJl0IHN5emthbGxlciAqcmVjZW50bHkqIGFkZCBzdXBwb3J0IGZvciBmdXp6aW5nIFBDSSBkcml2ZXJzIHZpYSBhIGR1bW15IFBDSSBkZXZpY2Ugb3Igc29tZXRoaW5nIHNpbWlsYXI/IEdvdHRhIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWUgbmV3IHdheSB0byBkbyBQQ0kgZnV6emluZy4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwLiBJZiB0aGlzICppcyogYSBQQ0kgZHJpdmVyIGFuZCB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZeKApiB0aGUgYHByb2JlYCBmdW5jdGlvbiBqdXN0IHdvbiYjMzk7dCBiZSBjYWxsZWQuIFBlcmlvZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmV0eGVuX25pY19pbml0LmNgIGlzIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTYyMD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjYyMTpuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTYyMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjQ9bmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtNzY1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6NzY2Olx0aWYgKG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKGFkYXB0ZXIpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2Ny1cdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAsIGFzc3VtaW5nIEkgaGF2ZSBzaWduaWZpY2FudCBrZXJuZWwtbGV2ZWwgbmV0d29ya2luZyBleHBlcmllbmNlOgoKKipEaWdnaW5nIGludG8gbmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcy4gYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAuLi4gc291bmRzIGxpa2Ugd2UmIzM5O3JlIHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9yIHRoZSBzdWl0YWJpbGl0eSBvZiBhIHVuaWZpZWQgUk9NIGltYWdlIGZvciBhIE5ldFhlbiBOSUMuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGNoZWNrc3VtcywgdmVyc2lvbiBjaGVja3MsIGltYWdlIGZvcm1hdCB2YWxpZGF0aW9uIOKAkyBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4geW91JiMzOTtyZSBkZWFsaW5nIHdpdGggZmlybXdhcmUgb3IgYm9vdCBjb2RlIGxvYWRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGJvb3QgcHJvY2VzcywgYSBnYXRla2VlcGVyIGVuc3VyaW5nIHRoYXQgdGhlIE5JQyBkb2VzbiYjMzk7dCBicmljayBpdHNlbGYgb3Igd29yc2UsIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIGFudGljaXBhdGluZyBpdCB3aWxsIGV4YW1pbmUgdGhpbmdzIGxpa2U6CgoqICAgKipST00gSGVhZGVyOioqIENoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSB2YWxpZCBoZWFkZXIgc3RydWN0dXJlLiBJJiMzOTtsbCBleHBlY3QgZmllbGRzIGluZGljYXRpbmcgaW1hZ2UgdHlwZSwgdmVyc2lvbiwgbGVuZ3RoLCBtYXliZSBldmVuIGEgbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCB0aGluZyB0byBjaGVjayEKKiAgICoqQ2hlY2tzdW0gVmVyaWZpY2F0aW9uOioqIEEgQ1JDIG9yIGNyeXB0b2dyYXBoaWMgaGFzaCB0byBjb25maXJtIHRoZSBpbWFnZSBoYXNuJiMzOTt0IGJlZW4gY29ycnVwdGVkIGR1cmluZyBzdG9yYWdlIG9yIHRyYW5zZmVyLiBUaGlzIGlzIGEgbXVzdC1oYXZlIGZvciBhbnkgaW1hZ2UgdmVyaWZpY2F0aW9uLgoqICAgKipWZXJzaW9uIENvbXBhdGliaWxpdHk6KiogVmVyaWZ5aW5nIHRoYXQgdGhlIFJPTSBpbWFnZSB2ZXJzaW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgTklDIGhhcmR3YXJlIG9yIHRoZSBkcml2ZXIuIFdlIGRvbiYjMzk7dCB3YW50IHRvIGxvYWQgYSBmaXJtd2FyZSB0aGF0JiMzOTtzIHRvbyBvbGQgb3IgdG9vIG5ldywgd2hpY2ggY291bGQgY2F1c2UgaW5zdGFiaWxpdHkuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgY2xldmVyIHZlcnNpb24gbnVtYmVyIGNvbXBhcmlzb24gaGFwcGVuaW5nIGhlcmUsIHBlcmhhcHMgZXZlbiBjaGVja2luZyBhZ2FpbnN0IGEgd2hpdGVsaXN0L2JsYWNrbGlzdC4KKiAgICoqSW1hZ2UgRm9ybWF0OioqIFBvc3NpYmx5IGNoZWNraW5nIGlmIHRoZSBpbWFnZSBjb25mb3JtcyB0byBhIHNwZWNpZmllZCBmb3JtYXQgZm9yIG5ldHhlbiBOSUNzLCBlbnN1cmluZyBpdCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBzZWN0aW9ucyAoZS5nLiwgY29kZSwgZGF0YSwgY29uZmlndXJhdGlvbikuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2VjdGlvbiBsZW5ndGhzIG9yIG9mZnNldHMgdGhhdCBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3I/CiogICAqKlNlY3VyaXR5IENoZWNrczoqKiBNYXliZSBzb21lIG1vcmUgYWR2YW5jZWQgY2hlY2tzLCBtYXliZSBsaWtlIGEgZGlnaXRhbCBzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBpbWFnZSYjMzk7cyBhdXRoZW50aWNpdHksIG9yIGNoZWNraW5nIGZvciBtYWxpY2lvdXMgY29kZSBvciBiYWNrZG9vcnMuCiogICAqKkFkZHJlc3MgU3BhY2U6KiogSXQmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIFJPTSBpbWFnZSBzaXplIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IHdpbGwgZml0IHdpdGhpbiB0aGUgYWxsb2NhdGVkIGFkZHJlc3Mgc3BhY2UuIE90aGVyd2lzZSwgdGhlcmUmIzM5O2xsIGJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHRoZSBOSUMgd2lsbCBqdXN0IHJlZnVzZSB0byB3b3JrLgoKVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSAqaG93KiByb2J1c3QgdGhlIHZhbGlkYXRpb24gaXMuIElzIGl0IGp1c3QgYmFzaWMgY2hlY2tzdW1zLCBvciBhcmUgdGhleSB1c2luZyBtb3JlIHNvcGhpc3RpY2F0ZWQgc2VjdXJpdHkgbWVhc3VyZXM/IFdoYXQgdnVsbmVyYWJpbGl0aWVzIGFyZSB0aGV5IGxpa2VseSBndWFyZGluZyBhZ2FpbnN0PyBBbmQsIGltcG9ydGFudGx5LCBpZiBhIHZhbGlkYXRpb24gKmZhaWxzKiwgd2hhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgZXJyb3IgaGFuZGxpbmc/IERvZXMgaXQgbG9nIGEgdXNlZnVsIGVycm9yLCBwYW5pYyB0aGUgZHJpdmVyLCBvciBzaWxlbnRseSBmYWlsIGFuZCBwb3RlbnRpYWxseSBsZWFkIHRvIGJpZ2dlciBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcywgd2hhdCBpdCAqZG9lc24mIzM5O3QqIGRvLCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCB3ZWFrIHNwb3RzIG1pZ2h0IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzo3NjQ6bmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtNzY1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTExMDE9bmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTExMTEtXHRpZiAoZndfdHlwZSA9PSBOWF9VTklGSUVEX1JPTUlNQUdFKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjExMTI6XHRcdGlmIChuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2UoYWRhcHRlcikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTExMTMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3Q6CgoqKkFuYWx5emluZyBGaXJtd2FyZSBWYWxpZGF0aW9uIOKAkyBBIEZhbWlsaWFyIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlYC4gVGhpcyBpbnN0YW50bHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBOZXRYZW4gKG9yIFFMb2dpYy9NYXJ2ZWxsKSBuZXR3b3JrIGludGVyZmFjZSBjYXJkLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBmaXJtd2FyZSB2YWxpZGF0aW9uIHByb2Nlc3MuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaGVyZS4gRmlybXdhcmUgdmFsaWRhdGlvbiBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGluIHByZXZlbnRpbmcgbWFsaWNpb3VzIGFjdG9ycyBmcm9tIGluamVjdGluZyBjb21wcm9taXNlZCBmaXJtd2FyZSwgbGVhZGluZyB0byBwb3RlbnRpYWwgc3lzdGVtIGNvbXByb21pc2UsIGRlbmlhbC1vZi1zZXJ2aWNlLCBvciBldmVuIGRhdGEgYnJlYWNoZXMuCgpTbywgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCB2YWxpZGF0aW9uIHN0ZXBzOiBjaGVja3N1bSB2ZXJpZmljYXRpb24sIHNpZ25hdHVyZSBjaGVja3MgKGxpa2VseSBSU0EtYmFzZWQsIHBvc3NpYmx5IHdpdGggYSBoYXJkd2FyZSByb290IG9mIHRydXN0KSwgdmVyc2lvbiBjaGVja3MsIGFuZCBtYXliZSBldmVuIHNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyBvbiB0aGUgZmlybXdhcmUgaW1hZ2UgaXRzZWxmIHRvIGVuc3VyZSBpdCYjMzk7cyB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgZm9ybWF0LiBJJiMzOTttIHdvbmRlcmluZyB3aGF0IHNwZWNpZmljIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZSBleHBvc2VkIGF0IHRoaXMgc3RhZ2UuIENvdWxkIHRoZXJlIGJlIGFueSBidWZmZXIgb3ZlcmZsb3dzIGluIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgaXRzZWxmPyBBcmUgdGhlcmUgb3Bwb3J0dW5pdGllcyBmb3IgYSBkb3duZ3JhZGUgYXR0YWNrLCB3aGVyZSBhbiBvbGRlciwgdnVsbmVyYWJsZSBmaXJtd2FyZSB2ZXJzaW9uIGNvdWxkIGJlIGZvcmNlZCBvbnRvIHRoZSBjYXJkPwoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJcyBpdCBkb25lIGluIHRoZSBkcml2ZXIgaXRzZWxmLCBvciBpcyB0aGVyZSBhIHNlcGFyYXRlIGZpcm13YXJlIHZhbGlkYXRpb24gbW9kdWxlIHdpdGhpbiB0aGUgTklDJiMzOTtzIGZpcm13YXJlPyBIb3cgZG9lcyBpdCBoYW5kbGUgdXBkYXRlcyBhbmQgZG93bmdyYWRlcz8gSXMgdGhlIHZhbGlkYXRpb24gcHJvY2VzcyBoYXJkZW5lZCBhZ2FpbnN0IHRhbXBlcmluZz8gQXJlIHRoZXJlIGFueSBkb2N1bWVudGVkIHdlYWtuZXNzZXMgb3Iga25vd24gYnlwYXNzZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGxvb2sgaW50byB3aGV0aGVyIHRoaXMgaXMgYW4gaXNzdWUgSSBoYXZlIHNlZW4gYmVmb3JlLCBhbmQgaG93IHRvIHJlbWVkeSBpdC4gQW55IHNwZWNpZmljIGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIHdvdWxkIGJlIGtleSB0b28sIHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLiBPdmVyYWxsLCBpdCBhbGwgcG9pbnRzIHRvIGEgY3JpdGljYWwgcG9pbnQgZm9yIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHksIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9MTEwMD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjExMDE6bmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTEwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjM3PXZvaWQgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTI1NTpcdFx0cmMgPSBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyNTYtXHRcdGlmIChyYyAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRmlybXdhcmUgUmVxdWVzdCBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZmlybXdhcmUgcmVxdWVzdHMsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgbmV0d29yayBkcml2ZXIgZWNvc3lzdGVtLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhIGRyaXZlciwgbmVlZGluZyBhIHNwZWNpZmljIGZpcm13YXJlIGltYWdlIHRvIG9wZXJhdGUgY29ycmVjdGx5LCBhY3R1YWxseSBnb2VzIG91dCBhbmQgKmFza3MqIGZvciBpdC4gSXQmIzM5O3MgdGhlIGNydWNpYWwgaGFuZHNoYWtlLCB0aGUgYmVnaW5uaW5nIG9mIGdldHRpbmcgaGFyZHdhcmUgcmVhZHkgZm9yIGFjdGlvbi4gSSYjMzk7bSBjb25zaWRlcmluZyBhbGwgdGhlIHdheXMgdGhpcyBjYW4gZ28gcmlnaHQsIGFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgZ28gd3JvbmcuCgpJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBzY2VuYXJpb3MuIERvZXMgdGhlIGRyaXZlciBoYXZlIGJ1aWx0LWluIGZpcm13YXJlIGJsb2JzPyBJZiBub3QsIGhvdyYjMzk7cyBpdCBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBwYXRoIHRvIGxvb2sgZm9yIHRoZSBmaXJtd2FyZT8gQXJlIHRoZXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBwbGF5PyBBbmQgd2hhdCBhYm91dCB0aGUgY2FjaGluZyBtZWNoYW5pc21zIGludm9sdmVkPyBBcmUgd2UgZWZmaWNpZW50bHkgYXZvaWRpbmcgcmVkdW5kYW50IGxvb2t1cHMsIG9yIGlzIHRoZXJlIHBvdGVudGlhbCBmb3IgYm90dGxlbmVja3M/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgb3JkZXIgb2Ygc2VhcmNoIOKAkyBvZnRlbiBpdOKAmXMgbG9va2luZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZW4gaW4gYSBzdGFuZGFyZCBmaXJtd2FyZSBkaXJlY3RvcnksIGFuZCBtYXliZSBjaGVja2luZyB2ZW5kb3Igc3BlY2lmaWMgZGlyZWN0b3JpZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBzeXN0ZW0gc3RhYmlsaXR5LgoKQW5kIHRoZW4sIG9mIGNvdXJzZSwgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGZpcm13YXJlIGlzIHVuYXZhaWxhYmxlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgdGhlIGRyaXZlciBmYWxsIGJhY2sgdG8gYSBsZXNzIGZ1bmN0aW9uYWwgbW9kZSwgb3IgZG9lcyBpdCBmbGF0LW91dCBmYWlsPyBIb3cgYXJlIHRoZXNlIGZhaWx1cmVzIGxvZ2dlZCwgYW5kIGFyZSB0aGUgZXJyb3IgbWVzc2FnZXMgaGVscGZ1bCBlbm91Z2ggZm9yIGRlYnVnZ2luZz8gSSBiZXQgSSBjb3VsZCBpbXByb3ZlIHRob3Nl4oCmIE1heWJlIGl0JiMzOTtzIGV2ZW4gd29ydGggbG9va2luZyBhdCBpZiB0aGVyZSBpcyBhIHdheSB0byB0cmlnZ2VyIGEgZmlybXdhcmUgY2hlY2sgd2hlbiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIG9yIGxvYWRlZC4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHRoZSBzZWN1cml0eSBhc3BlY3RzIGhlcmU6IEhvdyBhcmUgd2UgdmVyaWZ5aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRvd25sb2FkZWQgZmlybXdhcmU/IEFyZSB0aGVyZSBkaWdpdGFsIHNpZ25hdHVyZXMgaW52b2x2ZWQ/IFRoaXMgaXMgcGFyYW1vdW50IGZvciBwcmV2ZW50aW5nIG1hbGljaW91cyBmaXJtd2FyZSB1cGRhdGVzIGZyb20gYnJpY2tpbmcgc3lzdGVtcyBvciBvcGVuaW5nIHZ1bG5lcmFiaWxpdGllcy4KCkkmIzM5O20gYWxzbyB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdG8gYmUgY29uc2lkZXJlZC4gQXJlIHRoZXJlIG11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBzaW11bHRhbmVvdXNseSwgYWxsIHRyeWluZyB0byByZXF1ZXN0IHRoZSBzYW1lIGZpcm13YXJlPyBIb3cgaXMgY29uY3VycmVuY3kgbWFuYWdlZCB0byBwcmV2ZW50IGNvbmZsaWN0cyBvciBmaWxlIGFjY2VzcyBwcm9ibGVtcz8gVGhpcyBpcyBhIHBvaW50IHdoZXJlIEnigJl2ZSBzZWVuIHNvbWUgc3VidGxlIGJ1Z3MgZW1lcmdlIGluIHRoZSBwYXN0LiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhlIGRpZmZlcmVudCBpbnRlcmZhY2VzIGZvciBmZXRjaGluZyB0aGUgZmlybXdhcmUsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCB0aGUgZGV2aWNlLgoKRmluYWxseSwgSeKAmW0gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBIb3cgZG9lcyB0aGlzIGBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZWAgZnVuY3Rpb24gaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgZmlybXdhcmUgbG9hZGluZyBmcmFtZXdvcmsgb2YgdGhlIGtlcm5lbD8gQXJlIHRoZXJlIGFueSBpbnRlcm9wZXJhYmlsaXR5IGNvbmNlcm5zIHdpdGggb3RoZXIgc3Vic3lzdGVtcywgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gYWNyb3NzIHRoZSBlbnRpcmUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzPyBJIGJldCB0aGVyZeKAmXMgYSBsb3QgbW9yZSB0aGF0IEkgY291bGQgYmUgdGhpbmtpbmcgYWJvdXQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmg9MTczMD1pbnQgbmV0eGVuX25lZWRfZndfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oOjE3MzE6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmgtMTczMi12b2lkIG5ldHhlbl9yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjE3PW5ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTIzNzp2b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05Mjc9bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6OTUzOlx0bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlZXAgRGl2ZSBpbnRvIGBuZXR4ZW5fc3RhcnRfZmlybXdhcmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIFdoZW4gSSBzZWUgYG5ldHhlbl9zdGFydF9maXJtd2FyZWAsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGNyaXRpY2FsIHBhdGggb2YgYSBOZXRYZW4gKG9yIFFMb2dpYyBOZXRYZW4sIGRlcGVuZGluZyBvbiB0aGUgYWdlIG9mIHRoZSBjb2RlKSBuZXR3b3JrIGFkYXB0ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7VGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBtaXNlcnkhKSBiZWdpbnMuJiMzNDsgVGhpcyBmdW5jdGlvbiAqaGFzKiB0byBoYW5kbGUgdGhlIG51YW5jZWQgZGFuY2UgYmV0d2VlbiB0aGUgZHJpdmVyLCB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgZmlybXdhcmUgaXRzZWxmLgoKRmlyc3QsIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgY2hlY2tzOiBoYXMgdGhlIGFkYXB0ZXIgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkPyBJcyB0aGUgZGV2aWNlIHJlYWR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaGFyZHdhcmUgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBlcnJvcnMgdGhhdCBoYXZlIHNob3J0LWNpcmN1aXRlZCBpbml0aWFsaXphdGlvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZXJyb3IgaGFuZGxpbmcgZnJvbSB0aGUgb3V0c2V0IOKAkyBhIHdlbGwtd3JpdHRlbiByb3V0aW5lIGhlcmUgYW50aWNpcGF0ZXMgZmFpbHVyZSBtb2Rlcy4KClRoZW4sIHRoZSBjb3JlIG9mIGl0IGhhcyB0byBpbnZvbHZlIGxvYWRpbmcgdGhlIGZpcm13YXJlIGltYWdlLiBBbSBJIHNlZWluZyBhIGRpcmVjdCByZWFkIGZyb20gYSBrbm93biBsb2NhdGlvbiAobGlrZWx5IGEgZGV2aWNlLXNwZWNpZmljIGZsYXNoIG9yIGEgbWVtb3J5LW1hcHBlZCBhcmVhKSwgb3IgaXMgdGhlcmUgYSBtb3JlIGludm9sdmVkIHByb2Nlc3MgaW52b2x2aW5nIGEgZmlybXdhcmUgZG93bmxvYWQgdXNpbmcgYSBib290bG9hZGVyIHByb3RvY29sPyBJJiMzOTttIGhvcGluZyBmb3IgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRvd25sb2FkIG1lY2hhbmlzbS4gVGhlIGVmZmljaWVuY3kgb2YgdGhpcyBmdW5jdGlvbiBoYXMgYSByZWFsIGltcGFjdCBvbiBib290IHRpbWUuCgpJ4oCZbSBvbiB0aGUgbG9va291dCBmb3IgYSBwb3RlbnRpYWwgZmFsbGJhY2sgdG8gYSDigJxzYWZlIG1vZGXigJ0gb3IgZGlhZ25vc3RpYyBmaXJtd2FyZSBpZiB0aGUgcHJpbWFyeSBkb3dubG9hZCBmYWlscy4gUm9idXN0bmVzcyBpcyBrZXk7IGEgYnJpY2tlZCBhZGFwdGVyIGlzIGEgKnZlcnkqIGJhZCB1c2VyIGV4cGVyaWVuY2UsIGFuZCBhIHByb3Blcmx5IGRlc2lnbmVkIHJvdXRpbmUgaGVyZSBzaG91bGQgbWluaW1pemUgdGhhdCByaXNrLiBJJiMzOTttIGhvcGluZyB0byBzZWUgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBzcGVlZCBhbmQgcmVsaWFiaWxpdHkuCgpBbHNvLCBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgdmVyc2lvbmluZyBhbmQgY29tcGF0aWJpbGl0eS4gSXMgdGhlcmUgYSBjaGVjayB0byBlbnN1cmUgdGhlIGZpcm13YXJlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyPyBIb3cgZG9lcyBpdCBoYW5kbGUgZmlybXdhcmUgdXBkYXRlcz8gQSBtaXNtYXRjaCBoZXJlIGNhbiBjYXVzZSB2ZXJ5IHN1YnRsZSBidWdzIHRoYXQgYXJlIGRpZmZpY3VsdCB0byBkZWJ1ZywgYW5kIEkgZXhwZWN0IHRvIHNlZSBlbGVnYW50IGNoZWNrcyB0byBwcmV2ZW50IHRoYXQuCgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzdGVwczoKCjEuICAqKlByZXBhcmF0aW9uKio6IEhhcmR3YXJlIHJlc2V0L2luaXRpYWxpemF0aW9uLiBSZXNvdXJjZSBhbGxvY2F0aW9uLgoyLiAgKipGaXJtd2FyZSBMb2FkKio6IERldGVybWluZSB0aGUgc291cmNlIChmbGFzaCwgZG93bmxvYWQpLCBlcnJvciBoYW5kbGluZyBvbiByZWFkIGZhaWx1cmVzLgozLiAgKipGaXJtd2FyZSBWZXJpZmljYXRpb24qKjogQ2hlY2tzdW0sIHZlcnNpb24gdmVyaWZpY2F0aW9uLCBhbnkgc2VsZi10ZXN0cyB0aGF0IG1pZ2h0IHJ1biBhdCB0aGlzIHN0YWdlLgo0LiAgKipGaXJtd2FyZSBBY3RpdmF0aW9uKio6IENvbnRyb2wgaGFuZG9mZi4KNS4gICoqU3RhdHVzIFJlcG9ydGluZyoqOiBSZXBvcnQgdG8gdGhlIGRyaXZlciB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgoKSSBrbm93IHRoZSBudWFuY2VzIG9mIGZpcm13YXJlIGxvYWRpbmcgY2FuIGJlY29tZSBjb21wbGV4IGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkgYW0gd29uZGVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhvc2UuIElzIHRoZXJlIGFueSBldmlkZW5jZSBvZiBzZWN1cmUgYm9vdCBvciBjb2RlIHNpZ25pbmc/IFRoYXQgd291bGQgYmUgYSBnb29kIHNpZ24uCgpJbiBlc3NlbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBuZXR4ZW5fc3RhcnRfZmlybXdhcmVgIGZ1bmN0aW9uIHRvIGJlIGEgdGlnaHRseSB3b3VuZCwgZWZmaWNpZW50LCBhbmQgcm9idXN0IHBpZWNlIG9mIGNvZGUsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggdGhlIGFkYXB0ZXImIzM5O3MgbmV0d29yayBjb25uZWN0aXZpdHkgZGVwZW5kcy4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBhbmQgSSYjMzk7bSB2ZXJ5IGludGVyZXN0ZWQgdG8gc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fc3RhcnRfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05MjY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzo5Mjc6bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtOTI4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTE0Mzg9bmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE1MjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjE1Mjk6XHRlcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE1MzAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MTY4Nj1zdGF0aWMgaW50IG5ldHhlbl9uaWNfYXR0YWNoX2xhdGVfZnVuYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE2OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjE2OTc6XHRlcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE2OTgtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0yNTE5PW5ldHhlbl9md2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0yNTUyLVx0Y2FzZSBOWF9ERVZfUkVBRFk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjI1NTM6XHRcdGlmICghbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTI1NTQtXHRcdFx0bmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2F0dGFjaF93b3JrLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIGBuZXR4ZW5fbmljX3Byb2JlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmV0eGVuX25pY19wcm9iZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYSBQQ0kgZHJpdmVyLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBhIFBDSSBkcml2ZXIsIHNvIHRoZSBwcm9iZSBmdW5jdGlvbiAqc2hvdWxkKiBvbmx5IGJlIGNhbGxlZCBpZiBhIG1hdGNoaW5nIFBDSSBkZXZpY2UgaXMgcHJlc2VudC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogY2FuIEkgdHJpZ2dlciB0aGlzIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZT8KCkkga25vdyBzeXprYWxsZXIgY2FuIHRlc3QgUENJIGRyaXZlcnMsIGJ1dCB1c3VhbGx5LCBpdCByZWxpZXMgb24gYmluZGluZyB0aGUgZHJpdmVyIHRvIGEgZHVtbXkgZGV2aWNlLiBJIHJlbWVtYmVyIGl0IG1pZ2h0IHVzZSBhIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0LCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBzeXprYWxsZXIgKmFjdHVhbGx5KiBoYXMgYSBnZW5lcmljIHdheSB0byBpbmplY3QgUENJIGRldmljZXMuIFVubGVzcy4uLiB1bmxlc3MgdGhlcmUgYXJlIG1vcmUgcmVjZW50IGFkZGl0aW9ucywgbGlrZSB0aGUgYHN5el9nZW5ldGxpbmtgIGZvciBuZXRsaW5rIGFuZCBgc3l6X3VzYmAgZm9yIFVTQj8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LgoKV2FpdCBhIG1pbnV0ZS4uLiBkb2VzIHN5emthbGxlciBoYXZlIFBDSSBmdXp6aW5nICphdCBhbGwqPyBNYXliZSB3aXRoIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgdGhhdCYjMzk7cyBub3QgaXQgZWl0aGVyLgoKTGV0IG1lIHRha2UgYSBzdGVwIGJhY2sgYW5kIHNlZSBpZiBzeXprYWxsZXIgaXMgYWN0dWFsbHkgZG9pbmcgUENJIGZ1enppbmcgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIGNvdWxkIHNlYXJjaCB0aGUga2VybmVsIHRyZWUsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgYmVzdCBhcHByb2FjaCBzaW5jZSBzeXprYWxsZXIgaXMgZXh0ZXJuYWwuCgpBaGEhIFRoZSAmIzM0O0F1dGhvciYjMzQ7IGxpbmUhIElmIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgYHN5ei1jbHVzdGVyYCwgdGhhdCBtZWFucyBzeXprYWxsZXIgKmZvdW5kKiBhIGJ1ZyBoZXJlISBJdCYjMzk7cyBmcm9tICYjMzQ7c3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OyYjMzQ7LCBzbyBpdCAqZGVmaW5pdGVseSogZm91bmQgc29tZXRoaW5nLiAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7IC0gdGhhdCBjb25maXJtcyBpdC4gSWYgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIGhlcmUsIHRoYXQgbWVhbnMgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlIQoKSG93IGlzIHN5emthbGxlciBkb2luZyB0aGF0PyBQZXJoYXBzIGl0IGlzIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYD8gSWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdCwgdGhhdCBtZWFucyBpdCAqaXMqIGZ1enphYmxlLiBNYXliZSB0aGUgYnVnIHdhcyBmb3VuZCBieSBpbmplY3RpbmcgZmlybXdhcmUgb3IgcGVyaGFwcyBzeXprYWxsZXIgKmRvZXMqIGhhdmUgUENJIGZ1enppbmcuCgpPa2F5LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIGlmIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLiBDbGVhcmx5LCBpZiBzeXprYWxsZXIgZm91bmQgYSBidWcsIGl0ICppcyogcmVhY2hhYmxlLgoKVGhlIHByb21wdCwgaG93ZXZlciwgbWVudGlvbnMgYSBjYXZlYXQ6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLi4uJiMzNDsgU28sIGNhbiBJIHJlYWNoIHRoaXMgYG5ldHhlbl9uaWNfcHJvYmVgIGluIFFFTVU/CgpDb3VsZCBJIHRyaWdnZXIgdGhlIFBDSSBwcm9iZSB2aWEgc3lzZnM/IFNvbWV0aGluZyBsaWtlLCBgZWNobyAmIzM0O3ZlbmRvciBkZXZpY2UmIzM0OyAmZ3Q7IC9zeXMvYnVzL3BjaS9kcml2ZXJzL25ldHhlbl9uaWMvbmV3X2lkYD8gVGhhdCAqd291bGQqIG1ha2UgdGhlIGRyaXZlciBhdHRlbXB0IHRvIGJpbmQgdG8gYSBQQ0kgZGV2aWNlIHdpdGggYSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlIElELCBidXQgSSB3b3VsZCBzdGlsbCBuZWVkIGEgUENJIGRldmljZS4gSSByZW1lbWJlciBzeXprYWxsZXIgaGFzIGB2aGNpYCBmb3IgVVNCLi4uIGRvZXMgaXQgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJPyBEb2VzIHN5emthbGxlciBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgd2FpdCwgc3l6a2FsbGVyICpkb2VzKiB1c2UgYHZmaW9gIG9yIGEgc2ltaWxhciB0ZWNobm9sb2d5LgoKQWN0dWFsbHksIEkgdGhpbmsgc3l6a2FsbGVyICpkaWQqIHJlY2VudGx5IGFkZCBhIFBDSSBmdXp6ZXIhIERvZXMgaXQgdXNlIGEgZHVtbXkgUENJIGRldmljZT8gTm8sIGl0IHVzZXMgS1ZNL1FFTVUsIG9yIG1heWJlIGl0IGhhcyBhIHNvZnR3YXJlIFBDSSBidXMgaW1wbGVtZW50YXRpb24uCgpXYWl0LCBtYXliZSB0aGVyZSYjMzk7cyBhIGBDT05GSUdfUENJX0RFQlVHYCBvcHRpb24gSSBjb3VsZCB1c2U/CgpUaGUgcHJvbXB0IHNheXMgSSBzaG91bGQ6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKSSBkb24mIzM5O3QgbmVlZCB0byBwcm92ZSBpdCYjMzk7cyByZWFjaGFibGUgc2luY2Ugc3l6a2FsbGVyIGZvdW5kIGl0LCBidXQgSSAqc2hvdWxkKiBjaGVjayB0aGUgY29uZmlncy4gV2hhdCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVFhFTl9OSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZz01OD1jb25maWcgUUxDTklDX0hXTU9OXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo2OTpjb25maWcgTkVUWEVOX05JQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtOZXRYZW4gTXVsdGkgcG9ydCAoMS8xMCkgR2lnYWJpdCBFdGhlcm5ldCBOSUNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBRTG9naWMgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUUxvZ2ljIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2OS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBpbml0aWFsIGRyaXZlciBvcHRpb25zIGFyZSBkZWZpbmVkLCB0aGUgY29yZSBzZWxlY3Rpb25zIHRoYXQgY29udHJvbCBpdHMgYmFzaWMgZnVuY3Rpb25hbGl0eSBhbmQgb2Z0ZW4gdGhlIGluaXRpYWwgZmVhdHVyZSBzZXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhpbmdzIGxpa2UgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBkcml2ZXIgaXRzZWxmIChgQ09ORklHX1FMT0dJQ18uLi5gKSwgb3B0aW9ucyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudHMsIHBlcmhhcHMgc29tZSBlYXJseSBzZXR0aW5ncyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBtYXliZSBldmVuIGRlYnVnZ2luZy90cmFjaW5nIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuIExpbmUgNjkuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5pdGlhbCBkZWNpc2lvbnMgYmVnaW4sIGdlbmVyYWxseS4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0ZGVwZW5kcyBvbiBRTENOSUMgXHUwMDI2XHUwMDI2IEhXTU9OIFx1MDAyNlx1MDAyNiAhKFFMQ05JQz15IFx1MDAyNlx1MDAyNiBIV01PTj1tKVxuICA2MTpcdFx0ZGVmYXVsdCB5XG4gIDYyOlx0XHRoZWxwXG4gIDYzOlx0XHQgIFRoaXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGVcbiAgNjQ6XHRcdCAgYm9hcmQgdGVtcGVyYXR1cmUgaW4gQ29udmVyZ2VkIEV0aGVybmV0IGRldmljZXNcbiAgNjU6XHRcdCAgc3VwcG9ydGVkIGJ5IHFsY25pYy5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgVGhpcyBkYXRhIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGh3bW9uIHN5c2ZzIGludGVyZmFjZS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgTkVUWEVOX05JQ1xuICA3MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0WGVuIE11bHRpIHBvcnQgKDEvMTApIEdpZ2FiaXQgRXRoZXJuZXQgTklDXCYjMzQ7XG4gIDcxOlx0XHRkZXBlbmRzIG9uIFBDSVxuICA3MjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA3MzpcdFx0aGVscFxuICA3NDpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIE5ldFhlbiYjMzk7cyBHaWdhYml0IEV0aGVybmV0IGNhcmQuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIFFFRFxuICA3NzpcdFx0dHJpc3RhdGUgXCYjMzQ7UUxvZ2ljIFFFRCAyNS80MC8xMDBHYiBjb3JlIGRyaXZlclwmIzM0O1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNzk6XHRcdHNlbGVjdCBaTElCX0lORkxBVEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBzZWUgYE5FVFhFTl9OSUNgIOKAkyB0aGF04oCZcyB0aGUgcHJpbWFyeSBkcml2ZXIgY29uZmlnLCByaWdodD8gQnV0IEkgYWxzbyBzcG90IGBGV19MT0FERVJgIGJlaW5nIHNlbGVjdGVkLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZHJpdmVyPyBUaGlzIGZlZWxzIGxpa2UgaXQmIzM5O3MgbWlzc2luZyBzb21ldGhpbmcgYW5kIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9ucy4KClRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gZXhhbWluZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIHVzZWQgdG9nZXRoZXIuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZXR4ZW5fbmljX2luaXQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQgd2lsbCBzaG93IG1lIGhvdyB0aGVzZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGludGVyYWN0IHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzIGFuZCBob3cgYE5FVFhFTl9OSUNgIGFuZCBgRldfTE9BREVSYCBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIGFuIGltcGFjdC4gSG9wZWZ1bGx5IHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTk0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIE5ldFhlbiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYCBhcmUgcHJlc2VudCBpbiBgbmV0eGVuX25pY19pbml0LmNgLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBzaW1wbGlmaWVzIGRlYnVnZ2luZyBpZiB3ZSBldmVyIG5lZWQgdG8gdHJhY2UgaW5pdGlhbGl6YXRpb24uIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMsIGxldCYjMzk7cyBjYXN0IGEgY3JpdGljYWwgZXllIG92ZXIgYG5ldHhlbl9uaWNfbWFpbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgb3IgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gaWYgaXQgaXNuJiMzOTt0IGluIGluaXQuIEl0JiMzOTtzIHRoZSBjb3JlIGRyaXZlciBmaWxlLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGluY2x1ZGUgb3IgZXhjbHVkZSBjb2RlIGJhc2VkIG9uIHRoZSBkZXZpY2Ugb3IgaXRzIG9wZXJhdGluZyBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyBob3cgYW55IGNvbmRpdGlvbmFscyBhcmUgaGFuZGxlZCBpbiBtYWluIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgYmVoYXZlcyBpbiBkaWZmZXJlbnQgc2V0dXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MTM4OD1zdGF0aWMgdm9pZCBuZXR4ZW5fcmVhZF91bGFfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNDEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzoxNDExOiNpZmRlZiBDT05GSUdfUENJRUFFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNDEyLXN0YXRpYyB2b2lkIG5ldHhlbl9tYXNrX2Flcl9jb3JyZWN0YWJsZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0xNDM4PW5ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzoxNTAyOiNpZmRlZiBDT05GSUdfUENJRUFFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNTAzLVx0bmV0eGVuX21hc2tfYWVyX2NvcnJlY3RhYmxlKGFkYXB0ZXIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzEzMT1uZXR4ZW5fcmVtb3ZlX2RpYWdfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMTQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzozMTQyOiNpZmRlZiBDT05GSUdfSU5FVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMTQzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ0OD1zdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NTI6I2lmZGVmIENPTkZJR19JTkVUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTMtXHRyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0eGVuX25ldGRldl9jYik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zNDYxPXN0YXRpYyB2b2lkIF9fZXhpdCBuZXR4ZW5fZXhpdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NjU6I2lmZGVmIENPTkZJR19JTkVUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NjYtXHR1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKFx1MDAyNm5ldHhlbl9pbmV0YWRkcl9jYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDI3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpcm13YXJlIFBhcnNpbmcgTG9naWMgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGZpcm13YXJlIHBhcnNpbmcgcHJvY2Vzcy4gTm9uZSBvZiB0aGUgaW5pdGlhbCBjb25zaWRlcmF0aW9ucyBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBjb3JlIHBhcnNpbmcgaXRzZWxmLiBUaGUgcGFyc2luZyBjb2RlLCBhcyBJIHJlY2FsbCwgcmVzaWRlcyB3aXRoaW4gYG5ldHhlbl9uaWNfaW5pdC5jYC4gVGhlIG5leHQgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHN5emthbGxlciBhY3R1YWxseSBnZXQgdGhlIGZpcm13YXJlIHBhcnNpbmcgdG8gdHJpZ2dlcj8gQWgsIHJpZ2h0ISBJdCBsZXZlcmFnZXMgdGhlIGByZXF1ZXN0X2Zpcm13YXJlYCBBUEkuIFN5emthbGxlciBpbnRlcmNlcHRzIHRoaXMsIHdoaWNoIGdpdmVzIGl0IHRoZSBwb3dlciB0byBpbmplY3QgYW55IGZpcm13YXJlIGJsb2IgaXQgd2FudHMuIFRoYXQgbWVhbnMgaWYgdGhlIGRyaXZlciBtYWtlcyB0aGF0IGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLCB3ZSBoYXZlIGEgY2xlYXIgcGF0aCBmb3IgZnV6emluZyB0aGUgcGFyc2luZyBsb2dpYy4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZT8gSSBoYXZlIGEgbGlzdDogYG54X2dldF90YWJsZV9kZXNjYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgLCBhbmQgYG54X2dldF9kYXRhX2Rlc2NgLgoKV2FpdCwgaXNuJiMzOTt0IGBueF9nZXRfdGFibGVfZGVzY2AgYSBzdGF0aWMgZnVuY3Rpb24/IFRoYXQgY291bGQgaW1wYWN0IGl0cyBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AuIFN5emthbGxlciBjYW4gZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSBgRm9jdXNTeW1ib2xzYCAqY2FuKiBpbmNsdWRlIHRoZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBsaXN0aW5nIHRoZSByaWdodCBmdW5jdGlvbnMgdGhvdWdoLiBMZXQgbWUgcmUtZXhhbWluZSB0aGF0IGxpc3QgYWdhaW4sIGp1c3QgdG8gYmUgcHJlY2lzZS4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlc2UgYWdhaW5zdCB0aGUgbW9kaWZpY2F0aW9uczoKYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYApgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRgCmBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YApgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgCmBueF9nZXRfZGF0YV9kZXNjYApgbnhfZ2V0X3RhYmxlX2Rlc2NgCgpBaCwgaG9sZCBvbi4uLiBpcyBgbmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJgIGFsc28gc3RhdGljPyBPa2F5LCBzbyB0aGF0JiMzOTtzIHRoZSB0aGluZyB0byBmb2N1cyBvbiAtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKm5vbi1zdGF0aWMqLCBvciBkaXJlY3RseSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz02MjA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzo2MjE6bmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy02MjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9NzY0PW5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjc2NjpcdGlmIChuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihhZGFwdGVyKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy03NjctXHRcdGRldl9lcnIoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZpcm13YXJlIFZhbGlkYXRpb24gUHJvY2VzcyoqCgpSaWdodCwgc28gSSYjMzk7bSBpbW1lZGlhdGVseSBub3RpY2luZyBhIHBlcnZhc2l2ZSB1c2Ugb2Ygc3RhdGljIGNvZGUgZWxlbWVudHMgaGVyZS4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjbGVhcjogdGhlIGFyY2hpdGVjdHVyZSBsZWFucyBoZWF2aWx5IG9uIHN0YXRpYyBjb21wb25lbnRzLiBXYWl0IGEgc2Vjb25kLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYWJvdXQgYG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZWAuIElzICp0aGF0KiBhbHNvIHN0YXRpYz8gVGhhdCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpcyBjcml0aWNhbC4gSWYgaXTigJlzIHN0YXRpYywgdGhhdCBzaWduaWZpY2FudGx5IGltcGFjdHMgdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSBhbmQgcG90ZW50aWFsIGZvciBkeW5hbWljIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIHZhbGlkYXRpb24gc3RlcCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBhc3N1bXB0aW9ucyBuZWVkIHRvIGJlIGNvbmZpcm1lZCBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMTAwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTEwMTpuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMTAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTEyMzc9dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMjU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzoxMjU1Olx0XHRyYyA9IG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1Ni1cdFx0aWYgKHJjICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBGaXJtd2FyZSBSZXF1ZXN0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmVgIGZ1bmN0aW9uLi4uIGFuZCBpdCYjMzk7cyBjbGVhciB0byBtZSB0aGF0IGl0IGlzbiYjMzk7dCBzdGF0aWNhbGx5IGRlZmluZWQgb3IgaGFuZGxlZC4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmg9MTczMD1pbnQgbmV0eGVuX25lZWRfZndfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oOjE3MzE6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmgtMTczMi12b2lkIG5ldHhlbl9yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjE3PW5ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTIzNzp2b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05Mjc9bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6OTUzOlx0bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMDAKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogODI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0WGVuIE5JQyBGaXJtd2FyZSBQYXJzaW5nIEJ1ZyoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IHRoZSBgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmVgIGVudHJ5IHBvaW50LCB3aGljaCBzeXprYWxsZXIgc29tZWhvdyBtYW5hZ2VkIHRvIGhpdC4gUmlnaHQsIGl0IG11c3QgYmUgYmVpbmcgdHJpZ2dlcmVkIHRocm91Z2ggYHN5el9wY2lfZGV2aWNlX2FkZGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIHRoZW4gaGl0cyBgbmV0eGVuX25pY19wcm9iZWAsIGxlYWRpbmcgdG8gYG5ldHhlbl9zdGFydF9maXJtd2FyZWAgYW5kIGZpbmFsbHkgdGhlIHRhcmdldCBmdW5jdGlvbi4gU3l6a2FsbGVyIGlzIGluamVjdGluZyBhIGJhZCBmaXJtd2FyZSBibG9iIHRocm91Z2ggYHJlcXVlc3RfZmlybXdhcmVgLCB3aGljaCB0aGVuIGdldHMgZmVkIGludG8gYG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZWAsIGFuZCBiYW0sIHdlIGdldCBvdXIgb3V0LW9mLWJvdW5kcyByZWFkLiBDbGFzc2ljIGZpcm13YXJlIHBhcnNpbmcgdnVsbmVyYWJpbGl0eS4KCklzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gRmlybXdhcmUgcGFyc2luZyBpcyBhbHdheXMgYSBnb2xkbWluZSBmb3IgYnVncywgYW5kIHRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGhhcyBhIGRlZGljYXRlZCBmZWF0dXJlIGZvciBgcmVxdWVzdF9maXJtd2FyZWAgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC4gV2UgbmVlZCB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGtleSB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGFyZSBlZmZlY3RpdmUuCgpMZXQmIzM5O3Mgc2VlLCB3ZSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgLCBgbnhfZ2V0X3RhYmxlX2Rlc2NgLCBgbnhfZ2V0X2RhdGFfZGVzY2AsIGFuZCBjcml0aWNhbGx5LCB0aGVzZSBuZXcgb25lcyBmcm9tIHRoZSBwYXRjaDogYG5ldHhlbl9yb21fcmFuZ2VfdmFsaWRgLCBgbmV0eGVuX3JvbV90YWJsZV92YWxpZGAsIGFuZCBgbmV0eGVuX3JvbV9lbnRyeV92YWxpZGAuCgpKdXN0IHRvIGNvbmZpcm0sIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMgZnJvbSB0aGUgcGF0Y2ggb25lIG1vcmUgdGltZSwgbWFraW5nIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmc6IGBuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkYCwgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgLCBgbmV0eGVuX3JvbV9lbnRyeV92YWxpZGAsIGBueF9nZXRfdGFibGVfZGVzY2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYW5kIGBueF9nZXRfZGF0YV9kZXNjYC4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFdlIG5lZWQgYE5FVFhFTl9OSUNgIGZvciBzdXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgb25lIHdlIG5lZWQuIFl1cCwgYENPTkZJR19ORVRYRU5fTklDPXlgIG9yIGA9bWAsIGFuZCBgUENJYCBhbmQgYEZXX0xPQURFUmAsIHdoaWNoIGFyZSBiYXNpY2FsbHkgc3RhbmRhcmQuIFNvLCBqdXN0IGBORVRYRU5fTklDYC4KClF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlnIG5hbWUuLi5ZZXAsIGBjb25maWcgTkVUWEVOX05JQ2AgaW4gdGhlIEtjb25maWcgZmlsZSBjb25maXJtcyBpdC4gQW5kLCBubyBvdGhlciByZWxhdGVkIGNvbmZpZ3MuCgpPa2F5LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgb3V0cHV0OgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzOioqCiAgICAqICAgYG5ldHhlbl9yb21fcmFuZ2VfdmFsaWRgCiAgICAqICAgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgCiAgICAqICAgYG5ldHhlbl9yb21fZW50cnlfdmFsaWRgCiAgICAqICAgYG54X2dldF90YWJsZV9kZXNjYAogICAgKiAgIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAKICAgICogICBgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRgCiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgCiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYAogICAgKiAgIGBueF9nZXRfZGF0YV9kZXNjYAoqICAgKipFbmFibGVDb25maWdzOioqCiAgICAqICAgYE5FVFhFTl9OSUNgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBmaXJtd2FyZSBwYXJzaW5nIGJvdW5kcyBjaGVja3MgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGdXp6aW5nIGlzIHBvc3NpYmxlIGJlY2F1c2UgYHJlcXVlc3RfZmlybXdhcmVgIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGRldmljZSBwcm9iZSwgYW5kIHN5emthbGxlciBjYW4gcHJvdmlkZSBtYWxmb3JtZWQgZmlybXdhcmUgYmxvYnMuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZhbGlkYXRlIHRoYXQgdGhlIG5ldyBjaGVja3MgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFhFTl9OSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkJiMzNDssCiAgICAmIzM0O25ldHhlbl9yb21fdGFibGVfdmFsaWQmIzM0OywKICAgICYjMzQ7bmV0eGVuX3JvbV9lbnRyeV92YWxpZCYjMzQ7LAogICAgJiMzNDtueF9nZXRfdGFibGVfZGVzYyYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlciYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3JiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzJiMzNDssCiAgICAmIzM0O254X2dldF9kYXRhX2Rlc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIGZpcm13YXJlIHBhcnNpbmcgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGaXJtd2FyZSBwYXJzaW5nIGlzIHJlYWNoYWJsZSB2aWEgYHJlcXVlc3RfZmlybXdhcmVgIHdoZW4gdGhlIGRyaXZlciBwcm9iZXMgYSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgY2FuIGZ1enogdGhpcyBieSBpbmplY3RpbmcgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIHRoaXMgbG9naWMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgY29ycmVjdGx5IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUWEVOX05JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldHhlbl9yb21fcmFuZ2VfdmFsaWQmIzM0OywKICAgICYjMzQ7bmV0eGVuX3JvbV90YWJsZV92YWxpZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkJiMzNDssCiAgICAmIzM0O254X2dldF90YWJsZV9kZXNjJiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyJiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkJiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfZncmIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnMmIzM0OywKICAgICYjMzQ7bnhfZ2V0X2RhdGFfZGVzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgZmlybXdhcmUgcGFyc2luZyBpbiB0aGUgTmV0WGVuIE5JQyBkcml2ZXIuIEZpcm13YXJlIHBhcnNpbmcgaXMgcmVhY2hhYmxlIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAgd2hlbiB0aGUgZHJpdmVyIHByb2JlcyBhIGRldmljZSwgYW5kIHN5emthbGxlciBjYW4gZnV6eiB0aGlzIGJ5IGluamVjdGluZyBtYWxmb3JtZWQgZmlybXdhcmUgYmxvYnMuIEZ1enppbmcgdGhpcyBsb2dpYyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNrcyBjb3JyZWN0bHkgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDM6NDUuODczMzI1ODc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5NTA5NjQxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFhFTl9OSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkXCIsXG4gICAgXCJueF9nZXRfdGFibGVfZGVzY1wiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3XCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2Zmc1wiLFxuICAgIFwibnhfZ2V0X2RhdGFfZGVzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciBmaXJtd2FyZSBwYXJzaW5nIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRmlybXdhcmUgcGFyc2luZyBpcyByZWFjaGFibGUgdmlhIGByZXF1ZXN0X2Zpcm13YXJlYCB3aGVuIHRoZSBkcml2ZXIgcHJvYmVzIGEgZGV2aWNlLCBhbmQgc3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgYnkgaW5qZWN0aW5nIG1hbGZvcm1lZCBmaXJtd2FyZSBibG9icy4gRnV6emluZyB0aGlzIGxvZ2ljIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGNvcnJlY3RseSBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjQ1Ljg3MzMzMDUzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NjIxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQyNjAyNDkwMTdmMWQzNTM1NmNlYTU5Y2MzYmU0ZWYxMDkwY2QxYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDEzOjQzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXFxuaW5kZXggOGJjNGUyYjY5NTY5ZTUuLjU3MjJjNTVmYTBjY2U4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXFxuQEAgLTU2MSwyMCArNTYxLDU1IEBAIGludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqbnhfZ2V0X3RhYmxlX2Rlc2MoY29uc3QgdTggKnVuaXJvbSwgaW50IHNlY3Rpb24pXFxuKyNkZWZpbmUgTlhfVU5JX0RJUl9UWVBFX09GRlxcdFxcdDhcXG4rI2RlZmluZSBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIFxcXFxcXG4rXFx0KChOWF9VTklfRElSX1RZUEVfT0ZGICsgMSkgKiBzaXplb2YodTMyKSlcXG4rI2RlZmluZSBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSBcXFxcXFxuK1xcdCgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgKyAxKSAqIHNpemVvZih1MzIpKVxcbitcXG4rc3RhdGljIGJvb2wgbmV0eGVuX3JvbV9yYW5nZV92YWxpZChzaXplX3Qgc2l6ZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4re1xcbitcXHRyZXR1cm4gb2ZmIFxcdTAwM2M9IHNpemUgXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2M9IHNpemUgLSBvZmY7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fdGFibGVfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBuLCB1MzIgZXN6KVxcbit7XFxuK1xcdGlmIChvZmYgXFx1MDAzZSBzaXplKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghZXN6KVxcbitcXHRcXHRyZXR1cm4gbiA9PSAwO1xcbitcXG4rXFx0cmV0dXJuIG4gXFx1MDAzYz0gKHNpemUgLSBvZmYpIC8gZXN6O1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKHNpemVfdCBzaXplLCB1MzIgb2ZmLCB1MzIgZXN6LCB1MzIgaWR4KVxcbit7XFxuK1xcdGlmICghZXN6IHx8IG9mZiBcXHUwMDNlIHNpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBpZHggXFx1MDAzYyAoc2l6ZSAtIG9mZikgLyBlc3o7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKlxcbitueF9nZXRfdGFibGVfZGVzYyhjb25zdCB1OCAqdW5pcm9tLCBzaXplX3QgZndfc2l6ZSwgaW50IHNlY3Rpb24pXFxuIHtcXG4tXFx0dWludDMyX3QgaTtcXG4gXFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFxcdTAwMjZ1bmlyb21bMF07XFxuLVxcdF9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdHUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdHUzMiBlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VlbnRyeV9zaXplKTtcXG4rXFx0dTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KTtcXG4rXFx0dTMyIGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZW50cmllczsgaSsrKSB7XFxuK1xcdGlmIChlbnRyeV9zaXplIFxcdTAwM2MgTlhfVU5JX0RJUl9FTlRSWV9NSU5fU0laRSB8fFxcbitcXHQgICAgIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoZndfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRcXHRfX2xlMzIgb2ZmcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KSArXFxuLVxcdFxcdFxcdFxcdChpICogY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VlbnRyeV9zaXplKSk7XFxuLVxcdFxcdF9fbGUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKVxcdTAwMjZ1bmlyb21bb2Zmc10gKyA4KSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0c2l6ZV90IG9mZnMgPSBmaW5kZXggKyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplO1xcbitcXHRcXHR1MzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilcXHUwMDI2dW5pcm9tW29mZnNdICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0TlhfVU5JX0RJUl9UWVBFX09GRikpO1xcbiBcXG4gXFx0XFx0aWYgKHRhYl90eXBlID09IHNlY3Rpb24pXFxuLVxcdFxcdFxcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFxcdTAwMjZ1bmlyb21bb2Zmc107XFxuK1xcdFxcdFxcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopXFx1MDAyNnVuaXJvbVtvZmZzXTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTU4NiwyMCArNjIxLDE4IEBAIHN0YXRpYyBpbnRcXG4gbmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiB7XFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFxcdTAwMjZ1bmlyb21bMF07XFxuK1xcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKVxcdTAwMjZ1bmlyb21bMF07XFxuIFxcdHUzMiBmd19maWxlX3NpemUgPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZTtcXG4tXFx0dTMyIHRhYl9zaXplO1xcbi1cXHRfX2xlMzIgZW50cmllcztcXG4tXFx0X19sZTMyIGVudHJ5X3NpemU7XFxuK1xcdHUzMiBlbnRyaWVzLCBlbnRyeV9zaXplLCBmaW5kZXg7XFxuIFxcbiBcXHRpZiAoZndfZmlsZV9zaXplIFxcdTAwM2MgUUxDTklDX0ZJTEVIRUFERVJfU0laRSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VudW1fZW50cmllcyk7XFxuIFxcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXFx1MDAzZWVudHJ5X3NpemUpO1xcbi1cXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KSArIChlbnRyaWVzICogZW50cnlfc2l6ZSk7XFxuK1xcdGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KTtcXG4gXFxuLVxcdGlmIChmd19maWxlX3NpemUgXFx1MDAzYyB0YWJfc2l6ZSlcXG4rXFx0aWYgKCFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGZ3X2ZpbGVfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjExLDMwICs2NDQsMzAgQEAgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xcbiBcXHRzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqZGVzY3I7XFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4tXFx0X19sZTMyIGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVxcdTAwMjZ1bmlyb21bYWRhcHRlci1cXHUwMDNlZmlsZV9wcmRfb2ZmXSArXFxuLVxcdFxcdFxcdFxcdE5YX1VOSV9CT09UTERfSURYX09GRikpO1xcbi1cXHR1MzIgb2ZmcztcXG4tXFx0dTMyIHRhYl9zaXplO1xcbi1cXHR1MzIgZGF0YV9zaXplO1xcbitcXHR1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDtcXG4rXFx0dTMyIHNlY3Rpb24gPSBOWF9VTklfRElSX1NFQ1RfQk9PVExEO1xcbitcXHRzaXplX3Qgb2ZmcztcXG4gXFxuLVxcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfQk9PVExEKTtcXG4rXFx0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVthZGFwdGVyLVxcdTAwM2VmaWxlX3ByZF9vZmZdICtcXG4rXFx0XFx0XFx0ICAgICBOWF9VTklfQk9PVExEX0lEWF9PRkYpKTtcXG4rXFx0dGFiX2Rlc2MgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBzZWN0aW9uKTtcXG4gXFxuIFxcdGlmICghdGFiX2Rlc2MpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cXHUwMDNlZmluZGV4KSArXFxuLVxcdFxcdFxcdChjcHVfdG9fbGUzMih0YWJfZGVzYy1cXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICsgMSkpO1xcbi1cXG4tXFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplIFxcdTAwM2MgdGFiX3NpemUpXFxuK1xcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cXHUwMDNlZW50cnlfc2l6ZSk7XFxuK1xcdGZpbmRleCA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VmaW5kZXgpO1xcbitcXHRpZiAoZW50cnlfc2l6ZSBcXHUwMDNjIHNpemVvZigqZGVzY3IpIHx8XFxuK1xcdCAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZSwgZmluZGV4LCBlbnRyeV9zaXplLFxcbitcXHRcXHRcXHRcXHQgICAgIGlkeCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VmaW5kZXgpICtcXG4tXFx0XFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VlbnRyeV9zaXplKSAqIChpZHgpKTtcXG4rXFx0b2ZmcyA9IGZpbmRleCArIChzaXplX3QpZW50cnlfc2l6ZSAqIGlkeDtcXG4gXFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcXHUwMDI2dW5pcm9tW29mZnNdO1xcbitcXHRkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpO1xcbitcXHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VzaXplKTtcXG4gXFxuLVxcdGRhdGFfc2l6ZSA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpICsgY3B1X3RvX2xlMzIoZGVzY3ItXFx1MDAzZXNpemUpO1xcbi1cXG4tXFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplIFxcdTAwM2MgZGF0YV9zaXplKVxcbitcXHRpZiAoIW5ldHhlbl9yb21fcmFuZ2VfdmFsaWQoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTY0NiwyOSArNjc5LDMwIEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfZncoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xcbiBcXHRzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqZGVzY3I7XFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4tXFx0X19sZTMyIGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVxcdTAwMjZ1bmlyb21bYWRhcHRlci1cXHUwMDNlZmlsZV9wcmRfb2ZmXSArXFxuLVxcdFxcdFxcdFxcdE5YX1VOSV9GSVJNV0FSRV9JRFhfT0ZGKSk7XFxuLVxcdHUzMiBvZmZzO1xcbi1cXHR1MzIgdGFiX3NpemU7XFxuLVxcdHUzMiBkYXRhX3NpemU7XFxuK1xcdHUzMiBkYXRhX2xlbiwgZGF0YV9vZmYsIGVudHJ5X3NpemUsIGZpbmRleCwgaWR4O1xcbitcXHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9GVztcXG4rXFx0c2l6ZV90IG9mZnM7XFxuIFxcbi1cXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX0ZXKTtcXG4rXFx0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVthZGFwdGVyLVxcdTAwM2VmaWxlX3ByZF9vZmZdICtcXG4rXFx0XFx0XFx0ICAgICBOWF9VTklfRklSTVdBUkVfSURYX09GRikpO1xcbitcXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUsIHNlY3Rpb24pO1xcbiBcXG4gXFx0aWYgKCF0YWJfZGVzYylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VmaW5kZXgpICtcXG4tXFx0XFx0XFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VlbnRyeV9zaXplKSAqIChpZHggKyAxKSk7XFxuLVxcbi1cXHRpZiAoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUgXFx1MDAzYyB0YWJfc2l6ZSlcXG4rXFx0ZW50cnlfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VlbnRyeV9zaXplKTtcXG4rXFx0ZmluZGV4ID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXFx1MDAzZWZpbmRleCk7XFxuK1xcdGlmIChlbnRyeV9zaXplIFxcdTAwM2Mgc2l6ZW9mKCpkZXNjcikgfHxcXG4rXFx0ICAgICFuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBmaW5kZXgsIGVudHJ5X3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgaWR4KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRvZmZzID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXFx1MDAzZWZpbmRleCkgK1xcbi1cXHRcXHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXFx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xcbitcXHRvZmZzID0gZmluZGV4ICsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xcbiBcXHRkZXNjciA9IChzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqKVxcdTAwMjZ1bmlyb21bb2Zmc107XFxuLVxcdGRhdGFfc2l6ZSA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpICsgY3B1X3RvX2xlMzIoZGVzY3ItXFx1MDAzZXNpemUpO1xcbitcXHRkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpO1xcbitcXHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VzaXplKTtcXG4gXFxuLVxcdGlmIChhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIGRhdGFfc2l6ZSlcXG4rXFx0aWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBkYXRhX29mZiwgZGF0YV9sZW4pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC02ODIsMzkgKzcxNiwzNyBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2ZmcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4gXFx0aW50IG1uX3ByZXNlbnQgPSAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci1cXHUwMDNlYWh3LnJldmlzaW9uX2lkKSkgP1xcbiBcXHRcXHRcXHQxIDogbmV0eGVuX3AzX2hhc19tbihhZGFwdGVyKTtcXG4tXFx0X19sZTMyIGVudHJpZXM7XFxuLVxcdF9fbGUzMiBlbnRyeV9zaXplO1xcbi1cXHR1MzIgdGFiX3NpemU7XFxuLVxcdHUzMiBpO1xcbitcXHR1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4LCBpO1xcbitcXHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTDtcXG4gXFxuLVxcdHB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTCk7XFxuK1xcdHB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBzZWN0aW9uKTtcXG4gXFx0aWYgKHB0YWJfZGVzY3IgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlbnVtX2VudHJpZXMpO1xcbiBcXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlZW50cnlfc2l6ZSk7XFxuLVxcdHRhYl9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlZmluZGV4KSArIChlbnRyaWVzICogZW50cnlfc2l6ZSk7XFxuLVxcbi1cXHRpZiAoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUgXFx1MDAzYyB0YWJfc2l6ZSlcXG4rXFx0ZmluZGV4ID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlZmluZGV4KTtcXG4rXFx0aWYgKGVudHJ5X3NpemUgXFx1MDAzYyBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSB8fFxcbitcXHQgICAgIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUsIGZpbmRleCwgZW50cmllcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnRyeV9zaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBub21uOlxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZW50cmllczsgaSsrKSB7XFxuLVxcbi1cXHRcXHRfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldiwgb2ZmcztcXG4rXFx0XFx0c2l6ZV90IG9mZnM7XFxuK1xcdFxcdF9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2O1xcbiBcXHRcXHR1OCBjaGlwcmV2ID0gYWRhcHRlci1cXHUwMDNlYWh3LnJldmlzaW9uX2lkO1xcbiBcXHRcXHR1aW50MzJfdCBmbGFnYml0O1xcbiBcXG4tXFx0XFx0b2ZmcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItXFx1MDAzZWZpbmRleCkgK1xcbi1cXHRcXHRcXHRcXHQoaSAqIGNwdV90b19sZTMyKHB0YWJfZGVzY3ItXFx1MDAzZWVudHJ5X3NpemUpKTtcXG4rXFx0XFx0b2ZmcyA9IGZpbmRleCArIChzaXplX3QpaSAqIGVudHJ5X3NpemU7XFxuIFxcdFxcdGZsYWdzID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVtvZmZzXSArIE5YX1VOSV9GTEFHU19PRkYpKTtcXG4gXFx0XFx0ZmlsZV9jaGlwcmV2ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVtvZmZzXSArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcXG4gXFxuIFxcdFxcdGZsYWdiaXQgPSBtbl9wcmVzZW50ID8gMSA6IDI7XFxuIFxcbiBcXHRcXHRpZiAoKGNoaXByZXYgPT0gZmlsZV9jaGlwcmV2KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQoKDFVTEwgXFx1MDAzY1xcdTAwM2MgZmxhZ2JpdCkgXFx1MDAyNiBmbGFncykpIHtcXG4rXFx0XFx0ICAgICgoMVVMTCBcXHUwMDNjXFx1MDAzYyBmbGFnYml0KSBcXHUwMDI2IGZsYWdzKSkge1xcbiBcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VmaWxlX3ByZF9vZmYgPSBvZmZzO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbkBAIC03NjcsNyArNzk5LDcgQEAgc3RhdGljIHN0cnVjdCB1bmlfZGF0YV9kZXNjICpueF9nZXRfZGF0YV9kZXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICp0YWJfZGVzYztcXG4gXFx0X19sZTMyIG9mZnM7XFxuIFxcbi1cXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgc2VjdGlvbik7XFxuK1xcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZSwgc2VjdGlvbik7XFxuIFxcbiBcXHRpZiAodGFiX2Rlc2MgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjQ2LjMwODc0NzYzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDc0MjExNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFhFTl9OSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkXCIsXG4gICAgXCJueF9nZXRfdGFibGVfZGVzY1wiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3XCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2Zmc1wiLFxuICAgIFwibnhfZ2V0X2RhdGFfZGVzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciBmaXJtd2FyZSBwYXJzaW5nIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRmlybXdhcmUgcGFyc2luZyBpcyByZWFjaGFibGUgdmlhIGByZXF1ZXN0X2Zpcm13YXJlYCB3aGVuIHRoZSBkcml2ZXIgcHJvYmVzIGEgZGV2aWNlLCBhbmQgc3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgYnkgaW5qZWN0aW5nIG1hbGZvcm1lZCBmaXJtd2FyZSBibG9icy4gRnV6emluZyB0aGlzIGxvZ2ljIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGNvcnJlY3RseSBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQyNjAyNDkwMTdmMWQzNTM1NmNlYTU5Y2MzYmU0ZWYxMDkwY2QxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDM6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1xuaW5kZXggOGJjNGUyYjY5NTY5ZTUuLjU3MjJjNTVmYTBjY2U4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1xuQEAgLTU2MSwyMCArNTYxLDU1IEBAIGludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKm54X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIGludCBzZWN0aW9uKVxuKyNkZWZpbmUgTlhfVU5JX0RJUl9UWVBFX09GRlx0XHQ4XG4rI2RlZmluZSBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIFxcXG4rXHQoKE5YX1VOSV9ESVJfVFlQRV9PRkYgKyAxKSAqIHNpemVvZih1MzIpKVxuKyNkZWZpbmUgTlhfVU5JX1BST0RVQ1RfRU5UUllfTUlOX1NJWkUgXFxcbitcdCgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgKyAxKSAqIHNpemVvZih1MzIpKVxuK1xuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fcmFuZ2VfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBsZW4pXG4re1xuK1x0cmV0dXJuIG9mZiBcdTAwM2M9IHNpemUgXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IHNpemUgLSBvZmY7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fdGFibGVfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBuLCB1MzIgZXN6KVxuK3tcbitcdGlmIChvZmYgXHUwMDNlIHNpemUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghZXN6KVxuK1x0XHRyZXR1cm4gbiA9PSAwO1xuK1xuK1x0cmV0dXJuIG4gXHUwMDNjPSAoc2l6ZSAtIG9mZikgLyBlc3o7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fZW50cnlfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBlc3osIHUzMiBpZHgpXG4re1xuK1x0aWYgKCFlc3ogfHwgb2ZmIFx1MDAzZSBzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gaWR4IFx1MDAzYyAoc2l6ZSAtIG9mZikgLyBlc3o7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKlxuK254X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIHNpemVfdCBmd19zaXplLCBpbnQgc2VjdGlvbilcbiB7XG4tXHR1aW50MzJfdCBpO1xuIFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbi1cdF9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbitcdHUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbitcdHUzMiBlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWVudHJ5X3NpemUpO1xuK1x0dTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VmaW5kZXgpO1xuK1x0dTMyIGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcbitcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIHx8XG4rXHQgICAgIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoZndfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRcdF9fbGUzMiBvZmZzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWZpbmRleCkgK1xuLVx0XHRcdFx0KGkgKiBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZW50cnlfc2l6ZSkpO1xuLVx0XHRfX2xlMzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilcdTAwMjZ1bmlyb21bb2Zmc10gKyA4KSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcbitcdFx0c2l6ZV90IG9mZnMgPSBmaW5kZXggKyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplO1xuK1x0XHR1MzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilcdTAwMjZ1bmlyb21bb2Zmc10gK1xuK1x0XHRcdFx0XHRcdE5YX1VOSV9ESVJfVFlQRV9PRkYpKTtcbiBcbiBcdFx0aWYgKHRhYl90eXBlID09IHNlY3Rpb24pXG4tXHRcdFx0cmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikgXHUwMDI2dW5pcm9tW29mZnNdO1xuK1x0XHRcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopXHUwMDI2dW5pcm9tW29mZnNdO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtNTg2LDIwICs2MjEsMTggQEAgc3RhdGljIGludFxuIG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRjb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbitcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKVx1MDAyNnVuaXJvbVswXTtcbiBcdHUzMiBmd19maWxlX3NpemUgPSBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemU7XG4tXHR1MzIgdGFiX3NpemU7XG4tXHRfX2xlMzIgZW50cmllcztcbi1cdF9fbGUzMiBlbnRyeV9zaXplO1xuK1x0dTMyIGVudHJpZXMsIGVudHJ5X3NpemUsIGZpbmRleDtcbiBcbiBcdGlmIChmd19maWxlX3NpemUgXHUwMDNjIFFMQ05JQ19GSUxFSEVBREVSX1NJWkUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZW50cmllcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VudW1fZW50cmllcyk7XG4gXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWVudHJ5X3NpemUpO1xuLVx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZmluZGV4KSArIChlbnRyaWVzICogZW50cnlfc2l6ZSk7XG4rXHRmaW5kZXggPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZmluZGV4KTtcbiBcbi1cdGlmIChmd19maWxlX3NpemUgXHUwMDNjIHRhYl9zaXplKVxuK1x0aWYgKCFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGZ3X2ZpbGVfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02MTEsMzAgKzY0NCwzMCBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xuIFx0c3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyO1xuIFx0Y29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlZGF0YTtcbi1cdF9fbGUzMiBpZHggPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bYWRhcHRlci1cdTAwM2VmaWxlX3ByZF9vZmZdICtcbi1cdFx0XHRcdE5YX1VOSV9CT09UTERfSURYX09GRikpO1xuLVx0dTMyIG9mZnM7XG4tXHR1MzIgdGFiX3NpemU7XG4tXHR1MzIgZGF0YV9zaXplO1xuK1x0dTMyIGRhdGFfbGVuLCBkYXRhX29mZiwgZW50cnlfc2l6ZSwgZmluZGV4LCBpZHg7XG4rXHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9CT09UTEQ7XG4rXHRzaXplX3Qgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfQk9PVExEKTtcbitcdGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVthZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZl0gK1xuK1x0XHRcdCAgICAgTlhfVU5JX0JPT1RMRF9JRFhfT0ZGKSk7XG4rXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplLCBzZWN0aW9uKTtcbiBcbiBcdGlmICghdGFiX2Rlc2MpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpICtcbi1cdFx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICsgMSkpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgdGFiX3NpemUpXG4rXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSk7XG4rXHRmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpO1xuK1x0aWYgKGVudHJ5X3NpemUgXHUwMDNjIHNpemVvZigqZGVzY3IpIHx8XG4rXHQgICAgIW5ldHhlbl9yb21fZW50cnlfdmFsaWQoYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplLCBmaW5kZXgsIGVudHJ5X3NpemUsXG4rXHRcdFx0XHQgICAgIGlkeCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgK1xuLVx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4KSk7XG4rXHRvZmZzID0gZmluZGV4ICsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xuIFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4rXHRkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZWZpbmRleCk7XG4rXHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuIFxuLVx0ZGF0YV9zaXplID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlZmluZGV4KSArIGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgZGF0YV9zaXplKVxuK1x0aWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgZGF0YV9vZmYsIGRhdGFfbGVuKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02NDYsMjkgKzY3OSwzMCBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiBcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7XG4gXHRzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqZGVzY3I7XG4gXHRjb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VkYXRhO1xuLVx0X19sZTMyIGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVthZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZl0gK1xuLVx0XHRcdFx0TlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKTtcbi1cdHUzMiBvZmZzO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0dTMyIGRhdGFfc2l6ZTtcbitcdHUzMiBkYXRhX2xlbiwgZGF0YV9vZmYsIGVudHJ5X3NpemUsIGZpbmRleCwgaWR4O1xuK1x0dTMyIHNlY3Rpb24gPSBOWF9VTklfRElSX1NFQ1RfRlc7XG4rXHRzaXplX3Qgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfRlcpO1xuK1x0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW2FkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmXSArXG4rXHRcdFx0ICAgICBOWF9VTklfRklSTVdBUkVfSURYX09GRikpO1xuK1x0dGFiX2Rlc2MgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgc2VjdGlvbik7XG4gXG4gXHRpZiAoIXRhYl9kZXNjKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHRhYl9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZmluZGV4KSArXG4tXHRcdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCArIDEpKTtcbi1cbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIHRhYl9zaXplKVxuK1x0ZW50cnlfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpO1xuK1x0ZmluZGV4ID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZmluZGV4KTtcbitcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBzaXplb2YoKmRlc2NyKSB8fFxuK1x0ICAgICFuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgZmluZGV4LCBlbnRyeV9zaXplLFxuK1x0XHRcdFx0ICAgICBpZHgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG9mZnMgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpICtcbi1cdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xuK1x0b2ZmcyA9IGZpbmRleCArIChzaXplX3QpZW50cnlfc2l6ZSAqIGlkeDtcbiBcdGRlc2NyID0gKHN0cnVjdCB1bmlfZGF0YV9kZXNjICopXHUwMDI2dW5pcm9tW29mZnNdO1xuLVx0ZGF0YV9zaXplID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlZmluZGV4KSArIGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuK1x0ZGF0YV9vZmYgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpO1xuK1x0ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VzaXplKTtcbiBcbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIGRhdGFfc2l6ZSlcbitcdGlmICghbmV0eGVuX3JvbV9yYW5nZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjgyLDM5ICs3MTYsMzcgQEAgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0Y29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlZGF0YTtcbiBcdGludCBtbl9wcmVzZW50ID0gKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItXHUwMDNlYWh3LnJldmlzaW9uX2lkKSkgP1xuIFx0XHRcdDEgOiBuZXR4ZW5fcDNfaGFzX21uKGFkYXB0ZXIpO1xuLVx0X19sZTMyIGVudHJpZXM7XG4tXHRfX2xlMzIgZW50cnlfc2l6ZTtcbi1cdHUzMiB0YWJfc2l6ZTtcbi1cdHUzMiBpO1xuK1x0dTMyIGVudHJpZXMsIGVudHJ5X3NpemUsIGZpbmRleCwgaTtcbitcdHUzMiBzZWN0aW9uID0gTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMO1xuIFxuLVx0cHRhYl9kZXNjciA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMKTtcbitcdHB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgc2VjdGlvbik7XG4gXHRpZiAocHRhYl9kZXNjciA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVudHJpZXMgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZW51bV9lbnRyaWVzKTtcbiBcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWVudHJ5X3NpemUpO1xuLVx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWZpbmRleCkgKyAoZW50cmllcyAqIGVudHJ5X3NpemUpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgdGFiX3NpemUpXG4rXHRmaW5kZXggPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWZpbmRleCk7XG4rXHRpZiAoZW50cnlfc2l6ZSBcdTAwM2MgTlhfVU5JX1BST0RVQ1RfRU5UUllfTUlOX1NJWkUgfHxcbitcdCAgICAhbmV0eGVuX3JvbV90YWJsZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGZpbmRleCwgZW50cmllcyxcbitcdFx0XHRcdCAgICAgZW50cnlfc2l6ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIG5vbW46XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcbi1cbi1cdFx0X19sZTMyIGZsYWdzLCBmaWxlX2NoaXByZXYsIG9mZnM7XG4rXHRcdHNpemVfdCBvZmZzO1xuK1x0XHRfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldjtcbiBcdFx0dTggY2hpcHJldiA9IGFkYXB0ZXItXHUwMDNlYWh3LnJldmlzaW9uX2lkO1xuIFx0XHR1aW50MzJfdCBmbGFnYml0O1xuIFxuLVx0XHRvZmZzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VmaW5kZXgpICtcbi1cdFx0XHRcdChpICogY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VlbnRyeV9zaXplKSk7XG4rXHRcdG9mZnMgPSBmaW5kZXggKyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplO1xuIFx0XHRmbGFncyA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVtvZmZzXSArIE5YX1VOSV9GTEFHU19PRkYpKTtcbiBcdFx0ZmlsZV9jaGlwcmV2ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW29mZnNdICtcbi1cdFx0XHRcdFx0XHRcdE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcbitcdFx0XHRcdFx0XHQgICAgTlhfVU5JX0NISVBfUkVWX09GRikpO1xuIFxuIFx0XHRmbGFnYml0ID0gbW5fcHJlc2VudCA/IDEgOiAyO1xuIFxuIFx0XHRpZiAoKGNoaXByZXYgPT0gZmlsZV9jaGlwcmV2KSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0KCgxVUxMIFx1MDAzY1x1MDAzYyBmbGFnYml0KSBcdTAwMjYgZmxhZ3MpKSB7XG4rXHRcdCAgICAoKDFVTEwgXHUwMDNjXHUwMDNjIGZsYWdiaXQpIFx1MDAyNiBmbGFncykpIHtcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZiA9IG9mZnM7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbkBAIC03NjcsNyArNzk5LDcgQEAgc3RhdGljIHN0cnVjdCB1bmlfZGF0YV9kZXNjICpueF9nZXRfZGF0YV9kZXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcbiBcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7XG4gXHRfX2xlMzIgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBzZWN0aW9uKTtcbitcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFxuIFx0aWYgKHRhYl9kZXNjID09IE5VTEwpXG4gXHRcdHJldHVybiBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDM6NDYuMzA4NzQ5Mzk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2NjI4NzgxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRYZW4gTklDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgbmV0eGVuYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmNgLiBUaGlzIGlzIGZvY3VzZWQgb24gZW5oYW5jaW5nIHRoZSBzZWN1cml0eSBvZiBmaXJtd2FyZSBwYXJzaW5nLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZXkndmUgaW1wbGVtZW50ZWQgYm91bmRzIGNoZWNraW5nLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZmlybXdhcmUgdnVsbmVyYWJpbGl0aWVzLiBUaGV5J3ZlIHVwZGF0ZWQgc2V2ZXJhbCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHBhcnNpbmcgcHJvY2VzczogYG54X2dldF90YWJsZV9kZXNjYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgLCBhbmQgYG54X2dldF9kYXRhX2Rlc2NgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGljaCBhcmVhcyB0aGV5J3ZlIGltcHJvdmVkLlxuXG5UaGUgY29udGV4dCBoZXJlIGlzIGEgUUxvZ2ljL05ldFhlbiBHYkUgTklDIGRyaXZlci4gVGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYW5kIGludGVycHJldGluZyBmaXJtd2FyZSwgZWl0aGVyIGZyb20gYSBmaWxlIG9yIGRpcmVjdGx5IGZyb20gUk9NLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgYXR0YWNrIHN1cmZhY2VzLiBIb3cgdnVsbmVyYWJsZSBpcyB0aGlzIHRvIGEgY29tcHJvbWlzZWQgZmlybXdhcmUgaW1hZ2U/IElzIHRoaXMgc29tZXRoaW5nIHRoYXQncyBldmVuIGV4cGxvaXRhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERvZXMgdGhpcyBkcml2ZXIgYWN0dWFsbHkgKnJlcXVpcmUqIHRoZSBoYXJkd2FyZSB0byBiZSBwcmVzZW50IHRvIHByb2JlIGFuZCBsb2FkIHRoZSBmaXJtd2FyZSwgb3IgaXMgdGhlcmUgYSBzb2Z0d2FyZSBlbXVsYXRvciBvciBwcm9iZSBpbmplY3Rpb24gbWVjaGFuaXNtIHRoYXQgY291bGQgb3BlbiB1cCBhdHRhY2sgdmVjdG9ycz8gSXTigJlzIGNydWNpYWwgdG8ga25vdyBob3cgYSBtYWxpY2lvdXMgYWN0b3IgY291bGQgZXZlbiB0cmlnZ2VyIHRoaXMgY29kZSBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBuZXR4ZW5gIGlzIGEgUENJIGRyaXZlciBzaW5jZSB0aGF0IGdpdmVzIG1lIHNvbWUgY2x1ZXMgb24gcmVhY2hhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDQ6MzguOTcxNjI5MTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTc0ODUxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlci4qbmV0eGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ0OD1zdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ1NS0jZW5kaWZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NTY6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNm5ldHhlbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ0OjQxLjcyOTEyMDE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzgxMzA1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJIERyaXZlciBBc3Nlc3NtZW50IGFuZCBGdXp6aW5nIEZlYXNpYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXMsIGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IGl0PyBTeXprYWxsZXIgaGFzIHNob3duIHByb21pc2UgaW4gdGhlIHBhc3Qgd2l0aCBQQ0kgZGV2aWNlIGVtdWxhdGlvbjsgSSd2ZSBzZWVuIGl0IHdvcmsgd2l0aCB0aGluZ3MgbGlrZSB2aGNpIG9yIGV2ZW4gdGhlIGUxMDAwZS4gQnV0IHRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIGl0IG9mZmVycyBzdXBwb3J0IGZvciB0aGlzIHBhcnRpY3VsYXIgbmV0eGVuIGRldmljZS4gVGhhdCdzIHRoZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBleGlzdGluZyBTeXprYWxsZXIgZGVzY3JpcHRpb25zIG9yIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBmb3IgdGhpcyBuZXR4ZW4gaGFyZHdhcmUuIFRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDQ6NDYuODY3MjUyNTk0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzQ3NDI3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0eGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ0OjQ3LjA4NDczNzA4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NzkyOTAyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIG5ldHhlbiBEcml2ZXIqKlxuXG5Pa2F5LCBmaXJzdCB0aG91Z2h0OiBXaGVyZSAqaXMqIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBzeXprYWxsZXIgdGFyZ2V0PyBXYWl0LCBpdCdzIG5vdCBpbiB0aGUga2VybmVsIHNvdXJjZS4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGEgcGF0aCB0byBhY3R1YWxseSAqaGl0KiB0aGlzIGNvZGUuIEdlbmVyYWxseSwgUENJIGRyaXZlcnMgYXJlIGEgcGFpbiB0byBmdXp6IGRpcmVjdGx5IHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIGluIFFFTVUgb3IgYSBzcGVjaWFsIGtlcm5lbCBtZWNoYW5pc20gb3IsIHBlcmhhcHMsIGEgZ2VuZXJpYyBQQ0kgZnV6emVyLlxuXG5IbW0sIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGdlbmVyaWMgZm9yIFBDST8gU29tZXRoaW5nIGxpa2UgYHN5el9wY2l2ZmlvYCBvciBpbmplY3RpbmcgZGV2aWNlcyB2aWEgYSBkdW1teSBidXM/IFdhaXQsIGRvZXMgc3l6a2FsbGVyIGV4cG9zZSBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsPyBObywgbm8sIHN5emthbGxlciBtb3N0bHkgZnV6emVzIFBDSSB0aHJvdWdoIGB2ZmlvYCBvciB0aGUgYHBjaWAgc3Vic3lzdGVtIGlmIHRoZXkncmUgZW5hYmxlZC4gSXQgdXN1YWxseSBkb2Vzbid0IGRpZyBkZWVwIGludG8gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB1bmxlc3MgUUVNVSBlbXVsYXRlcyB0aGVtIChsaWtlIGUxMDAwZSwgcnRsODEzOSwgdGhvc2Uga2luZHMgb2YgZGV2aWNlcywgb3IgaWYgdGhlcmUncyBhIHNvZnR3YXJlIGRyaXZlciBsaWtlIGB2aGNpYCkuXG5cbkxldCBtZSBzZWUgaWYgUUVNVSBldmVuICpzdXBwb3J0cyogbmV0eGVuLiBRRU1VIG5ldHdvcmsgZGV2aWNlc+KApiBlMTAwMCwgZTEwMDBlLCBpZ2IsIGV0Yy4gTm9wZSwgbm8gbmV0eGVuIG9uIHRoYXQgbGlzdC4gRGFtbi5cblxuU28sIGluIGEgc3RhbmRhcmQgVk0sIHdpdGhvdXQgdGhlICphY3R1YWwqIGhhcmR3YXJlLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgYHZoY2lgLWxpa2UgYXBwcm9hY2ggZm9yIFVTQiwgYnV0IGZvciBQQ0ksIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgbm8sIGl0IHNlZW1zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBpcyB0aGUgd2F5IHRvIGRvIGl0LiBXYWl0LCBkb2VzIHN5emthbGxlciBldmVuIGhhdmUgYSBQQ0kgZnV6emVyIHVzaW5nIGB2ZmlvYD8gTm9wZSwgaXMgdGhlcmUgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGw/IE5vLlxuXG5BY3R1YWxseSwgZGlkbuKAmXQgc3l6a2FsbGVyICpyZWNlbnRseSogYWRkIHN1cHBvcnQgZm9yIGZ1enppbmcgUENJIGRyaXZlcnMgdmlhIGEgZHVtbXkgUENJIGRldmljZSBvciBzb21ldGhpbmcgc2ltaWxhcj8gR290dGEgY2hlY2sgaWYgdGhlcmUgaXMgc29tZSBuZXcgd2F5IHRvIGRvIFBDSSBmdXp6aW5nLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwLiBJZiB0aGlzICppcyogYSBQQ0kgZHJpdmVyIGFuZCB0aGVyZSdzIG5vIGhhcmR3YXJl4oCmIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJ3QgYmUgY2FsbGVkLiBQZXJpb2QuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG5ldHhlbl9uaWNfaW5pdC5jYCBpcyByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDQ6NTUuOTY0MDI5NjQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjkyMTcwNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz02MjA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6NjIxOm5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTYyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTc2ND1uZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtNzY1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjc2NjpcXHRpZiAobmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXIoYWRhcHRlcikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2Ny1cXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ0OjU5LjQzMzI1MTk4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDIzMTYxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAsIGFzc3VtaW5nIEkgaGF2ZSBzaWduaWZpY2FudCBrZXJuZWwtbGV2ZWwgbmV0d29ya2luZyBleHBlcmllbmNlOlxuXG4qKkRpZ2dpbmcgaW50byBuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2UqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAuLi4gc291bmRzIGxpa2Ugd2UncmUgdmVyaWZ5aW5nIHRoZSBpbnRlZ3JpdHkgb3IgdGhlIHN1aXRhYmlsaXR5IG9mIGEgdW5pZmllZCBST00gaW1hZ2UgZm9yIGEgTmV0WGVuIE5JQy4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCBjaGVja3N1bXMsIHZlcnNpb24gY2hlY2tzLCBpbWFnZSBmb3JtYXQgdmFsaWRhdGlvbiDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggZmlybXdhcmUgb3IgYm9vdCBjb2RlIGxvYWRpbmcuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgYm9vdCBwcm9jZXNzLCBhIGdhdGVrZWVwZXIgZW5zdXJpbmcgdGhhdCB0aGUgTklDIGRvZXNuJ3QgYnJpY2sgaXRzZWxmIG9yIHdvcnNlLCBpbnRyb2R1Y2Ugc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ20gYW50aWNpcGF0aW5nIGl0IHdpbGwgZXhhbWluZSB0aGluZ3MgbGlrZTpcblxuKiAgICoqUk9NIEhlYWRlcjoqKiBDaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgdmFsaWQgaGVhZGVyIHN0cnVjdHVyZS4gSSdsbCBleHBlY3QgZmllbGRzIGluZGljYXRpbmcgaW1hZ2UgdHlwZSwgdmVyc2lvbiwgbGVuZ3RoLCBtYXliZSBldmVuIGEgbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHRoaW5nIHRvIGNoZWNrIVxuKiAgICoqQ2hlY2tzdW0gVmVyaWZpY2F0aW9uOioqIEEgQ1JDIG9yIGNyeXB0b2dyYXBoaWMgaGFzaCB0byBjb25maXJtIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiBjb3JydXB0ZWQgZHVyaW5nIHN0b3JhZ2Ugb3IgdHJhbnNmZXIuIFRoaXMgaXMgYSBtdXN0LWhhdmUgZm9yIGFueSBpbWFnZSB2ZXJpZmljYXRpb24uXG4qICAgKipWZXJzaW9uIENvbXBhdGliaWxpdHk6KiogVmVyaWZ5aW5nIHRoYXQgdGhlIFJPTSBpbWFnZSB2ZXJzaW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgTklDIGhhcmR3YXJlIG9yIHRoZSBkcml2ZXIuIFdlIGRvbid0IHdhbnQgdG8gbG9hZCBhIGZpcm13YXJlIHRoYXQncyB0b28gb2xkIG9yIHRvbyBuZXcsIHdoaWNoIGNvdWxkIGNhdXNlIGluc3RhYmlsaXR5LiBUaGVyZSBtaWdodCBiZSBzb21lIGNsZXZlciB2ZXJzaW9uIG51bWJlciBjb21wYXJpc29uIGhhcHBlbmluZyBoZXJlLCBwZXJoYXBzIGV2ZW4gY2hlY2tpbmcgYWdhaW5zdCBhIHdoaXRlbGlzdC9ibGFja2xpc3QuXG4qICAgKipJbWFnZSBGb3JtYXQ6KiogUG9zc2libHkgY2hlY2tpbmcgaWYgdGhlIGltYWdlIGNvbmZvcm1zIHRvIGEgc3BlY2lmaWVkIGZvcm1hdCBmb3IgbmV0eGVuIE5JQ3MsIGVuc3VyaW5nIGl0IGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IHNlY3Rpb25zIChlLmcuLCBjb2RlLCBkYXRhLCBjb25maWd1cmF0aW9uKS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZWN0aW9uIGxlbmd0aHMgb3Igb2Zmc2V0cyB0aGF0IEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvcj9cbiogICAqKlNlY3VyaXR5IENoZWNrczoqKiBNYXliZSBzb21lIG1vcmUgYWR2YW5jZWQgY2hlY2tzLCBtYXliZSBsaWtlIGEgZGlnaXRhbCBzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBpbWFnZSdzIGF1dGhlbnRpY2l0eSwgb3IgY2hlY2tpbmcgZm9yIG1hbGljaW91cyBjb2RlIG9yIGJhY2tkb29ycy5cbiogICAqKkFkZHJlc3MgU3BhY2U6KiogSXQnbGwgbmVlZCB0byBjaGVjayB0aGUgUk9NIGltYWdlIHNpemUgdG8gbWFrZSBzdXJlIHRoYXQgaXQgd2lsbCBmaXQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYWRkcmVzcyBzcGFjZS4gT3RoZXJ3aXNlLCB0aGVyZSdsbCBiZSBtZW1vcnkgY29ycnVwdGlvbiBvciB0aGUgTklDIHdpbGwganVzdCByZWZ1c2UgdG8gd29yay5cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSAqaG93KiByb2J1c3QgdGhlIHZhbGlkYXRpb24gaXMuIElzIGl0IGp1c3QgYmFzaWMgY2hlY2tzdW1zLCBvciBhcmUgdGhleSB1c2luZyBtb3JlIHNvcGhpc3RpY2F0ZWQgc2VjdXJpdHkgbWVhc3VyZXM/IFdoYXQgdnVsbmVyYWJpbGl0aWVzIGFyZSB0aGV5IGxpa2VseSBndWFyZGluZyBhZ2FpbnN0PyBBbmQsIGltcG9ydGFudGx5LCBpZiBhIHZhbGlkYXRpb24gKmZhaWxzKiwgd2hhdCdzIHRoZSBleHBlY3RlZCBlcnJvciBoYW5kbGluZz8gRG9lcyBpdCBsb2cgYSB1c2VmdWwgZXJyb3IsIHBhbmljIHRoZSBkcml2ZXIsIG9yIHNpbGVudGx5IGZhaWwgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gYmlnZ2VyIHByb2JsZW1zIGRvd24gdGhlIGxpbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCB3aGF0IGl0ICpkb2Vzbid0KiBkbywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgd2VhayBzcG90cyBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ1OjA0LjE3NTU3NTM4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NDcxOTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6NzY0Om5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy03NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMTAxPW5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTExMTEtXFx0aWYgKGZ3X3R5cGUgPT0gTlhfVU5JRklFRF9ST01JTUFHRSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTExMjpcXHRcXHRpZiAobmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKGFkYXB0ZXIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTExMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDU6MDYuMjQwMjk5MzI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTM4OTIyODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3Q6XG5cbioqQW5hbHl6aW5nIEZpcm13YXJlIFZhbGlkYXRpb24g4oCTIEEgRmFtaWxpYXIgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB3ZSdyZSB0YWxraW5nIGFib3V0IGBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmVgLiBUaGlzIGluc3RhbnRseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgTmV0WGVuIChvciBRTG9naWMvTWFydmVsbCkgbmV0d29yayBpbnRlcmZhY2UgY2FyZCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgZmlybXdhcmUgdmFsaWRhdGlvbiBwcm9jZXNzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaGVyZS4gRmlybXdhcmUgdmFsaWRhdGlvbiBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGluIHByZXZlbnRpbmcgbWFsaWNpb3VzIGFjdG9ycyBmcm9tIGluamVjdGluZyBjb21wcm9taXNlZCBmaXJtd2FyZSwgbGVhZGluZyB0byBwb3RlbnRpYWwgc3lzdGVtIGNvbXByb21pc2UsIGRlbmlhbC1vZi1zZXJ2aWNlLCBvciBldmVuIGRhdGEgYnJlYWNoZXMuXG5cblNvLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgdmFsaWRhdGlvbiBzdGVwczogY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBzaWduYXR1cmUgY2hlY2tzIChsaWtlbHkgUlNBLWJhc2VkLCBwb3NzaWJseSB3aXRoIGEgaGFyZHdhcmUgcm9vdCBvZiB0cnVzdCksIHZlcnNpb24gY2hlY2tzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGJhc2ljIHNhbml0eSBjaGVja3Mgb24gdGhlIGZpcm13YXJlIGltYWdlIGl0c2VsZiB0byBlbnN1cmUgaXQncyB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgZm9ybWF0LiBJJ20gd29uZGVyaW5nIHdoYXQgc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGJlIGV4cG9zZWQgYXQgdGhpcyBzdGFnZS4gQ291bGQgdGhlcmUgYmUgYW55IGJ1ZmZlciBvdmVyZmxvd3MgaW4gdGhlIHZhbGlkYXRpb24gcm91dGluZSBpdHNlbGY/IEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIGZvciBhIGRvd25ncmFkZSBhdHRhY2ssIHdoZXJlIGFuIG9sZGVyLCB2dWxuZXJhYmxlIGZpcm13YXJlIHZlcnNpb24gY291bGQgYmUgZm9yY2VkIG9udG8gdGhlIGNhcmQ/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJcyBpdCBkb25lIGluIHRoZSBkcml2ZXIgaXRzZWxmLCBvciBpcyB0aGVyZSBhIHNlcGFyYXRlIGZpcm13YXJlIHZhbGlkYXRpb24gbW9kdWxlIHdpdGhpbiB0aGUgTklDJ3MgZmlybXdhcmU/IEhvdyBkb2VzIGl0IGhhbmRsZSB1cGRhdGVzIGFuZCBkb3duZ3JhZGVzPyBJcyB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIGhhcmRlbmVkIGFnYWluc3QgdGFtcGVyaW5nPyBBcmUgdGhlcmUgYW55IGRvY3VtZW50ZWQgd2Vha25lc3NlcyBvciBrbm93biBieXBhc3NlcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgdGhpcyBpcyBhbiBpc3N1ZSBJIGhhdmUgc2VlbiBiZWZvcmUsIGFuZCBob3cgdG8gcmVtZWR5IGl0LiBBbnkgc3BlY2lmaWMgbG9nZ2luZyBvciBlcnJvciByZXBvcnRpbmcgd291bGQgYmUga2V5IHRvbywgdG8gdHJvdWJsZXNob290IGFueSBpc3N1ZXMuIE92ZXJhbGwsIGl0IGFsbCBwb2ludHMgdG8gYSBjcml0aWNhbCBwb2ludCBmb3Igc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBhbGwgYW5nbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDU6NDkuMzc5MjI1MDQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwNjY2NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTExMDA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTEwMTpuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTEwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTEyMzc9dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzoxMjU1OlxcdFxcdHJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1Ni1cXHRcXHRpZiAocmMgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NTo1MS4zNjk4OTg3NDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzMzc3Mzc3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBGaXJtd2FyZSBSZXF1ZXN0IExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZmlybXdhcmUgcmVxdWVzdHMsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBuZXR3b3JrIGRyaXZlciBlY29zeXN0ZW0sIGlzbid0IGl0PyBJdCdzIHRoZSBwb2ludCB3aGVyZSBhIGRyaXZlciwgbmVlZGluZyBhIHNwZWNpZmljIGZpcm13YXJlIGltYWdlIHRvIG9wZXJhdGUgY29ycmVjdGx5LCBhY3R1YWxseSBnb2VzIG91dCBhbmQgKmFza3MqIGZvciBpdC4gSXQncyB0aGUgY3J1Y2lhbCBoYW5kc2hha2UsIHRoZSBiZWdpbm5pbmcgb2YgZ2V0dGluZyBoYXJkd2FyZSByZWFkeSBmb3IgYWN0aW9uLiBJJ20gY29uc2lkZXJpbmcgYWxsIHRoZSB3YXlzIHRoaXMgY2FuIGdvIHJpZ2h0LCBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIGdvIHdyb25nLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIHNjZW5hcmlvcy4gRG9lcyB0aGUgZHJpdmVyIGhhdmUgYnVpbHQtaW4gZmlybXdhcmUgYmxvYnM/IElmIG5vdCwgaG93J3MgaXQgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgcGF0aCB0byBsb29rIGZvciB0aGUgZmlybXdhcmU/IEFyZSB0aGVyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gcGxheT8gQW5kIHdoYXQgYWJvdXQgdGhlIGNhY2hpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZD8gQXJlIHdlIGVmZmljaWVudGx5IGF2b2lkaW5nIHJlZHVuZGFudCBsb29rdXBzLCBvciBpcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGJvdHRsZW5lY2tzPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIG9mIHNlYXJjaCDigJMgb2Z0ZW4gaXTigJlzIGxvb2tpbmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGVuIGluIGEgc3RhbmRhcmQgZmlybXdhcmUgZGlyZWN0b3J5LCBhbmQgbWF5YmUgY2hlY2tpbmcgdmVuZG9yIHNwZWNpZmljIGRpcmVjdG9yaWVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQgc3lzdGVtIHN0YWJpbGl0eS5cblxuQW5kIHRoZW4sIG9mIGNvdXJzZSwgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGZpcm13YXJlIGlzIHVuYXZhaWxhYmxlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgdGhlIGRyaXZlciBmYWxsIGJhY2sgdG8gYSBsZXNzIGZ1bmN0aW9uYWwgbW9kZSwgb3IgZG9lcyBpdCBmbGF0LW91dCBmYWlsPyBIb3cgYXJlIHRoZXNlIGZhaWx1cmVzIGxvZ2dlZCwgYW5kIGFyZSB0aGUgZXJyb3IgbWVzc2FnZXMgaGVscGZ1bCBlbm91Z2ggZm9yIGRlYnVnZ2luZz8gSSBiZXQgSSBjb3VsZCBpbXByb3ZlIHRob3Nl4oCmIE1heWJlIGl0J3MgZXZlbiB3b3J0aCBsb29raW5nIGF0IGlmIHRoZXJlIGlzIGEgd2F5IHRvIHRyaWdnZXIgYSBmaXJtd2FyZSBjaGVjayB3aGVuIHRoZSBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgb3IgbG9hZGVkLiBJJ20gYWxzbyB0aGlua2luZyBhYm91dCB0aGUgc2VjdXJpdHkgYXNwZWN0cyBoZXJlOiBIb3cgYXJlIHdlIHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkb3dubG9hZGVkIGZpcm13YXJlPyBBcmUgdGhlcmUgZGlnaXRhbCBzaWduYXR1cmVzIGludm9sdmVkPyBUaGlzIGlzIHBhcmFtb3VudCBmb3IgcHJldmVudGluZyBtYWxpY2lvdXMgZmlybXdhcmUgdXBkYXRlcyBmcm9tIGJyaWNraW5nIHN5c3RlbXMgb3Igb3BlbmluZyB2dWxuZXJhYmlsaXRpZXMuXG5cbkknbSBhbHNvIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0byBiZSBjb25zaWRlcmVkLiBBcmUgdGhlcmUgbXVsdGlwbGUgZHJpdmVyIGluc3RhbmNlcyBydW5uaW5nIHNpbXVsdGFuZW91c2x5LCBhbGwgdHJ5aW5nIHRvIHJlcXVlc3QgdGhlIHNhbWUgZmlybXdhcmU/IEhvdyBpcyBjb25jdXJyZW5jeSBtYW5hZ2VkIHRvIHByZXZlbnQgY29uZmxpY3RzIG9yIGZpbGUgYWNjZXNzIHByb2JsZW1zPyBUaGlzIGlzIGEgcG9pbnQgd2hlcmUgSeKAmXZlIHNlZW4gc29tZSBzdWJ0bGUgYnVncyBlbWVyZ2UgaW4gdGhlIHBhc3QuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0byByZW1lbWJlciB0aGUgZGlmZmVyZW50IGludGVyZmFjZXMgZm9yIGZldGNoaW5nIHRoZSBmaXJtd2FyZSwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgYW5kIHRoZSBkZXZpY2UuXG5cbkZpbmFsbHksIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSG93IGRvZXMgdGhpcyBgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmVgIGZ1bmN0aW9uIGludGVncmF0ZSB3aXRoIHRoZSBicm9hZGVyIGZpcm13YXJlIGxvYWRpbmcgZnJhbWV3b3JrIG9mIHRoZSBrZXJuZWw/IEFyZSB0aGVyZSBhbnkgaW50ZXJvcGVyYWJpbGl0eSBjb25jZXJucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMsIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGFjcm9zcyB0aGUgZW50aXJlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcz8gSSBiZXQgdGhlcmXigJlzIGEgbG90IG1vcmUgdGhhdCBJIGNvdWxkIGJlIHRoaW5raW5nIGFib3V0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwODIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NjoxNi43MDc2Mzg2ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc2NDg5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0eGVuX3JlcXVlc3RfZmlybXdhcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmg9MTczMD1pbnQgbmV0eGVuX25lZWRfZndfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWMuaDoxNzMxOnZvaWQgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWMuaC0xNzMyLXZvaWQgbmV0eGVuX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9MTIxNz1uZXR4ZW5fcDNfaGFzX21uKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjEyMzc6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMjM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9OTI3PW5ldHhlbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjk1MzpcXHRuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDY6MTguNzI1MjkzMTU2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NzYyMjYxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIGludG8gYG5ldHhlbl9zdGFydF9maXJtd2FyZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIFdoZW4gSSBzZWUgYG5ldHhlbl9zdGFydF9maXJtd2FyZWAsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGNyaXRpY2FsIHBhdGggb2YgYSBOZXRYZW4gKG9yIFFMb2dpYyBOZXRYZW4sIGRlcGVuZGluZyBvbiB0aGUgYWdlIG9mIHRoZSBjb2RlKSBuZXR3b3JrIGFkYXB0ZXIncyBpbml0aWFsaXphdGlvbi4gSSdtIHRoaW5raW5nLCBcIlRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgbWlzZXJ5ISkgYmVnaW5zLlwiIFRoaXMgZnVuY3Rpb24gKmhhcyogdG8gaGFuZGxlIHRoZSBudWFuY2VkIGRhbmNlIGJldHdlZW4gdGhlIGRyaXZlciwgdGhlIGhhcmR3YXJlLCBhbmQgdGhlIGZpcm13YXJlIGl0c2VsZi5cblxuRmlyc3QsIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgY2hlY2tzOiBoYXMgdGhlIGFkYXB0ZXIgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkPyBJcyB0aGUgZGV2aWNlIHJlYWR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaGFyZHdhcmUgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBlcnJvcnMgdGhhdCBoYXZlIHNob3J0LWNpcmN1aXRlZCBpbml0aWFsaXphdGlvbj8gSSdtIGFudGljaXBhdGluZyBlcnJvciBoYW5kbGluZyBmcm9tIHRoZSBvdXRzZXQg4oCTIGEgd2VsbC13cml0dGVuIHJvdXRpbmUgaGVyZSBhbnRpY2lwYXRlcyBmYWlsdXJlIG1vZGVzLlxuXG5UaGVuLCB0aGUgY29yZSBvZiBpdCBoYXMgdG8gaW52b2x2ZSBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpbWFnZS4gQW0gSSBzZWVpbmcgYSBkaXJlY3QgcmVhZCBmcm9tIGEga25vd24gbG9jYXRpb24gKGxpa2VseSBhIGRldmljZS1zcGVjaWZpYyBmbGFzaCBvciBhIG1lbW9yeS1tYXBwZWQgYXJlYSksIG9yIGlzIHRoZXJlIGEgbW9yZSBpbnZvbHZlZCBwcm9jZXNzIGludm9sdmluZyBhIGZpcm13YXJlIGRvd25sb2FkIHVzaW5nIGEgYm9vdGxvYWRlciBwcm90b2NvbD8gSSdtIGhvcGluZyBmb3IgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRvd25sb2FkIG1lY2hhbmlzbS4gVGhlIGVmZmljaWVuY3kgb2YgdGhpcyBmdW5jdGlvbiBoYXMgYSByZWFsIGltcGFjdCBvbiBib290IHRpbWUuXG5cbknigJltIG9uIHRoZSBsb29rb3V0IGZvciBhIHBvdGVudGlhbCBmYWxsYmFjayB0byBhIOKAnHNhZmUgbW9kZeKAnSBvciBkaWFnbm9zdGljIGZpcm13YXJlIGlmIHRoZSBwcmltYXJ5IGRvd25sb2FkIGZhaWxzLiBSb2J1c3RuZXNzIGlzIGtleTsgYSBicmlja2VkIGFkYXB0ZXIgaXMgYSAqdmVyeSogYmFkIHVzZXIgZXhwZXJpZW5jZSwgYW5kIGEgcHJvcGVybHkgZGVzaWduZWQgcm91dGluZSBoZXJlIHNob3VsZCBtaW5pbWl6ZSB0aGF0IHJpc2suIEknbSBob3BpbmcgdG8gc2VlIGEgZ29vZCBiYWxhbmNlIGJldHdlZW4gc3BlZWQgYW5kIHJlbGlhYmlsaXR5LlxuXG5BbHNvLCBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgdmVyc2lvbmluZyBhbmQgY29tcGF0aWJpbGl0eS4gSXMgdGhlcmUgYSBjaGVjayB0byBlbnN1cmUgdGhlIGZpcm13YXJlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyPyBIb3cgZG9lcyBpdCBoYW5kbGUgZmlybXdhcmUgdXBkYXRlcz8gQSBtaXNtYXRjaCBoZXJlIGNhbiBjYXVzZSB2ZXJ5IHN1YnRsZSBidWdzIHRoYXQgYXJlIGRpZmZpY3VsdCB0byBkZWJ1ZywgYW5kIEkgZXhwZWN0IHRvIHNlZSBlbGVnYW50IGNoZWNrcyB0byBwcmV2ZW50IHRoYXQuXG5cbkknbSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc3RlcHM6XG5cbjEuICAqKlByZXBhcmF0aW9uKio6IEhhcmR3YXJlIHJlc2V0L2luaXRpYWxpemF0aW9uLiBSZXNvdXJjZSBhbGxvY2F0aW9uLlxuMi4gICoqRmlybXdhcmUgTG9hZCoqOiBEZXRlcm1pbmUgdGhlIHNvdXJjZSAoZmxhc2gsIGRvd25sb2FkKSwgZXJyb3IgaGFuZGxpbmcgb24gcmVhZCBmYWlsdXJlcy5cbjMuICAqKkZpcm13YXJlIFZlcmlmaWNhdGlvbioqOiBDaGVja3N1bSwgdmVyc2lvbiB2ZXJpZmljYXRpb24sIGFueSBzZWxmLXRlc3RzIHRoYXQgbWlnaHQgcnVuIGF0IHRoaXMgc3RhZ2UuXG40LiAgKipGaXJtd2FyZSBBY3RpdmF0aW9uKio6IENvbnRyb2wgaGFuZG9mZi5cbjUuICAqKlN0YXR1cyBSZXBvcnRpbmcqKjogUmVwb3J0IHRvIHRoZSBkcml2ZXIgdGhhdCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cblxuSSBrbm93IHRoZSBudWFuY2VzIG9mIGZpcm13YXJlIGxvYWRpbmcgY2FuIGJlY29tZSBjb21wbGV4IGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkgYW0gd29uZGVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhvc2UuIElzIHRoZXJlIGFueSBldmlkZW5jZSBvZiBzZWN1cmUgYm9vdCBvciBjb2RlIHNpZ25pbmc/IFRoYXQgd291bGQgYmUgYSBnb29kIHNpZ24uXG5cbkluIGVzc2VuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBgbmV0eGVuX3N0YXJ0X2Zpcm13YXJlYCBmdW5jdGlvbiB0byBiZSBhIHRpZ2h0bHkgd291bmQsIGVmZmljaWVudCwgYW5kIHJvYnVzdCBwaWVjZSBvZiBjb2RlLCB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIHRoZSBhZGFwdGVyJ3MgbmV0d29yayBjb25uZWN0aXZpdHkgZGVwZW5kcy4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBhbmQgSSdtIHZlcnkgaW50ZXJlc3RlZCB0byBzZWUgaG93IHdlbGwgaXQncyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NjoyNC40MDE1MjEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0MjY4NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl9zdGFydF9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTkyNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzo5Mjc6bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTkyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTE0Mzg9bmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMTUyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjE1Mjk6XFx0ZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMTUzMC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0xNjg2PXN0YXRpYyBpbnQgbmV0eGVuX25pY19hdHRhY2hfbGF0ZV9mdW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNjk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MTY5NzpcXHRlcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNjk4LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MjUxOT1uZXR4ZW5fZndpbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0yNTUyLVxcdGNhc2UgTlhfREVWX1JFQURZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MjU1MzpcXHRcXHRpZiAoIW5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMjU1NC1cXHRcXHRcXHRuZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fYXR0YWNoX3dvcmssIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NjoyNi4xMjU3OTUwODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0NDUwNDMzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIGBuZXR4ZW5fbmljX3Byb2JlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ldHhlbl9uaWNfcHJvYmVgIGZ1bmN0aW9uLCBhbmQgaXQncyB0cmlnZ2VyZWQgYnkgYSBQQ0kgZHJpdmVyLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCdzIGEgUENJIGRyaXZlciwgc28gdGhlIHByb2JlIGZ1bmN0aW9uICpzaG91bGQqIG9ubHkgYmUgY2FsbGVkIGlmIGEgbWF0Y2hpbmcgUENJIGRldmljZSBpcyBwcmVzZW50LiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSB0cmlnZ2VyIHRoaXMgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlP1xuXG5JIGtub3cgc3l6a2FsbGVyIGNhbiB0ZXN0IFBDSSBkcml2ZXJzLCBidXQgdXN1YWxseSwgaXQgcmVsaWVzIG9uIGJpbmRpbmcgdGhlIGRyaXZlciB0byBhIGR1bW15IGRldmljZS4gSSByZW1lbWJlciBpdCBtaWdodCB1c2UgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCwgd2FpdCwgSSBkb24ndCB0aGluayBzeXprYWxsZXIgKmFjdHVhbGx5KiBoYXMgYSBnZW5lcmljIHdheSB0byBpbmplY3QgUENJIGRldmljZXMuIFVubGVzcy4uLiB1bmxlc3MgdGhlcmUgYXJlIG1vcmUgcmVjZW50IGFkZGl0aW9ucywgbGlrZSB0aGUgYHN5el9nZW5ldGxpbmtgIGZvciBuZXRsaW5rIGFuZCBgc3l6X3VzYmAgZm9yIFVTQj8gTm8sIHRoYXQncyBub3QgcmlnaHQuXG5cbldhaXQgYSBtaW51dGUuLi4gZG9lcyBzeXprYWxsZXIgaGF2ZSBQQ0kgZnV6emluZyAqYXQgYWxsKj8gTWF5YmUgd2l0aCBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYD8gTm8sIHRoYXQncyBub3QgaXQgZWl0aGVyLlxuXG5MZXQgbWUgdGFrZSBhIHN0ZXAgYmFjayBhbmQgc2VlIGlmIHN5emthbGxlciBpcyBhY3R1YWxseSBkb2luZyBQQ0kgZnV6emluZyBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgY291bGQgc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSwgYnV0IHRoYXQncyBub3QgdGhlIGJlc3QgYXBwcm9hY2ggc2luY2Ugc3l6a2FsbGVyIGlzIGV4dGVybmFsLlxuXG5BaGEhIFRoZSBcIkF1dGhvclwiIGxpbmUhIElmIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgYHN5ei1jbHVzdGVyYCwgdGhhdCBtZWFucyBzeXprYWxsZXIgKmZvdW5kKiBhIGJ1ZyBoZXJlISBJdCdzIGZyb20gXCJzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVwiLCBzbyBpdCAqZGVmaW5pdGVseSogZm91bmQgc29tZXRoaW5nLiBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiIC0gdGhhdCBjb25maXJtcyBpdC4gSWYgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIGhlcmUsIHRoYXQgbWVhbnMgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlIVxuXG5Ib3cgaXMgc3l6a2FsbGVyIGRvaW5nIHRoYXQ/IFBlcmhhcHMgaXQgaXMgdXNpbmcgYHJlcXVlc3RfZmlybXdhcmVgPyBJZiBzeXprYWxsZXIgY2FuIHJlYWNoIGl0LCB0aGF0IG1lYW5zIGl0ICppcyogZnV6emFibGUuIE1heWJlIHRoZSBidWcgd2FzIGZvdW5kIGJ5IGluamVjdGluZyBmaXJtd2FyZSBvciBwZXJoYXBzIHN5emthbGxlciAqZG9lcyogaGF2ZSBQQ0kgZnV6emluZy5cblxuT2theSwgbGV0J3MgZGV0ZXJtaW5lIGlmIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLiBDbGVhcmx5LCBpZiBzeXprYWxsZXIgZm91bmQgYSBidWcsIGl0ICppcyogcmVhY2hhYmxlLlxuXG5UaGUgcHJvbXB0LCBob3dldmVyLCBtZW50aW9ucyBhIGNhdmVhdDogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi5cIiBTbywgY2FuIEkgcmVhY2ggdGhpcyBgbmV0eGVuX25pY19wcm9iZWAgaW4gUUVNVT9cblxuQ291bGQgSSB0cmlnZ2VyIHRoZSBQQ0kgcHJvYmUgdmlhIHN5c2ZzPyBTb21ldGhpbmcgbGlrZSwgYGVjaG8gXCJ2ZW5kb3IgZGV2aWNlXCIgXHUwMDNlIC9zeXMvYnVzL3BjaS9kcml2ZXJzL25ldHhlbl9uaWMvbmV3X2lkYD8gVGhhdCAqd291bGQqIG1ha2UgdGhlIGRyaXZlciBhdHRlbXB0IHRvIGJpbmQgdG8gYSBQQ0kgZGV2aWNlIHdpdGggYSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlIElELCBidXQgSSB3b3VsZCBzdGlsbCBuZWVkIGEgUENJIGRldmljZS4gSSByZW1lbWJlciBzeXprYWxsZXIgaGFzIGB2aGNpYCBmb3IgVVNCLi4uIGRvZXMgaXQgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJPyBEb2VzIHN5emthbGxlciBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgd2FpdCwgc3l6a2FsbGVyICpkb2VzKiB1c2UgYHZmaW9gIG9yIGEgc2ltaWxhciB0ZWNobm9sb2d5LlxuXG5BY3R1YWxseSwgSSB0aGluayBzeXprYWxsZXIgKmRpZCogcmVjZW50bHkgYWRkIGEgUENJIGZ1enplciEgRG9lcyBpdCB1c2UgYSBkdW1teSBQQ0kgZGV2aWNlPyBObywgaXQgdXNlcyBLVk0vUUVNVSwgb3IgbWF5YmUgaXQgaGFzIGEgc29mdHdhcmUgUENJIGJ1cyBpbXBsZW1lbnRhdGlvbi5cblxuV2FpdCwgbWF5YmUgdGhlcmUncyBhIGBDT05GSUdfUENJX0RFQlVHYCBvcHRpb24gSSBjb3VsZCB1c2U/XG5cblRoZSBwcm9tcHQgc2F5cyBJIHNob3VsZDogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cbkkgZG9uJ3QgbmVlZCB0byBwcm92ZSBpdCdzIHJlYWNoYWJsZSBzaW5jZSBzeXprYWxsZXIgZm91bmQgaXQsIGJ1dCBJICpzaG91bGQqIGNoZWNrIHRoZSBjb25maWdzLiBXaGF0IGFyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM1NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0Njo0Mi41NzA4NDAyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwOTM1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRYRU5fTklDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnPTU4PWNvbmZpZyBRTENOSUNfSFdNT05cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjY5OmNvbmZpZyBORVRYRU5fTklDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDY6NDIuODYxNzg1MzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODYyODUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUUxvZ2ljIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBRTG9naWMgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgaW5pdGlhbCBkcml2ZXIgb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlIGNvcmUgc2VsZWN0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgYW5kIG9mdGVuIHRoZSBpbml0aWFsIGZlYXR1cmUgc2V0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhpbmdzIGxpa2UgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBkcml2ZXIgaXRzZWxmIChgQ09ORklHX1FMT0dJQ18uLi5gKSwgb3B0aW9ucyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudHMsIHBlcmhhcHMgc29tZSBlYXJseSBzZXR0aW5ncyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBtYXliZSBldmVuIGRlYnVnZ2luZy90cmFjaW5nIGNhcGFiaWxpdGllcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4gTGluZSA2OS4uLiB0aGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgZGVjaXNpb25zIGJlZ2luLCBnZW5lcmFsbHkuIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ2OjQ3LjQ1MDQxNTU5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRkZXBlbmRzIG9uIFFMQ05JQyBcXHUwMDI2XFx1MDAyNiBIV01PTiBcXHUwMDI2XFx1MDAyNiAhKFFMQ05JQz15IFxcdTAwMjZcXHUwMDI2IEhXTU9OPW0pXFxuICA2MTpcXHRcXHRkZWZhdWx0IHlcXG4gIDYyOlxcdFxcdGhlbHBcXG4gIDYzOlxcdFxcdCAgVGhpcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byByZWFkIHRoZVxcbiAgNjQ6XFx0XFx0ICBib2FyZCB0ZW1wZXJhdHVyZSBpbiBDb252ZXJnZWQgRXRoZXJuZXQgZGV2aWNlc1xcbiAgNjU6XFx0XFx0ICBzdXBwb3J0ZWQgYnkgcWxjbmljLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRoaXMgZGF0YSBpcyBhdmFpbGFibGUgdmlhIHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBORVRYRU5fTklDXFxuICA3MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0WGVuIE11bHRpIHBvcnQgKDEvMTApIEdpZ2FiaXQgRXRoZXJuZXQgTklDXFxcIlxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDcyOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciBOZXRYZW4ncyBHaWdhYml0IEV0aGVybmV0IGNhcmQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBRRURcXG4gIDc3OlxcdFxcdHRyaXN0YXRlIFxcXCJRTG9naWMgUUVEIDI1LzQwLzEwMEdiIGNvcmUgZHJpdmVyXFxcIlxcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDc5OlxcdFxcdHNlbGVjdCBaTElCX0lORkxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDY6NDcuNDUwNDgzODMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTE3Mjg4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBzZWUgYE5FVFhFTl9OSUNgIOKAkyB0aGF04oCZcyB0aGUgcHJpbWFyeSBkcml2ZXIgY29uZmlnLCByaWdodD8gQnV0IEkgYWxzbyBzcG90IGBGV19MT0FERVJgIGJlaW5nIHNlbGVjdGVkLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZHJpdmVyPyBUaGlzIGZlZWxzIGxpa2UgaXQncyBtaXNzaW5nIHNvbWV0aGluZyBhbmQgSSBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgaXRzZWxmIHRvIGV4YW1pbmUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyB1c2VkIHRvZ2V0aGVyLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBuZXR4ZW5fbmljX2luaXQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQgd2lsbCBzaG93IG1lIGhvdyB0aGVzZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGludGVyYWN0IHdpdGhpbiB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcGF0aHMgYW5kIGhvdyBgTkVUWEVOX05JQ2AgYW5kIGBGV19MT0FERVJgIGFyZSBiZWluZyB1c2VkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGhhdmUgYW4gaW1wYWN0LiBIb3BlZnVsbHkgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2hvbGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NDQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ3OjQzLjk2Nzc3NDE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0MTEzNDI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDc6NDUuMzIxODk1NzA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDUyOTExNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBOZXRYZW4gRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYCBhcmUgcHJlc2VudCBpbiBgbmV0eGVuX25pY19pbml0LmNgLiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIgYW5kIHBvdGVudGlhbGx5IHNpbXBsaWZpZXMgZGVidWdnaW5nIGlmIHdlIGV2ZXIgbmVlZCB0byB0cmFjZSBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcywgbGV0J3MgY2FzdCBhIGNyaXRpY2FsIGV5ZSBvdmVyIGBuZXR4ZW5fbmljX21haW4uY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYW55IGRldmljZS1zcGVjaWZpYyBvciBjb25maWd1cmF0aW9uLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBpZiBpdCBpc24ndCBpbiBpbml0LiBJdCdzIHRoZSBjb3JlIGRyaXZlciBmaWxlLCBzbyBpdCdzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGxvb2sgZm9yIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBvciBleGNsdWRlIGNvZGUgYmFzZWQgb24gdGhlIGRldmljZSBvciBpdHMgb3BlcmF0aW5nIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIGhvdyBhbnkgY29uZGl0aW9uYWxzIGFyZSBoYW5kbGVkIGluIG1haW4gd2lsbCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBiZWhhdmVzIGluIGRpZmZlcmVudCBzZXR1cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTk0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDc6NDkuODY3MTg4NTUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQwNTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTEzODg9c3RhdGljIHZvaWQgbmV0eGVuX3JlYWRfdWxhX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MTQxMTojaWZkZWYgQ09ORklHX1BDSUVBRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE0MTItc3RhdGljIHZvaWQgbmV0eGVuX21hc2tfYWVyX2NvcnJlY3RhYmxlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MTQzOD1uZXR4ZW5fbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MTUwMjojaWZkZWYgQ09ORklHX1BDSUVBRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE1MDMtXFx0bmV0eGVuX21hc2tfYWVyX2NvcnJlY3RhYmxlKGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zMTMxPW5ldHhlbl9yZW1vdmVfZGlhZ19lbnRyaWVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzE0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjMxNDI6I2lmZGVmIENPTkZJR19JTkVUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zNDQ4PXN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zNDUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzQ1MjojaWZkZWYgQ09ORklHX0lORVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTMtXFx0cmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZXR4ZW5fbmV0ZGV2X2NiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ2MT1zdGF0aWMgdm9pZCBfX2V4aXQgbmV0eGVuX2V4aXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzozNDY1OiNpZmRlZiBDT05GSUdfSU5FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ2Ni1cXHR1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKFxcdTAwMjZuZXR4ZW5faW5ldGFkZHJfY2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0Nzo0OS45MjM1OTg0MjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAxMDg0OTczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXJtd2FyZSBQYXJzaW5nIExvZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgZmlybXdhcmUgcGFyc2luZyBwcm9jZXNzLiBOb25lIG9mIHRoZSBpbml0aWFsIGNvbnNpZGVyYXRpb25zIHNlZW0gZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIGNvcmUgcGFyc2luZyBpdHNlbGYuIFRoZSBwYXJzaW5nIGNvZGUsIGFzIEkgcmVjYWxsLCByZXNpZGVzIHdpdGhpbiBgbmV0eGVuX25pY19pbml0LmNgLiBUaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbiBpcywgaG93IGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5IGdldCB0aGUgZmlybXdhcmUgcGFyc2luZyB0byB0cmlnZ2VyPyBBaCwgcmlnaHQhIEl0IGxldmVyYWdlcyB0aGUgYHJlcXVlc3RfZmlybXdhcmVgIEFQSS4gU3l6a2FsbGVyIGludGVyY2VwdHMgdGhpcywgd2hpY2ggZ2l2ZXMgaXQgdGhlIHBvd2VyIHRvIGluamVjdCBhbnkgZmlybXdhcmUgYmxvYiBpdCB3YW50cy4gVGhhdCBtZWFucyBpZiB0aGUgZHJpdmVyIG1ha2VzIHRoYXQgYHJlcXVlc3RfZmlybXdhcmVgIGNhbGwsIHdlIGhhdmUgYSBjbGVhciBwYXRoIGZvciBmdXp6aW5nIHRoZSBwYXJzaW5nIGxvZ2ljLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IEkgaGF2ZSBhIGxpc3Q6IGBueF9nZXRfdGFibGVfZGVzY2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYW5kIGBueF9nZXRfZGF0YV9kZXNjYC5cblxuV2FpdCwgaXNuJ3QgYG54X2dldF90YWJsZV9kZXNjYCBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCBjb3VsZCBpbXBhY3QgaXRzIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgY2FsbCBncmFwaCwgYnV0IEknbSBwcmV0dHkgc3VyZSBgRm9jdXNTeW1ib2xzYCAqY2FuKiBpbmNsdWRlIHRoZW0uIExldCdzIG1ha2Ugc3VyZSBJJ20gbGlzdGluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIHRob3VnaC4gTGV0IG1lIHJlLWV4YW1pbmUgdGhhdCBsaXN0IGFnYWluLCBqdXN0IHRvIGJlIHByZWNpc2UuXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjayB0aGVzZSBhZ2FpbnN0IHRoZSBtb2RpZmljYXRpb25zOlxuYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYFxuYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYFxuYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgXG5gbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgXG5gbnhfZ2V0X2RhdGFfZGVzY2BcbmBueF9nZXRfdGFibGVfZGVzY2BcblxuQWgsIGhvbGQgb24uLi4gaXMgYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCBhbHNvIHN0YXRpYz8gT2theSwgc28gdGhhdCdzIHRoZSB0aGluZyB0byBmb2N1cyBvbiAtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKm5vbi1zdGF0aWMqLCBvciBkaXJlY3RseSBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDc6NTcuOTM0NDUwMTAxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3MDgzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9NjIwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjYyMTpuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy02MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjQ9bmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzo3NjY6XFx0aWYgKG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKGFkYXB0ZXIpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy03NjctXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0ODowMC4wMzE1Mzk3MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0OTg4MDAwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgVmFsaWRhdGlvbiBQcm9jZXNzKipcblxuUmlnaHQsIHNvIEknbSBpbW1lZGlhdGVseSBub3RpY2luZyBhIHBlcnZhc2l2ZSB1c2Ugb2Ygc3RhdGljIGNvZGUgZWxlbWVudHMgaGVyZS4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjbGVhcjogdGhlIGFyY2hpdGVjdHVyZSBsZWFucyBoZWF2aWx5IG9uIHN0YXRpYyBjb21wb25lbnRzLiBXYWl0IGEgc2Vjb25kLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYWJvdXQgYG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZWAuIElzICp0aGF0KiBhbHNvIHN0YXRpYz8gVGhhdCBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGNyaXRpY2FsLiBJZiBpdOKAmXMgc3RhdGljLCB0aGF0IHNpZ25pZmljYW50bHkgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlIGFuZCBwb3RlbnRpYWwgZm9yIGR5bmFtaWMgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgdmFsaWRhdGlvbiBzdGVwIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGFzc3VtcHRpb25zIG5lZWQgdG8gYmUgY29uZmlybWVkIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDg5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDg6NTUuNTMwMzQyMzM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3NjcyMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTExMDA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTEwMTpuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTEwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTEyMzc9dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzoxMjU1OlxcdFxcdHJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1Ni1cXHRcXHRpZiAocmMgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0ODo1Ny41MjgwMjAyMzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NDA2MTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gRmlybXdhcmUgUmVxdWVzdHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZWAgZnVuY3Rpb24uLi4gYW5kIGl0J3MgY2xlYXIgdG8gbWUgdGhhdCBpdCBpc24ndCBzdGF0aWNhbGx5IGRlZmluZWQgb3IgaGFuZGxlZC4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU0OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ5OjAwLjQ5MjA4NTk5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzYwNjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWMuaD0xNzMwPWludCBuZXR4ZW5fbmVlZF9md19yZXNldChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oOjE3MzE6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oLTE3MzItdm9pZCBuZXR4ZW5fcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjE3PW5ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTIzNzp2b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyMzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05Mjc9bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtOTUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6OTUzOlxcdG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtOTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0OTowMi4zNDk2OTkzODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NTc3MTI1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRYZW4gTklDIEZpcm13YXJlIFBhcnNpbmcgQnVnKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgYG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlYCBlbnRyeSBwb2ludCwgd2hpY2ggc3l6a2FsbGVyIHNvbWVob3cgbWFuYWdlZCB0byBoaXQuIFJpZ2h0LCBpdCBtdXN0IGJlIGJlaW5nIHRyaWdnZXJlZCB0aHJvdWdoIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCB0aGVuIGhpdHMgYG5ldHhlbl9uaWNfcHJvYmVgLCBsZWFkaW5nIHRvIGBuZXR4ZW5fc3RhcnRfZmlybXdhcmVgIGFuZCBmaW5hbGx5IHRoZSB0YXJnZXQgZnVuY3Rpb24uIFN5emthbGxlciBpcyBpbmplY3RpbmcgYSBiYWQgZmlybXdhcmUgYmxvYiB0aHJvdWdoIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggdGhlbiBnZXRzIGZlZCBpbnRvIGBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmVgLCBhbmQgYmFtLCB3ZSBnZXQgb3VyIG91dC1vZi1ib3VuZHMgcmVhZC4gQ2xhc3NpYyBmaXJtd2FyZSBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkuXG5cbklzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gRmlybXdhcmUgcGFyc2luZyBpcyBhbHdheXMgYSBnb2xkbWluZSBmb3IgYnVncywgYW5kIHRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGhhcyBhIGRlZGljYXRlZCBmZWF0dXJlIGZvciBgcmVxdWVzdF9maXJtd2FyZWAgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC4gV2UgbmVlZCB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGtleSB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGFyZSBlZmZlY3RpdmUuXG5cbkxldCdzIHNlZSwgd2UgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYG54X2dldF90YWJsZV9kZXNjYCwgYG54X2dldF9kYXRhX2Rlc2NgLCBhbmQgY3JpdGljYWxseSwgdGhlc2UgbmV3IG9uZXMgZnJvbSB0aGUgcGF0Y2g6IGBuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkYCwgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgLCBhbmQgYG5ldHhlbl9yb21fZW50cnlfdmFsaWRgLlxuXG5KdXN0IHRvIGNvbmZpcm0sIGxldCdzIGRvdWJsZSBjaGVjayB0aG9zZSBmdW5jdGlvbiBuYW1lcyBmcm9tIHRoZSBwYXRjaCBvbmUgbW9yZSB0aW1lLCBtYWtpbmcgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOiBgbmV0eGVuX3JvbV9yYW5nZV92YWxpZGAsIGBuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkYCwgYG5ldHhlbl9yb21fZW50cnlfdmFsaWRgLCBgbnhfZ2V0X3RhYmxlX2Rlc2NgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9md2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2Zmc2AsIGFuZCBgbnhfZ2V0X2RhdGFfZGVzY2AuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFdlIG5lZWQgYE5FVFhFTl9OSUNgIGZvciBzdXJlLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkLiBZdXAsIGBDT05GSUdfTkVUWEVOX05JQz15YCBvciBgPW1gLCBhbmQgYFBDSWAgYW5kIGBGV19MT0FERVJgLCB3aGljaCBhcmUgYmFzaWNhbGx5IHN0YW5kYXJkLiBTbywganVzdCBgTkVUWEVOX05JQ2AuXG5cblF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlnIG5hbWUuLi5ZZXAsIGBjb25maWcgTkVUWEVOX05JQ2AgaW4gdGhlIEtjb25maWcgZmlsZSBjb25maXJtcyBpdC4gQW5kLCBubyBvdGhlciByZWxhdGVkIGNvbmZpZ3MuXG5cbk9rYXksIGxldCdzIHByZXBhcmUgdGhlIG91dHB1dDpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgbmV0eGVuX3JvbV9yYW5nZV92YWxpZGBcbiAgICAqICAgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgXG4gICAgKiAgIGBuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkYFxuICAgICogICBgbnhfZ2V0X3RhYmxlX2Rlc2NgXG4gICAgKiAgIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmBcbiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYFxuICAgICogICBgbmV0eGVuX25pY192YWxpZGF0ZV9md2BcbiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYFxuICAgICogICBgbnhfZ2V0X2RhdGFfZGVzY2BcbiogICAqKkVuYWJsZUNvbmZpZ3M6KipcbiAgICAqICAgYE5FVFhFTl9OSUNgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgZmlybXdhcmUgcGFyc2luZyBib3VuZHMgY2hlY2tzIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRnV6emluZyBpcyBwb3NzaWJsZSBiZWNhdXNlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBkZXZpY2UgcHJvYmUsIGFuZCBzeXprYWxsZXIgY2FuIHByb3ZpZGUgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBuZXcgY2hlY2tzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTAwLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0OToxNS4zMDc0MTM5MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTU0MTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUWEVOX05JQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldHhlbl9yb21fcmFuZ2VfdmFsaWRcIixcbiAgICBcIm5ldHhlbl9yb21fdGFibGVfdmFsaWRcIixcbiAgICBcIm5ldHhlbl9yb21fZW50cnlfdmFsaWRcIixcbiAgICBcIm54X2dldF90YWJsZV9kZXNjXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlclwiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfZndcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzXCIsXG4gICAgXCJueF9nZXRfZGF0YV9kZXNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIGZpcm13YXJlIHBhcnNpbmcgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGaXJtd2FyZSBwYXJzaW5nIGlzIHJlYWNoYWJsZSB2aWEgYHJlcXVlc3RfZmlybXdhcmVgIHdoZW4gdGhlIGRyaXZlciBwcm9iZXMgYSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgY2FuIGZ1enogdGhpcyBieSBpbmplY3RpbmcgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIHRoaXMgbG9naWMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgY29ycmVjdGx5IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRYRU5fTklDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0eGVuX3JvbV9yYW5nZV92YWxpZFwiLFxuICAgIFwibmV0eGVuX3JvbV90YWJsZV92YWxpZFwiLFxuICAgIFwibmV0eGVuX3JvbV9lbnRyeV92YWxpZFwiLFxuICAgIFwibnhfZ2V0X3RhYmxlX2Rlc2NcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZFwiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9md1wiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNcIixcbiAgICBcIm54X2dldF9kYXRhX2Rlc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgZmlybXdhcmUgcGFyc2luZyBpbiB0aGUgTmV0WGVuIE5JQyBkcml2ZXIuIEZpcm13YXJlIHBhcnNpbmcgaXMgcmVhY2hhYmxlIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAgd2hlbiB0aGUgZHJpdmVyIHByb2JlcyBhIGRldmljZSwgYW5kIHN5emthbGxlciBjYW4gZnV6eiB0aGlzIGJ5IGluamVjdGluZyBtYWxmb3JtZWQgZmlybXdhcmUgYmxvYnMuIEZ1enppbmcgdGhpcyBsb2dpYyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNrcyBjb3JyZWN0bHkgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 13:15:47 +0000 UTC FinishedAt: 2026-07-06 13:49:16 +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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETXEN_NIC" ], "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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETXEN_NIC" ], "series_id": "8aa0fcb4-c456-45a3-8588-21c0e6c7fd82" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netxen_rom_range_valid", "netxen_rom_table_valid", "netxen_rom_entry_valid", "nx_get_table_desc", "netxen_nic_validate_header", "netxen_nic_validate_bootld", "netxen_nic_validate_fw", "netxen_nic_validate_product_offs", "nx_get_data_desc" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFhFTl9OSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkJiMzNDssCiAgICAmIzM0O25ldHhlbl9yb21fdGFibGVfdmFsaWQmIzM0OywKICAgICYjMzQ7bmV0eGVuX3JvbV9lbnRyeV92YWxpZCYjMzQ7LAogICAgJiMzNDtueF9nZXRfdGFibGVfZGVzYyYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlciYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3JiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzJiMzNDssCiAgICAmIzM0O254X2dldF9kYXRhX2Rlc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIGZpcm13YXJlIHBhcnNpbmcgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGaXJtd2FyZSBwYXJzaW5nIGlzIHJlYWNoYWJsZSB2aWEgYHJlcXVlc3RfZmlybXdhcmVgIHdoZW4gdGhlIGRyaXZlciBwcm9iZXMgYSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgY2FuIGZ1enogdGhpcyBieSBpbmplY3RpbmcgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIHRoaXMgbG9naWMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgY29ycmVjdGx5IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI0MjYwMjQ5MDE3ZjFkMzUzNTZjZWE1OWNjM2JlNGVmMTA5MGNkMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDEzOjQzOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXG5pbmRleCA4YmM0ZTJiNjk1NjllNS4uNTcyMmM1NWZhMGNjZTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXG5AQCAtNTYxLDIwICYjNDM7NTYxLDU1IEBAIGludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKm54X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIGludCBzZWN0aW9uKVxuJiM0MzsjZGVmaW5lIE5YX1VOSV9ESVJfVFlQRV9PRkZcdFx0OFxuJiM0MzsjZGVmaW5lIE5YX1VOSV9ESVJfRU5UUllfTUlOX1NJWkUgXFxcbiYjNDM7XHQoKE5YX1VOSV9ESVJfVFlQRV9PRkYgJiM0MzsgMSkgKiBzaXplb2YodTMyKSlcbiYjNDM7I2RlZmluZSBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSBcXFxuJiM0MztcdCgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgJiM0MzsgMSkgKiBzaXplb2YodTMyKSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5ldHhlbl9yb21fcmFuZ2VfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBsZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2ZmIFx1MDAzYz0gc2l6ZSBcdTAwMjZcdTAwMjYgbGVuIFx1MDAzYz0gc2l6ZSAtIG9mZjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmV0eGVuX3JvbV90YWJsZV92YWxpZChzaXplX3Qgc2l6ZSwgdTMyIG9mZiwgdTMyIG4sIHUzMiBlc3opXG4mIzQzO3tcbiYjNDM7XHRpZiAob2ZmIFx1MDAzZSBzaXplKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICghZXN6KVxuJiM0MztcdFx0cmV0dXJuIG4gPT0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG4gXHUwMDNjPSAoc2l6ZSAtIG9mZikgLyBlc3o7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5ldHhlbl9yb21fZW50cnlfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBlc3osIHUzMiBpZHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWVzeiB8fCBvZmYgXHUwMDNlIHNpemUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZHggXHUwMDNjIChzaXplIC0gb2ZmKSAvIGVzejtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqXG4mIzQzO254X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIHNpemVfdCBmd19zaXplLCBpbnQgc2VjdGlvbilcbiB7XG4tXHR1aW50MzJfdCBpO1xuIFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbi1cdF9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbiYjNDM7XHR1MzIgZW50cmllcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VudW1fZW50cmllcyk7XG4mIzQzO1x0dTMyIGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZW50cnlfc2l6ZSk7XG4mIzQzO1x0dTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdHUzMiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRpZiAoZW50cnlfc2l6ZSBcdTAwM2MgTlhfVU5JX0RJUl9FTlRSWV9NSU5fU0laRSB8fFxuJiM0MztcdCAgICAhbmV0eGVuX3JvbV90YWJsZV92YWxpZChmd19zaXplLCBmaW5kZXgsIGVudHJpZXMsIGVudHJ5X3NpemUpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRcdF9fbGUzMiBvZmZzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0XHRcdChpICogY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWVudHJ5X3NpemUpKTtcbi1cdFx0X19sZTMyIHRhYl90eXBlID0gY3B1X3RvX2xlMzIoKigodTMyICopXHUwMDI2dW5pcm9tW29mZnNdICYjNDM7IDgpKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2l6ZV90IG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdClpICogZW50cnlfc2l6ZTtcbiYjNDM7XHRcdHUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKVx1MDAyNnVuaXJvbVtvZmZzXSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHROWF9VTklfRElSX1RZUEVfT0ZGKSk7XG4gXG4gXHRcdGlmICh0YWJfdHlwZSA9PSBzZWN0aW9uKVxuLVx0XHRcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVtvZmZzXTtcbiYjNDM7XHRcdFx0cmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC01ODYsMjAgJiM0Mzs2MjEsMTggQEAgc3RhdGljIGludFxuIG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRjb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbiYjNDM7XHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKmRpcmVjdG9yeSA9IChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKilcdTAwMjZ1bmlyb21bMF07XG4gXHR1MzIgZndfZmlsZV9zaXplID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0X19sZTMyIGVudHJpZXM7XG4tXHRfX2xlMzIgZW50cnlfc2l6ZTtcbiYjNDM7XHR1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4O1xuIFxuIFx0aWYgKGZ3X2ZpbGVfc2l6ZSBcdTAwM2MgUUxDTklDX0ZJTEVIRUFERVJfU0laRSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbiBcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZW50cnlfc2l6ZSk7XG4tXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VmaW5kZXgpICYjNDM7IChlbnRyaWVzICogZW50cnlfc2l6ZSk7XG4mIzQzO1x0ZmluZGV4ID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWZpbmRleCk7XG4gXG4tXHRpZiAoZndfZmlsZV9zaXplIFx1MDAzYyB0YWJfc2l6ZSlcbiYjNDM7XHRpZiAoIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoZndfZmlsZV9zaXplLCBmaW5kZXgsIGVudHJpZXMsIGVudHJ5X3NpemUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTYxMSwzMCAmIzQzOzY0NCwzMCBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xuIFx0c3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyO1xuIFx0Y29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlZGF0YTtcbi1cdF9fbGUzMiBpZHggPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bYWRhcHRlci1cdTAwM2VmaWxlX3ByZF9vZmZdICYjNDM7XG4tXHRcdFx0XHROWF9VTklfQk9PVExEX0lEWF9PRkYpKTtcbi1cdHUzMiBvZmZzO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0dTMyIGRhdGFfc2l6ZTtcbiYjNDM7XHR1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDtcbiYjNDM7XHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9CT09UTEQ7XG4mIzQzO1x0c2l6ZV90IG9mZnM7XG4gXG4tXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX0JPT1RMRCk7XG4mIzQzO1x0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW2FkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmXSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIE5YX1VOSV9CT09UTERfSURYX09GRikpO1xuJiM0MztcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFxuIFx0aWYgKCF0YWJfZGVzYylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICYjNDM7IDEpKTtcbi1cbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIHRhYl9zaXplKVxuJiM0MztcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VlbnRyeV9zaXplKTtcbiYjNDM7XHRmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBzaXplb2YoKmRlc2NyKSB8fFxuJiM0MztcdCAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGZpbmRleCwgZW50cnlfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIGlkeCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xuJiM0MztcdG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xuIFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4mIzQzO1x0ZGF0YV9vZmYgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdGRhdGFfbGVuID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlc2l6ZSk7XG4gXG4tXHRkYXRhX3NpemUgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpICYjNDM7IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgZGF0YV9zaXplKVxuJiM0MztcdGlmICghbmV0eGVuX3JvbV9yYW5nZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjQ2LDI5ICYjNDM7Njc5LDMwIEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfZncoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICp0YWJfZGVzYztcbiBcdHN0cnVjdCB1bmlfZGF0YV9kZXNjICpkZXNjcjtcbiBcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZWRhdGE7XG4tXHRfX2xlMzIgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW2FkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmXSAmIzQzO1xuLVx0XHRcdFx0TlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKTtcbi1cdHUzMiBvZmZzO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0dTMyIGRhdGFfc2l6ZTtcbiYjNDM7XHR1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDtcbiYjNDM7XHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9GVztcbiYjNDM7XHRzaXplX3Qgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfRlcpO1xuJiM0MztcdGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVthZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZl0gJiM0MztcbiYjNDM7XHRcdFx0ICAgICBOWF9VTklfRklSTVdBUkVfSURYX09GRikpO1xuJiM0MztcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFxuIFx0aWYgKCF0YWJfZGVzYylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICYjNDM7IDEpKTtcbi1cbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIHRhYl9zaXplKVxuJiM0MztcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VlbnRyeV9zaXplKTtcbiYjNDM7XHRmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpO1xuJiM0MztcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBzaXplb2YoKmRlc2NyKSB8fFxuJiM0MztcdCAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGZpbmRleCwgZW50cnlfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgIGlkeCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgJiM0Mztcbi1cdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xuJiM0MztcdG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xuIFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4tXHRkYXRhX3NpemUgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpICYjNDM7IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuJiM0MztcdGRhdGFfb2ZmID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlZmluZGV4KTtcbiYjNDM7XHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuIFxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgZGF0YV9zaXplKVxuJiM0MztcdGlmICghbmV0eGVuX3JvbV9yYW5nZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjgyLDM5ICYjNDM7NzE2LDM3IEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiBcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZWRhdGE7XG4gXHRpbnQgbW5fcHJlc2VudCA9IChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLVx1MDAzZWFody5yZXZpc2lvbl9pZCkpID9cbiBcdFx0XHQxIDogbmV0eGVuX3AzX2hhc19tbihhZGFwdGVyKTtcbi1cdF9fbGUzMiBlbnRyaWVzO1xuLVx0X19sZTMyIGVudHJ5X3NpemU7XG4tXHR1MzIgdGFiX3NpemU7XG4tXHR1MzIgaTtcbiYjNDM7XHR1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4LCBpO1xuJiM0MztcdHUzMiBzZWN0aW9uID0gTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMO1xuIFxuLVx0cHRhYl9kZXNjciA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMKTtcbiYjNDM7XHRwdGFiX2Rlc2NyID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFx0aWYgKHB0YWJfZGVzY3IgPT0gTlVMTClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VudW1fZW50cmllcyk7XG4gXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VlbnRyeV9zaXplKTtcbi1cdHRhYl9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VmaW5kZXgpICYjNDM7IChlbnRyaWVzICogZW50cnlfc2l6ZSk7XG4tXG4tXHRpZiAoYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplIFx1MDAzYyB0YWJfc2l6ZSlcbiYjNDM7XHRmaW5kZXggPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWZpbmRleCk7XG4mIzQzO1x0aWYgKGVudHJ5X3NpemUgXHUwMDNjIE5YX1VOSV9QUk9EVUNUX0VOVFJZX01JTl9TSVpFIHx8XG4mIzQzO1x0ICAgICFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgZmluZGV4LCBlbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgICAgZW50cnlfc2l6ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIG5vbW46XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuLVxuLVx0XHRfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldiwgb2ZmcztcbiYjNDM7XHRcdHNpemVfdCBvZmZzO1xuJiM0MztcdFx0X19sZTMyIGZsYWdzLCBmaWxlX2NoaXByZXY7XG4gXHRcdHU4IGNoaXByZXYgPSBhZGFwdGVyLVx1MDAzZWFody5yZXZpc2lvbl9pZDtcbiBcdFx0dWludDMyX3QgZmxhZ2JpdDtcbiBcbi1cdFx0b2ZmcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItXHUwMDNlZmluZGV4KSAmIzQzO1xuLVx0XHRcdFx0KGkgKiBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWVudHJ5X3NpemUpKTtcbiYjNDM7XHRcdG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdClpICogZW50cnlfc2l6ZTtcbiBcdFx0ZmxhZ3MgPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bb2Zmc10gJiM0MzsgTlhfVU5JX0ZMQUdTX09GRikpO1xuIFx0XHRmaWxlX2NoaXByZXYgPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bb2Zmc10gJiM0Mztcbi1cdFx0XHRcdFx0XHRcdE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcbiBcbiBcdFx0ZmxhZ2JpdCA9IG1uX3ByZXNlbnQgPyAxIDogMjtcbiBcbiBcdFx0aWYgKChjaGlwcmV2ID09IGZpbGVfY2hpcHJldikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCgoMVVMTCBcdTAwM2NcdTAwM2MgZmxhZ2JpdCkgXHUwMDI2IGZsYWdzKSkge1xuJiM0MztcdFx0ICAgICgoMVVMTCBcdTAwM2NcdTAwM2MgZmxhZ2JpdCkgXHUwMDI2IGZsYWdzKSkge1xuIFx0XHRcdGFkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmID0gb2ZmcztcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTc2Nyw3ICYjNDM7Nzk5LDcgQEAgc3RhdGljIHN0cnVjdCB1bmlfZGF0YV9kZXNjICpueF9nZXRfZGF0YV9kZXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcbiBcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7XG4gXHRfX2xlMzIgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBzZWN0aW9uKTtcbiYjNDM7XHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplLCBzZWN0aW9uKTtcbiBcbiBcdGlmICh0YWJfZGVzYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRYRU5fTklDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0eGVuX3JvbV9yYW5nZV92YWxpZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkJiMzNDssCiAgICAmIzM0O25ldHhlbl9yb21fZW50cnlfdmFsaWQmIzM0OywKICAgICYjMzQ7bnhfZ2V0X3RhYmxlX2Rlc2MmIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXImIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9ib290bGQmIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9mdyYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2ZmcyYjMzQ7LAogICAgJiMzNDtueF9nZXRfZGF0YV9kZXNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciBmaXJtd2FyZSBwYXJzaW5nIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRmlybXdhcmUgcGFyc2luZyBpcyByZWFjaGFibGUgdmlhIGByZXF1ZXN0X2Zpcm13YXJlYCB3aGVuIHRoZSBkcml2ZXIgcHJvYmVzIGEgZGV2aWNlLCBhbmQgc3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgYnkgaW5qZWN0aW5nIG1hbGZvcm1lZCBmaXJtd2FyZSBibG9icy4gRnV6emluZyB0aGlzIGxvZ2ljIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGNvcnJlY3RseSBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MjYwMjQ5MDE3ZjFkMzUzNTZjZWE1OWNjM2JlNGVmMTA5MGNkMWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDEzOjQzOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggOGJjNGUyYjY5NTY5ZTUuLjU3MjJjNTVmYTBjY2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTU2MSwyMCAmIzQzOzU2MSw1NSBAQCBpbnQgbmV0eGVuX3Bpbml0X2Zyb21fcm9tKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqbnhfZ2V0X3RhYmxlX2Rlc2MoY29uc3QgdTggKnVuaXJvbSwgaW50IHNlY3Rpb24pCiYjNDM7I2RlZmluZSBOWF9VTklfRElSX1RZUEVfT0ZGCQk4CiYjNDM7I2RlZmluZSBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIFwKJiM0MzsJKChOWF9VTklfRElSX1RZUEVfT0ZGICYjNDM7IDEpICogc2l6ZW9mKHUzMikpCiYjNDM7I2RlZmluZSBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSBcCiYjNDM7CSgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgJiM0MzsgMSkgKiBzaXplb2YodTMyKSkKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKHNpemVfdCBzaXplLCB1MzIgb2ZmLCB1MzIgbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9mZiAmbHQ7PSBzaXplICZhbXA7JmFtcDsgbGVuICZsdDs9IHNpemUgLSBvZmY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5ldHhlbl9yb21fdGFibGVfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBuLCB1MzIgZXN6KQomIzQzO3sKJiM0MzsJaWYgKG9mZiAmZ3Q7IHNpemUpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghZXN6KQomIzQzOwkJcmV0dXJuIG4gPT0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG4gJmx0Oz0gKHNpemUgLSBvZmYpIC8gZXN6OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKHNpemVfdCBzaXplLCB1MzIgb2ZmLCB1MzIgZXN6LCB1MzIgaWR4KQomIzQzO3sKJiM0MzsJaWYgKCFlc3ogfHwgb2ZmICZndDsgc2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkeCAmbHQ7IChzaXplIC0gb2ZmKSAvIGVzejsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqCiYjNDM7bnhfZ2V0X3RhYmxlX2Rlc2MoY29uc3QgdTggKnVuaXJvbSwgc2l6ZV90IGZ3X3NpemUsIGludCBzZWN0aW9uKQogewotCXVpbnQzMl90IGk7CiAJc3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopICZhbXA7dW5pcm9tWzBdOwotCV9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtudW1fZW50cmllcyk7CiYjNDM7CXUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtudW1fZW50cmllcyk7CiYjNDM7CXUzMiBlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtlbnRyeV9zaXplKTsKJiM0MzsJdTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS0mZ3Q7ZmluZGV4KTsKJiM0MzsJdTMyIGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJaWYgKGVudHJ5X3NpemUgJmx0OyBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIHx8CiYjNDM7CSAgICAhbmV0eGVuX3JvbV90YWJsZV92YWxpZChmd19zaXplLCBmaW5kZXgsIGVudHJpZXMsIGVudHJ5X3NpemUpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAKLQkJX19sZTMyIG9mZnMgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktJmd0O2ZpbmRleCkgJiM0MzsKLQkJCQkoaSAqIGNwdV90b19sZTMyKGRpcmVjdG9yeS0mZ3Q7ZW50cnlfc2l6ZSkpOwotCQlfX2xlMzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKikmYW1wO3VuaXJvbVtvZmZzXSAmIzQzOyA4KSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2l6ZV90IG9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdClpICogZW50cnlfc2l6ZTsKJiM0MzsJCXUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKSZhbXA7dW5pcm9tW29mZnNdICYjNDM7CiYjNDM7CQkJCQkJTlhfVU5JX0RJUl9UWVBFX09GRikpOwogCiAJCWlmICh0YWJfdHlwZSA9PSBzZWN0aW9uKQotCQkJcmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikgJmFtcDt1bmlyb21bb2Zmc107CiYjNDM7CQkJcmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikmYW1wO3VuaXJvbVtvZmZzXTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTU4NiwyMCAmIzQzOzYyMSwxOCBAQCBzdGF0aWMgaW50CiBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItJmd0O2Z3LSZndDtkYXRhOwotCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKSAmYW1wO3VuaXJvbVswXTsKJiM0MzsJc3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopJmFtcDt1bmlyb21bMF07CiAJdTMyIGZ3X2ZpbGVfc2l6ZSA9IGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplOwotCXUzMiB0YWJfc2l6ZTsKLQlfX2xlMzIgZW50cmllczsKLQlfX2xlMzIgZW50cnlfc2l6ZTsKJiM0MzsJdTMyIGVudHJpZXMsIGVudHJ5X3NpemUsIGZpbmRleDsKIAogCWlmIChmd19maWxlX3NpemUgJmx0OyBRTENOSUNfRklMRUhFQURFUl9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVudHJpZXMgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktJmd0O251bV9lbnRyaWVzKTsKIAllbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LSZndDtlbnRyeV9zaXplKTsKLQl0YWJfc2l6ZSA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS0mZ3Q7ZmluZGV4KSAmIzQzOyAoZW50cmllcyAqIGVudHJ5X3NpemUpOwomIzQzOwlmaW5kZXggPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktJmd0O2ZpbmRleCk7CiAKLQlpZiAoZndfZmlsZV9zaXplICZsdDsgdGFiX3NpemUpCiYjNDM7CWlmICghbmV0eGVuX3JvbV90YWJsZV92YWxpZChmd19maWxlX3NpemUsIGZpbmRleCwgZW50cmllcywgZW50cnlfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CkBAIC02MTEsMzAgJiM0Mzs2NDQsMzAgQEAgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CiAJc3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyOwogCWNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLSZndDtmdy0mZ3Q7ZGF0YTsKLQlfX2xlMzIgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwotCQkJCU5YX1VOSV9CT09UTERfSURYX09GRikpOwotCXUzMiBvZmZzOwotCXUzMiB0YWJfc2l6ZTsKLQl1MzIgZGF0YV9zaXplOwomIzQzOwl1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDsKJiM0MzsJdTMyIHNlY3Rpb24gPSBOWF9VTklfRElSX1NFQ1RfQk9PVExEOwomIzQzOwlzaXplX3Qgb2ZmczsKIAotCXRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfQk9PVExEKTsKJiM0MzsJaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwomIzQzOwkJCSAgICAgTlhfVU5JX0JPT1RMRF9JRFhfT0ZGKSk7CiYjNDM7CXRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSwgc2VjdGlvbik7CiAKIAlpZiAoIXRhYl9kZXNjKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXRhYl9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtJmd0O2ZpbmRleCkgJiM0MzsKLQkJCShjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZW50cnlfc2l6ZSkgKiAoaWR4ICYjNDM7IDEpKTsKLQotCWlmIChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSAmbHQ7IHRhYl9zaXplKQomIzQzOwllbnRyeV9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtJmd0O2VudHJ5X3NpemUpOwomIzQzOwlmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZmluZGV4KTsKJiM0MzsJaWYgKGVudHJ5X3NpemUgJmx0OyBzaXplb2YoKmRlc2NyKSB8fAomIzQzOwkgICAgIW5ldHhlbl9yb21fZW50cnlfdmFsaWQoYWRhcHRlci0mZ3Q7ZnctJmd0O3NpemUsIGZpbmRleCwgZW50cnlfc2l6ZSwKJiM0MzsJCQkJICAgICBpZHgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW9mZnMgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZmluZGV4KSAmIzQzOwotCQkoY3B1X3RvX2xlMzIodGFiX2Rlc2MtJmd0O2VudHJ5X3NpemUpICogKGlkeCkpOwomIzQzOwlvZmZzID0gZmluZGV4ICYjNDM7IChzaXplX3QpZW50cnlfc2l6ZSAqIGlkeDsKIAlkZXNjciA9IChzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqKSZhbXA7dW5pcm9tW29mZnNdOwomIzQzOwlkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtmaW5kZXgpOwomIzQzOwlkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtzaXplKTsKIAotCWRhdGFfc2l6ZSA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtmaW5kZXgpICYjNDM7IGNwdV90b19sZTMyKGRlc2NyLSZndDtzaXplKTsKLQotCWlmIChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSAmbHQ7IGRhdGFfc2l6ZSkKJiM0MzsJaWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBkYXRhX29mZiwgZGF0YV9sZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtNjQ2LDI5ICYjNDM7Njc5LDMwIEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfZncoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CiAJc3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyOwogCWNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLSZndDtmdy0mZ3Q7ZGF0YTsKLQlfX2xlMzIgaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwotCQkJCU5YX1VOSV9GSVJNV0FSRV9JRFhfT0ZGKSk7Ci0JdTMyIG9mZnM7Ci0JdTMyIHRhYl9zaXplOwotCXUzMiBkYXRhX3NpemU7CiYjNDM7CXUzMiBkYXRhX2xlbiwgZGF0YV9vZmYsIGVudHJ5X3NpemUsIGZpbmRleCwgaWR4OwomIzQzOwl1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9GVzsKJiM0MzsJc2l6ZV90IG9mZnM7CiAKLQl0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX0ZXKTsKJiM0MzsJaWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bYWRhcHRlci0mZ3Q7ZmlsZV9wcmRfb2ZmXSAmIzQzOwomIzQzOwkJCSAgICAgTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKTsKJiM0MzsJdGFiX2Rlc2MgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBzZWN0aW9uKTsKIAogCWlmICghdGFiX2Rlc2MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdGFiX3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZmluZGV4KSAmIzQzOwotCQkJKGNwdV90b19sZTMyKHRhYl9kZXNjLSZndDtlbnRyeV9zaXplKSAqIChpZHggJiM0MzsgMSkpOwotCi0JaWYgKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplICZsdDsgdGFiX3NpemUpCiYjNDM7CWVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZW50cnlfc2l6ZSk7CiYjNDM7CWZpbmRleCA9IGNwdV90b19sZTMyKHRhYl9kZXNjLSZndDtmaW5kZXgpOwomIzQzOwlpZiAoZW50cnlfc2l6ZSAmbHQ7IHNpemVvZigqZGVzY3IpIHx8CiYjNDM7CSAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSwgZmluZGV4LCBlbnRyeV9zaXplLAomIzQzOwkJCQkgICAgIGlkeCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jb2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLSZndDtmaW5kZXgpICYjNDM7Ci0JCShjcHVfdG9fbGUzMih0YWJfZGVzYy0mZ3Q7ZW50cnlfc2l6ZSkgKiAoaWR4KSk7CiYjNDM7CW9mZnMgPSBmaW5kZXggJiM0MzsgKHNpemVfdCllbnRyeV9zaXplICogaWR4OwogCWRlc2NyID0gKHN0cnVjdCB1bmlfZGF0YV9kZXNjICopJmFtcDt1bmlyb21bb2Zmc107Ci0JZGF0YV9zaXplID0gY3B1X3RvX2xlMzIoZGVzY3ItJmd0O2ZpbmRleCkgJiM0MzsgY3B1X3RvX2xlMzIoZGVzY3ItJmd0O3NpemUpOwomIzQzOwlkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtmaW5kZXgpOwomIzQzOwlkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLSZndDtzaXplKTsKIAotCWlmIChhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSAmbHQ7IGRhdGFfc2l6ZSkKJiM0MzsJaWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBkYXRhX29mZiwgZGF0YV9sZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtNjgyLDM5ICYjNDM7NzE2LDM3IEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIAljb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci0mZ3Q7ZnctJmd0O2RhdGE7CiAJaW50IG1uX3ByZXNlbnQgPSAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0mZ3Q7YWh3LnJldmlzaW9uX2lkKSkgPwogCQkJMSA6IG5ldHhlbl9wM19oYXNfbW4oYWRhcHRlcik7Ci0JX19sZTMyIGVudHJpZXM7Ci0JX19sZTMyIGVudHJ5X3NpemU7Ci0JdTMyIHRhYl9zaXplOwotCXUzMiBpOwomIzQzOwl1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4LCBpOwomIzQzOwl1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTDsKIAotCXB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTCk7CiYjNDM7CXB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBzZWN0aW9uKTsKIAlpZiAocHRhYl9kZXNjciA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVudHJpZXMgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLSZndDtudW1fZW50cmllcyk7CiAJZW50cnlfc2l6ZSA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItJmd0O2VudHJ5X3NpemUpOwotCXRhYl9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci0mZ3Q7ZmluZGV4KSAmIzQzOyAoZW50cmllcyAqIGVudHJ5X3NpemUpOwotCi0JaWYgKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplICZsdDsgdGFiX3NpemUpCiYjNDM7CWZpbmRleCA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItJmd0O2ZpbmRleCk7CiYjNDM7CWlmIChlbnRyeV9zaXplICZsdDsgTlhfVU5JX1BST0RVQ1RfRU5UUllfTUlOX1NJWkUgfHwKJiM0MzsJICAgICFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGFkYXB0ZXItJmd0O2Z3LSZndDtzaXplLCBmaW5kZXgsIGVudHJpZXMsCiYjNDM7CQkJCSAgICAgZW50cnlfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiBub21uOgogCWZvciAoaSA9IDA7IGkgJmx0OyBlbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCi0JCV9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2LCBvZmZzOwomIzQzOwkJc2l6ZV90IG9mZnM7CiYjNDM7CQlfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldjsKIAkJdTggY2hpcHJldiA9IGFkYXB0ZXItJmd0O2Fody5yZXZpc2lvbl9pZDsKIAkJdWludDMyX3QgZmxhZ2JpdDsKIAotCQlvZmZzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci0mZ3Q7ZmluZGV4KSAmIzQzOwotCQkJCShpICogY3B1X3RvX2xlMzIocHRhYl9kZXNjci0mZ3Q7ZW50cnlfc2l6ZSkpOwomIzQzOwkJb2ZmcyA9IGZpbmRleCAmIzQzOyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplOwogCQlmbGFncyA9IGNwdV90b19sZTMyKCooKGludCAqKSZhbXA7dW5pcm9tW29mZnNdICYjNDM7IE5YX1VOSV9GTEFHU19PRkYpKTsKIAkJZmlsZV9jaGlwcmV2ID0gY3B1X3RvX2xlMzIoKigoaW50ICopJmFtcDt1bmlyb21bb2Zmc10gJiM0MzsKLQkJCQkJCQlOWF9VTklfQ0hJUF9SRVZfT0ZGKSk7CiYjNDM7CQkJCQkJICAgIE5YX1VOSV9DSElQX1JFVl9PRkYpKTsKIAogCQlmbGFnYml0ID0gbW5fcHJlc2VudCA/IDEgOiAyOwogCiAJCWlmICgoY2hpcHJldiA9PSBmaWxlX2NoaXByZXYpICZhbXA7JmFtcDsKLQkJCQkJKCgxVUxMICZsdDsmbHQ7IGZsYWdiaXQpICZhbXA7IGZsYWdzKSkgewomIzQzOwkJICAgICgoMVVMTCAmbHQ7Jmx0OyBmbGFnYml0KSAmYW1wOyBmbGFncykpIHsKIAkJCWFkYXB0ZXItJmd0O2ZpbGVfcHJkX29mZiA9IG9mZnM7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNzY3LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgc3RydWN0IHVuaV9kYXRhX2Rlc2MgKm54X2dldF9kYXRhX2Rlc2Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7CiAJX19sZTMyIG9mZnM7CiAKLQl0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgc2VjdGlvbik7CiYjNDM7CXRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLSZndDtmdy0mZ3Q7c2l6ZSwgc2VjdGlvbik7CiAKIAlpZiAodGFiX2Rlc2MgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRYZW4gTklDIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgdGhlIGBuZXR4ZW5gIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY2AuIFRoaXMgaXMgZm9jdXNlZCBvbiBlbmhhbmNpbmcgdGhlIHNlY3VyaXR5IG9mIGZpcm13YXJlIHBhcnNpbmcsIHdoaWNoIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gVGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgYm91bmRzIGNoZWNraW5nLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZmlybXdhcmUgdnVsbmVyYWJpbGl0aWVzLiBUaGV5JiMzOTt2ZSB1cGRhdGVkIHNldmVyYWwgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSBwYXJzaW5nIHByb2Nlc3M6IGBueF9nZXRfdGFibGVfZGVzY2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYW5kIGBueF9nZXRfZGF0YV9kZXNjYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hpY2ggYXJlYXMgdGhleSYjMzk7dmUgaW1wcm92ZWQuCgpUaGUgY29udGV4dCBoZXJlIGlzIGEgUUxvZ2ljL05ldFhlbiBHYkUgTklDIGRyaXZlci4gVGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYW5kIGludGVycHJldGluZyBmaXJtd2FyZSwgZWl0aGVyIGZyb20gYSBmaWxlIG9yIGRpcmVjdGx5IGZyb20gUk9NLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGF0dGFjayBzdXJmYWNlcy4gSG93IHZ1bG5lcmFibGUgaXMgdGhpcyB0byBhIGNvbXByb21pc2VkIGZpcm13YXJlIGltYWdlPyBJcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIGV2ZW4gZXhwbG9pdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gRG9lcyB0aGlzIGRyaXZlciBhY3R1YWxseSAqcmVxdWlyZSogdGhlIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgdG8gcHJvYmUgYW5kIGxvYWQgdGhlIGZpcm13YXJlLCBvciBpcyB0aGVyZSBhIHNvZnR3YXJlIGVtdWxhdG9yIG9yIHByb2JlIGluamVjdGlvbiBtZWNoYW5pc20gdGhhdCBjb3VsZCBvcGVuIHVwIGF0dGFjayB2ZWN0b3JzPyBJdOKAmXMgY3J1Y2lhbCB0byBrbm93IGhvdyBhIG1hbGljaW91cyBhY3RvciBjb3VsZCBldmVuIHRyaWdnZXIgdGhpcyBjb2RlIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgYG5ldHhlbmAgaXMgYSBQQ0kgZHJpdmVyIHNpbmNlIHRoYXQgZ2l2ZXMgbWUgc29tZSBjbHVlcyBvbiByZWFjaGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlci4qbmV0eGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ0OD1zdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTUtI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NTY6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZuZXR4ZW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ1Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDSSBEcml2ZXIgQXNzZXNzbWVudCBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBQQ0kgZHJpdmVyIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgY2FuIHdlIGVmZmVjdGl2ZWx5IGZ1enogaXQ/IFN5emthbGxlciBoYXMgc2hvd24gcHJvbWlzZSBpbiB0aGUgcGFzdCB3aXRoIFBDSSBkZXZpY2UgZW11bGF0aW9uOyBJJiMzOTt2ZSBzZWVuIGl0IHdvcmsgd2l0aCB0aGluZ3MgbGlrZSB2aGNpIG9yIGV2ZW4gdGhlIGUxMDAwZS4gQnV0IHRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIGl0IG9mZmVycyBzdXBwb3J0IGZvciB0aGlzIHBhcnRpY3VsYXIgbmV0eGVuIGRldmljZS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gU28sIG15IG5leHQgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBvciBjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgbmV0eGVuIGhhcmR3YXJlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGJlZ2luLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgbmV0eGVuIERyaXZlcioqCgpPa2F5LCBmaXJzdCB0aG91Z2h0OiBXaGVyZSAqaXMqIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBzeXprYWxsZXIgdGFyZ2V0PyBXYWl0LCBpdCYjMzk7cyBub3QgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBhIHBhdGggdG8gYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlLiBHZW5lcmFsbHksIFBDSSBkcml2ZXJzIGFyZSBhIHBhaW4gdG8gZnV6eiBkaXJlY3RseSB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3IgaW4gUUVNVSBvciBhIHNwZWNpYWwga2VybmVsIG1lY2hhbmlzbSBvciwgcGVyaGFwcywgYSBnZW5lcmljIFBDSSBmdXp6ZXIuCgpIbW0sIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGdlbmVyaWMgZm9yIFBDST8gU29tZXRoaW5nIGxpa2UgYHN5el9wY2l2ZmlvYCBvciBpbmplY3RpbmcgZGV2aWNlcyB2aWEgYSBkdW1teSBidXM/IFdhaXQsIGRvZXMgc3l6a2FsbGVyIGV4cG9zZSBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsPyBObywgbm8sIHN5emthbGxlciBtb3N0bHkgZnV6emVzIFBDSSB0aHJvdWdoIGB2ZmlvYCBvciB0aGUgYHBjaWAgc3Vic3lzdGVtIGlmIHRoZXkmIzM5O3JlIGVuYWJsZWQuIEl0IHVzdWFsbHkgZG9lc24mIzM5O3QgZGlnIGRlZXAgaW50byBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHVubGVzcyBRRU1VIGVtdWxhdGVzIHRoZW0gKGxpa2UgZTEwMDBlLCBydGw4MTM5LCB0aG9zZSBraW5kcyBvZiBkZXZpY2VzLCBvciBpZiB0aGVyZSYjMzk7cyBhIHNvZnR3YXJlIGRyaXZlciBsaWtlIGB2aGNpYCkuCgpMZXQgbWUgc2VlIGlmIFFFTVUgZXZlbiAqc3VwcG9ydHMqIG5ldHhlbi4gUUVNVSBuZXR3b3JrIGRldmljZXPigKYgZTEwMDAsIGUxMDAwZSwgaWdiLCBldGMuIE5vcGUsIG5vIG5ldHhlbiBvbiB0aGF0IGxpc3QuIERhbW4uCgpTbywgaW4gYSBzdGFuZGFyZCBWTSwgd2l0aG91dCB0aGUgKmFjdHVhbCogaGFyZHdhcmUsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgYHZoY2lgLWxpa2UgYXBwcm9hY2ggZm9yIFVTQiwgYnV0IGZvciBQQ0ksIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgbm8sIGl0IHNlZW1zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBpcyB0aGUgd2F5IHRvIGRvIGl0LiBXYWl0LCBkb2VzIHN5emthbGxlciBldmVuIGhhdmUgYSBQQ0kgZnV6emVyIHVzaW5nIGB2ZmlvYD8gTm9wZSwgaXMgdGhlcmUgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGw/IE5vLgoKQWN0dWFsbHksIGRpZG7igJl0IHN5emthbGxlciAqcmVjZW50bHkqIGFkZCBzdXBwb3J0IGZvciBmdXp6aW5nIFBDSSBkcml2ZXJzIHZpYSBhIGR1bW15IFBDSSBkZXZpY2Ugb3Igc29tZXRoaW5nIHNpbWlsYXI/IEdvdHRhIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWUgbmV3IHdheSB0byBkbyBQQ0kgZnV6emluZy4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwLiBJZiB0aGlzICppcyogYSBQQ0kgZHJpdmVyIGFuZCB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZeKApiB0aGUgYHByb2JlYCBmdW5jdGlvbiBqdXN0IHdvbiYjMzk7dCBiZSBjYWxsZWQuIFBlcmlvZC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmV0eGVuX25pY19pbml0LmNgIGlzIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTYyMD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjYyMTpuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTYyMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjQ9bmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtNzY1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6NzY2Olx0aWYgKG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKGFkYXB0ZXIpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2Ny1cdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAsIGFzc3VtaW5nIEkgaGF2ZSBzaWduaWZpY2FudCBrZXJuZWwtbGV2ZWwgbmV0d29ya2luZyBleHBlcmllbmNlOgoKKipEaWdnaW5nIGludG8gbmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcy4gYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAuLi4gc291bmRzIGxpa2Ugd2UmIzM5O3JlIHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9yIHRoZSBzdWl0YWJpbGl0eSBvZiBhIHVuaWZpZWQgUk9NIGltYWdlIGZvciBhIE5ldFhlbiBOSUMuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGNoZWNrc3VtcywgdmVyc2lvbiBjaGVja3MsIGltYWdlIGZvcm1hdCB2YWxpZGF0aW9uIOKAkyBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4geW91JiMzOTtyZSBkZWFsaW5nIHdpdGggZmlybXdhcmUgb3IgYm9vdCBjb2RlIGxvYWRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGJvb3QgcHJvY2VzcywgYSBnYXRla2VlcGVyIGVuc3VyaW5nIHRoYXQgdGhlIE5JQyBkb2VzbiYjMzk7dCBicmljayBpdHNlbGYgb3Igd29yc2UsIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIGFudGljaXBhdGluZyBpdCB3aWxsIGV4YW1pbmUgdGhpbmdzIGxpa2U6CgoqICAgKipST00gSGVhZGVyOioqIENoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSB2YWxpZCBoZWFkZXIgc3RydWN0dXJlLiBJJiMzOTtsbCBleHBlY3QgZmllbGRzIGluZGljYXRpbmcgaW1hZ2UgdHlwZSwgdmVyc2lvbiwgbGVuZ3RoLCBtYXliZSBldmVuIGEgbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCB0aGluZyB0byBjaGVjayEKKiAgICoqQ2hlY2tzdW0gVmVyaWZpY2F0aW9uOioqIEEgQ1JDIG9yIGNyeXB0b2dyYXBoaWMgaGFzaCB0byBjb25maXJtIHRoZSBpbWFnZSBoYXNuJiMzOTt0IGJlZW4gY29ycnVwdGVkIGR1cmluZyBzdG9yYWdlIG9yIHRyYW5zZmVyLiBUaGlzIGlzIGEgbXVzdC1oYXZlIGZvciBhbnkgaW1hZ2UgdmVyaWZpY2F0aW9uLgoqICAgKipWZXJzaW9uIENvbXBhdGliaWxpdHk6KiogVmVyaWZ5aW5nIHRoYXQgdGhlIFJPTSBpbWFnZSB2ZXJzaW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgTklDIGhhcmR3YXJlIG9yIHRoZSBkcml2ZXIuIFdlIGRvbiYjMzk7dCB3YW50IHRvIGxvYWQgYSBmaXJtd2FyZSB0aGF0JiMzOTtzIHRvbyBvbGQgb3IgdG9vIG5ldywgd2hpY2ggY291bGQgY2F1c2UgaW5zdGFiaWxpdHkuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgY2xldmVyIHZlcnNpb24gbnVtYmVyIGNvbXBhcmlzb24gaGFwcGVuaW5nIGhlcmUsIHBlcmhhcHMgZXZlbiBjaGVja2luZyBhZ2FpbnN0IGEgd2hpdGVsaXN0L2JsYWNrbGlzdC4KKiAgICoqSW1hZ2UgRm9ybWF0OioqIFBvc3NpYmx5IGNoZWNraW5nIGlmIHRoZSBpbWFnZSBjb25mb3JtcyB0byBhIHNwZWNpZmllZCBmb3JtYXQgZm9yIG5ldHhlbiBOSUNzLCBlbnN1cmluZyBpdCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBzZWN0aW9ucyAoZS5nLiwgY29kZSwgZGF0YSwgY29uZmlndXJhdGlvbikuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2VjdGlvbiBsZW5ndGhzIG9yIG9mZnNldHMgdGhhdCBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3I/CiogICAqKlNlY3VyaXR5IENoZWNrczoqKiBNYXliZSBzb21lIG1vcmUgYWR2YW5jZWQgY2hlY2tzLCBtYXliZSBsaWtlIGEgZGlnaXRhbCBzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBpbWFnZSYjMzk7cyBhdXRoZW50aWNpdHksIG9yIGNoZWNraW5nIGZvciBtYWxpY2lvdXMgY29kZSBvciBiYWNrZG9vcnMuCiogICAqKkFkZHJlc3MgU3BhY2U6KiogSXQmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIFJPTSBpbWFnZSBzaXplIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IHdpbGwgZml0IHdpdGhpbiB0aGUgYWxsb2NhdGVkIGFkZHJlc3Mgc3BhY2UuIE90aGVyd2lzZSwgdGhlcmUmIzM5O2xsIGJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHRoZSBOSUMgd2lsbCBqdXN0IHJlZnVzZSB0byB3b3JrLgoKVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSAqaG93KiByb2J1c3QgdGhlIHZhbGlkYXRpb24gaXMuIElzIGl0IGp1c3QgYmFzaWMgY2hlY2tzdW1zLCBvciBhcmUgdGhleSB1c2luZyBtb3JlIHNvcGhpc3RpY2F0ZWQgc2VjdXJpdHkgbWVhc3VyZXM/IFdoYXQgdnVsbmVyYWJpbGl0aWVzIGFyZSB0aGV5IGxpa2VseSBndWFyZGluZyBhZ2FpbnN0PyBBbmQsIGltcG9ydGFudGx5LCBpZiBhIHZhbGlkYXRpb24gKmZhaWxzKiwgd2hhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgZXJyb3IgaGFuZGxpbmc/IERvZXMgaXQgbG9nIGEgdXNlZnVsIGVycm9yLCBwYW5pYyB0aGUgZHJpdmVyLCBvciBzaWxlbnRseSBmYWlsIGFuZCBwb3RlbnRpYWxseSBsZWFkIHRvIGJpZ2dlciBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcywgd2hhdCBpdCAqZG9lc24mIzM5O3QqIGRvLCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCB3ZWFrIHNwb3RzIG1pZ2h0IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzo3NjQ6bmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtNzY1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTExMDE9bmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTExMTEtXHRpZiAoZndfdHlwZSA9PSBOWF9VTklGSUVEX1JPTUlNQUdFKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjExMTI6XHRcdGlmIChuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2UoYWRhcHRlcikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTExMTMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3Q6CgoqKkFuYWx5emluZyBGaXJtd2FyZSBWYWxpZGF0aW9uIOKAkyBBIEZhbWlsaWFyIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlYC4gVGhpcyBpbnN0YW50bHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBOZXRYZW4gKG9yIFFMb2dpYy9NYXJ2ZWxsKSBuZXR3b3JrIGludGVyZmFjZSBjYXJkLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBmaXJtd2FyZSB2YWxpZGF0aW9uIHByb2Nlc3MuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaGVyZS4gRmlybXdhcmUgdmFsaWRhdGlvbiBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGluIHByZXZlbnRpbmcgbWFsaWNpb3VzIGFjdG9ycyBmcm9tIGluamVjdGluZyBjb21wcm9taXNlZCBmaXJtd2FyZSwgbGVhZGluZyB0byBwb3RlbnRpYWwgc3lzdGVtIGNvbXByb21pc2UsIGRlbmlhbC1vZi1zZXJ2aWNlLCBvciBldmVuIGRhdGEgYnJlYWNoZXMuCgpTbywgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCB2YWxpZGF0aW9uIHN0ZXBzOiBjaGVja3N1bSB2ZXJpZmljYXRpb24sIHNpZ25hdHVyZSBjaGVja3MgKGxpa2VseSBSU0EtYmFzZWQsIHBvc3NpYmx5IHdpdGggYSBoYXJkd2FyZSByb290IG9mIHRydXN0KSwgdmVyc2lvbiBjaGVja3MsIGFuZCBtYXliZSBldmVuIHNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyBvbiB0aGUgZmlybXdhcmUgaW1hZ2UgaXRzZWxmIHRvIGVuc3VyZSBpdCYjMzk7cyB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgZm9ybWF0LiBJJiMzOTttIHdvbmRlcmluZyB3aGF0IHNwZWNpZmljIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZSBleHBvc2VkIGF0IHRoaXMgc3RhZ2UuIENvdWxkIHRoZXJlIGJlIGFueSBidWZmZXIgb3ZlcmZsb3dzIGluIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgaXRzZWxmPyBBcmUgdGhlcmUgb3Bwb3J0dW5pdGllcyBmb3IgYSBkb3duZ3JhZGUgYXR0YWNrLCB3aGVyZSBhbiBvbGRlciwgdnVsbmVyYWJsZSBmaXJtd2FyZSB2ZXJzaW9uIGNvdWxkIGJlIGZvcmNlZCBvbnRvIHRoZSBjYXJkPwoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJcyBpdCBkb25lIGluIHRoZSBkcml2ZXIgaXRzZWxmLCBvciBpcyB0aGVyZSBhIHNlcGFyYXRlIGZpcm13YXJlIHZhbGlkYXRpb24gbW9kdWxlIHdpdGhpbiB0aGUgTklDJiMzOTtzIGZpcm13YXJlPyBIb3cgZG9lcyBpdCBoYW5kbGUgdXBkYXRlcyBhbmQgZG93bmdyYWRlcz8gSXMgdGhlIHZhbGlkYXRpb24gcHJvY2VzcyBoYXJkZW5lZCBhZ2FpbnN0IHRhbXBlcmluZz8gQXJlIHRoZXJlIGFueSBkb2N1bWVudGVkIHdlYWtuZXNzZXMgb3Iga25vd24gYnlwYXNzZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGxvb2sgaW50byB3aGV0aGVyIHRoaXMgaXMgYW4gaXNzdWUgSSBoYXZlIHNlZW4gYmVmb3JlLCBhbmQgaG93IHRvIHJlbWVkeSBpdC4gQW55IHNwZWNpZmljIGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIHdvdWxkIGJlIGtleSB0b28sIHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLiBPdmVyYWxsLCBpdCBhbGwgcG9pbnRzIHRvIGEgY3JpdGljYWwgcG9pbnQgZm9yIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHksIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9MTEwMD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjExMDE6bmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTEwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjM3PXZvaWQgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTI1NTpcdFx0cmMgPSBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyNTYtXHRcdGlmIChyYyAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRmlybXdhcmUgUmVxdWVzdCBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZmlybXdhcmUgcmVxdWVzdHMsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgbmV0d29yayBkcml2ZXIgZWNvc3lzdGVtLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhIGRyaXZlciwgbmVlZGluZyBhIHNwZWNpZmljIGZpcm13YXJlIGltYWdlIHRvIG9wZXJhdGUgY29ycmVjdGx5LCBhY3R1YWxseSBnb2VzIG91dCBhbmQgKmFza3MqIGZvciBpdC4gSXQmIzM5O3MgdGhlIGNydWNpYWwgaGFuZHNoYWtlLCB0aGUgYmVnaW5uaW5nIG9mIGdldHRpbmcgaGFyZHdhcmUgcmVhZHkgZm9yIGFjdGlvbi4gSSYjMzk7bSBjb25zaWRlcmluZyBhbGwgdGhlIHdheXMgdGhpcyBjYW4gZ28gcmlnaHQsIGFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgZ28gd3JvbmcuCgpJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBzY2VuYXJpb3MuIERvZXMgdGhlIGRyaXZlciBoYXZlIGJ1aWx0LWluIGZpcm13YXJlIGJsb2JzPyBJZiBub3QsIGhvdyYjMzk7cyBpdCBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBwYXRoIHRvIGxvb2sgZm9yIHRoZSBmaXJtd2FyZT8gQXJlIHRoZXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBwbGF5PyBBbmQgd2hhdCBhYm91dCB0aGUgY2FjaGluZyBtZWNoYW5pc21zIGludm9sdmVkPyBBcmUgd2UgZWZmaWNpZW50bHkgYXZvaWRpbmcgcmVkdW5kYW50IGxvb2t1cHMsIG9yIGlzIHRoZXJlIHBvdGVudGlhbCBmb3IgYm90dGxlbmVja3M/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgb3JkZXIgb2Ygc2VhcmNoIOKAkyBvZnRlbiBpdOKAmXMgbG9va2luZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZW4gaW4gYSBzdGFuZGFyZCBmaXJtd2FyZSBkaXJlY3RvcnksIGFuZCBtYXliZSBjaGVja2luZyB2ZW5kb3Igc3BlY2lmaWMgZGlyZWN0b3JpZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBzeXN0ZW0gc3RhYmlsaXR5LgoKQW5kIHRoZW4sIG9mIGNvdXJzZSwgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGZpcm13YXJlIGlzIHVuYXZhaWxhYmxlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgdGhlIGRyaXZlciBmYWxsIGJhY2sgdG8gYSBsZXNzIGZ1bmN0aW9uYWwgbW9kZSwgb3IgZG9lcyBpdCBmbGF0LW91dCBmYWlsPyBIb3cgYXJlIHRoZXNlIGZhaWx1cmVzIGxvZ2dlZCwgYW5kIGFyZSB0aGUgZXJyb3IgbWVzc2FnZXMgaGVscGZ1bCBlbm91Z2ggZm9yIGRlYnVnZ2luZz8gSSBiZXQgSSBjb3VsZCBpbXByb3ZlIHRob3Nl4oCmIE1heWJlIGl0JiMzOTtzIGV2ZW4gd29ydGggbG9va2luZyBhdCBpZiB0aGVyZSBpcyBhIHdheSB0byB0cmlnZ2VyIGEgZmlybXdhcmUgY2hlY2sgd2hlbiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIG9yIGxvYWRlZC4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHRoZSBzZWN1cml0eSBhc3BlY3RzIGhlcmU6IEhvdyBhcmUgd2UgdmVyaWZ5aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRvd25sb2FkZWQgZmlybXdhcmU/IEFyZSB0aGVyZSBkaWdpdGFsIHNpZ25hdHVyZXMgaW52b2x2ZWQ/IFRoaXMgaXMgcGFyYW1vdW50IGZvciBwcmV2ZW50aW5nIG1hbGljaW91cyBmaXJtd2FyZSB1cGRhdGVzIGZyb20gYnJpY2tpbmcgc3lzdGVtcyBvciBvcGVuaW5nIHZ1bG5lcmFiaWxpdGllcy4KCkkmIzM5O20gYWxzbyB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgdG8gYmUgY29uc2lkZXJlZC4gQXJlIHRoZXJlIG11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBzaW11bHRhbmVvdXNseSwgYWxsIHRyeWluZyB0byByZXF1ZXN0IHRoZSBzYW1lIGZpcm13YXJlPyBIb3cgaXMgY29uY3VycmVuY3kgbWFuYWdlZCB0byBwcmV2ZW50IGNvbmZsaWN0cyBvciBmaWxlIGFjY2VzcyBwcm9ibGVtcz8gVGhpcyBpcyBhIHBvaW50IHdoZXJlIEnigJl2ZSBzZWVuIHNvbWUgc3VidGxlIGJ1Z3MgZW1lcmdlIGluIHRoZSBwYXN0LiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhlIGRpZmZlcmVudCBpbnRlcmZhY2VzIGZvciBmZXRjaGluZyB0aGUgZmlybXdhcmUsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCB0aGUgZGV2aWNlLgoKRmluYWxseSwgSeKAmW0gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBIb3cgZG9lcyB0aGlzIGBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZWAgZnVuY3Rpb24gaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgZmlybXdhcmUgbG9hZGluZyBmcmFtZXdvcmsgb2YgdGhlIGtlcm5lbD8gQXJlIHRoZXJlIGFueSBpbnRlcm9wZXJhYmlsaXR5IGNvbmNlcm5zIHdpdGggb3RoZXIgc3Vic3lzdGVtcywgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gYWNyb3NzIHRoZSBlbnRpcmUgZmlybXdhcmUgbG9hZGluZyBwcm9jZXNzPyBJIGJldCB0aGVyZeKAmXMgYSBsb3QgbW9yZSB0aGF0IEkgY291bGQgYmUgdGhpbmtpbmcgYWJvdXQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmg9MTczMD1pbnQgbmV0eGVuX25lZWRfZndfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oOjE3MzE6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmgtMTczMi12b2lkIG5ldHhlbl9yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjE3PW5ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTIzNzp2b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05Mjc9bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6OTUzOlx0bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlZXAgRGl2ZSBpbnRvIGBuZXR4ZW5fc3RhcnRfZmlybXdhcmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIFdoZW4gSSBzZWUgYG5ldHhlbl9zdGFydF9maXJtd2FyZWAsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGNyaXRpY2FsIHBhdGggb2YgYSBOZXRYZW4gKG9yIFFMb2dpYyBOZXRYZW4sIGRlcGVuZGluZyBvbiB0aGUgYWdlIG9mIHRoZSBjb2RlKSBuZXR3b3JrIGFkYXB0ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7VGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBtaXNlcnkhKSBiZWdpbnMuJiMzNDsgVGhpcyBmdW5jdGlvbiAqaGFzKiB0byBoYW5kbGUgdGhlIG51YW5jZWQgZGFuY2UgYmV0d2VlbiB0aGUgZHJpdmVyLCB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgZmlybXdhcmUgaXRzZWxmLgoKRmlyc3QsIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgY2hlY2tzOiBoYXMgdGhlIGFkYXB0ZXIgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkPyBJcyB0aGUgZGV2aWNlIHJlYWR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaGFyZHdhcmUgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBlcnJvcnMgdGhhdCBoYXZlIHNob3J0LWNpcmN1aXRlZCBpbml0aWFsaXphdGlvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZXJyb3IgaGFuZGxpbmcgZnJvbSB0aGUgb3V0c2V0IOKAkyBhIHdlbGwtd3JpdHRlbiByb3V0aW5lIGhlcmUgYW50aWNpcGF0ZXMgZmFpbHVyZSBtb2Rlcy4KClRoZW4sIHRoZSBjb3JlIG9mIGl0IGhhcyB0byBpbnZvbHZlIGxvYWRpbmcgdGhlIGZpcm13YXJlIGltYWdlLiBBbSBJIHNlZWluZyBhIGRpcmVjdCByZWFkIGZyb20gYSBrbm93biBsb2NhdGlvbiAobGlrZWx5IGEgZGV2aWNlLXNwZWNpZmljIGZsYXNoIG9yIGEgbWVtb3J5LW1hcHBlZCBhcmVhKSwgb3IgaXMgdGhlcmUgYSBtb3JlIGludm9sdmVkIHByb2Nlc3MgaW52b2x2aW5nIGEgZmlybXdhcmUgZG93bmxvYWQgdXNpbmcgYSBib290bG9hZGVyIHByb3RvY29sPyBJJiMzOTttIGhvcGluZyBmb3IgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRvd25sb2FkIG1lY2hhbmlzbS4gVGhlIGVmZmljaWVuY3kgb2YgdGhpcyBmdW5jdGlvbiBoYXMgYSByZWFsIGltcGFjdCBvbiBib290IHRpbWUuCgpJ4oCZbSBvbiB0aGUgbG9va291dCBmb3IgYSBwb3RlbnRpYWwgZmFsbGJhY2sgdG8gYSDigJxzYWZlIG1vZGXigJ0gb3IgZGlhZ25vc3RpYyBmaXJtd2FyZSBpZiB0aGUgcHJpbWFyeSBkb3dubG9hZCBmYWlscy4gUm9idXN0bmVzcyBpcyBrZXk7IGEgYnJpY2tlZCBhZGFwdGVyIGlzIGEgKnZlcnkqIGJhZCB1c2VyIGV4cGVyaWVuY2UsIGFuZCBhIHByb3Blcmx5IGRlc2lnbmVkIHJvdXRpbmUgaGVyZSBzaG91bGQgbWluaW1pemUgdGhhdCByaXNrLiBJJiMzOTttIGhvcGluZyB0byBzZWUgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBzcGVlZCBhbmQgcmVsaWFiaWxpdHkuCgpBbHNvLCBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgdmVyc2lvbmluZyBhbmQgY29tcGF0aWJpbGl0eS4gSXMgdGhlcmUgYSBjaGVjayB0byBlbnN1cmUgdGhlIGZpcm13YXJlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyPyBIb3cgZG9lcyBpdCBoYW5kbGUgZmlybXdhcmUgdXBkYXRlcz8gQSBtaXNtYXRjaCBoZXJlIGNhbiBjYXVzZSB2ZXJ5IHN1YnRsZSBidWdzIHRoYXQgYXJlIGRpZmZpY3VsdCB0byBkZWJ1ZywgYW5kIEkgZXhwZWN0IHRvIHNlZSBlbGVnYW50IGNoZWNrcyB0byBwcmV2ZW50IHRoYXQuCgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzdGVwczoKCjEuICAqKlByZXBhcmF0aW9uKio6IEhhcmR3YXJlIHJlc2V0L2luaXRpYWxpemF0aW9uLiBSZXNvdXJjZSBhbGxvY2F0aW9uLgoyLiAgKipGaXJtd2FyZSBMb2FkKio6IERldGVybWluZSB0aGUgc291cmNlIChmbGFzaCwgZG93bmxvYWQpLCBlcnJvciBoYW5kbGluZyBvbiByZWFkIGZhaWx1cmVzLgozLiAgKipGaXJtd2FyZSBWZXJpZmljYXRpb24qKjogQ2hlY2tzdW0sIHZlcnNpb24gdmVyaWZpY2F0aW9uLCBhbnkgc2VsZi10ZXN0cyB0aGF0IG1pZ2h0IHJ1biBhdCB0aGlzIHN0YWdlLgo0LiAgKipGaXJtd2FyZSBBY3RpdmF0aW9uKio6IENvbnRyb2wgaGFuZG9mZi4KNS4gICoqU3RhdHVzIFJlcG9ydGluZyoqOiBSZXBvcnQgdG8gdGhlIGRyaXZlciB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgoKSSBrbm93IHRoZSBudWFuY2VzIG9mIGZpcm13YXJlIGxvYWRpbmcgY2FuIGJlY29tZSBjb21wbGV4IGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkgYW0gd29uZGVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhvc2UuIElzIHRoZXJlIGFueSBldmlkZW5jZSBvZiBzZWN1cmUgYm9vdCBvciBjb2RlIHNpZ25pbmc/IFRoYXQgd291bGQgYmUgYSBnb29kIHNpZ24uCgpJbiBlc3NlbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBuZXR4ZW5fc3RhcnRfZmlybXdhcmVgIGZ1bmN0aW9uIHRvIGJlIGEgdGlnaHRseSB3b3VuZCwgZWZmaWNpZW50LCBhbmQgcm9idXN0IHBpZWNlIG9mIGNvZGUsIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggdGhlIGFkYXB0ZXImIzM5O3MgbmV0d29yayBjb25uZWN0aXZpdHkgZGVwZW5kcy4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBhbmQgSSYjMzk7bSB2ZXJ5IGludGVyZXN0ZWQgdG8gc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fc3RhcnRfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05MjY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzo5Mjc6bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtOTI4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTE0Mzg9bmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE1MjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjE1Mjk6XHRlcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE1MzAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MTY4Nj1zdGF0aWMgaW50IG5ldHhlbl9uaWNfYXR0YWNoX2xhdGVfZnVuYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE2OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjE2OTc6XHRlcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE2OTgtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0yNTE5PW5ldHhlbl9md2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0yNTUyLVx0Y2FzZSBOWF9ERVZfUkVBRFk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjI1NTM6XHRcdGlmICghbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTI1NTQtXHRcdFx0bmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2F0dGFjaF93b3JrLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIGBuZXR4ZW5fbmljX3Byb2JlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmV0eGVuX25pY19wcm9iZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYSBQQ0kgZHJpdmVyLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBhIFBDSSBkcml2ZXIsIHNvIHRoZSBwcm9iZSBmdW5jdGlvbiAqc2hvdWxkKiBvbmx5IGJlIGNhbGxlZCBpZiBhIG1hdGNoaW5nIFBDSSBkZXZpY2UgaXMgcHJlc2VudC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogY2FuIEkgdHJpZ2dlciB0aGlzIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZT8KCkkga25vdyBzeXprYWxsZXIgY2FuIHRlc3QgUENJIGRyaXZlcnMsIGJ1dCB1c3VhbGx5LCBpdCByZWxpZXMgb24gYmluZGluZyB0aGUgZHJpdmVyIHRvIGEgZHVtbXkgZGV2aWNlLiBJIHJlbWVtYmVyIGl0IG1pZ2h0IHVzZSBhIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0LCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBzeXprYWxsZXIgKmFjdHVhbGx5KiBoYXMgYSBnZW5lcmljIHdheSB0byBpbmplY3QgUENJIGRldmljZXMuIFVubGVzcy4uLiB1bmxlc3MgdGhlcmUgYXJlIG1vcmUgcmVjZW50IGFkZGl0aW9ucywgbGlrZSB0aGUgYHN5el9nZW5ldGxpbmtgIGZvciBuZXRsaW5rIGFuZCBgc3l6X3VzYmAgZm9yIFVTQj8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LgoKV2FpdCBhIG1pbnV0ZS4uLiBkb2VzIHN5emthbGxlciBoYXZlIFBDSSBmdXp6aW5nICphdCBhbGwqPyBNYXliZSB3aXRoIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgdGhhdCYjMzk7cyBub3QgaXQgZWl0aGVyLgoKTGV0IG1lIHRha2UgYSBzdGVwIGJhY2sgYW5kIHNlZSBpZiBzeXprYWxsZXIgaXMgYWN0dWFsbHkgZG9pbmcgUENJIGZ1enppbmcgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIGNvdWxkIHNlYXJjaCB0aGUga2VybmVsIHRyZWUsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgYmVzdCBhcHByb2FjaCBzaW5jZSBzeXprYWxsZXIgaXMgZXh0ZXJuYWwuCgpBaGEhIFRoZSAmIzM0O0F1dGhvciYjMzQ7IGxpbmUhIElmIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgYHN5ei1jbHVzdGVyYCwgdGhhdCBtZWFucyBzeXprYWxsZXIgKmZvdW5kKiBhIGJ1ZyBoZXJlISBJdCYjMzk7cyBmcm9tICYjMzQ7c3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OyYjMzQ7LCBzbyBpdCAqZGVmaW5pdGVseSogZm91bmQgc29tZXRoaW5nLiAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7IC0gdGhhdCBjb25maXJtcyBpdC4gSWYgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIGhlcmUsIHRoYXQgbWVhbnMgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlIQoKSG93IGlzIHN5emthbGxlciBkb2luZyB0aGF0PyBQZXJoYXBzIGl0IGlzIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYD8gSWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdCwgdGhhdCBtZWFucyBpdCAqaXMqIGZ1enphYmxlLiBNYXliZSB0aGUgYnVnIHdhcyBmb3VuZCBieSBpbmplY3RpbmcgZmlybXdhcmUgb3IgcGVyaGFwcyBzeXprYWxsZXIgKmRvZXMqIGhhdmUgUENJIGZ1enppbmcuCgpPa2F5LCBsZXQmIzM5O3MgZGV0ZXJtaW5lIGlmIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLiBDbGVhcmx5LCBpZiBzeXprYWxsZXIgZm91bmQgYSBidWcsIGl0ICppcyogcmVhY2hhYmxlLgoKVGhlIHByb21wdCwgaG93ZXZlciwgbWVudGlvbnMgYSBjYXZlYXQ6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLi4uJiMzNDsgU28sIGNhbiBJIHJlYWNoIHRoaXMgYG5ldHhlbl9uaWNfcHJvYmVgIGluIFFFTVU/CgpDb3VsZCBJIHRyaWdnZXIgdGhlIFBDSSBwcm9iZSB2aWEgc3lzZnM/IFNvbWV0aGluZyBsaWtlLCBgZWNobyAmIzM0O3ZlbmRvciBkZXZpY2UmIzM0OyAmZ3Q7IC9zeXMvYnVzL3BjaS9kcml2ZXJzL25ldHhlbl9uaWMvbmV3X2lkYD8gVGhhdCAqd291bGQqIG1ha2UgdGhlIGRyaXZlciBhdHRlbXB0IHRvIGJpbmQgdG8gYSBQQ0kgZGV2aWNlIHdpdGggYSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlIElELCBidXQgSSB3b3VsZCBzdGlsbCBuZWVkIGEgUENJIGRldmljZS4gSSByZW1lbWJlciBzeXprYWxsZXIgaGFzIGB2aGNpYCBmb3IgVVNCLi4uIGRvZXMgaXQgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJPyBEb2VzIHN5emthbGxlciBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgd2FpdCwgc3l6a2FsbGVyICpkb2VzKiB1c2UgYHZmaW9gIG9yIGEgc2ltaWxhciB0ZWNobm9sb2d5LgoKQWN0dWFsbHksIEkgdGhpbmsgc3l6a2FsbGVyICpkaWQqIHJlY2VudGx5IGFkZCBhIFBDSSBmdXp6ZXIhIERvZXMgaXQgdXNlIGEgZHVtbXkgUENJIGRldmljZT8gTm8sIGl0IHVzZXMgS1ZNL1FFTVUsIG9yIG1heWJlIGl0IGhhcyBhIHNvZnR3YXJlIFBDSSBidXMgaW1wbGVtZW50YXRpb24uCgpXYWl0LCBtYXliZSB0aGVyZSYjMzk7cyBhIGBDT05GSUdfUENJX0RFQlVHYCBvcHRpb24gSSBjb3VsZCB1c2U/CgpUaGUgcHJvbXB0IHNheXMgSSBzaG91bGQ6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKSSBkb24mIzM5O3QgbmVlZCB0byBwcm92ZSBpdCYjMzk7cyByZWFjaGFibGUgc2luY2Ugc3l6a2FsbGVyIGZvdW5kIGl0LCBidXQgSSAqc2hvdWxkKiBjaGVjayB0aGUgY29uZmlncy4gV2hhdCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVFhFTl9OSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZz01OD1jb25maWcgUUxDTklDX0hXTU9OXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo2OTpjb25maWcgTkVUWEVOX05JQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtOZXRYZW4gTXVsdGkgcG9ydCAoMS8xMCkgR2lnYWJpdCBFdGhlcm5ldCBOSUNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBRTG9naWMgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUUxvZ2ljIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2OS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBpbml0aWFsIGRyaXZlciBvcHRpb25zIGFyZSBkZWZpbmVkLCB0aGUgY29yZSBzZWxlY3Rpb25zIHRoYXQgY29udHJvbCBpdHMgYmFzaWMgZnVuY3Rpb25hbGl0eSBhbmQgb2Z0ZW4gdGhlIGluaXRpYWwgZmVhdHVyZSBzZXQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhpbmdzIGxpa2UgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBkcml2ZXIgaXRzZWxmIChgQ09ORklHX1FMT0dJQ18uLi5gKSwgb3B0aW9ucyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudHMsIHBlcmhhcHMgc29tZSBlYXJseSBzZXR0aW5ncyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBtYXliZSBldmVuIGRlYnVnZ2luZy90cmFjaW5nIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuIExpbmUgNjkuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5pdGlhbCBkZWNpc2lvbnMgYmVnaW4sIGdlbmVyYWxseS4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0ZGVwZW5kcyBvbiBRTENOSUMgXHUwMDI2XHUwMDI2IEhXTU9OIFx1MDAyNlx1MDAyNiAhKFFMQ05JQz15IFx1MDAyNlx1MDAyNiBIV01PTj1tKVxuICA2MTpcdFx0ZGVmYXVsdCB5XG4gIDYyOlx0XHRoZWxwXG4gIDYzOlx0XHQgIFRoaXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGVcbiAgNjQ6XHRcdCAgYm9hcmQgdGVtcGVyYXR1cmUgaW4gQ29udmVyZ2VkIEV0aGVybmV0IGRldmljZXNcbiAgNjU6XHRcdCAgc3VwcG9ydGVkIGJ5IHFsY25pYy5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgVGhpcyBkYXRhIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGh3bW9uIHN5c2ZzIGludGVyZmFjZS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgTkVUWEVOX05JQ1xuICA3MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0WGVuIE11bHRpIHBvcnQgKDEvMTApIEdpZ2FiaXQgRXRoZXJuZXQgTklDXCYjMzQ7XG4gIDcxOlx0XHRkZXBlbmRzIG9uIFBDSVxuICA3MjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA3MzpcdFx0aGVscFxuICA3NDpcdFx0ICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIE5ldFhlbiYjMzk7cyBHaWdhYml0IEV0aGVybmV0IGNhcmQuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIFFFRFxuICA3NzpcdFx0dHJpc3RhdGUgXCYjMzQ7UUxvZ2ljIFFFRCAyNS80MC8xMDBHYiBjb3JlIGRyaXZlclwmIzM0O1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNzk6XHRcdHNlbGVjdCBaTElCX0lORkxBVEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBzZWUgYE5FVFhFTl9OSUNgIOKAkyB0aGF04oCZcyB0aGUgcHJpbWFyeSBkcml2ZXIgY29uZmlnLCByaWdodD8gQnV0IEkgYWxzbyBzcG90IGBGV19MT0FERVJgIGJlaW5nIHNlbGVjdGVkLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZHJpdmVyPyBUaGlzIGZlZWxzIGxpa2UgaXQmIzM5O3MgbWlzc2luZyBzb21ldGhpbmcgYW5kIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9ucy4KClRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gZXhhbWluZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIHVzZWQgdG9nZXRoZXIuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZXR4ZW5fbmljX2luaXQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQgd2lsbCBzaG93IG1lIGhvdyB0aGVzZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGludGVyYWN0IHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBzZWUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzIGFuZCBob3cgYE5FVFhFTl9OSUNgIGFuZCBgRldfTE9BREVSYCBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIGFuIGltcGFjdC4gSG9wZWZ1bGx5IHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTk0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBmb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIE5ldFhlbiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYCBhcmUgcHJlc2VudCBpbiBgbmV0eGVuX25pY19pbml0LmNgLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBzaW1wbGlmaWVzIGRlYnVnZ2luZyBpZiB3ZSBldmVyIG5lZWQgdG8gdHJhY2UgaW5pdGlhbGl6YXRpb24uIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMsIGxldCYjMzk7cyBjYXN0IGEgY3JpdGljYWwgZXllIG92ZXIgYG5ldHhlbl9uaWNfbWFpbi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgb3IgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gaWYgaXQgaXNuJiMzOTt0IGluIGluaXQuIEl0JiMzOTtzIHRoZSBjb3JlIGRyaXZlciBmaWxlLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGluY2x1ZGUgb3IgZXhjbHVkZSBjb2RlIGJhc2VkIG9uIHRoZSBkZXZpY2Ugb3IgaXRzIG9wZXJhdGluZyBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyBob3cgYW55IGNvbmRpdGlvbmFscyBhcmUgaGFuZGxlZCBpbiBtYWluIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgYmVoYXZlcyBpbiBkaWZmZXJlbnQgc2V0dXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MTM4OD1zdGF0aWMgdm9pZCBuZXR4ZW5fcmVhZF91bGFfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNDEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzoxNDExOiNpZmRlZiBDT05GSUdfUENJRUFFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNDEyLXN0YXRpYyB2b2lkIG5ldHhlbl9tYXNrX2Flcl9jb3JyZWN0YWJsZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0xNDM4PW5ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzoxNTAyOiNpZmRlZiBDT05GSUdfUENJRUFFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNTAzLVx0bmV0eGVuX21hc2tfYWVyX2NvcnJlY3RhYmxlKGFkYXB0ZXIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzEzMT1uZXR4ZW5fcmVtb3ZlX2RpYWdfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMTQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzozMTQyOiNpZmRlZiBDT05GSUdfSU5FVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMTQzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ0OD1zdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NTI6I2lmZGVmIENPTkZJR19JTkVUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTMtXHRyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0eGVuX25ldGRldl9jYik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zNDYxPXN0YXRpYyB2b2lkIF9fZXhpdCBuZXR4ZW5fZXhpdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NjU6I2lmZGVmIENPTkZJR19JTkVUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NjYtXHR1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKFx1MDAyNm5ldHhlbl9pbmV0YWRkcl9jYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDI3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpcm13YXJlIFBhcnNpbmcgTG9naWMgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGZpcm13YXJlIHBhcnNpbmcgcHJvY2Vzcy4gTm9uZSBvZiB0aGUgaW5pdGlhbCBjb25zaWRlcmF0aW9ucyBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBjb3JlIHBhcnNpbmcgaXRzZWxmLiBUaGUgcGFyc2luZyBjb2RlLCBhcyBJIHJlY2FsbCwgcmVzaWRlcyB3aXRoaW4gYG5ldHhlbl9uaWNfaW5pdC5jYC4gVGhlIG5leHQgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHN5emthbGxlciBhY3R1YWxseSBnZXQgdGhlIGZpcm13YXJlIHBhcnNpbmcgdG8gdHJpZ2dlcj8gQWgsIHJpZ2h0ISBJdCBsZXZlcmFnZXMgdGhlIGByZXF1ZXN0X2Zpcm13YXJlYCBBUEkuIFN5emthbGxlciBpbnRlcmNlcHRzIHRoaXMsIHdoaWNoIGdpdmVzIGl0IHRoZSBwb3dlciB0byBpbmplY3QgYW55IGZpcm13YXJlIGJsb2IgaXQgd2FudHMuIFRoYXQgbWVhbnMgaWYgdGhlIGRyaXZlciBtYWtlcyB0aGF0IGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLCB3ZSBoYXZlIGEgY2xlYXIgcGF0aCBmb3IgZnV6emluZyB0aGUgcGFyc2luZyBsb2dpYy4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZT8gSSBoYXZlIGEgbGlzdDogYG54X2dldF90YWJsZV9kZXNjYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgLCBhbmQgYG54X2dldF9kYXRhX2Rlc2NgLgoKV2FpdCwgaXNuJiMzOTt0IGBueF9nZXRfdGFibGVfZGVzY2AgYSBzdGF0aWMgZnVuY3Rpb24/IFRoYXQgY291bGQgaW1wYWN0IGl0cyBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AuIFN5emthbGxlciBjYW4gZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSBgRm9jdXNTeW1ib2xzYCAqY2FuKiBpbmNsdWRlIHRoZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBsaXN0aW5nIHRoZSByaWdodCBmdW5jdGlvbnMgdGhvdWdoLiBMZXQgbWUgcmUtZXhhbWluZSB0aGF0IGxpc3QgYWdhaW4sIGp1c3QgdG8gYmUgcHJlY2lzZS4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlc2UgYWdhaW5zdCB0aGUgbW9kaWZpY2F0aW9uczoKYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYApgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRgCmBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YApgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgCmBueF9nZXRfZGF0YV9kZXNjYApgbnhfZ2V0X3RhYmxlX2Rlc2NgCgpBaCwgaG9sZCBvbi4uLiBpcyBgbmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJgIGFsc28gc3RhdGljPyBPa2F5LCBzbyB0aGF0JiMzOTtzIHRoZSB0aGluZyB0byBmb2N1cyBvbiAtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKm5vbi1zdGF0aWMqLCBvciBkaXJlY3RseSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz02MjA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzo2MjE6bmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy02MjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9NzY0PW5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjc2NjpcdGlmIChuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihhZGFwdGVyKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy03NjctXHRcdGRldl9lcnIoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZpcm13YXJlIFZhbGlkYXRpb24gUHJvY2VzcyoqCgpSaWdodCwgc28gSSYjMzk7bSBpbW1lZGlhdGVseSBub3RpY2luZyBhIHBlcnZhc2l2ZSB1c2Ugb2Ygc3RhdGljIGNvZGUgZWxlbWVudHMgaGVyZS4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjbGVhcjogdGhlIGFyY2hpdGVjdHVyZSBsZWFucyBoZWF2aWx5IG9uIHN0YXRpYyBjb21wb25lbnRzLiBXYWl0IGEgc2Vjb25kLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYWJvdXQgYG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZWAuIElzICp0aGF0KiBhbHNvIHN0YXRpYz8gVGhhdCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpcyBjcml0aWNhbC4gSWYgaXTigJlzIHN0YXRpYywgdGhhdCBzaWduaWZpY2FudGx5IGltcGFjdHMgdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSBhbmQgcG90ZW50aWFsIGZvciBkeW5hbWljIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3RhdGljIHZhbGlkYXRpb24gc3RlcCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBhc3N1bXB0aW9ucyBuZWVkIHRvIGJlIGNvbmZpcm1lZCBiZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMTAwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTEwMTpuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMTAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTEyMzc9dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMjU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzoxMjU1Olx0XHRyYyA9IG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1Ni1cdFx0aWYgKHJjICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBGaXJtd2FyZSBSZXF1ZXN0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmVgIGZ1bmN0aW9uLi4uIGFuZCBpdCYjMzk7cyBjbGVhciB0byBtZSB0aGF0IGl0IGlzbiYjMzk7dCBzdGF0aWNhbGx5IGRlZmluZWQgb3IgaGFuZGxlZC4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmg9MTczMD1pbnQgbmV0eGVuX25lZWRfZndfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oOjE3MzE6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmgtMTczMi12b2lkIG5ldHhlbl9yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjE3PW5ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTIzNzp2b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05Mjc9bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6OTUzOlx0bmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMDAKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogODI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0WGVuIE5JQyBGaXJtd2FyZSBQYXJzaW5nIEJ1ZyoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IHRoZSBgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmVgIGVudHJ5IHBvaW50LCB3aGljaCBzeXprYWxsZXIgc29tZWhvdyBtYW5hZ2VkIHRvIGhpdC4gUmlnaHQsIGl0IG11c3QgYmUgYmVpbmcgdHJpZ2dlcmVkIHRocm91Z2ggYHN5el9wY2lfZGV2aWNlX2FkZGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIHRoZW4gaGl0cyBgbmV0eGVuX25pY19wcm9iZWAsIGxlYWRpbmcgdG8gYG5ldHhlbl9zdGFydF9maXJtd2FyZWAgYW5kIGZpbmFsbHkgdGhlIHRhcmdldCBmdW5jdGlvbi4gU3l6a2FsbGVyIGlzIGluamVjdGluZyBhIGJhZCBmaXJtd2FyZSBibG9iIHRocm91Z2ggYHJlcXVlc3RfZmlybXdhcmVgLCB3aGljaCB0aGVuIGdldHMgZmVkIGludG8gYG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZWAsIGFuZCBiYW0sIHdlIGdldCBvdXIgb3V0LW9mLWJvdW5kcyByZWFkLiBDbGFzc2ljIGZpcm13YXJlIHBhcnNpbmcgdnVsbmVyYWJpbGl0eS4KCklzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gRmlybXdhcmUgcGFyc2luZyBpcyBhbHdheXMgYSBnb2xkbWluZSBmb3IgYnVncywgYW5kIHRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGhhcyBhIGRlZGljYXRlZCBmZWF0dXJlIGZvciBgcmVxdWVzdF9maXJtd2FyZWAgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC4gV2UgbmVlZCB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGtleSB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGFyZSBlZmZlY3RpdmUuCgpMZXQmIzM5O3Mgc2VlLCB3ZSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgLCBgbnhfZ2V0X3RhYmxlX2Rlc2NgLCBgbnhfZ2V0X2RhdGFfZGVzY2AsIGFuZCBjcml0aWNhbGx5LCB0aGVzZSBuZXcgb25lcyBmcm9tIHRoZSBwYXRjaDogYG5ldHhlbl9yb21fcmFuZ2VfdmFsaWRgLCBgbmV0eGVuX3JvbV90YWJsZV92YWxpZGAsIGFuZCBgbmV0eGVuX3JvbV9lbnRyeV92YWxpZGAuCgpKdXN0IHRvIGNvbmZpcm0sIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMgZnJvbSB0aGUgcGF0Y2ggb25lIG1vcmUgdGltZSwgbWFraW5nIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmc6IGBuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkYCwgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgLCBgbmV0eGVuX3JvbV9lbnRyeV92YWxpZGAsIGBueF9nZXRfdGFibGVfZGVzY2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYW5kIGBueF9nZXRfZGF0YV9kZXNjYC4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFdlIG5lZWQgYE5FVFhFTl9OSUNgIGZvciBzdXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgb25lIHdlIG5lZWQuIFl1cCwgYENPTkZJR19ORVRYRU5fTklDPXlgIG9yIGA9bWAsIGFuZCBgUENJYCBhbmQgYEZXX0xPQURFUmAsIHdoaWNoIGFyZSBiYXNpY2FsbHkgc3RhbmRhcmQuIFNvLCBqdXN0IGBORVRYRU5fTklDYC4KClF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlnIG5hbWUuLi5ZZXAsIGBjb25maWcgTkVUWEVOX05JQ2AgaW4gdGhlIEtjb25maWcgZmlsZSBjb25maXJtcyBpdC4gQW5kLCBubyBvdGhlciByZWxhdGVkIGNvbmZpZ3MuCgpPa2F5LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgb3V0cHV0OgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzOioqCiAgICAqICAgYG5ldHhlbl9yb21fcmFuZ2VfdmFsaWRgCiAgICAqICAgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgCiAgICAqICAgYG5ldHhlbl9yb21fZW50cnlfdmFsaWRgCiAgICAqICAgYG54X2dldF90YWJsZV9kZXNjYAogICAgKiAgIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAKICAgICogICBgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRgCiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgCiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYAogICAgKiAgIGBueF9nZXRfZGF0YV9kZXNjYAoqICAgKipFbmFibGVDb25maWdzOioqCiAgICAqICAgYE5FVFhFTl9OSUNgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBmaXJtd2FyZSBwYXJzaW5nIGJvdW5kcyBjaGVja3MgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGdXp6aW5nIGlzIHBvc3NpYmxlIGJlY2F1c2UgYHJlcXVlc3RfZmlybXdhcmVgIGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGRldmljZSBwcm9iZSwgYW5kIHN5emthbGxlciBjYW4gcHJvdmlkZSBtYWxmb3JtZWQgZmlybXdhcmUgYmxvYnMuIEZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZhbGlkYXRlIHRoYXQgdGhlIG5ldyBjaGVja3MgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVFhFTl9OSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkJiMzNDssCiAgICAmIzM0O25ldHhlbl9yb21fdGFibGVfdmFsaWQmIzM0OywKICAgICYjMzQ7bmV0eGVuX3JvbV9lbnRyeV92YWxpZCYjMzQ7LAogICAgJiMzNDtueF9nZXRfdGFibGVfZGVzYyYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlciYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3JiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzJiMzNDssCiAgICAmIzM0O254X2dldF9kYXRhX2Rlc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIGZpcm13YXJlIHBhcnNpbmcgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGaXJtd2FyZSBwYXJzaW5nIGlzIHJlYWNoYWJsZSB2aWEgYHJlcXVlc3RfZmlybXdhcmVgIHdoZW4gdGhlIGRyaXZlciBwcm9iZXMgYSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgY2FuIGZ1enogdGhpcyBieSBpbmplY3RpbmcgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIHRoaXMgbG9naWMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgY29ycmVjdGx5IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUWEVOX05JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldHhlbl9yb21fcmFuZ2VfdmFsaWQmIzM0OywKICAgICYjMzQ7bmV0eGVuX3JvbV90YWJsZV92YWxpZCYjMzQ7LAogICAgJiMzNDtuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkJiMzNDssCiAgICAmIzM0O254X2dldF90YWJsZV9kZXNjJiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyJiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkJiMzNDssCiAgICAmIzM0O25ldHhlbl9uaWNfdmFsaWRhdGVfZncmIzM0OywKICAgICYjMzQ7bmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnMmIzM0OywKICAgICYjMzQ7bnhfZ2V0X2RhdGFfZGVzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgZmlybXdhcmUgcGFyc2luZyBpbiB0aGUgTmV0WGVuIE5JQyBkcml2ZXIuIEZpcm13YXJlIHBhcnNpbmcgaXMgcmVhY2hhYmxlIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAgd2hlbiB0aGUgZHJpdmVyIHByb2JlcyBhIGRldmljZSwgYW5kIHN5emthbGxlciBjYW4gZnV6eiB0aGlzIGJ5IGluamVjdGluZyBtYWxmb3JtZWQgZmlybXdhcmUgYmxvYnMuIEZ1enppbmcgdGhpcyBsb2dpYyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNrcyBjb3JyZWN0bHkgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDM6NDUuODczMzI1ODc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5NTA5NjQxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFhFTl9OSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkXCIsXG4gICAgXCJueF9nZXRfdGFibGVfZGVzY1wiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3XCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2Zmc1wiLFxuICAgIFwibnhfZ2V0X2RhdGFfZGVzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciBmaXJtd2FyZSBwYXJzaW5nIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRmlybXdhcmUgcGFyc2luZyBpcyByZWFjaGFibGUgdmlhIGByZXF1ZXN0X2Zpcm13YXJlYCB3aGVuIHRoZSBkcml2ZXIgcHJvYmVzIGEgZGV2aWNlLCBhbmQgc3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgYnkgaW5qZWN0aW5nIG1hbGZvcm1lZCBmaXJtd2FyZSBibG9icy4gRnV6emluZyB0aGlzIGxvZ2ljIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGNvcnJlY3RseSBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjQ1Ljg3MzMzMDUzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NjIxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQyNjAyNDkwMTdmMWQzNTM1NmNlYTU5Y2MzYmU0ZWYxMDkwY2QxYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDEzOjQzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXFxuaW5kZXggOGJjNGUyYjY5NTY5ZTUuLjU3MjJjNTVmYTBjY2U4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jXFxuQEAgLTU2MSwyMCArNTYxLDU1IEBAIGludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqbnhfZ2V0X3RhYmxlX2Rlc2MoY29uc3QgdTggKnVuaXJvbSwgaW50IHNlY3Rpb24pXFxuKyNkZWZpbmUgTlhfVU5JX0RJUl9UWVBFX09GRlxcdFxcdDhcXG4rI2RlZmluZSBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIFxcXFxcXG4rXFx0KChOWF9VTklfRElSX1RZUEVfT0ZGICsgMSkgKiBzaXplb2YodTMyKSlcXG4rI2RlZmluZSBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSBcXFxcXFxuK1xcdCgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgKyAxKSAqIHNpemVvZih1MzIpKVxcbitcXG4rc3RhdGljIGJvb2wgbmV0eGVuX3JvbV9yYW5nZV92YWxpZChzaXplX3Qgc2l6ZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4re1xcbitcXHRyZXR1cm4gb2ZmIFxcdTAwM2M9IHNpemUgXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2M9IHNpemUgLSBvZmY7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fdGFibGVfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBuLCB1MzIgZXN6KVxcbit7XFxuK1xcdGlmIChvZmYgXFx1MDAzZSBzaXplKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghZXN6KVxcbitcXHRcXHRyZXR1cm4gbiA9PSAwO1xcbitcXG4rXFx0cmV0dXJuIG4gXFx1MDAzYz0gKHNpemUgLSBvZmYpIC8gZXN6O1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKHNpemVfdCBzaXplLCB1MzIgb2ZmLCB1MzIgZXN6LCB1MzIgaWR4KVxcbit7XFxuK1xcdGlmICghZXN6IHx8IG9mZiBcXHUwMDNlIHNpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBpZHggXFx1MDAzYyAoc2l6ZSAtIG9mZikgLyBlc3o7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKlxcbitueF9nZXRfdGFibGVfZGVzYyhjb25zdCB1OCAqdW5pcm9tLCBzaXplX3QgZndfc2l6ZSwgaW50IHNlY3Rpb24pXFxuIHtcXG4tXFx0dWludDMyX3QgaTtcXG4gXFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFxcdTAwMjZ1bmlyb21bMF07XFxuLVxcdF9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdHUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VudW1fZW50cmllcyk7XFxuK1xcdHUzMiBlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VlbnRyeV9zaXplKTtcXG4rXFx0dTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KTtcXG4rXFx0dTMyIGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZW50cmllczsgaSsrKSB7XFxuK1xcdGlmIChlbnRyeV9zaXplIFxcdTAwM2MgTlhfVU5JX0RJUl9FTlRSWV9NSU5fU0laRSB8fFxcbitcXHQgICAgIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoZndfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRcXHRfX2xlMzIgb2ZmcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KSArXFxuLVxcdFxcdFxcdFxcdChpICogY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VlbnRyeV9zaXplKSk7XFxuLVxcdFxcdF9fbGUzMiB0YWJfdHlwZSA9IGNwdV90b19sZTMyKCooKHUzMiAqKVxcdTAwMjZ1bmlyb21bb2Zmc10gKyA4KSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0c2l6ZV90IG9mZnMgPSBmaW5kZXggKyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplO1xcbitcXHRcXHR1MzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilcXHUwMDI2dW5pcm9tW29mZnNdICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0TlhfVU5JX0RJUl9UWVBFX09GRikpO1xcbiBcXG4gXFx0XFx0aWYgKHRhYl90eXBlID09IHNlY3Rpb24pXFxuLVxcdFxcdFxcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFxcdTAwMjZ1bmlyb21bb2Zmc107XFxuK1xcdFxcdFxcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopXFx1MDAyNnVuaXJvbVtvZmZzXTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTU4NiwyMCArNjIxLDE4IEBAIHN0YXRpYyBpbnRcXG4gbmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiB7XFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFxcdTAwMjZ1bmlyb21bMF07XFxuK1xcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKVxcdTAwMjZ1bmlyb21bMF07XFxuIFxcdHUzMiBmd19maWxlX3NpemUgPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZTtcXG4tXFx0dTMyIHRhYl9zaXplO1xcbi1cXHRfX2xlMzIgZW50cmllcztcXG4tXFx0X19sZTMyIGVudHJ5X3NpemU7XFxuK1xcdHUzMiBlbnRyaWVzLCBlbnRyeV9zaXplLCBmaW5kZXg7XFxuIFxcbiBcXHRpZiAoZndfZmlsZV9zaXplIFxcdTAwM2MgUUxDTklDX0ZJTEVIRUFERVJfU0laRSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVxcdTAwM2VudW1fZW50cmllcyk7XFxuIFxcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXFx1MDAzZWVudHJ5X3NpemUpO1xcbi1cXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KSArIChlbnRyaWVzICogZW50cnlfc2l6ZSk7XFxuK1xcdGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cXHUwMDNlZmluZGV4KTtcXG4gXFxuLVxcdGlmIChmd19maWxlX3NpemUgXFx1MDAzYyB0YWJfc2l6ZSlcXG4rXFx0aWYgKCFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGZ3X2ZpbGVfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjExLDMwICs2NDQsMzAgQEAgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xcbiBcXHRzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqZGVzY3I7XFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4tXFx0X19sZTMyIGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVxcdTAwMjZ1bmlyb21bYWRhcHRlci1cXHUwMDNlZmlsZV9wcmRfb2ZmXSArXFxuLVxcdFxcdFxcdFxcdE5YX1VOSV9CT09UTERfSURYX09GRikpO1xcbi1cXHR1MzIgb2ZmcztcXG4tXFx0dTMyIHRhYl9zaXplO1xcbi1cXHR1MzIgZGF0YV9zaXplO1xcbitcXHR1MzIgZGF0YV9sZW4sIGRhdGFfb2ZmLCBlbnRyeV9zaXplLCBmaW5kZXgsIGlkeDtcXG4rXFx0dTMyIHNlY3Rpb24gPSBOWF9VTklfRElSX1NFQ1RfQk9PVExEO1xcbitcXHRzaXplX3Qgb2ZmcztcXG4gXFxuLVxcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfQk9PVExEKTtcXG4rXFx0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVthZGFwdGVyLVxcdTAwM2VmaWxlX3ByZF9vZmZdICtcXG4rXFx0XFx0XFx0ICAgICBOWF9VTklfQk9PVExEX0lEWF9PRkYpKTtcXG4rXFx0dGFiX2Rlc2MgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBzZWN0aW9uKTtcXG4gXFxuIFxcdGlmICghdGFiX2Rlc2MpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cXHUwMDNlZmluZGV4KSArXFxuLVxcdFxcdFxcdChjcHVfdG9fbGUzMih0YWJfZGVzYy1cXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICsgMSkpO1xcbi1cXG4tXFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplIFxcdTAwM2MgdGFiX3NpemUpXFxuK1xcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cXHUwMDNlZW50cnlfc2l6ZSk7XFxuK1xcdGZpbmRleCA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VmaW5kZXgpO1xcbitcXHRpZiAoZW50cnlfc2l6ZSBcXHUwMDNjIHNpemVvZigqZGVzY3IpIHx8XFxuK1xcdCAgICAhbmV0eGVuX3JvbV9lbnRyeV92YWxpZChhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZSwgZmluZGV4LCBlbnRyeV9zaXplLFxcbitcXHRcXHRcXHRcXHQgICAgIGlkeCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VmaW5kZXgpICtcXG4tXFx0XFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VlbnRyeV9zaXplKSAqIChpZHgpKTtcXG4rXFx0b2ZmcyA9IGZpbmRleCArIChzaXplX3QpZW50cnlfc2l6ZSAqIGlkeDtcXG4gXFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcXHUwMDI2dW5pcm9tW29mZnNdO1xcbitcXHRkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpO1xcbitcXHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VzaXplKTtcXG4gXFxuLVxcdGRhdGFfc2l6ZSA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpICsgY3B1X3RvX2xlMzIoZGVzY3ItXFx1MDAzZXNpemUpO1xcbi1cXG4tXFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplIFxcdTAwM2MgZGF0YV9zaXplKVxcbitcXHRpZiAoIW5ldHhlbl9yb21fcmFuZ2VfdmFsaWQoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTY0NiwyOSArNjc5LDMwIEBAIG5ldHhlbl9uaWNfdmFsaWRhdGVfZncoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xcbiBcXHRzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqZGVzY3I7XFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4tXFx0X19sZTMyIGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVxcdTAwMjZ1bmlyb21bYWRhcHRlci1cXHUwMDNlZmlsZV9wcmRfb2ZmXSArXFxuLVxcdFxcdFxcdFxcdE5YX1VOSV9GSVJNV0FSRV9JRFhfT0ZGKSk7XFxuLVxcdHUzMiBvZmZzO1xcbi1cXHR1MzIgdGFiX3NpemU7XFxuLVxcdHUzMiBkYXRhX3NpemU7XFxuK1xcdHUzMiBkYXRhX2xlbiwgZGF0YV9vZmYsIGVudHJ5X3NpemUsIGZpbmRleCwgaWR4O1xcbitcXHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9GVztcXG4rXFx0c2l6ZV90IG9mZnM7XFxuIFxcbi1cXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX0ZXKTtcXG4rXFx0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVthZGFwdGVyLVxcdTAwM2VmaWxlX3ByZF9vZmZdICtcXG4rXFx0XFx0XFx0ICAgICBOWF9VTklfRklSTVdBUkVfSURYX09GRikpO1xcbitcXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUsIHNlY3Rpb24pO1xcbiBcXG4gXFx0aWYgKCF0YWJfZGVzYylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHR0YWJfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VmaW5kZXgpICtcXG4tXFx0XFx0XFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VlbnRyeV9zaXplKSAqIChpZHggKyAxKSk7XFxuLVxcbi1cXHRpZiAoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUgXFx1MDAzYyB0YWJfc2l6ZSlcXG4rXFx0ZW50cnlfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVxcdTAwM2VlbnRyeV9zaXplKTtcXG4rXFx0ZmluZGV4ID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXFx1MDAzZWZpbmRleCk7XFxuK1xcdGlmIChlbnRyeV9zaXplIFxcdTAwM2Mgc2l6ZW9mKCpkZXNjcikgfHxcXG4rXFx0ICAgICFuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBmaW5kZXgsIGVudHJ5X3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgaWR4KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRvZmZzID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXFx1MDAzZWZpbmRleCkgK1xcbi1cXHRcXHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXFx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xcbitcXHRvZmZzID0gZmluZGV4ICsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xcbiBcXHRkZXNjciA9IChzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqKVxcdTAwMjZ1bmlyb21bb2Zmc107XFxuLVxcdGRhdGFfc2l6ZSA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpICsgY3B1X3RvX2xlMzIoZGVzY3ItXFx1MDAzZXNpemUpO1xcbitcXHRkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VmaW5kZXgpO1xcbitcXHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVxcdTAwM2VzaXplKTtcXG4gXFxuLVxcdGlmIChhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIGRhdGFfc2l6ZSlcXG4rXFx0aWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBkYXRhX29mZiwgZGF0YV9sZW4pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC02ODIsMzkgKzcxNiwzNyBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2ZmcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcdGNvbnN0IHU4ICp1bmlyb20gPSBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlZGF0YTtcXG4gXFx0aW50IG1uX3ByZXNlbnQgPSAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci1cXHUwMDNlYWh3LnJldmlzaW9uX2lkKSkgP1xcbiBcXHRcXHRcXHQxIDogbmV0eGVuX3AzX2hhc19tbihhZGFwdGVyKTtcXG4tXFx0X19sZTMyIGVudHJpZXM7XFxuLVxcdF9fbGUzMiBlbnRyeV9zaXplO1xcbi1cXHR1MzIgdGFiX3NpemU7XFxuLVxcdHUzMiBpO1xcbitcXHR1MzIgZW50cmllcywgZW50cnlfc2l6ZSwgZmluZGV4LCBpO1xcbitcXHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTDtcXG4gXFxuLVxcdHB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTCk7XFxuK1xcdHB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXFx1MDAzZWZ3LVxcdTAwM2VzaXplLCBzZWN0aW9uKTtcXG4gXFx0aWYgKHB0YWJfZGVzY3IgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRlbnRyaWVzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlbnVtX2VudHJpZXMpO1xcbiBcXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlZW50cnlfc2l6ZSk7XFxuLVxcdHRhYl9zaXplID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlZmluZGV4KSArIChlbnRyaWVzICogZW50cnlfc2l6ZSk7XFxuLVxcbi1cXHRpZiAoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUgXFx1MDAzYyB0YWJfc2l6ZSlcXG4rXFx0ZmluZGV4ID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cXHUwMDNlZmluZGV4KTtcXG4rXFx0aWYgKGVudHJ5X3NpemUgXFx1MDAzYyBOWF9VTklfUFJPRFVDVF9FTlRSWV9NSU5fU0laRSB8fFxcbitcXHQgICAgIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoYWRhcHRlci1cXHUwMDNlZnctXFx1MDAzZXNpemUsIGZpbmRleCwgZW50cmllcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnRyeV9zaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBub21uOlxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZW50cmllczsgaSsrKSB7XFxuLVxcbi1cXHRcXHRfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldiwgb2ZmcztcXG4rXFx0XFx0c2l6ZV90IG9mZnM7XFxuK1xcdFxcdF9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2O1xcbiBcXHRcXHR1OCBjaGlwcmV2ID0gYWRhcHRlci1cXHUwMDNlYWh3LnJldmlzaW9uX2lkO1xcbiBcXHRcXHR1aW50MzJfdCBmbGFnYml0O1xcbiBcXG4tXFx0XFx0b2ZmcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItXFx1MDAzZWZpbmRleCkgK1xcbi1cXHRcXHRcXHRcXHQoaSAqIGNwdV90b19sZTMyKHB0YWJfZGVzY3ItXFx1MDAzZWVudHJ5X3NpemUpKTtcXG4rXFx0XFx0b2ZmcyA9IGZpbmRleCArIChzaXplX3QpaSAqIGVudHJ5X3NpemU7XFxuIFxcdFxcdGZsYWdzID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVtvZmZzXSArIE5YX1VOSV9GTEFHU19PRkYpKTtcXG4gXFx0XFx0ZmlsZV9jaGlwcmV2ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXFx1MDAyNnVuaXJvbVtvZmZzXSArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcXG4gXFxuIFxcdFxcdGZsYWdiaXQgPSBtbl9wcmVzZW50ID8gMSA6IDI7XFxuIFxcbiBcXHRcXHRpZiAoKGNoaXByZXYgPT0gZmlsZV9jaGlwcmV2KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQoKDFVTEwgXFx1MDAzY1xcdTAwM2MgZmxhZ2JpdCkgXFx1MDAyNiBmbGFncykpIHtcXG4rXFx0XFx0ICAgICgoMVVMTCBcXHUwMDNjXFx1MDAzYyBmbGFnYml0KSBcXHUwMDI2IGZsYWdzKSkge1xcbiBcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VmaWxlX3ByZF9vZmYgPSBvZmZzO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbkBAIC03NjcsNyArNzk5LDcgQEAgc3RhdGljIHN0cnVjdCB1bmlfZGF0YV9kZXNjICpueF9nZXRfZGF0YV9kZXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICp0YWJfZGVzYztcXG4gXFx0X19sZTMyIG9mZnM7XFxuIFxcbi1cXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgc2VjdGlvbik7XFxuK1xcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVxcdTAwM2Vmdy1cXHUwMDNlc2l6ZSwgc2VjdGlvbik7XFxuIFxcbiBcXHRpZiAodGFiX2Rlc2MgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjQ2LjMwODc0NzYzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDc0MjExNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFhFTl9OSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkXCIsXG4gICAgXCJuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkXCIsXG4gICAgXCJueF9nZXRfdGFibGVfZGVzY1wiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3XCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2Zmc1wiLFxuICAgIFwibnhfZ2V0X2RhdGFfZGVzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciBmaXJtd2FyZSBwYXJzaW5nIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRmlybXdhcmUgcGFyc2luZyBpcyByZWFjaGFibGUgdmlhIGByZXF1ZXN0X2Zpcm13YXJlYCB3aGVuIHRoZSBkcml2ZXIgcHJvYmVzIGEgZGV2aWNlLCBhbmQgc3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgYnkgaW5qZWN0aW5nIG1hbGZvcm1lZCBmaXJtd2FyZSBibG9icy4gRnV6emluZyB0aGlzIGxvZ2ljIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGNvcnJlY3RseSBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQyNjAyNDkwMTdmMWQzNTM1NmNlYTU5Y2MzYmU0ZWYxMDkwY2QxYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDM6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1xuaW5kZXggOGJjNGUyYjY5NTY5ZTUuLjU3MjJjNTVmYTBjY2U4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1xuQEAgLTU2MSwyMCArNTYxLDU1IEBAIGludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKm54X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIGludCBzZWN0aW9uKVxuKyNkZWZpbmUgTlhfVU5JX0RJUl9UWVBFX09GRlx0XHQ4XG4rI2RlZmluZSBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIFxcXG4rXHQoKE5YX1VOSV9ESVJfVFlQRV9PRkYgKyAxKSAqIHNpemVvZih1MzIpKVxuKyNkZWZpbmUgTlhfVU5JX1BST0RVQ1RfRU5UUllfTUlOX1NJWkUgXFxcbitcdCgoTlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgKyAxKSAqIHNpemVvZih1MzIpKVxuK1xuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fcmFuZ2VfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBsZW4pXG4re1xuK1x0cmV0dXJuIG9mZiBcdTAwM2M9IHNpemUgXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2M9IHNpemUgLSBvZmY7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fdGFibGVfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBuLCB1MzIgZXN6KVxuK3tcbitcdGlmIChvZmYgXHUwMDNlIHNpemUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghZXN6KVxuK1x0XHRyZXR1cm4gbiA9PSAwO1xuK1xuK1x0cmV0dXJuIG4gXHUwMDNjPSAoc2l6ZSAtIG9mZikgLyBlc3o7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5ldHhlbl9yb21fZW50cnlfdmFsaWQoc2l6ZV90IHNpemUsIHUzMiBvZmYsIHUzMiBlc3osIHUzMiBpZHgpXG4re1xuK1x0aWYgKCFlc3ogfHwgb2ZmIFx1MDAzZSBzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gaWR4IFx1MDAzYyAoc2l6ZSAtIG9mZikgLyBlc3o7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKlxuK254X2dldF90YWJsZV9kZXNjKGNvbnN0IHU4ICp1bmlyb20sIHNpemVfdCBmd19zaXplLCBpbnQgc2VjdGlvbilcbiB7XG4tXHR1aW50MzJfdCBpO1xuIFx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbi1cdF9fbGUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbitcdHUzMiBlbnRyaWVzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZW51bV9lbnRyaWVzKTtcbitcdHUzMiBlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWVudHJ5X3NpemUpO1xuK1x0dTMyIGZpbmRleCA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VmaW5kZXgpO1xuK1x0dTMyIGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcbitcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBOWF9VTklfRElSX0VOVFJZX01JTl9TSVpFIHx8XG4rXHQgICAgIW5ldHhlbl9yb21fdGFibGVfdmFsaWQoZndfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRcdF9fbGUzMiBvZmZzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWZpbmRleCkgK1xuLVx0XHRcdFx0KGkgKiBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZW50cnlfc2l6ZSkpO1xuLVx0XHRfX2xlMzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilcdTAwMjZ1bmlyb21bb2Zmc10gKyA4KSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcbitcdFx0c2l6ZV90IG9mZnMgPSBmaW5kZXggKyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplO1xuK1x0XHR1MzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKilcdTAwMjZ1bmlyb21bb2Zmc10gK1xuK1x0XHRcdFx0XHRcdE5YX1VOSV9ESVJfVFlQRV9PRkYpKTtcbiBcbiBcdFx0aWYgKHRhYl90eXBlID09IHNlY3Rpb24pXG4tXHRcdFx0cmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikgXHUwMDI2dW5pcm9tW29mZnNdO1xuK1x0XHRcdHJldHVybiAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopXHUwMDI2dW5pcm9tW29mZnNdO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtNTg2LDIwICs2MjEsMTggQEAgc3RhdGljIGludFxuIG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRjb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IHVuaV90YWJsZV9kZXNjICpkaXJlY3RvcnkgPSAoc3RydWN0IHVuaV90YWJsZV9kZXNjICopIFx1MDAyNnVuaXJvbVswXTtcbitcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqZGlyZWN0b3J5ID0gKHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqKVx1MDAyNnVuaXJvbVswXTtcbiBcdHUzMiBmd19maWxlX3NpemUgPSBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemU7XG4tXHR1MzIgdGFiX3NpemU7XG4tXHRfX2xlMzIgZW50cmllcztcbi1cdF9fbGUzMiBlbnRyeV9zaXplO1xuK1x0dTMyIGVudHJpZXMsIGVudHJ5X3NpemUsIGZpbmRleDtcbiBcbiBcdGlmIChmd19maWxlX3NpemUgXHUwMDNjIFFMQ05JQ19GSUxFSEVBREVSX1NJWkUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZW50cmllcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS1cdTAwM2VudW1fZW50cmllcyk7XG4gXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LVx1MDAzZWVudHJ5X3NpemUpO1xuLVx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZmluZGV4KSArIChlbnRyaWVzICogZW50cnlfc2l6ZSk7XG4rXHRmaW5kZXggPSBjcHVfdG9fbGUzMihkaXJlY3RvcnktXHUwMDNlZmluZGV4KTtcbiBcbi1cdGlmIChmd19maWxlX3NpemUgXHUwMDNjIHRhYl9zaXplKVxuK1x0aWYgKCFuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkKGZ3X2ZpbGVfc2l6ZSwgZmluZGV4LCBlbnRyaWVzLCBlbnRyeV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02MTEsMzAgKzY0NCwzMCBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjO1xuIFx0c3RydWN0IHVuaV9kYXRhX2Rlc2MgKmRlc2NyO1xuIFx0Y29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlZGF0YTtcbi1cdF9fbGUzMiBpZHggPSBjcHVfdG9fbGUzMigqKChpbnQgKilcdTAwMjZ1bmlyb21bYWRhcHRlci1cdTAwM2VmaWxlX3ByZF9vZmZdICtcbi1cdFx0XHRcdE5YX1VOSV9CT09UTERfSURYX09GRikpO1xuLVx0dTMyIG9mZnM7XG4tXHR1MzIgdGFiX3NpemU7XG4tXHR1MzIgZGF0YV9zaXplO1xuK1x0dTMyIGRhdGFfbGVuLCBkYXRhX29mZiwgZW50cnlfc2l6ZSwgZmluZGV4LCBpZHg7XG4rXHR1MzIgc2VjdGlvbiA9IE5YX1VOSV9ESVJfU0VDVF9CT09UTEQ7XG4rXHRzaXplX3Qgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfQk9PVExEKTtcbitcdGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVthZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZl0gK1xuK1x0XHRcdCAgICAgTlhfVU5JX0JPT1RMRF9JRFhfT0ZGKSk7XG4rXHR0YWJfZGVzYyA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplLCBzZWN0aW9uKTtcbiBcbiBcdGlmICghdGFiX2Rlc2MpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpICtcbi1cdFx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4ICsgMSkpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgdGFiX3NpemUpXG4rXHRlbnRyeV9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSk7XG4rXHRmaW5kZXggPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpO1xuK1x0aWYgKGVudHJ5X3NpemUgXHUwMDNjIHNpemVvZigqZGVzY3IpIHx8XG4rXHQgICAgIW5ldHhlbl9yb21fZW50cnlfdmFsaWQoYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VzaXplLCBmaW5kZXgsIGVudHJ5X3NpemUsXG4rXHRcdFx0XHQgICAgIGlkeCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0b2ZmcyA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWZpbmRleCkgK1xuLVx0XHQoY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZW50cnlfc2l6ZSkgKiAoaWR4KSk7XG4rXHRvZmZzID0gZmluZGV4ICsgKHNpemVfdCllbnRyeV9zaXplICogaWR4O1xuIFx0ZGVzY3IgPSAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKilcdTAwMjZ1bmlyb21bb2Zmc107XG4rXHRkYXRhX29mZiA9IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZWZpbmRleCk7XG4rXHRkYXRhX2xlbiA9IGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuIFxuLVx0ZGF0YV9zaXplID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlZmluZGV4KSArIGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgZGF0YV9zaXplKVxuK1x0aWYgKCFuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgZGF0YV9vZmYsIGRhdGFfbGVuKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC02NDYsMjkgKzY3OSwzMCBAQCBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcbiBcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7XG4gXHRzdHJ1Y3QgdW5pX2RhdGFfZGVzYyAqZGVzY3I7XG4gXHRjb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci1cdTAwM2Vmdy1cdTAwM2VkYXRhO1xuLVx0X19sZTMyIGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVthZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZl0gK1xuLVx0XHRcdFx0TlhfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpKTtcbi1cdHUzMiBvZmZzO1xuLVx0dTMyIHRhYl9zaXplO1xuLVx0dTMyIGRhdGFfc2l6ZTtcbitcdHUzMiBkYXRhX2xlbiwgZGF0YV9vZmYsIGVudHJ5X3NpemUsIGZpbmRleCwgaWR4O1xuK1x0dTMyIHNlY3Rpb24gPSBOWF9VTklfRElSX1NFQ1RfRlc7XG4rXHRzaXplX3Qgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBOWF9VTklfRElSX1NFQ1RfRlcpO1xuK1x0aWR4ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW2FkYXB0ZXItXHUwMDNlZmlsZV9wcmRfb2ZmXSArXG4rXHRcdFx0ICAgICBOWF9VTklfRklSTVdBUkVfSURYX09GRikpO1xuK1x0dGFiX2Rlc2MgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgc2VjdGlvbik7XG4gXG4gXHRpZiAoIXRhYl9kZXNjKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHRhYl9zaXplID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZmluZGV4KSArXG4tXHRcdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCArIDEpKTtcbi1cbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIHRhYl9zaXplKVxuK1x0ZW50cnlfc2l6ZSA9IGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpO1xuK1x0ZmluZGV4ID0gY3B1X3RvX2xlMzIodGFiX2Rlc2MtXHUwMDNlZmluZGV4KTtcbitcdGlmIChlbnRyeV9zaXplIFx1MDAzYyBzaXplb2YoKmRlc2NyKSB8fFxuK1x0ICAgICFuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgZmluZGV4LCBlbnRyeV9zaXplLFxuK1x0XHRcdFx0ICAgICBpZHgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG9mZnMgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy1cdTAwM2VmaW5kZXgpICtcbi1cdFx0KGNwdV90b19sZTMyKHRhYl9kZXNjLVx1MDAzZWVudHJ5X3NpemUpICogKGlkeCkpO1xuK1x0b2ZmcyA9IGZpbmRleCArIChzaXplX3QpZW50cnlfc2l6ZSAqIGlkeDtcbiBcdGRlc2NyID0gKHN0cnVjdCB1bmlfZGF0YV9kZXNjICopXHUwMDI2dW5pcm9tW29mZnNdO1xuLVx0ZGF0YV9zaXplID0gY3B1X3RvX2xlMzIoZGVzY3ItXHUwMDNlZmluZGV4KSArIGNwdV90b19sZTMyKGRlc2NyLVx1MDAzZXNpemUpO1xuK1x0ZGF0YV9vZmYgPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VmaW5kZXgpO1xuK1x0ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihkZXNjci1cdTAwM2VzaXplKTtcbiBcbi1cdGlmIChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUgXHUwMDNjIGRhdGFfc2l6ZSlcbitcdGlmICghbmV0eGVuX3JvbV9yYW5nZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGRhdGFfb2ZmLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNjgyLDM5ICs3MTYsMzcgQEAgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxuIFx0Y29uc3QgdTggKnVuaXJvbSA9IGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlZGF0YTtcbiBcdGludCBtbl9wcmVzZW50ID0gKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItXHUwMDNlYWh3LnJldmlzaW9uX2lkKSkgP1xuIFx0XHRcdDEgOiBuZXR4ZW5fcDNfaGFzX21uKGFkYXB0ZXIpO1xuLVx0X19sZTMyIGVudHJpZXM7XG4tXHRfX2xlMzIgZW50cnlfc2l6ZTtcbi1cdHUzMiB0YWJfc2l6ZTtcbi1cdHUzMiBpO1xuK1x0dTMyIGVudHJpZXMsIGVudHJ5X3NpemUsIGZpbmRleCwgaTtcbitcdHUzMiBzZWN0aW9uID0gTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMO1xuIFxuLVx0cHRhYl9kZXNjciA9IG54X2dldF90YWJsZV9kZXNjKHVuaXJvbSwgTlhfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMKTtcbitcdHB0YWJfZGVzY3IgPSBueF9nZXRfdGFibGVfZGVzYyh1bmlyb20sIGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSwgc2VjdGlvbik7XG4gXHRpZiAocHRhYl9kZXNjciA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVudHJpZXMgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZW51bV9lbnRyaWVzKTtcbiBcdGVudHJ5X3NpemUgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWVudHJ5X3NpemUpO1xuLVx0dGFiX3NpemUgPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWZpbmRleCkgKyAoZW50cmllcyAqIGVudHJ5X3NpemUpO1xuLVxuLVx0aWYgKGFkYXB0ZXItXHUwMDNlZnctXHUwMDNlc2l6ZSBcdTAwM2MgdGFiX3NpemUpXG4rXHRmaW5kZXggPSBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLVx1MDAzZWZpbmRleCk7XG4rXHRpZiAoZW50cnlfc2l6ZSBcdTAwM2MgTlhfVU5JX1BST0RVQ1RfRU5UUllfTUlOX1NJWkUgfHxcbitcdCAgICAhbmV0eGVuX3JvbV90YWJsZV92YWxpZChhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIGZpbmRleCwgZW50cmllcyxcbitcdFx0XHRcdCAgICAgZW50cnlfc2l6ZSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIG5vbW46XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbnRyaWVzOyBpKyspIHtcbi1cbi1cdFx0X19sZTMyIGZsYWdzLCBmaWxlX2NoaXByZXYsIG9mZnM7XG4rXHRcdHNpemVfdCBvZmZzO1xuK1x0XHRfX2xlMzIgZmxhZ3MsIGZpbGVfY2hpcHJldjtcbiBcdFx0dTggY2hpcHJldiA9IGFkYXB0ZXItXHUwMDNlYWh3LnJldmlzaW9uX2lkO1xuIFx0XHR1aW50MzJfdCBmbGFnYml0O1xuIFxuLVx0XHRvZmZzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VmaW5kZXgpICtcbi1cdFx0XHRcdChpICogY3B1X3RvX2xlMzIocHRhYl9kZXNjci1cdTAwM2VlbnRyeV9zaXplKSk7XG4rXHRcdG9mZnMgPSBmaW5kZXggKyAoc2l6ZV90KWkgKiBlbnRyeV9zaXplO1xuIFx0XHRmbGFncyA9IGNwdV90b19sZTMyKCooKGludCAqKVx1MDAyNnVuaXJvbVtvZmZzXSArIE5YX1VOSV9GTEFHU19PRkYpKTtcbiBcdFx0ZmlsZV9jaGlwcmV2ID0gY3B1X3RvX2xlMzIoKigoaW50ICopXHUwMDI2dW5pcm9tW29mZnNdICtcbi1cdFx0XHRcdFx0XHRcdE5YX1VOSV9DSElQX1JFVl9PRkYpKTtcbitcdFx0XHRcdFx0XHQgICAgTlhfVU5JX0NISVBfUkVWX09GRikpO1xuIFxuIFx0XHRmbGFnYml0ID0gbW5fcHJlc2VudCA/IDEgOiAyO1xuIFxuIFx0XHRpZiAoKGNoaXByZXYgPT0gZmlsZV9jaGlwcmV2KSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0KCgxVUxMIFx1MDAzY1x1MDAzYyBmbGFnYml0KSBcdTAwMjYgZmxhZ3MpKSB7XG4rXHRcdCAgICAoKDFVTEwgXHUwMDNjXHUwMDNjIGZsYWdiaXQpIFx1MDAyNiBmbGFncykpIHtcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZWZpbGVfcHJkX29mZiA9IG9mZnM7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbkBAIC03NjcsNyArNzk5LDcgQEAgc3RhdGljIHN0cnVjdCB1bmlfZGF0YV9kZXNjICpueF9nZXRfZGF0YV9kZXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcbiBcdHN0cnVjdCB1bmlfdGFibGVfZGVzYyAqdGFiX2Rlc2M7XG4gXHRfX2xlMzIgb2ZmcztcbiBcbi1cdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBzZWN0aW9uKTtcbitcdHRhYl9kZXNjID0gbnhfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBhZGFwdGVyLVx1MDAzZWZ3LVx1MDAzZXNpemUsIHNlY3Rpb24pO1xuIFxuIFx0aWYgKHRhYl9kZXNjID09IE5VTEwpXG4gXHRcdHJldHVybiBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDM6NDYuMzA4NzQ5Mzk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2NjI4NzgxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRYZW4gTklDIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgbmV0eGVuYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmNgLiBUaGlzIGlzIGZvY3VzZWQgb24gZW5oYW5jaW5nIHRoZSBzZWN1cml0eSBvZiBmaXJtd2FyZSBwYXJzaW5nLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZXkndmUgaW1wbGVtZW50ZWQgYm91bmRzIGNoZWNraW5nLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZmlybXdhcmUgdnVsbmVyYWJpbGl0aWVzLiBUaGV5J3ZlIHVwZGF0ZWQgc2V2ZXJhbCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHBhcnNpbmcgcHJvY2VzczogYG54X2dldF90YWJsZV9kZXNjYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgLCBhbmQgYG54X2dldF9kYXRhX2Rlc2NgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGljaCBhcmVhcyB0aGV5J3ZlIGltcHJvdmVkLlxuXG5UaGUgY29udGV4dCBoZXJlIGlzIGEgUUxvZ2ljL05ldFhlbiBHYkUgTklDIGRyaXZlci4gVGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYW5kIGludGVycHJldGluZyBmaXJtd2FyZSwgZWl0aGVyIGZyb20gYSBmaWxlIG9yIGRpcmVjdGx5IGZyb20gUk9NLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgYXR0YWNrIHN1cmZhY2VzLiBIb3cgdnVsbmVyYWJsZSBpcyB0aGlzIHRvIGEgY29tcHJvbWlzZWQgZmlybXdhcmUgaW1hZ2U/IElzIHRoaXMgc29tZXRoaW5nIHRoYXQncyBldmVuIGV4cGxvaXRhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERvZXMgdGhpcyBkcml2ZXIgYWN0dWFsbHkgKnJlcXVpcmUqIHRoZSBoYXJkd2FyZSB0byBiZSBwcmVzZW50IHRvIHByb2JlIGFuZCBsb2FkIHRoZSBmaXJtd2FyZSwgb3IgaXMgdGhlcmUgYSBzb2Z0d2FyZSBlbXVsYXRvciBvciBwcm9iZSBpbmplY3Rpb24gbWVjaGFuaXNtIHRoYXQgY291bGQgb3BlbiB1cCBhdHRhY2sgdmVjdG9ycz8gSXTigJlzIGNydWNpYWwgdG8ga25vdyBob3cgYSBtYWxpY2lvdXMgYWN0b3IgY291bGQgZXZlbiB0cmlnZ2VyIHRoaXMgY29kZSBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBuZXR4ZW5gIGlzIGEgUENJIGRyaXZlciBzaW5jZSB0aGF0IGdpdmVzIG1lIHNvbWUgY2x1ZXMgb24gcmVhY2hhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDQ6MzguOTcxNjI5MTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTc0ODUxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlci4qbmV0eGVuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ0OD1zdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ1NS0jZW5kaWZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjM0NTY6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNm5ldHhlbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ0OjQxLjcyOTEyMDE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzgxMzA1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJIERyaXZlciBBc3Nlc3NtZW50IGFuZCBGdXp6aW5nIEZlYXNpYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXMsIGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IGl0PyBTeXprYWxsZXIgaGFzIHNob3duIHByb21pc2UgaW4gdGhlIHBhc3Qgd2l0aCBQQ0kgZGV2aWNlIGVtdWxhdGlvbjsgSSd2ZSBzZWVuIGl0IHdvcmsgd2l0aCB0aGluZ3MgbGlrZSB2aGNpIG9yIGV2ZW4gdGhlIGUxMDAwZS4gQnV0IHRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIGl0IG9mZmVycyBzdXBwb3J0IGZvciB0aGlzIHBhcnRpY3VsYXIgbmV0eGVuIGRldmljZS4gVGhhdCdzIHRoZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBleGlzdGluZyBTeXprYWxsZXIgZGVzY3JpcHRpb25zIG9yIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBmb3IgdGhpcyBuZXR4ZW4gaGFyZHdhcmUuIFRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDQ6NDYuODY3MjUyNTk0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzQ3NDI3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0eGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ0OjQ3LjA4NDczNzA4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NzkyOTAyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIG5ldHhlbiBEcml2ZXIqKlxuXG5Pa2F5LCBmaXJzdCB0aG91Z2h0OiBXaGVyZSAqaXMqIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBzeXprYWxsZXIgdGFyZ2V0PyBXYWl0LCBpdCdzIG5vdCBpbiB0aGUga2VybmVsIHNvdXJjZS4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGEgcGF0aCB0byBhY3R1YWxseSAqaGl0KiB0aGlzIGNvZGUuIEdlbmVyYWxseSwgUENJIGRyaXZlcnMgYXJlIGEgcGFpbiB0byBmdXp6IGRpcmVjdGx5IHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIGluIFFFTVUgb3IgYSBzcGVjaWFsIGtlcm5lbCBtZWNoYW5pc20gb3IsIHBlcmhhcHMsIGEgZ2VuZXJpYyBQQ0kgZnV6emVyLlxuXG5IbW0sIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGdlbmVyaWMgZm9yIFBDST8gU29tZXRoaW5nIGxpa2UgYHN5el9wY2l2ZmlvYCBvciBpbmplY3RpbmcgZGV2aWNlcyB2aWEgYSBkdW1teSBidXM/IFdhaXQsIGRvZXMgc3l6a2FsbGVyIGV4cG9zZSBhIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsPyBObywgbm8sIHN5emthbGxlciBtb3N0bHkgZnV6emVzIFBDSSB0aHJvdWdoIGB2ZmlvYCBvciB0aGUgYHBjaWAgc3Vic3lzdGVtIGlmIHRoZXkncmUgZW5hYmxlZC4gSXQgdXN1YWxseSBkb2Vzbid0IGRpZyBkZWVwIGludG8gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB1bmxlc3MgUUVNVSBlbXVsYXRlcyB0aGVtIChsaWtlIGUxMDAwZSwgcnRsODEzOSwgdGhvc2Uga2luZHMgb2YgZGV2aWNlcywgb3IgaWYgdGhlcmUncyBhIHNvZnR3YXJlIGRyaXZlciBsaWtlIGB2aGNpYCkuXG5cbkxldCBtZSBzZWUgaWYgUUVNVSBldmVuICpzdXBwb3J0cyogbmV0eGVuLiBRRU1VIG5ldHdvcmsgZGV2aWNlc+KApiBlMTAwMCwgZTEwMDBlLCBpZ2IsIGV0Yy4gTm9wZSwgbm8gbmV0eGVuIG9uIHRoYXQgbGlzdC4gRGFtbi5cblxuU28sIGluIGEgc3RhbmRhcmQgVk0sIHdpdGhvdXQgdGhlICphY3R1YWwqIGhhcmR3YXJlLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaXMgbmV2ZXIgZ29pbmcgdG8gYmUgY2FsbGVkLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgYHZoY2lgLWxpa2UgYXBwcm9hY2ggZm9yIFVTQiwgYnV0IGZvciBQQ0ksIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgbm8sIGl0IHNlZW1zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBpcyB0aGUgd2F5IHRvIGRvIGl0LiBXYWl0LCBkb2VzIHN5emthbGxlciBldmVuIGhhdmUgYSBQQ0kgZnV6emVyIHVzaW5nIGB2ZmlvYD8gTm9wZSwgaXMgdGhlcmUgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGw/IE5vLlxuXG5BY3R1YWxseSwgZGlkbuKAmXQgc3l6a2FsbGVyICpyZWNlbnRseSogYWRkIHN1cHBvcnQgZm9yIGZ1enppbmcgUENJIGRyaXZlcnMgdmlhIGEgZHVtbXkgUENJIGRldmljZSBvciBzb21ldGhpbmcgc2ltaWxhcj8gR290dGEgY2hlY2sgaWYgdGhlcmUgaXMgc29tZSBuZXcgd2F5IHRvIGRvIFBDSSBmdXp6aW5nLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwLiBJZiB0aGlzICppcyogYSBQQ0kgZHJpdmVyIGFuZCB0aGVyZSdzIG5vIGhhcmR3YXJl4oCmIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJ3QgYmUgY2FsbGVkLiBQZXJpb2QuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG5ldHhlbl9uaWNfaW5pdC5jYCBpcyByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDQ6NTUuOTY0MDI5NjQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjkyMTcwNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz02MjA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6NjIxOm5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTYyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTc2ND1uZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtNzY1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjc2NjpcXHRpZiAobmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXIoYWRhcHRlcikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2Ny1cXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ0OjU5LjQzMzI1MTk4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDIzMTYxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAsIGFzc3VtaW5nIEkgaGF2ZSBzaWduaWZpY2FudCBrZXJuZWwtbGV2ZWwgbmV0d29ya2luZyBleHBlcmllbmNlOlxuXG4qKkRpZ2dpbmcgaW50byBuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2UqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gYG5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZWAuLi4gc291bmRzIGxpa2Ugd2UncmUgdmVyaWZ5aW5nIHRoZSBpbnRlZ3JpdHkgb3IgdGhlIHN1aXRhYmlsaXR5IG9mIGEgdW5pZmllZCBST00gaW1hZ2UgZm9yIGEgTmV0WGVuIE5JQy4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCBjaGVja3N1bXMsIHZlcnNpb24gY2hlY2tzLCBpbWFnZSBmb3JtYXQgdmFsaWRhdGlvbiDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggZmlybXdhcmUgb3IgYm9vdCBjb2RlIGxvYWRpbmcuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgYm9vdCBwcm9jZXNzLCBhIGdhdGVrZWVwZXIgZW5zdXJpbmcgdGhhdCB0aGUgTklDIGRvZXNuJ3QgYnJpY2sgaXRzZWxmIG9yIHdvcnNlLCBpbnRyb2R1Y2Ugc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ20gYW50aWNpcGF0aW5nIGl0IHdpbGwgZXhhbWluZSB0aGluZ3MgbGlrZTpcblxuKiAgICoqUk9NIEhlYWRlcjoqKiBDaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgdmFsaWQgaGVhZGVyIHN0cnVjdHVyZS4gSSdsbCBleHBlY3QgZmllbGRzIGluZGljYXRpbmcgaW1hZ2UgdHlwZSwgdmVyc2lvbiwgbGVuZ3RoLCBtYXliZSBldmVuIGEgbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHRoaW5nIHRvIGNoZWNrIVxuKiAgICoqQ2hlY2tzdW0gVmVyaWZpY2F0aW9uOioqIEEgQ1JDIG9yIGNyeXB0b2dyYXBoaWMgaGFzaCB0byBjb25maXJtIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiBjb3JydXB0ZWQgZHVyaW5nIHN0b3JhZ2Ugb3IgdHJhbnNmZXIuIFRoaXMgaXMgYSBtdXN0LWhhdmUgZm9yIGFueSBpbWFnZSB2ZXJpZmljYXRpb24uXG4qICAgKipWZXJzaW9uIENvbXBhdGliaWxpdHk6KiogVmVyaWZ5aW5nIHRoYXQgdGhlIFJPTSBpbWFnZSB2ZXJzaW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgTklDIGhhcmR3YXJlIG9yIHRoZSBkcml2ZXIuIFdlIGRvbid0IHdhbnQgdG8gbG9hZCBhIGZpcm13YXJlIHRoYXQncyB0b28gb2xkIG9yIHRvbyBuZXcsIHdoaWNoIGNvdWxkIGNhdXNlIGluc3RhYmlsaXR5LiBUaGVyZSBtaWdodCBiZSBzb21lIGNsZXZlciB2ZXJzaW9uIG51bWJlciBjb21wYXJpc29uIGhhcHBlbmluZyBoZXJlLCBwZXJoYXBzIGV2ZW4gY2hlY2tpbmcgYWdhaW5zdCBhIHdoaXRlbGlzdC9ibGFja2xpc3QuXG4qICAgKipJbWFnZSBGb3JtYXQ6KiogUG9zc2libHkgY2hlY2tpbmcgaWYgdGhlIGltYWdlIGNvbmZvcm1zIHRvIGEgc3BlY2lmaWVkIGZvcm1hdCBmb3IgbmV0eGVuIE5JQ3MsIGVuc3VyaW5nIGl0IGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IHNlY3Rpb25zIChlLmcuLCBjb2RlLCBkYXRhLCBjb25maWd1cmF0aW9uKS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZWN0aW9uIGxlbmd0aHMgb3Igb2Zmc2V0cyB0aGF0IEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvcj9cbiogICAqKlNlY3VyaXR5IENoZWNrczoqKiBNYXliZSBzb21lIG1vcmUgYWR2YW5jZWQgY2hlY2tzLCBtYXliZSBsaWtlIGEgZGlnaXRhbCBzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBpbWFnZSdzIGF1dGhlbnRpY2l0eSwgb3IgY2hlY2tpbmcgZm9yIG1hbGljaW91cyBjb2RlIG9yIGJhY2tkb29ycy5cbiogICAqKkFkZHJlc3MgU3BhY2U6KiogSXQnbGwgbmVlZCB0byBjaGVjayB0aGUgUk9NIGltYWdlIHNpemUgdG8gbWFrZSBzdXJlIHRoYXQgaXQgd2lsbCBmaXQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYWRkcmVzcyBzcGFjZS4gT3RoZXJ3aXNlLCB0aGVyZSdsbCBiZSBtZW1vcnkgY29ycnVwdGlvbiBvciB0aGUgTklDIHdpbGwganVzdCByZWZ1c2UgdG8gd29yay5cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSAqaG93KiByb2J1c3QgdGhlIHZhbGlkYXRpb24gaXMuIElzIGl0IGp1c3QgYmFzaWMgY2hlY2tzdW1zLCBvciBhcmUgdGhleSB1c2luZyBtb3JlIHNvcGhpc3RpY2F0ZWQgc2VjdXJpdHkgbWVhc3VyZXM/IFdoYXQgdnVsbmVyYWJpbGl0aWVzIGFyZSB0aGV5IGxpa2VseSBndWFyZGluZyBhZ2FpbnN0PyBBbmQsIGltcG9ydGFudGx5LCBpZiBhIHZhbGlkYXRpb24gKmZhaWxzKiwgd2hhdCdzIHRoZSBleHBlY3RlZCBlcnJvciBoYW5kbGluZz8gRG9lcyBpdCBsb2cgYSB1c2VmdWwgZXJyb3IsIHBhbmljIHRoZSBkcml2ZXIsIG9yIHNpbGVudGx5IGZhaWwgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gYmlnZ2VyIHByb2JsZW1zIGRvd24gdGhlIGxpbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCB3aGF0IGl0ICpkb2Vzbid0KiBkbywgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgd2VhayBzcG90cyBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ1OjA0LjE3NTU3NTM4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NDcxOTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX3VuaWZpZWRfcm9taW1hZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6NzY0Om5ldHhlbl9uaWNfdmFsaWRhdGVfdW5pZmllZF9yb21pbWFnZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy03NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMTAxPW5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTExMTEtXFx0aWYgKGZ3X3R5cGUgPT0gTlhfVU5JRklFRF9ST01JTUFHRSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTExMjpcXHRcXHRpZiAobmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKGFkYXB0ZXIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTExMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDU6MDYuMjQwMjk5MzI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTM4OTIyODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3Q6XG5cbioqQW5hbHl6aW5nIEZpcm13YXJlIFZhbGlkYXRpb24g4oCTIEEgRmFtaWxpYXIgTGFuZHNjYXBlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB3ZSdyZSB0YWxraW5nIGFib3V0IGBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmVgLiBUaGlzIGluc3RhbnRseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgTmV0WGVuIChvciBRTG9naWMvTWFydmVsbCkgbmV0d29yayBpbnRlcmZhY2UgY2FyZCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgZmlybXdhcmUgdmFsaWRhdGlvbiBwcm9jZXNzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaGVyZS4gRmlybXdhcmUgdmFsaWRhdGlvbiBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGluIHByZXZlbnRpbmcgbWFsaWNpb3VzIGFjdG9ycyBmcm9tIGluamVjdGluZyBjb21wcm9taXNlZCBmaXJtd2FyZSwgbGVhZGluZyB0byBwb3RlbnRpYWwgc3lzdGVtIGNvbXByb21pc2UsIGRlbmlhbC1vZi1zZXJ2aWNlLCBvciBldmVuIGRhdGEgYnJlYWNoZXMuXG5cblNvLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgdmFsaWRhdGlvbiBzdGVwczogY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBzaWduYXR1cmUgY2hlY2tzIChsaWtlbHkgUlNBLWJhc2VkLCBwb3NzaWJseSB3aXRoIGEgaGFyZHdhcmUgcm9vdCBvZiB0cnVzdCksIHZlcnNpb24gY2hlY2tzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGJhc2ljIHNhbml0eSBjaGVja3Mgb24gdGhlIGZpcm13YXJlIGltYWdlIGl0c2VsZiB0byBlbnN1cmUgaXQncyB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgZm9ybWF0LiBJJ20gd29uZGVyaW5nIHdoYXQgc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGJlIGV4cG9zZWQgYXQgdGhpcyBzdGFnZS4gQ291bGQgdGhlcmUgYmUgYW55IGJ1ZmZlciBvdmVyZmxvd3MgaW4gdGhlIHZhbGlkYXRpb24gcm91dGluZSBpdHNlbGY/IEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIGZvciBhIGRvd25ncmFkZSBhdHRhY2ssIHdoZXJlIGFuIG9sZGVyLCB2dWxuZXJhYmxlIGZpcm13YXJlIHZlcnNpb24gY291bGQgYmUgZm9yY2VkIG9udG8gdGhlIGNhcmQ/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJcyBpdCBkb25lIGluIHRoZSBkcml2ZXIgaXRzZWxmLCBvciBpcyB0aGVyZSBhIHNlcGFyYXRlIGZpcm13YXJlIHZhbGlkYXRpb24gbW9kdWxlIHdpdGhpbiB0aGUgTklDJ3MgZmlybXdhcmU/IEhvdyBkb2VzIGl0IGhhbmRsZSB1cGRhdGVzIGFuZCBkb3duZ3JhZGVzPyBJcyB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzIGhhcmRlbmVkIGFnYWluc3QgdGFtcGVyaW5nPyBBcmUgdGhlcmUgYW55IGRvY3VtZW50ZWQgd2Vha25lc3NlcyBvciBrbm93biBieXBhc3NlcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgdGhpcyBpcyBhbiBpc3N1ZSBJIGhhdmUgc2VlbiBiZWZvcmUsIGFuZCBob3cgdG8gcmVtZWR5IGl0LiBBbnkgc3BlY2lmaWMgbG9nZ2luZyBvciBlcnJvciByZXBvcnRpbmcgd291bGQgYmUga2V5IHRvbywgdG8gdHJvdWJsZXNob290IGFueSBpc3N1ZXMuIE92ZXJhbGwsIGl0IGFsbCBwb2ludHMgdG8gYSBjcml0aWNhbCBwb2ludCBmb3Igc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBhbGwgYW5nbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDU6NDkuMzc5MjI1MDQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwNjY2NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTExMDA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTEwMTpuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTEwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTEyMzc9dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzoxMjU1OlxcdFxcdHJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1Ni1cXHRcXHRpZiAocmMgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NTo1MS4zNjk4OTg3NDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzMzc3Mzc3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBGaXJtd2FyZSBSZXF1ZXN0IExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZmlybXdhcmUgcmVxdWVzdHMsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlYCBjYWxsLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBuZXR3b3JrIGRyaXZlciBlY29zeXN0ZW0sIGlzbid0IGl0PyBJdCdzIHRoZSBwb2ludCB3aGVyZSBhIGRyaXZlciwgbmVlZGluZyBhIHNwZWNpZmljIGZpcm13YXJlIGltYWdlIHRvIG9wZXJhdGUgY29ycmVjdGx5LCBhY3R1YWxseSBnb2VzIG91dCBhbmQgKmFza3MqIGZvciBpdC4gSXQncyB0aGUgY3J1Y2lhbCBoYW5kc2hha2UsIHRoZSBiZWdpbm5pbmcgb2YgZ2V0dGluZyBoYXJkd2FyZSByZWFkeSBmb3IgYWN0aW9uLiBJJ20gY29uc2lkZXJpbmcgYWxsIHRoZSB3YXlzIHRoaXMgY2FuIGdvIHJpZ2h0LCBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIGdvIHdyb25nLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB0eXBpY2FsIHNjZW5hcmlvcy4gRG9lcyB0aGUgZHJpdmVyIGhhdmUgYnVpbHQtaW4gZmlybXdhcmUgYmxvYnM/IElmIG5vdCwgaG93J3MgaXQgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgcGF0aCB0byBsb29rIGZvciB0aGUgZmlybXdhcmU/IEFyZSB0aGVyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gcGxheT8gQW5kIHdoYXQgYWJvdXQgdGhlIGNhY2hpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZD8gQXJlIHdlIGVmZmljaWVudGx5IGF2b2lkaW5nIHJlZHVuZGFudCBsb29rdXBzLCBvciBpcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGJvdHRsZW5lY2tzPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIG9mIHNlYXJjaCDigJMgb2Z0ZW4gaXTigJlzIGxvb2tpbmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGVuIGluIGEgc3RhbmRhcmQgZmlybXdhcmUgZGlyZWN0b3J5LCBhbmQgbWF5YmUgY2hlY2tpbmcgdmVuZG9yIHNwZWNpZmljIGRpcmVjdG9yaWVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzZWN1cml0eSBhbmQgc3lzdGVtIHN0YWJpbGl0eS5cblxuQW5kIHRoZW4sIG9mIGNvdXJzZSwgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGZpcm13YXJlIGlzIHVuYXZhaWxhYmxlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgdGhlIGRyaXZlciBmYWxsIGJhY2sgdG8gYSBsZXNzIGZ1bmN0aW9uYWwgbW9kZSwgb3IgZG9lcyBpdCBmbGF0LW91dCBmYWlsPyBIb3cgYXJlIHRoZXNlIGZhaWx1cmVzIGxvZ2dlZCwgYW5kIGFyZSB0aGUgZXJyb3IgbWVzc2FnZXMgaGVscGZ1bCBlbm91Z2ggZm9yIGRlYnVnZ2luZz8gSSBiZXQgSSBjb3VsZCBpbXByb3ZlIHRob3Nl4oCmIE1heWJlIGl0J3MgZXZlbiB3b3J0aCBsb29raW5nIGF0IGlmIHRoZXJlIGlzIGEgd2F5IHRvIHRyaWdnZXIgYSBmaXJtd2FyZSBjaGVjayB3aGVuIHRoZSBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgb3IgbG9hZGVkLiBJJ20gYWxzbyB0aGlua2luZyBhYm91dCB0aGUgc2VjdXJpdHkgYXNwZWN0cyBoZXJlOiBIb3cgYXJlIHdlIHZlcmlmeWluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkb3dubG9hZGVkIGZpcm13YXJlPyBBcmUgdGhlcmUgZGlnaXRhbCBzaWduYXR1cmVzIGludm9sdmVkPyBUaGlzIGlzIHBhcmFtb3VudCBmb3IgcHJldmVudGluZyBtYWxpY2lvdXMgZmlybXdhcmUgdXBkYXRlcyBmcm9tIGJyaWNraW5nIHN5c3RlbXMgb3Igb3BlbmluZyB2dWxuZXJhYmlsaXRpZXMuXG5cbkknbSBhbHNvIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0byBiZSBjb25zaWRlcmVkLiBBcmUgdGhlcmUgbXVsdGlwbGUgZHJpdmVyIGluc3RhbmNlcyBydW5uaW5nIHNpbXVsdGFuZW91c2x5LCBhbGwgdHJ5aW5nIHRvIHJlcXVlc3QgdGhlIHNhbWUgZmlybXdhcmU/IEhvdyBpcyBjb25jdXJyZW5jeSBtYW5hZ2VkIHRvIHByZXZlbnQgY29uZmxpY3RzIG9yIGZpbGUgYWNjZXNzIHByb2JsZW1zPyBUaGlzIGlzIGEgcG9pbnQgd2hlcmUgSeKAmXZlIHNlZW4gc29tZSBzdWJ0bGUgYnVncyBlbWVyZ2UgaW4gdGhlIHBhc3QuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0byByZW1lbWJlciB0aGUgZGlmZmVyZW50IGludGVyZmFjZXMgZm9yIGZldGNoaW5nIHRoZSBmaXJtd2FyZSwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgYW5kIHRoZSBkZXZpY2UuXG5cbkZpbmFsbHksIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSG93IGRvZXMgdGhpcyBgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmVgIGZ1bmN0aW9uIGludGVncmF0ZSB3aXRoIHRoZSBicm9hZGVyIGZpcm13YXJlIGxvYWRpbmcgZnJhbWV3b3JrIG9mIHRoZSBrZXJuZWw/IEFyZSB0aGVyZSBhbnkgaW50ZXJvcGVyYWJpbGl0eSBjb25jZXJucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMsIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGFjcm9zcyB0aGUgZW50aXJlIGZpcm13YXJlIGxvYWRpbmcgcHJvY2Vzcz8gSSBiZXQgdGhlcmXigJlzIGEgbG90IG1vcmUgdGhhdCBJIGNvdWxkIGJlIHRoaW5raW5nIGFib3V0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwODIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NjoxNi43MDc2Mzg2ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc2NDg5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0eGVuX3JlcXVlc3RfZmlybXdhcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljLmg9MTczMD1pbnQgbmV0eGVuX25lZWRfZndfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWMuaDoxNzMxOnZvaWQgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWMuaC0xNzMyLXZvaWQgbmV0eGVuX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9MTIxNz1uZXR4ZW5fcDNfaGFzX21uKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjEyMzc6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMjM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9OTI3PW5ldHhlbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjk1MzpcXHRuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTk1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDY6MTguNzI1MjkzMTU2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NzYyMjYxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIGludG8gYG5ldHhlbl9zdGFydF9maXJtd2FyZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIFdoZW4gSSBzZWUgYG5ldHhlbl9zdGFydF9maXJtd2FyZWAsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGNyaXRpY2FsIHBhdGggb2YgYSBOZXRYZW4gKG9yIFFMb2dpYyBOZXRYZW4sIGRlcGVuZGluZyBvbiB0aGUgYWdlIG9mIHRoZSBjb2RlKSBuZXR3b3JrIGFkYXB0ZXIncyBpbml0aWFsaXphdGlvbi4gSSdtIHRoaW5raW5nLCBcIlRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgbWlzZXJ5ISkgYmVnaW5zLlwiIFRoaXMgZnVuY3Rpb24gKmhhcyogdG8gaGFuZGxlIHRoZSBudWFuY2VkIGRhbmNlIGJldHdlZW4gdGhlIGRyaXZlciwgdGhlIGhhcmR3YXJlLCBhbmQgdGhlIGZpcm13YXJlIGl0c2VsZi5cblxuRmlyc3QsIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgY2hlY2tzOiBoYXMgdGhlIGFkYXB0ZXIgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkPyBJcyB0aGUgZGV2aWNlIHJlYWR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaGFyZHdhcmUgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBlcnJvcnMgdGhhdCBoYXZlIHNob3J0LWNpcmN1aXRlZCBpbml0aWFsaXphdGlvbj8gSSdtIGFudGljaXBhdGluZyBlcnJvciBoYW5kbGluZyBmcm9tIHRoZSBvdXRzZXQg4oCTIGEgd2VsbC13cml0dGVuIHJvdXRpbmUgaGVyZSBhbnRpY2lwYXRlcyBmYWlsdXJlIG1vZGVzLlxuXG5UaGVuLCB0aGUgY29yZSBvZiBpdCBoYXMgdG8gaW52b2x2ZSBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpbWFnZS4gQW0gSSBzZWVpbmcgYSBkaXJlY3QgcmVhZCBmcm9tIGEga25vd24gbG9jYXRpb24gKGxpa2VseSBhIGRldmljZS1zcGVjaWZpYyBmbGFzaCBvciBhIG1lbW9yeS1tYXBwZWQgYXJlYSksIG9yIGlzIHRoZXJlIGEgbW9yZSBpbnZvbHZlZCBwcm9jZXNzIGludm9sdmluZyBhIGZpcm13YXJlIGRvd25sb2FkIHVzaW5nIGEgYm9vdGxvYWRlciBwcm90b2NvbD8gSSdtIGhvcGluZyBmb3IgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRvd25sb2FkIG1lY2hhbmlzbS4gVGhlIGVmZmljaWVuY3kgb2YgdGhpcyBmdW5jdGlvbiBoYXMgYSByZWFsIGltcGFjdCBvbiBib290IHRpbWUuXG5cbknigJltIG9uIHRoZSBsb29rb3V0IGZvciBhIHBvdGVudGlhbCBmYWxsYmFjayB0byBhIOKAnHNhZmUgbW9kZeKAnSBvciBkaWFnbm9zdGljIGZpcm13YXJlIGlmIHRoZSBwcmltYXJ5IGRvd25sb2FkIGZhaWxzLiBSb2J1c3RuZXNzIGlzIGtleTsgYSBicmlja2VkIGFkYXB0ZXIgaXMgYSAqdmVyeSogYmFkIHVzZXIgZXhwZXJpZW5jZSwgYW5kIGEgcHJvcGVybHkgZGVzaWduZWQgcm91dGluZSBoZXJlIHNob3VsZCBtaW5pbWl6ZSB0aGF0IHJpc2suIEknbSBob3BpbmcgdG8gc2VlIGEgZ29vZCBiYWxhbmNlIGJldHdlZW4gc3BlZWQgYW5kIHJlbGlhYmlsaXR5LlxuXG5BbHNvLCBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgdmVyc2lvbmluZyBhbmQgY29tcGF0aWJpbGl0eS4gSXMgdGhlcmUgYSBjaGVjayB0byBlbnN1cmUgdGhlIGZpcm13YXJlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyPyBIb3cgZG9lcyBpdCBoYW5kbGUgZmlybXdhcmUgdXBkYXRlcz8gQSBtaXNtYXRjaCBoZXJlIGNhbiBjYXVzZSB2ZXJ5IHN1YnRsZSBidWdzIHRoYXQgYXJlIGRpZmZpY3VsdCB0byBkZWJ1ZywgYW5kIEkgZXhwZWN0IHRvIHNlZSBlbGVnYW50IGNoZWNrcyB0byBwcmV2ZW50IHRoYXQuXG5cbkknbSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc3RlcHM6XG5cbjEuICAqKlByZXBhcmF0aW9uKio6IEhhcmR3YXJlIHJlc2V0L2luaXRpYWxpemF0aW9uLiBSZXNvdXJjZSBhbGxvY2F0aW9uLlxuMi4gICoqRmlybXdhcmUgTG9hZCoqOiBEZXRlcm1pbmUgdGhlIHNvdXJjZSAoZmxhc2gsIGRvd25sb2FkKSwgZXJyb3IgaGFuZGxpbmcgb24gcmVhZCBmYWlsdXJlcy5cbjMuICAqKkZpcm13YXJlIFZlcmlmaWNhdGlvbioqOiBDaGVja3N1bSwgdmVyc2lvbiB2ZXJpZmljYXRpb24sIGFueSBzZWxmLXRlc3RzIHRoYXQgbWlnaHQgcnVuIGF0IHRoaXMgc3RhZ2UuXG40LiAgKipGaXJtd2FyZSBBY3RpdmF0aW9uKio6IENvbnRyb2wgaGFuZG9mZi5cbjUuICAqKlN0YXR1cyBSZXBvcnRpbmcqKjogUmVwb3J0IHRvIHRoZSBkcml2ZXIgdGhhdCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cblxuSSBrbm93IHRoZSBudWFuY2VzIG9mIGZpcm13YXJlIGxvYWRpbmcgY2FuIGJlY29tZSBjb21wbGV4IGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEkgYW0gd29uZGVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhvc2UuIElzIHRoZXJlIGFueSBldmlkZW5jZSBvZiBzZWN1cmUgYm9vdCBvciBjb2RlIHNpZ25pbmc/IFRoYXQgd291bGQgYmUgYSBnb29kIHNpZ24uXG5cbkluIGVzc2VuY2UsIEknbSBleHBlY3RpbmcgdGhpcyBgbmV0eGVuX3N0YXJ0X2Zpcm13YXJlYCBmdW5jdGlvbiB0byBiZSBhIHRpZ2h0bHkgd291bmQsIGVmZmljaWVudCwgYW5kIHJvYnVzdCBwaWVjZSBvZiBjb2RlLCB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIHRoZSBhZGFwdGVyJ3MgbmV0d29yayBjb25uZWN0aXZpdHkgZGVwZW5kcy4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBhbmQgSSdtIHZlcnkgaW50ZXJlc3RlZCB0byBzZWUgaG93IHdlbGwgaXQncyBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NjoyNC40MDE1MjEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0MjY4NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl9zdGFydF9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTkyNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzo5Mjc6bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTkyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTE0Mzg9bmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMTUyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjE1Mjk6XFx0ZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMTUzMC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0xNjg2PXN0YXRpYyBpbnQgbmV0eGVuX25pY19hdHRhY2hfbGF0ZV9mdW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNjk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MTY5NzpcXHRlcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNjk4LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MjUxOT1uZXR4ZW5fZndpbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0yNTUyLVxcdGNhc2UgTlhfREVWX1JFQURZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MjU1MzpcXHRcXHRpZiAoIW5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMjU1NC1cXHRcXHRcXHRuZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fYXR0YWNoX3dvcmssIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0NjoyNi4xMjU3OTUwODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0NDUwNDMzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIGBuZXR4ZW5fbmljX3Byb2JlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ldHhlbl9uaWNfcHJvYmVgIGZ1bmN0aW9uLCBhbmQgaXQncyB0cmlnZ2VyZWQgYnkgYSBQQ0kgZHJpdmVyLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCdzIGEgUENJIGRyaXZlciwgc28gdGhlIHByb2JlIGZ1bmN0aW9uICpzaG91bGQqIG9ubHkgYmUgY2FsbGVkIGlmIGEgbWF0Y2hpbmcgUENJIGRldmljZSBpcyBwcmVzZW50LiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSB0cmlnZ2VyIHRoaXMgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlP1xuXG5JIGtub3cgc3l6a2FsbGVyIGNhbiB0ZXN0IFBDSSBkcml2ZXJzLCBidXQgdXN1YWxseSwgaXQgcmVsaWVzIG9uIGJpbmRpbmcgdGhlIGRyaXZlciB0byBhIGR1bW15IGRldmljZS4gSSByZW1lbWJlciBpdCBtaWdodCB1c2UgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCwgd2FpdCwgSSBkb24ndCB0aGluayBzeXprYWxsZXIgKmFjdHVhbGx5KiBoYXMgYSBnZW5lcmljIHdheSB0byBpbmplY3QgUENJIGRldmljZXMuIFVubGVzcy4uLiB1bmxlc3MgdGhlcmUgYXJlIG1vcmUgcmVjZW50IGFkZGl0aW9ucywgbGlrZSB0aGUgYHN5el9nZW5ldGxpbmtgIGZvciBuZXRsaW5rIGFuZCBgc3l6X3VzYmAgZm9yIFVTQj8gTm8sIHRoYXQncyBub3QgcmlnaHQuXG5cbldhaXQgYSBtaW51dGUuLi4gZG9lcyBzeXprYWxsZXIgaGF2ZSBQQ0kgZnV6emluZyAqYXQgYWxsKj8gTWF5YmUgd2l0aCBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYD8gTm8sIHRoYXQncyBub3QgaXQgZWl0aGVyLlxuXG5MZXQgbWUgdGFrZSBhIHN0ZXAgYmFjayBhbmQgc2VlIGlmIHN5emthbGxlciBpcyBhY3R1YWxseSBkb2luZyBQQ0kgZnV6emluZyBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgY291bGQgc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSwgYnV0IHRoYXQncyBub3QgdGhlIGJlc3QgYXBwcm9hY2ggc2luY2Ugc3l6a2FsbGVyIGlzIGV4dGVybmFsLlxuXG5BaGEhIFRoZSBcIkF1dGhvclwiIGxpbmUhIElmIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgYHN5ei1jbHVzdGVyYCwgdGhhdCBtZWFucyBzeXprYWxsZXIgKmZvdW5kKiBhIGJ1ZyBoZXJlISBJdCdzIGZyb20gXCJzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVwiLCBzbyBpdCAqZGVmaW5pdGVseSogZm91bmQgc29tZXRoaW5nLiBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiIC0gdGhhdCBjb25maXJtcyBpdC4gSWYgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIGhlcmUsIHRoYXQgbWVhbnMgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlIVxuXG5Ib3cgaXMgc3l6a2FsbGVyIGRvaW5nIHRoYXQ/IFBlcmhhcHMgaXQgaXMgdXNpbmcgYHJlcXVlc3RfZmlybXdhcmVgPyBJZiBzeXprYWxsZXIgY2FuIHJlYWNoIGl0LCB0aGF0IG1lYW5zIGl0ICppcyogZnV6emFibGUuIE1heWJlIHRoZSBidWcgd2FzIGZvdW5kIGJ5IGluamVjdGluZyBmaXJtd2FyZSBvciBwZXJoYXBzIHN5emthbGxlciAqZG9lcyogaGF2ZSBQQ0kgZnV6emluZy5cblxuT2theSwgbGV0J3MgZGV0ZXJtaW5lIGlmIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSB0cnVlLiBDbGVhcmx5LCBpZiBzeXprYWxsZXIgZm91bmQgYSBidWcsIGl0ICppcyogcmVhY2hhYmxlLlxuXG5UaGUgcHJvbXB0LCBob3dldmVyLCBtZW50aW9ucyBhIGNhdmVhdDogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi5cIiBTbywgY2FuIEkgcmVhY2ggdGhpcyBgbmV0eGVuX25pY19wcm9iZWAgaW4gUUVNVT9cblxuQ291bGQgSSB0cmlnZ2VyIHRoZSBQQ0kgcHJvYmUgdmlhIHN5c2ZzPyBTb21ldGhpbmcgbGlrZSwgYGVjaG8gXCJ2ZW5kb3IgZGV2aWNlXCIgXHUwMDNlIC9zeXMvYnVzL3BjaS9kcml2ZXJzL25ldHhlbl9uaWMvbmV3X2lkYD8gVGhhdCAqd291bGQqIG1ha2UgdGhlIGRyaXZlciBhdHRlbXB0IHRvIGJpbmQgdG8gYSBQQ0kgZGV2aWNlIHdpdGggYSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlIElELCBidXQgSSB3b3VsZCBzdGlsbCBuZWVkIGEgUENJIGRldmljZS4gSSByZW1lbWJlciBzeXprYWxsZXIgaGFzIGB2aGNpYCBmb3IgVVNCLi4uIGRvZXMgaXQgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJPyBEb2VzIHN5emthbGxlciBoYXZlIGBzeXpfcGNpX2RldmljZV9hZGRgPyBObywgd2FpdCwgc3l6a2FsbGVyICpkb2VzKiB1c2UgYHZmaW9gIG9yIGEgc2ltaWxhciB0ZWNobm9sb2d5LlxuXG5BY3R1YWxseSwgSSB0aGluayBzeXprYWxsZXIgKmRpZCogcmVjZW50bHkgYWRkIGEgUENJIGZ1enplciEgRG9lcyBpdCB1c2UgYSBkdW1teSBQQ0kgZGV2aWNlPyBObywgaXQgdXNlcyBLVk0vUUVNVSwgb3IgbWF5YmUgaXQgaGFzIGEgc29mdHdhcmUgUENJIGJ1cyBpbXBsZW1lbnRhdGlvbi5cblxuV2FpdCwgbWF5YmUgdGhlcmUncyBhIGBDT05GSUdfUENJX0RFQlVHYCBvcHRpb24gSSBjb3VsZCB1c2U/XG5cblRoZSBwcm9tcHQgc2F5cyBJIHNob3VsZDogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cbkkgZG9uJ3QgbmVlZCB0byBwcm92ZSBpdCdzIHJlYWNoYWJsZSBzaW5jZSBzeXprYWxsZXIgZm91bmQgaXQsIGJ1dCBJICpzaG91bGQqIGNoZWNrIHRoZSBjb25maWdzLiBXaGF0IGFyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM1NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0Njo0Mi41NzA4NDAyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwOTM1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRYRU5fTklDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnPTU4PWNvbmZpZyBRTENOSUNfSFdNT05cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnLTY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjY5OmNvbmZpZyBORVRYRU5fTklDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDY6NDIuODYxNzg1MzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODYyODUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUUxvZ2ljIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBRTG9naWMgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgaW5pdGlhbCBkcml2ZXIgb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlIGNvcmUgc2VsZWN0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgYW5kIG9mdGVuIHRoZSBpbml0aWFsIGZlYXR1cmUgc2V0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhpbmdzIGxpa2UgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBkcml2ZXIgaXRzZWxmIChgQ09ORklHX1FMT0dJQ18uLi5gKSwgb3B0aW9ucyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudHMsIHBlcmhhcHMgc29tZSBlYXJseSBzZXR0aW5ncyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBtYXliZSBldmVuIGRlYnVnZ2luZy90cmFjaW5nIGNhcGFiaWxpdGllcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4gTGluZSA2OS4uLiB0aGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgZGVjaXNpb25zIGJlZ2luLCBnZW5lcmFsbHkuIFRpbWUgdG8gc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ2OjQ3LjQ1MDQxNTU5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRkZXBlbmRzIG9uIFFMQ05JQyBcXHUwMDI2XFx1MDAyNiBIV01PTiBcXHUwMDI2XFx1MDAyNiAhKFFMQ05JQz15IFxcdTAwMjZcXHUwMDI2IEhXTU9OPW0pXFxuICA2MTpcXHRcXHRkZWZhdWx0IHlcXG4gIDYyOlxcdFxcdGhlbHBcXG4gIDYzOlxcdFxcdCAgVGhpcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byByZWFkIHRoZVxcbiAgNjQ6XFx0XFx0ICBib2FyZCB0ZW1wZXJhdHVyZSBpbiBDb252ZXJnZWQgRXRoZXJuZXQgZGV2aWNlc1xcbiAgNjU6XFx0XFx0ICBzdXBwb3J0ZWQgYnkgcWxjbmljLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRoaXMgZGF0YSBpcyBhdmFpbGFibGUgdmlhIHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBORVRYRU5fTklDXFxuICA3MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0WGVuIE11bHRpIHBvcnQgKDEvMTApIEdpZ2FiaXQgRXRoZXJuZXQgTklDXFxcIlxcbiAgNzE6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDcyOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciBOZXRYZW4ncyBHaWdhYml0IEV0aGVybmV0IGNhcmQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBRRURcXG4gIDc3OlxcdFxcdHRyaXN0YXRlIFxcXCJRTG9naWMgUUVEIDI1LzQwLzEwMEdiIGNvcmUgZHJpdmVyXFxcIlxcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDc5OlxcdFxcdHNlbGVjdCBaTElCX0lORkxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDY6NDcuNDUwNDgzODMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTE3Mjg4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSBzZWUgYE5FVFhFTl9OSUNgIOKAkyB0aGF04oCZcyB0aGUgcHJpbWFyeSBkcml2ZXIgY29uZmlnLCByaWdodD8gQnV0IEkgYWxzbyBzcG90IGBGV19MT0FERVJgIGJlaW5nIHNlbGVjdGVkLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZHJpdmVyPyBUaGlzIGZlZWxzIGxpa2UgaXQncyBtaXNzaW5nIHNvbWV0aGluZyBhbmQgSSBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgaXRzZWxmIHRvIGV4YW1pbmUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyB1c2VkIHRvZ2V0aGVyLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBuZXR4ZW5fbmljX2luaXQuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQgd2lsbCBzaG93IG1lIGhvdyB0aGVzZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGludGVyYWN0IHdpdGhpbiB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcGF0aHMgYW5kIGhvdyBgTkVUWEVOX05JQ2AgYW5kIGBGV19MT0FERVJgIGFyZSBiZWluZyB1c2VkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGhhdmUgYW4gaW1wYWN0LiBIb3BlZnVsbHkgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2hvbGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NDQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ3OjQzLjk2Nzc3NDE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0MTEzNDI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDc6NDUuMzIxODk1NzA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDUyOTExNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBOZXRYZW4gRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgbGlrZSBgI2lmZGVmYCBhcmUgcHJlc2VudCBpbiBgbmV0eGVuX25pY19pbml0LmNgLiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIgYW5kIHBvdGVudGlhbGx5IHNpbXBsaWZpZXMgZGVidWdnaW5nIGlmIHdlIGV2ZXIgbmVlZCB0byB0cmFjZSBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcywgbGV0J3MgY2FzdCBhIGNyaXRpY2FsIGV5ZSBvdmVyIGBuZXR4ZW5fbmljX21haW4uY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYW55IGRldmljZS1zcGVjaWZpYyBvciBjb25maWd1cmF0aW9uLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBpZiBpdCBpc24ndCBpbiBpbml0LiBJdCdzIHRoZSBjb3JlIGRyaXZlciBmaWxlLCBzbyBpdCdzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGxvb2sgZm9yIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBvciBleGNsdWRlIGNvZGUgYmFzZWQgb24gdGhlIGRldmljZSBvciBpdHMgb3BlcmF0aW5nIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIGhvdyBhbnkgY29uZGl0aW9uYWxzIGFyZSBoYW5kbGVkIGluIG1haW4gd2lsbCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBiZWhhdmVzIGluIGRpZmZlcmVudCBzZXR1cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTk0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDc6NDkuODY3MTg4NTUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQwNTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTEzODg9c3RhdGljIHZvaWQgbmV0eGVuX3JlYWRfdWxhX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MTQxMTojaWZkZWYgQ09ORklHX1BDSUVBRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE0MTItc3RhdGljIHZvaWQgbmV0eGVuX21hc2tfYWVyX2NvcnJlY3RhYmxlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MTQzOD1uZXR4ZW5fbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0xNTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MTUwMjojaWZkZWYgQ09ORklHX1BDSUVBRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTE1MDMtXFx0bmV0eGVuX21hc2tfYWVyX2NvcnJlY3RhYmxlKGFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zMTMxPW5ldHhlbl9yZW1vdmVfZGlhZ19lbnRyaWVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzE0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjMxNDI6I2lmZGVmIENPTkZJR19JTkVUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zNDQ4PXN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zNDUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzQ1MjojaWZkZWYgQ09ORklHX0lORVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NTMtXFx0cmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZXR4ZW5fbmV0ZGV2X2NiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzQ2MT1zdGF0aWMgdm9pZCBfX2V4aXQgbmV0eGVuX2V4aXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTM0NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzozNDY1OiNpZmRlZiBDT05GSUdfSU5FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzQ2Ni1cXHR1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKFxcdTAwMjZuZXR4ZW5faW5ldGFkZHJfY2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0Nzo0OS45MjM1OTg0MjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAxMDg0OTczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXJtd2FyZSBQYXJzaW5nIExvZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgZmlybXdhcmUgcGFyc2luZyBwcm9jZXNzLiBOb25lIG9mIHRoZSBpbml0aWFsIGNvbnNpZGVyYXRpb25zIHNlZW0gZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIGNvcmUgcGFyc2luZyBpdHNlbGYuIFRoZSBwYXJzaW5nIGNvZGUsIGFzIEkgcmVjYWxsLCByZXNpZGVzIHdpdGhpbiBgbmV0eGVuX25pY19pbml0LmNgLiBUaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbiBpcywgaG93IGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5IGdldCB0aGUgZmlybXdhcmUgcGFyc2luZyB0byB0cmlnZ2VyPyBBaCwgcmlnaHQhIEl0IGxldmVyYWdlcyB0aGUgYHJlcXVlc3RfZmlybXdhcmVgIEFQSS4gU3l6a2FsbGVyIGludGVyY2VwdHMgdGhpcywgd2hpY2ggZ2l2ZXMgaXQgdGhlIHBvd2VyIHRvIGluamVjdCBhbnkgZmlybXdhcmUgYmxvYiBpdCB3YW50cy4gVGhhdCBtZWFucyBpZiB0aGUgZHJpdmVyIG1ha2VzIHRoYXQgYHJlcXVlc3RfZmlybXdhcmVgIGNhbGwsIHdlIGhhdmUgYSBjbGVhciBwYXRoIGZvciBmdXp6aW5nIHRoZSBwYXJzaW5nIGxvZ2ljLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IEkgaGF2ZSBhIGxpc3Q6IGBueF9nZXRfdGFibGVfZGVzY2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYW5kIGBueF9nZXRfZGF0YV9kZXNjYC5cblxuV2FpdCwgaXNuJ3QgYG54X2dldF90YWJsZV9kZXNjYCBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCBjb3VsZCBpbXBhY3QgaXRzIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYC4gU3l6a2FsbGVyIGNhbiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgY2FsbCBncmFwaCwgYnV0IEknbSBwcmV0dHkgc3VyZSBgRm9jdXNTeW1ib2xzYCAqY2FuKiBpbmNsdWRlIHRoZW0uIExldCdzIG1ha2Ugc3VyZSBJJ20gbGlzdGluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIHRob3VnaC4gTGV0IG1lIHJlLWV4YW1pbmUgdGhhdCBsaXN0IGFnYWluLCBqdXN0IHRvIGJlIHByZWNpc2UuXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjayB0aGVzZSBhZ2FpbnN0IHRoZSBtb2RpZmljYXRpb25zOlxuYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYFxuYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYFxuYG5ldHhlbl9uaWNfdmFsaWRhdGVfZndgXG5gbmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNgXG5gbnhfZ2V0X2RhdGFfZGVzY2BcbmBueF9nZXRfdGFibGVfZGVzY2BcblxuQWgsIGhvbGQgb24uLi4gaXMgYG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyYCBhbHNvIHN0YXRpYz8gT2theSwgc28gdGhhdCdzIHRoZSB0aGluZyB0byBmb2N1cyBvbiAtIHdoaWNoIGZ1bmN0aW9ucyBhcmUgKm5vbi1zdGF0aWMqLCBvciBkaXJlY3RseSBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDc6NTcuOTM0NDUwMTAxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3MDgzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM9NjIwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jOjYyMTpuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy02MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz03NjQ9bmV0eGVuX25pY192YWxpZGF0ZV91bmlmaWVkX3JvbWltYWdlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTc2NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzo3NjY6XFx0aWYgKG5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyKGFkYXB0ZXIpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy03NjctXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0ODowMC4wMzE1Mzk3MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0OTg4MDAwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgVmFsaWRhdGlvbiBQcm9jZXNzKipcblxuUmlnaHQsIHNvIEknbSBpbW1lZGlhdGVseSBub3RpY2luZyBhIHBlcnZhc2l2ZSB1c2Ugb2Ygc3RhdGljIGNvZGUgZWxlbWVudHMgaGVyZS4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjbGVhcjogdGhlIGFyY2hpdGVjdHVyZSBsZWFucyBoZWF2aWx5IG9uIHN0YXRpYyBjb21wb25lbnRzLiBXYWl0IGEgc2Vjb25kLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYWJvdXQgYG5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZWAuIElzICp0aGF0KiBhbHNvIHN0YXRpYz8gVGhhdCBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGNyaXRpY2FsLiBJZiBpdOKAmXMgc3RhdGljLCB0aGF0IHNpZ25pZmljYW50bHkgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlIGFuZCBwb3RlbnRpYWwgZm9yIGR5bmFtaWMgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgdmFsaWRhdGlvbiBzdGVwIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGFzc3VtcHRpb25zIG5lZWQgdG8gYmUgY29uZmlybWVkIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDg5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDg6NTUuNTMwMzQyMzM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3NjcyMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHhlbl92YWxpZGF0ZV9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTExMDA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTEwMTpuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTEwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jPTEyMzc9dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYzoxMjU1OlxcdFxcdHJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMtMTI1Ni1cXHRcXHRpZiAocmMgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0ODo1Ny41MjgwMjAyMzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NDA2MTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlJlZmxlY3Rpbmcgb24gRmlybXdhcmUgUmVxdWVzdHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZWAgZnVuY3Rpb24uLi4gYW5kIGl0J3MgY2xlYXIgdG8gbWUgdGhhdCBpdCBpc24ndCBzdGF0aWNhbGx5IGRlZmluZWQgb3IgaGFuZGxlZC4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU0OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQ5OjAwLjQ5MjA4NTk5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzYwNjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWMuaD0xNzMwPWludCBuZXR4ZW5fbmVlZF9md19yZXNldChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oOjE3MzE6dm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pYy5oLTE3MzItdm9pZCBuZXR4ZW5fcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYz0xMjE3PW5ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYy0xMjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmM6MTIzNzp2b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jLTEyMzgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz05Mjc9bmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtOTUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6OTUzOlxcdG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtOTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0OTowMi4zNDk2OTkzODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NTc3MTI1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRYZW4gTklDIEZpcm13YXJlIFBhcnNpbmcgQnVnKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgYG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlYCBlbnRyeSBwb2ludCwgd2hpY2ggc3l6a2FsbGVyIHNvbWVob3cgbWFuYWdlZCB0byBoaXQuIFJpZ2h0LCBpdCBtdXN0IGJlIGJlaW5nIHRyaWdnZXJlZCB0aHJvdWdoIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCB0aGVuIGhpdHMgYG5ldHhlbl9uaWNfcHJvYmVgLCBsZWFkaW5nIHRvIGBuZXR4ZW5fc3RhcnRfZmlybXdhcmVgIGFuZCBmaW5hbGx5IHRoZSB0YXJnZXQgZnVuY3Rpb24uIFN5emthbGxlciBpcyBpbmplY3RpbmcgYSBiYWQgZmlybXdhcmUgYmxvYiB0aHJvdWdoIGByZXF1ZXN0X2Zpcm13YXJlYCwgd2hpY2ggdGhlbiBnZXRzIGZlZCBpbnRvIGBuZXR4ZW5fdmFsaWRhdGVfZmlybXdhcmVgLCBhbmQgYmFtLCB3ZSBnZXQgb3VyIG91dC1vZi1ib3VuZHMgcmVhZC4gQ2xhc3NpYyBmaXJtd2FyZSBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkuXG5cbklzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gRmlybXdhcmUgcGFyc2luZyBpcyBhbHdheXMgYSBnb2xkbWluZSBmb3IgYnVncywgYW5kIHRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGhhcyBhIGRlZGljYXRlZCBmZWF0dXJlIGZvciBgcmVxdWVzdF9maXJtd2FyZWAgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC4gV2UgbmVlZCB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGtleSB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGFyZSBlZmZlY3RpdmUuXG5cbkxldCdzIHNlZSwgd2UgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZGAsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2Z3YCwgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYCwgYG54X2dldF90YWJsZV9kZXNjYCwgYG54X2dldF9kYXRhX2Rlc2NgLCBhbmQgY3JpdGljYWxseSwgdGhlc2UgbmV3IG9uZXMgZnJvbSB0aGUgcGF0Y2g6IGBuZXR4ZW5fcm9tX3JhbmdlX3ZhbGlkYCwgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgLCBhbmQgYG5ldHhlbl9yb21fZW50cnlfdmFsaWRgLlxuXG5KdXN0IHRvIGNvbmZpcm0sIGxldCdzIGRvdWJsZSBjaGVjayB0aG9zZSBmdW5jdGlvbiBuYW1lcyBmcm9tIHRoZSBwYXRjaCBvbmUgbW9yZSB0aW1lLCBtYWtpbmcgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOiBgbmV0eGVuX3JvbV9yYW5nZV92YWxpZGAsIGBuZXR4ZW5fcm9tX3RhYmxlX3ZhbGlkYCwgYG5ldHhlbl9yb21fZW50cnlfdmFsaWRgLCBgbnhfZ2V0X3RhYmxlX2Rlc2NgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9oZWFkZXJgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRgLCBgbmV0eGVuX25pY192YWxpZGF0ZV9md2AsIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX3Byb2R1Y3Rfb2Zmc2AsIGFuZCBgbnhfZ2V0X2RhdGFfZGVzY2AuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFdlIG5lZWQgYE5FVFhFTl9OSUNgIGZvciBzdXJlLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkLiBZdXAsIGBDT05GSUdfTkVUWEVOX05JQz15YCBvciBgPW1gLCBhbmQgYFBDSWAgYW5kIGBGV19MT0FERVJgLCB3aGljaCBhcmUgYmFzaWNhbGx5IHN0YW5kYXJkLiBTbywganVzdCBgTkVUWEVOX05JQ2AuXG5cblF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlnIG5hbWUuLi5ZZXAsIGBjb25maWcgTkVUWEVOX05JQ2AgaW4gdGhlIEtjb25maWcgZmlsZSBjb25maXJtcyBpdC4gQW5kLCBubyBvdGhlciByZWxhdGVkIGNvbmZpZ3MuXG5cbk9rYXksIGxldCdzIHByZXBhcmUgdGhlIG91dHB1dDpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgbmV0eGVuX3JvbV9yYW5nZV92YWxpZGBcbiAgICAqICAgYG5ldHhlbl9yb21fdGFibGVfdmFsaWRgXG4gICAgKiAgIGBuZXR4ZW5fcm9tX2VudHJ5X3ZhbGlkYFxuICAgICogICBgbnhfZ2V0X3RhYmxlX2Rlc2NgXG4gICAgKiAgIGBuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlcmBcbiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfYm9vdGxkYFxuICAgICogICBgbmV0eGVuX25pY192YWxpZGF0ZV9md2BcbiAgICAqICAgYG5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzYFxuICAgICogICBgbnhfZ2V0X2RhdGFfZGVzY2BcbiogICAqKkVuYWJsZUNvbmZpZ3M6KipcbiAgICAqICAgYE5FVFhFTl9OSUNgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgZmlybXdhcmUgcGFyc2luZyBib3VuZHMgY2hlY2tzIGluIHRoZSBOZXRYZW4gTklDIGRyaXZlci4gRnV6emluZyBpcyBwb3NzaWJsZSBiZWNhdXNlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBkZXZpY2UgcHJvYmUsIGFuZCBzeXprYWxsZXIgY2FuIHByb3ZpZGUgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBuZXcgY2hlY2tzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTAwLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0OToxNS4zMDc0MTM5MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTU0MTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUWEVOX05JQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldHhlbl9yb21fcmFuZ2VfdmFsaWRcIixcbiAgICBcIm5ldHhlbl9yb21fdGFibGVfdmFsaWRcIixcbiAgICBcIm5ldHhlbl9yb21fZW50cnlfdmFsaWRcIixcbiAgICBcIm54X2dldF90YWJsZV9kZXNjXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2hlYWRlclwiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9ib290bGRcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfZndcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfcHJvZHVjdF9vZmZzXCIsXG4gICAgXCJueF9nZXRfZGF0YV9kZXNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIGZpcm13YXJlIHBhcnNpbmcgaW4gdGhlIE5ldFhlbiBOSUMgZHJpdmVyLiBGaXJtd2FyZSBwYXJzaW5nIGlzIHJlYWNoYWJsZSB2aWEgYHJlcXVlc3RfZmlybXdhcmVgIHdoZW4gdGhlIGRyaXZlciBwcm9iZXMgYSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgY2FuIGZ1enogdGhpcyBieSBpbmplY3RpbmcgbWFsZm9ybWVkIGZpcm13YXJlIGJsb2JzLiBGdXp6aW5nIHRoaXMgbG9naWMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgY29ycmVjdGx5IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRYRU5fTklDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0eGVuX3JvbV9yYW5nZV92YWxpZFwiLFxuICAgIFwibmV0eGVuX3JvbV90YWJsZV92YWxpZFwiLFxuICAgIFwibmV0eGVuX3JvbV9lbnRyeV92YWxpZFwiLFxuICAgIFwibnhfZ2V0X3RhYmxlX2Rlc2NcIixcbiAgICBcIm5ldHhlbl9uaWNfdmFsaWRhdGVfaGVhZGVyXCIsXG4gICAgXCJuZXR4ZW5fbmljX3ZhbGlkYXRlX2Jvb3RsZFwiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9md1wiLFxuICAgIFwibmV0eGVuX25pY192YWxpZGF0ZV9wcm9kdWN0X29mZnNcIixcbiAgICBcIm54X2dldF9kYXRhX2Rlc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgZmlybXdhcmUgcGFyc2luZyBpbiB0aGUgTmV0WGVuIE5JQyBkcml2ZXIuIEZpcm13YXJlIHBhcnNpbmcgaXMgcmVhY2hhYmxlIHZpYSBgcmVxdWVzdF9maXJtd2FyZWAgd2hlbiB0aGUgZHJpdmVyIHByb2JlcyBhIGRldmljZSwgYW5kIHN5emthbGxlciBjYW4gZnV6eiB0aGlzIGJ5IGluamVjdGluZyBtYWxmb3JtZWQgZmlybXdhcmUgYmxvYnMuIEZ1enppbmcgdGhpcyBsb2dpYyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNrcyBjb3JyZWN0bHkgcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[1] Phase: Succeeded StartedAt: 2026-07-06 13:49:57 +0000 UTC FinishedAt: 2026-07-06 13:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 13:49:57 +0000 UTC FinishedAt: 2026-07-06 13:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2] Phase: Succeeded StartedAt: 2026-07-06 13:49:57 +0000 UTC FinishedAt: 2026-07-06 15:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 13:49:57 +0000 UTC FinishedAt: 2026-07-06 15:34:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 13:49:57 +0000 UTC FinishedAt: 2026-07-06 13:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 13:49:57 +0000 UTC FinishedAt: 2026-07-06 13:50:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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-workflowwp8br/series-workflowwp8br-convert-artifact-2390007578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 13:50:17 +0000 UTC FinishedAt: 2026-07-06 14:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 13:50:17 +0000 UTC FinishedAt: 2026-07-06 14:26:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9bfb84ff-af9d-4835-b936-8f0b76a237de,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-workflowwp8br/series-workflowwp8br-convert-artifact-2390007578/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": "cba7a313-2fb3-42c5-9364-acc4e71101cc", "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-workflowwp8br/series-workflowwp8br-build-action-1129574344/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 13:50:17 +0000 UTC FinishedAt: 2026-07-06 14:26:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9bfb84ff-af9d-4835-b936-8f0b76a237de,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-workflowwp8br/series-workflowwp8br-convert-artifact-2390007578/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": "cba7a313-2fb3-42c5-9364-acc4e71101cc", "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-workflowwp8br/series-workflowwp8br-build-action-1129574344/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:26:14 +0000 UTC FinishedAt: 2026-07-06 14:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:26:14 +0000 UTC FinishedAt: 2026-07-06 14:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:26:14 +0000 UTC FinishedAt: 2026-07-06 14:26:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:26:14 +0000 UTC FinishedAt: 2026-07-06 14:26:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-workflowwp8br/series-workflowwp8br-convert-artifact-3257096565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:26:34 +0000 UTC FinishedAt: 2026-07-06 14:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:26:34 +0000 UTC FinishedAt: 2026-07-06 14:28:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cba7a313-2fb3-42c5-9364-acc4e71101cc,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-workflowwp8br/series-workflowwp8br-build-action-1129574344/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-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:29:05 +0000 UTC FinishedAt: 2026-07-06 14:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:29:05 +0000 UTC FinishedAt: 2026-07-06 14:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:29:05 +0000 UTC FinishedAt: 2026-07-06 15:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:29:05 +0000 UTC FinishedAt: 2026-07-06 15:29:40 +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:*9bfb84ff-af9d-4835-b936-8f0b76a237de,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-workflowwp8br/series-workflowwp8br-convert-artifact-3257096565/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": "fab94f57-5d0d-47ee-a01d-7d27123c55c2", "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-workflowwp8br/series-workflowwp8br-build-action-1458854785/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 14:29:05 +0000 UTC FinishedAt: 2026-07-06 15:29:30 +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:*9bfb84ff-af9d-4835-b936-8f0b76a237de,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-workflowwp8br/series-workflowwp8br-convert-artifact-3257096565/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": "fab94f57-5d0d-47ee-a01d-7d27123c55c2", "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-workflowwp8br/series-workflowwp8br-build-action-1458854785/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:29:40 +0000 UTC FinishedAt: 2026-07-06 15:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:29:40 +0000 UTC FinishedAt: 2026-07-06 15:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:29:40 +0000 UTC FinishedAt: 2026-07-06 15:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:29:40 +0000 UTC FinishedAt: 2026-07-06 15:31:31 +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:*fab94f57-5d0d-47ee-a01d-7d27123c55c2,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-workflowwp8br/series-workflowwp8br-build-action-1458854785/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-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:41 +0000 UTC FinishedAt: 2026-07-06 15:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:41 +0000 UTC FinishedAt: 2026-07-06 15:34:55 +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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"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:*cba7a313-2fb3-42c5-9364-acc4e71101cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fab94f57-5d0d-47ee-a01d-7d27123c55c2,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-workflowwp8br/series-workflowwp8br-build-action-1129574344/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-workflowwp8br/series-workflowwp8br-build-action-1458854785/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:41 +0000 UTC FinishedAt: 2026-07-06 15:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:41 +0000 UTC FinishedAt: 2026-07-06 15:31:48 +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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"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-workflowwp8br/series-workflowwp8br-convert-artifact-427557978/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:41 +0000 UTC FinishedAt: 2026-07-06 15:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:41 +0000 UTC FinishedAt: 2026-07-06 15:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:42 +0000 UTC FinishedAt: 2026-07-06 15:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:52 +0000 UTC FinishedAt: 2026-07-06 15:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwp8br[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"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":["netxen_rom_range_valid","netxen_rom_table_valid","netxen_rom_entry_valid","nx_get_table_desc","netxen_nic_validate_header","netxen_nic_validate_bootld","netxen_nic_validate_fw","netxen_nic_validate_product_offs","nx_get_data_desc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETXEN_NIC"],"series_id":"8aa0fcb4-c456-45a3-8588-21c0e6c7fd82","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-06 15:31:52 +0000 UTC FinishedAt: 2026-07-06 15:34:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cba7a313-2fb3-42c5-9364-acc4e71101cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fab94f57-5d0d-47ee-a01d-7d27123c55c2,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-workflowwp8br/series-workflowwp8br-build-action-1129574344/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-workflowwp8br/series-workflowwp8br-build-action-1458854785/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-workflowwp8br/series-workflowwp8br-convert-artifact-427557978/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,}