Name: series-workflowcfnsx Phase: Succeeded StartedAt: 2026-09-08 05:41:26 +0000 UTC FinishedAt: 2026-09-08 06:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[0] Phase: Succeeded StartedAt: 2026-09-08 05:41:26 +0000 UTC FinishedAt: 2026-09-08 06:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 05:41:26 +0000 UTC FinishedAt: 2026-09-08 06:05:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "cd5d63ad-7f96-4335-bb06-aec3541a1bb0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "svm_inject_exception", "svm_inject_nmi", "svm_inject_irq", "svm_complete_interrupts", "nested_svm_check_event_inj", "nested_save_pending_event_to_vmcb12", "__nested_copy_vmcb_control_to_cache" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX2luamVjdF9leGNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9ubWkmIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9pcnEmIzM0OywKICAgICYjMzQ7c3ZtX2NvbXBsZXRlX2ludGVycnVwdHMmIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmomIzM0OywKICAgICYjMzQ7bmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTImIzM0OywKICAgICYjMzQ7X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgU1ZNX0VWVElOSl9WQUxJRGAgbWFjcm8gaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCBmcm9tIGAoMSBcdTAwM2NcdTAwM2MgMzEpYCB0byBgQklUKDMxKWAuIFRoaXMgYXZvaWRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBlbnN1cmVzIHRoZSBjb25zdGFudCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIGJpdG1hc2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgcGFzc2VkIHRvIHVzZXJzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgbWVtb3J5IGRpc2Nsb3N1cmUgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFx1MDAzY1x1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVjNGNkMjc2NTU3ZDU2NWQ1Zjg5Y2Q2OTdiYzgyZDhjYjg0MDA2ZjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA2OjAzOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGFhNjM0MzFiYTkyYzMuLjkyMWU2ZWNjNDgzNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC02MzcsNyAmIzQzOzYzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuICNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU09GVCAoNCBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIFxuLSNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG4mIzQzOyNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcdTAwM2NcdTAwM2MgMTEpXG4gXG4gI2RlZmluZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgfihTVk1fRVZUSU5KX1ZFQ19NQVNLIHwgU1ZNX0VWVElOSl9UWVBFX01BU0sgfCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX2luamVjdF9leGNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9ubWkmIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9pcnEmIzM0OywKICAgICYjMzQ7c3ZtX2NvbXBsZXRlX2ludGVycnVwdHMmIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmomIzM0OywKICAgICYjMzQ7bmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTImIzM0OywKICAgICYjMzQ7X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBTVk1fRVZUSU5KX1ZBTElEIG1hY3JvIGRlZmluaXRpb24gZnJvbSAoMSBcdTAwM2NcdTAwM2MgMzEpIHRvIEJJVCgzMSkgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgsIGNoYW5naW5nIGl0cyBzaWduZWRuZXNzL3R5cGUgcmVwcmVzZW50YXRpb24gaW4gYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhbmQgbWFzayBkZWZpbml0aW9ucyBsaWtlIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyBhY3Jvc3MgS1ZNIEFNRCBhbmQgbmVzdGVkIFNWTSBldmVudCBpbmplY3Rpb24gcm91dGluZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYzRjZDI3NjU1N2Q1NjVkNWY4OWNkNjk3YmM4MmQ4Y2I4NDAwNmYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uOTIxZTZlY2M0ODM1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTYzNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyAmbHQ7Jmx0OyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0ICZsdDsmbHQ7IFNWTV9FVlRJTkpfVFlQRV9TSElGVCkKIAotI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxICZsdDsmbHQ7IDMxKQomIzQzOyNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxICZsdDsmbHQ7IDExKQogCiAjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNWTSBIZWFkZXIgRmlsZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGRpZmYuIEkgc2VlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzb21lIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZXZlbnQgaW5qZWN0aW9uLiBMb29rcyBsaWtlIHRoZSBgU1ZNX0VWVElOSl9WQUxJRGAgbWFjcm8gaGFzIGJlZW4gbW9kaWZpZWQuIFRoZXkmIzM5O3ZlIHJlcGxhY2VkIGAoMSAmbHQ7Jmx0OyAzMSlgIHdpdGggYEJJVCgzMSlgLiBJbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY2hhbmdlPyBDb3VsZCBiZSBhIHN0eWxpc3RpYyB0aGluZywgb3IgbWF5YmUgdGhlcmUgYXJlIGltcGxpY2F0aW9ucyBmb3IgYml0IG1hbmlwdWxhdGlvbiB0aGF0IEkgbmVlZCB0byBjb25zaWRlci4KClJpZ2h0LCB0aW1lIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQuIExldCBtZSBqdXN0IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBpbiB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MzcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb25zdGFudHMgYXJlIGJlaW5nIHVzZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIgZGVmaW5pdGlvbnMsIGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIGl0JiMzOTtzIGJlaGF2aW9yLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIGFwcHJvcHJpYXRlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdCNkZWZpbmUgU1ZNX0VWVElOSl9WRUNfTUFTSyAweGZmXG4gNjMxOlx0XG4gNjMyOlx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOFxuIDYzMzpcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX01BU0sgKDcgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2MzQ6XHRcbiA2MzU6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9JTlRSICgwIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gNjM2Olx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gNjM3Olx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2Mzg6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gNjM5Olx0XG4gNjQwOlx0I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcbiA2NDE6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFx1MDAzY1x1MDAzYyAxMSlcbiA2NDI6XHRcbiA2NDM6XHQjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFxcXG4gNjQ0Olx0XHRcdFx0XHQgICBTVk1fRVZUSU5KX1ZBTElEX0VSUiB8IFNWTV9FVlRJTkpfVkFMSUQpXG4gNjQ1Olx0XG4gNjQ2Olx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkVDX01BU0sgU1ZNX0VWVElOSl9WRUNfTUFTS1xuIDY0NzpcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSyBTVk1fRVZUSU5KX1RZUEVfTUFTS1xuIDY0ODpcdFxuIDY0OTpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcbiA2NTA6XHQjZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxuIDY1MTpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxuIDY1MjpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcbiA2NTM6XHRcbiA2NTQ6XHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG4gNjU1Olx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXG4gNjU2Olx0XG4gNjU3Olx0I2RlZmluZSBTVk1fRVhJVElORk9TSElGVF9UU19SRUFTT05fSVJFVCAzNlxuIDY1ODpcdCNkZWZpbmUgU1ZNX0VYSVRJTkZPU0hJRlRfVFNfUkVBU09OX0pNUCAzOFxuIDY1OTpcdCNkZWZpbmUgU1ZNX0VYSVRJTkZPU0hJRlRfVFNfSEFTX0VSUk9SX0NPREUgNDRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCaXR3aXNlIE9wZXJhdGlvbnMgYW5kIERhdGEgVHlwZXMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbXBhcmUgYEJJVCgzMSlgIHdpdGggYCgxICZsdDsmbHQ7IDMxKWAuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgaW4gQywgYCgxICZsdDsmbHQ7IDMxKWAgd2hlbiB1c2luZyBhIDMyLWJpdCBgaW50YCwgZXZhbHVhdGVzIHRvIGAweDgwMDAwMDAwYCwgd2hpY2ggaXMgcHJvYmxlbWF0aWMgZHVlIHRvIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3Igb3IgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBpbiBDOTkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AgZm9yIGFueSBpc3N1ZXMuCgpBaGEhIExpbmUgNjQzIHJldmVhbHMgdGhhdCBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBpcyBkZWZpbmVkIGFzIHRoZSBiaXR3aXNlIE5PVCBvZiBhIGNvbWJpbmF0aW9uIG9mIG1hc2tzLiBUaGUgc2lnbmlmaWNhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGlmIGBTVk1fRVZUSU5KX1ZBTElEYCB1c2VzIGAoMSAmbHQ7Jmx0OyAzMSlgIHdpdGggYSAzMi1iaXQgYGludGAsIHRoZW4gdGhlIGJpdHdpc2UgTk9ULCBgfiguLi4pYCwgd2lsbCBlaXRoZXIgc2lnbi1leHRlbmQgdG8gNjQtYml0IHdoZW4gY2FzdCB0byBgdTY0YCBvciB3aWxsIGJlIGEgc2lnbmVkIDMyLWJpdCBgaW50YC4KCkhvd2V2ZXIsIGlmIGBTVk1fRVZUSU5KX1ZBTElEYCB1c2VzIGBCSVQoMzEpYCwgd2hpY2ggaXMgYCgxVUwgJmx0OyZsdDsgMzEpYCwgd2UgaGF2ZSBhIGRpZmZlcmVudCBwaWN0dXJlLiBPbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgbGlrZSB4ODZfNjQsIGAxVUxgIGlzIGFuIGB1bnNpZ25lZCBsb25nYCB3aGljaCBpcyA2NC1iaXQuIFRoZXJlZm9yZSwgdGhlIGVudGlyZSBleHByZXNzaW9uIGluY2x1ZGluZyB0aGUgbWFza3MgdGFrZXMgdGhlIHR5cGUgYHVuc2lnbmVkIGxvbmdgIGluIDY0LWJpdCBhcmNoaXRlY3R1cmUuIFNvLCB0aGUgYH5gIG9mIHRoaXMgdW5zaWduZWQgbG9uZywgaW4gNjQtYml0IHdpbGwgc2V0IGJpdHMgMzIuLjYzIHRvIDEuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBvciBgU1ZNX0VWVElOSl9WQUxJRGAgYXJlIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG11c3QgY2hlY2sgdXNhZ2UgdG8gYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVk1fRVZUSU5KXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYz00MTY9ZW51bSBlc19yZXN1bHQgdmVyaWZ5X2V4Y2VwdGlvbl9pbmZvKHN0cnVjdCBnaGNiICpnaGNiLCBzdHJ1Y3QgZXNfZW1fY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MjUtXHRcdHU2NCBpbmZvID0gZ2hjYi1cdTAwM2VzYXZlLnN3X2V4aXRfaW5mb18yO1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDI2Olx0XHR1bnNpZ25lZCBsb25nIHYgPSBpbmZvIFx1MDAyNiBTVk1fRVZUSU5KX1ZFQ19NQVNLO1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI3LVxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI4LVx0XHQvKiBDaGVjayBpZiBleGNlcHRpb24gaW5mb3JtYXRpb24gZnJvbSBoeXBlcnZpc29yIGlzIHNhbmUuICovXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0Mjk6XHRcdGlmICgoaW5mbyBcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzAtXHRcdCAgICAoKHYgPT0gWDg2X1RSQVBfR1ApIHx8ICh2ID09IFg4Nl9UUkFQX1VEKSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0MzE6XHRcdCAgICAoKGluZm8gXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLKSA9PSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQpKSB7XG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzItXHRcdFx0Y3R4dC1cdTAwM2VmaS52ZWN0b3IgPSB2O1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMzLVxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDM0Olx0XHRcdGlmIChpbmZvIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEX0VSUilcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzNS1cdFx0XHRcdGN0eHQtXHUwMDNlZmkuZXJyb3JfY29kZSA9IGluZm8gXHUwMDNlXHUwMDNlIDMyO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02MjktXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzA6I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzMS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzMjojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TSElGVCA4XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjM0LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjM1OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzNjojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9OTUkgKDIgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzNzojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjM4OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0MDojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQxOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQzOiNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NDpcdFx0XHRcdCAgIFNWTV9FVlRJTkpfVkFMSURfRVJSIHwgU1ZNX0VWVElOSl9WQUxJRClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY0NS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NjojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDc6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDk6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjUwOiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTE6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTI6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjUzLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU0OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEIFNWTV9FVlRJTkpfVkFMSURcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlJcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM1OD1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2V2ZW50X2lual92YWxpZF9leGVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4MS0vKlxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozODI6ICogQWNjb3JkaW5nIHRvIHRoZSBBUE0sIFZNUlVOIGV4aXRzIHdpdGggU1ZNX0VYSVRfRVJSIGlmIFNWTV9FVlRJTkpfVkFMSUQgaXNcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzgzLSAqIHNldCBhbmQ6XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4NC0gKiAtIFRoZSB0eXBlIG9mIGV2ZW50X2luaiBpcyBub3Qgb25lIG9mIHRoZSBkZWZpbmVkIHZhbHVlcy5cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg1OiAqIC0gVGhlIHR5cGUgaXMgU1ZNX0VWVElOSl9UWVBFX0VYRVBULCBidXQgdGhlIHZlY3RvciBpcyBub3QgYSB2YWxpZCBleGNlcHRpb24uXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4Ni0gKi9cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9Mzg3PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGV2ZW50X2luailcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzg4LXtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg5Olx0dTMyIHR5cGUgPSBldmVudF9pbmogXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTA6XHR1OCB2ZWN0b3IgPSBldmVudF9pbmogXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MzkyOlx0aWYgKCEoZXZlbnRfaW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzkzLVx0XHRyZXR1cm4gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzk0LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTU6XHRpZiAodHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfSU5UUiBcdTAwMjZcdTAwMjYgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfTk1JIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTY6XHQgICAgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgXHUwMDI2XHUwMDI2IHR5cGUgIT0gU1ZNX0VWVElOSl9UWVBFX1NPRlQpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5Ny1cdFx0cmV0dXJuIGZhbHNlO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5OTpcdGlmICh0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDAwLVx0ICAgICFuZXN0ZWRfc3ZtX2V2ZW50X2lual92YWxpZF9leGVwdCh2Y3B1LCB2ZWN0b3IpKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NTEzPXZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTQ4LVx0dG8tXHUwMDNlZXhpdF9pbnRfaW5mb19lcnIgICA9IGZyb20tXHUwMDNlZXhpdF9pbnRfaW5mb19lcnI7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU0OTpcdHRvLVx1MDAzZWV2ZW50X2luaiAgICAgICAgICAgPSBmcm9tLVx1MDAzZWV2ZW50X2luaiBcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUUztcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTUwLVx0dG8tXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXHUwMDNlZXZlbnRfaW5qX2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTY1NT1zdGF0aWMgdm9pZCBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2My1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uLnZlY3RvcjtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY0Olx0XHRleGl0X2ludF9pbmZvID0gbnIgfCBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjUtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2Ni1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY3Olx0XHRcdGV4aXRfaW50X2luZm8gfD0gU1ZNX0VWVElOSl9WQUxJRF9FUlI7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2OC1cdFx0XHR2bWNiMTItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzItXHR9IGVsc2UgaWYgKHZjcHUtXHUwMDNlYXJjaC5ubWlfaW5qZWN0ZWQpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjczOlx0XHRleGl0X2ludF9pbmZvID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3Ni1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guaW50ZXJydXB0Lm5yO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Nzc6XHRcdGV4aXRfaW50X2luZm8gPSBuciB8IFNWTV9FVlRJTkpfVkFMSUQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OC1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc5LVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmludGVycnVwdC5zb2Z0KVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2ODA6XHRcdFx0ZXhpdF9pbnRfaW5mbyB8PSBTVk1fRVZUSU5KX1RZUEVfU09GVDtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjgxLVx0XHRlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY4MjpcdFx0XHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVFlQRV9JTlRSO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02ODMtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04Mjg9c3RhdGljIGlubGluZSBib29sIGlzX2V2dGlual9zb2Z0KHUzMiBldnRpbmopXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgyOS17XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMDpcdHUzMiB0eXBlID0gZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1RZUEVfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODMxOlx0dTggdmVjdG9yID0gZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZFQ19NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzItXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMzpcdGlmICghKGV2dGluaiBcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzNC1cdFx0cmV0dXJuIGZhbHNlO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzUtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzNjpcdGlmICh0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9TT0ZUKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzctXHRcdHJldHVybiB0cnVlO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzgtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzOTpcdHJldHVybiB0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCBcdTAwMjZcdTAwMjYga3ZtX2V4Y2VwdGlvbl9pc19zb2Z0KHZlY3Rvcik7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0MC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NDI9c3RhdGljIGJvb2wgaXNfZXZ0aW5qX25taSh1MzIgZXZ0aW5qKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDMte1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDQ6XHR1MzIgdHlwZSA9IGV2dGluaiBcdTAwMjYgU1ZNX0VWVElOSl9UWVBFX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0NS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ2Olx0aWYgKCEoZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQ3LVx0XHRyZXR1cm4gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0OC1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ5Olx0cmV0dXJuIHR5cGUgPT0gU1ZNX0VWVElOSl9UWVBFX05NSTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODUwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4OT1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDAtXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGV4LVx1MDAzZXZlY3RvclxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDE6XHRcdHwgU1ZNX0VWVElOSl9WQUxJRFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDI6XHRcdHwgKGV4LVx1MDAzZWhhc19lcnJvcl9jb2RlID8gU1ZNX0VWVElOSl9WQUxJRF9FUlIgOiAwKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDM6XHRcdHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDQtXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2lual9lcnIgPSBleC1cdTAwM2VlcnJvcl9jb2RlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU2LVx0XHRTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDU3Olx0aW50IGludF92ZWMgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTgtXHR1aW50MzJfdCB0eXBlID1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3ODg9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzc5MjpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODQyPXN0YXRpYyB2b2lkIHN2bV9pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCByZWluamVjdGVkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg1MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg1MjpcdFx0dHlwZSA9IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODUzLVx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg1NDpcdFx0dHlwZSA9IFNWTV9FVlRJTkpfVFlQRV9JTlRSO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODU1LVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg3NzpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gaW50ci1cdTAwM2VuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCB0eXBlO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODc4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTIte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTM6XHR1NjQgZGF0YSA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfCB2ZWN0b3I7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjg3OiNkZWZpbmUgU1ZNX0VWVElOSl9WRUNfTUFTSyAweGZmXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjg4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI4OTojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TSElGVCA4XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MjkwOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX01BU0sgKDcgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MjkyOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk0OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk1OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk3OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk4OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDA6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkVDX01BU0sgU1ZNX0VWVElOSl9WRUNfTUFTS1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0zMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzAzOiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDQ6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTk1JIFNWTV9FVlRJTkpfVFlQRV9OTUlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDU6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA2OiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0zMDctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA4OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEIFNWTV9FVlRJTkpfVkFMSURcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzEwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM9Nzk9c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB1NjQgaXNfbm1pLCB1NjQgaWR0X2FsdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTkyLVx0aWYgKGlzX25taSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5MzpcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYy05NC1cdH0gZWxzZSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jOjk1Olx0XHR2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gSU5UX05SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYy05Ni1cdFx0LyogVGhlIHJldHVybiBhZGRyZXNzIHB1c2hlZCBvbiBzdGFjayAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzoxMjY6XHR2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gQlBfVkVDVE9SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI3LVx0LyogVGhlIHJldHVybiBhZGRyZXNzIHB1c2hlZCBvbiBzdGFjaywgc2tpcCBvdmVyIFVEMiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVk0gRXhpdCBJbmZvcm1hdGlvbiBWYWxpZGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYFNWTV9FWElUSU5USU5GT19WQUxJRGAgbWFjcm8uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBhcyBgU1ZNX0VWVElOSl9WQUxJRGAuICBIbW0sIGludGVyZXN0aW5nLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHN1YnN0aXR1dGlvbiBpcyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFsaWRpdHkgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGVyZSBpcyBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYCBhY3R1YWxseSByZWZlcmVuY2VkPyBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gIExldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyB0aGluZyBwb3BzIHVwLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1ZNX0VYSVRJTlRJTkZPXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD01NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ1LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ2OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NzojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY0OC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0OTojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSIFNWTV9FVlRJTkpfVFlQRV9JTlRSXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTA6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTk1JIFNWTV9FVlRJTkpfVFlQRV9OTUlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MTojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9FWEVQVCBTVk1fRVZUSU5KX1RZUEVfRVhFUFRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MjojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIFNWTV9FVlRJTkpfVFlQRV9TT0ZUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NTMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTQ6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU1OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjU2LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU1LVx0aW50IGludF90eXBlID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvIFx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDU2Olx0XHRTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU3LVx0aW50IGludF92ZWMgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTgtXHR1aW50MzJfdCB0eXBlID1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ1OTpcdFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYwLVx0dWludDMyX3QgaWR0X3YgPVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDYxOlx0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRDtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ2Mi1cdGJvb2wgaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NzktXHRcdHN3aXRjaCAodHlwZSkge1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDgwOlx0XHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX05NSTpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ4MS1cdFx0XHR2Y3B1LVx1MDAzZWFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0ODItXHRcdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0ODM6XHRcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQ6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0ODQtXHRcdFx0aWYgKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzIgXHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDkxLVx0XHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDkyOlx0XHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFI6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0OTM6XHRcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ5NC1cdFx0XHRrdm1fY2xlYXJfaW50ZXJydXB0X3F1ZXVlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjUwMS1cdGlmIChyZWFzb24gIT0gVEFTS19TV0lUQ0hfR0FURSB8fFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTAyOlx0ICAgIGludF90eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgfHxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjUwMzpcdCAgICAoaW50X3R5cGUgPT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MDQtXHQgICAgIChpbnRfdmVjID09IE9GX1ZFQ1RPUiB8fCBpbnRfdmVjID09IEJQX1ZFQ1RPUikpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNTA4LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTA5Olx0aWYgKGludF90eXBlICE9IFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MTAtXHRcdGludF92ZWMgPSAtMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2ODM9c3RhdGljIHZvaWQgc3ZtX2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXHQqaW50cl9pbmZvID0gY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlx0aWYgKCgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjk0Olx0ICAgICgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY5NS1cdFx0KmVycm9yX2NvZGUgPSBjb250cm9sLVx1MDAzZWV4aXRfaW50X2luZm9fZXJyO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzcwMD1zdGF0aWMgdm9pZCBzdm1fZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDc6XHRpZiAoKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XHQgICAgKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVx0XHQqZXJyb3JfY29kZSA9IGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qX2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQyOTQ9c3RhdGljIHZvaWQgc3ZtX2NvbXBsZXRlX3NvZnRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI5Ni17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQyOTc6XHRib29sIGlzX2V4Y2VwdGlvbiA9ICh0eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI5ODpcdGJvb2wgaXNfc29mdCA9ICh0eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mjk5LVx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00MzM4PXN0YXRpYyB2b2lkIHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzNjQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNjU6XHRpZiAoIShleGl0aW50aW5mbyBcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2OS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM3MDpcdHZlY3RvciA9IGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNzE6XHR0eXBlID0gZXhpdGludGluZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19UWVBFX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzNzItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzc2LVx0c3dpdGNoICh0eXBlKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNzc6XHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX05NSTpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM3OC1cdFx0dmNwdS1cdTAwM2VhcmNoLm5taV9pbmplY3RlZCA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzgwLVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM4MTpcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQ6IHtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4Mi1cdFx0dTMyIGVycm9yX2NvZGUgPSAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4OS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5MDpcdFx0aWYgKGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkxLVx0XHRcdGVycm9yX2NvZGUgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm9fZXJyO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5My1cdFx0a3ZtX3JlcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlY3RvcixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5NDpcdFx0XHRcdCAgICAgIGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk1LVx0XHRcdFx0ICAgICAgZXJyb3JfY29kZSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk3LVx0fVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0Mzk4Olx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSOlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk5LVx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIHZlY3RvciwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NDAwLVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDQwMTpcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDQwMi1cdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCB2ZWN0b3IsIHRydWUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTEzMT1zdGF0aWMgaW50IHN2bV9jaGVja19lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxfdHlwZSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUxMzgtXHQvKiBDaGVjayB0aGF0IGVtdWxhdGlvbiBpcyBwb3NzaWJsZSBkdXJpbmcgZXZlbnQgdmVjdG9yaW5nICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUxMzk6XHRpZiAoKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUxNDAtXHQgICAgIWt2bV9jYW5fZW11bGF0ZV9ldmVudF92ZWN0b3JpbmcoZW11bF90eXBlKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzAwOiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDE6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzAyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMzojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSIFNWTV9FVlRJTkpfVFlQRV9JTlRSXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA0OiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA1OiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwNjojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIFNWTV9FVlRJTkpfVFlQRV9TT0ZUXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwODojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA5OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gS1ZNL1NWTSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AsIHNwZWNpZmljYWxseSB0aGlzIGxpbmU6IGB0by0mZ3Q7ZXZlbnRfaW5qID0gZnJvbS0mZ3Q7ZXZlbnRfaW5qICZhbXA7IH5TVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFM7YC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpa2VseSBoaW5nZXMgb24gaG93IHRoaXMgYml0bWFzayBpbnRlcmFjdHMgd2l0aCB0aGUgYGV2ZW50X2luamAgZmllbGQuIEl0IGxvb2tzIGxpa2UgYHRvLSZndDtldmVudF9pbmpgIGlzIGEgYHUzMmAuIFdlJiMzOTtyZSBtYXNraW5nIGl0IHdpdGggdGhlIGJpdHdpc2UgaW52ZXJzZSBvZiBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSB2YWx1ZSBvZiBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyB0aGUgYml0d2lzZSBOT1Qgb2YgYSBjb21iaW5hdGlvbiBvZiBtYXNrczogYH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKWAuIE5vdywgdGhlIGxlZ2FjeSBkZWZpbml0aW9uIG9mIGBTVk1fRVZUSU5KX1ZBTElEYCB3YXMgYCgxICZsdDsmbHQ7IDMxKWAuIEFuZCB0aGlzIGlzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3cgY29tZXMgaW50byBwbGF5LiBJZiB3ZSB0cmVhdCBgKDEgJmx0OyZsdDsgMzEpYCBhcyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBpbiBDLCB3aGljaCBpcyB3aGF0IHRoZSBjb2RlIHNlZW1pbmdseSBkb2VzLCB0aGlzIG9wZXJhdGlvbiB0cmlnZ2VycyB1bmRlZmluZWQgYmVoYXZpb3IuIENvbXBpbGVycyBsaWtlIEdDQy9DbGFuZyB3aWxsIHR5cGljYWxseSBpbnRlcnByZXQgdGhpcyBhcyAtMjE0NzQ4MzY0OCAoMHg4MDAwMDAwMCkuCgpTbywgdGhlIGNvbWJpbmVkIG1hc2ssIGluIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLCBldmFsdWF0ZXMgdG8gYSBuZWdhdGl2ZSBgaW50YCB2YWx1ZSwgYW5kIHRha2luZyBpdHMgYml0d2lzZSBpbnZlcnNlIGdpdmVzIHVzIGFub3RoZXIgbmVnYXRpdmUgbnVtYmVyLiBCdXQsIGlmIGBTVk1fRVZUSU5KX1ZBTElEYCBpcyBub3cgZGVmaW5lZCB1c2luZyBgQklUKDMxKWAsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gYCgxVUwgJmx0OyZsdDsgMzEpYCwgaXQmIzM5O3MgYSA2NC1iaXQgb3BlcmF0aW9uIG9uIHg4Nl82NCwgd2hpY2ggcmVzb2x2ZXMgdG8gYDB4ODAwMDAwMDBVTGAuIE5vdywgY2FsY3VsYXRpbmcgdGhhdCBjb21iaW5lZCBtYXNrIGluIHRoZSBuZXcgZGVmaW5pdGlvbiwgd2l0aCB0aGUgNjQgYml0IGRlZmluaXRpb24sIHJlc3VsdHMgaW4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCYjMzk7cyBtdWNoIGxhcmdlciB0aGFuIGEgdTMyLCBhbmQgdGFraW5nIHRoZSBiaXR3aXNlIGludmVyc2UsIHN0aWxsIGdpdmVzIHVzIHRoZSByaWdodCBiaXRzLCBidXQgYXMgYSBtdWNoIGxhcmdlciBgdW5zaWduZWQgbG9uZ2AgdmFsdWUuCgpUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIHN1YnNlcXVlbnQgYml0d2lzZSBBTkQ6IGBmcm9tLSZndDtldmVudF9pbmogJmFtcDsgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AuIElmIHRoZSBjb21waWxlciBzdGlsbCB0cmVhdHMgdGhlIGV4cHJlc3Npb24gYXMgc2lnbmVkIDMyIGJpdCwgdGhlbiBpdCB3aWxsIGdldCBhbiBpbmNvcnJlY3QgdmFsdWUgYW5kIHRoZSBtYXNrIGJlY29tZXMgbXVjaCBiaWdnZXIgd2hlbiBjb25zaWRlcmluZyBgQklUKDMxKWAgYW5kIHRoZSBwcm9tb3Rpb24gdGhhdCBoYXBwZW5zIGhlcmUuIFRoZSBiaXR3aXNlIG1hc2sgdGhhdCB3ZSYjMzk7cmUgYXBwbHlpbmcgd2l0aCBgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2Agd2lsbCBpbXBhY3QgaG93IHRoZSBgZnJvbS0mZ3Q7ZXZlbnRfaW5qYCB2YWx1ZSBpcyB1bHRpbWF0ZWx5IG1vZGlmaWVkLiBUaGUgdTMyIHZhbHVlIGlzIGdldHRpbmcgbWFza2VkIHdpdGggd2hhdCBhcHBlYXJzIHRvIGJlIGEgbXVjaCBsYXJnZXIgbWFzay4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBwdWxsIHVwIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGBnaXQgbG9nIC0xIC1wYCB0byBzZWUgdGhlIGFjdHVhbCBwYXRjaCB0aGF0IGludHJvZHVjZWQgdGhpcyBjaGFuZ2UgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg9NTY0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0MDojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQxOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaD0yMzM9c3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYiB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTc6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxIFx1MDAzY1x1MDAzYyAzMSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTg6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcdTAwM2NcdTAwM2MgMTEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDk1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBBIEZvY3VzZWQgRXhhbWluYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgY2hhbmdlLi4uIGRvZXMgaXQgdG91Y2ggcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGU/IExldCYjMzk7cyB0cmFjZSBpdC4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgU1ZNX0VWVElOSl9WQUxJRGAuICBJIGtub3cgdGhhdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgS1ZNIEFNRCAoU1ZNKSB2aXJ0dWFsaXphdGlvbiBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AgYW5kIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4gIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyBLVk0gQU1EIFNWTSAqcmVhY2hhYmxlKiBpbiBhIGZ1enppbmcgY29udGV4dD8KCkhtbSwgY2FuIHdlIGdldCB0aGVyZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IEkgbmVlZCB0byBjbGFyaWZ5OiBpcyBLVk0gKGt2bV9hbWQgc3BlY2lmaWNhbGx5KSBmdXp6ZWQgaW4gdGhvc2Ugc2NlbmFyaW9zPyAgSSBrbm93IHN5emthbGxlciAqY2FuKiBmdXp6IEtWTSBpZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgS1ZNIGFyZSBlbmFibGVkLCBidXQgZG9lcyBpdCBhY3R1YWxseSAqZG8qIGl0PyBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3l6a2FsbGVyIEtWTSBmdXp6aW5nIGNvbmZpZy4KCkxldCYjMzk7cyBjYXJlZnVsbHkgcmVmZXIgdG8gdGhlIHByb21wdCYjMzk7cyBzZWN0aW9ucyB0byBtYWtlIHN1cmUgSSBnZXQgdGhpcyByaWdodC4KCiogICAqKlNlY3Rpb24gMTogVGhlIFJlYWNoYWJpbGl0eSBHYXRlKiogIEZ1enppbmcgaXMgb25seSB2YWxpZCBmb3IgY29kZSB0aGF0IGNhbiBhY3R1YWxseSBydW4gaW4gdGhlIGV4cGVjdGVkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSwgR0NFLCB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzKS4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgZGVzaWduLCBubyBmdXp6aW5nIGlzIG5lZWRlZCwgZXZlbiBpZiB0aGVyZSBhcmUgYXNzZXJ0aW9ucyBvciBjb21wbGV4IG5ldyBsb2dpYy4gQ2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciByZWZhY3RvcmluZyBuZWVkIHRvIGJlIHRob3JvdWdobHkgY2hlY2tlZC4gTmV3IG9yIG1vZGlmaWVkIGFzc2VydGlvbnMgaW4gKnJlYWNoYWJsZSogY29kZSAqbXVzdCogYmUgZnV6emVkLgoqICAgKipTZWN0aW9uIDI6IE5lZ2F0aXZlIENyaXRlcmlhIChXaGVuIHRvIFJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCkqKiAgT25seSByZXR1cm4gYGZhbHNlYCBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczogbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSAoRG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nL3RyYWNlcG9pbnRzLCBidWlsZCBzeXN0ZW0vS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIHRoZSBjb21waWxlZCBDIGxvZ2ljKSwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIChzcGVjaWZpYyBQQ0llL05JQy9HUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUpLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGUuZy4sIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHRyaWdnZXIgb24gaG90LXVucGx1ZykuCiogICAqKlNlY3Rpb24gMzogUG9zaXRpdmUgQ3JpdGVyaWEgKFdoZW4gdG8gUmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWApKiogUmV0dXJuIGB0cnVlYCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlczogY29yZSBzdWJzeXN0ZW1zIChNTSwgc3luYywgQlBGLCBldGMuKSwgcmVmYWN0b3JpbmdzL2NvZGUgY2xlYW51cHMgYWZmZWN0aW5nIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgcnVudGltZSBhc3NlcnRpb25zL2RlZmVuc2l2ZSBjaGVja3MsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMgKGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMpLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgYCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSAmbHQ7Jmx0OyAzMSlgIGJlaW5nIGNoYW5nZWQgdG8gYCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpYCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgLiBJcyB0aGlzIGEgbWFjcm8gZGVmaW5pdGlvbiBjaGFuZ2UgdGhhdCBhZmZlY3RzIGNvbXBpbGVkIEMgY29kZT8gWWVzLCBpdCYjMzk7cyBhIGtlcm5lbCBoZWFkZXIuIEkgdW5kZXJzdGFuZCB0aGF0LgoKU28sIGlzIEtWTSBBTUQgcmVhY2hhYmxlPyBJbiBRRU1VICh1c2luZyBuZXN0ZWQgQU1EIFNWTSBvciBBTUQgQ1BVIGVtdWxhdGlvbiB3aXRoIGBxZW11LXN5c3RlbS14ODZfNjQgLWNwdSBob3N0YCBvciBgLWNwdSBFUFlDYCksIHRoZSBga3ZtX2FtZGAgbW9kdWxlIGlzIGNvbXBpbGVkLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIHdoZW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQsIG9yIEFNRCBDUFUgaXMgZW11bGF0ZWQsIGV2ZW4gdmlhIEtWTSBpb2N0bHMgKC9kZXYva3ZtKSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBLVk1cX0FNRC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHg4NioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYXJjaC94ODYva3ZtL0tjb25maWdgLCBhcm91bmQgbGluZSAxNDYuIFRoYXQgYXJlYSB0eXBpY2FsbHkgZGVhbHMgd2l0aCBjb3JlIGZlYXR1cmUgZW5hYmxlbWVudCwgc28gdGhhdCYjMzk7cyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBLY29uZmlnIGZyYWdtZW50IGlzIHN0cnVjdHVyZWQsIGhvdyBpdCBjb250cm9scyB0aGUgYnVpbGQsIGFuZCB3aGF0JiMzOTtzIGRlcGVuZGVudCBvbiB3aGF0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBoaWVyYXJjaHkgb2YgY29uZGl0aW9uYWxzIOKAkyBgaWYgS1ZNYCwgbmVzdGVkIGZ1cnRoZXIgYmFzZWQgb24gQ1BVIGZlYXR1cmVzLCBtYXliZSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGRlZmluZXMsIGFuZCBsaWtlbHkgc29tZSBjcnVjaWFsIGRlZmF1bHRzIHRoYXQgYWZmZWN0IHRoZSBvdmVyYWxsIEtWTSBwZXJmb3JtYW5jZSBwcm9maWxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgc2VjdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgd2hpY2ggb3RoZXIgS2NvbmZpZ3MgYXJlIHJlZmVyZW5jZWQgb3IgaW5jbHVkZWQgaGVyZSwgYW5kIGhvdyB0aGlzIHNlY3Rpb24gcmVsYXRlcyB0byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLiBIb3BlZnVsbHksIGl0IHdpbGwgcXVpY2tseSBvcmllbnQgbWUgdG8gdGhlIGNvZGUgSSBhbSBpbnZlc3RpZ2F0aW5nIGFuZCBJIGNhbiBiZWdpbiBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGdldCBteSB0ZXN0aW5nIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBTVk1fRVZUSU5KX1ZBTElEIE1hY3JvIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNlZSB3aGVyZSBgU1ZNX0VWVElOSl9WQUxJRGAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBhcmVhcyB3aXRoaW4gdGhlIEtWTSBBTUQgKFNWTSkgc3Vic3lzdGVtOiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgLCBhbmQgYGFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIG1pbm9yIGNoYW5nZTsgdGhpcyBpcyBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCYjMzk7cyBnb2luZyB0byByaXBwbGUgdGhyb3VnaCBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zLgoKTm93LCB0aGUgZnV6emluZyBndWlkYW5jZSBpcyBjcml0aWNhbCBoZXJlLiBUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGZvY3VzZXMgb24gaWRlbnRpZnlpbmcgcmVncmVzc2lvbnMsIGJ1Z3MsIGFuZCB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMsIGFuZCBpdCBoaW5nZXMgb24gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgY29kZS4gVGhlIG1vZGlmaWVkIGNvZGUmIzM5O3Mgc3RydWN0dXJhbCByZWFjaGFiaWxpdHkgdGFrZXMgcHJlY2VkZW5jZS4gSWYgdGhlIGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgc2hvdWxkIG5vdCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2YgaG93IGNvbXBsZXggdGhlIGFkZGVkIGNvZGUgb3IgaG93IG1hbnkgYXNzZXJ0aW9ucy4gSSBjYW4mIzM5O3QgdGFrZSBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBpbiBjb3JlIHN1YnN5c3RlbXMgb2Z0ZW4gaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBhYnNvbHV0ZWx5ICptdXN0KiBiZSBmdXp6ZWQuIENvbnZlcnNlbHksIEkgY2FuIG9ubHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmICphbGwqIG1vZGlmaWVkIGNvZGUgZmFsbHMgaW50byB0aGUgbmVnYXRpdmUgY3JpdGVyaWEg4oCTIHdoaWNoIGFyZSBlYXNpbHkgY2hlY2thYmxlLgoKSGVyZSYjMzk7cyB0aGUgcnViOiB0aGUgY2hhbmdlIHRyYW5zZm9ybXMgYFNWTV9FVlRJTkpfVkFMSURgIGZyb20gYCgxICZsdDsmbHQ7IDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGFmZmVjdHMgQyBtYWNybyBleHBhbnNpb24gd2l0aGluIHRoZSBLVk0gQU1EIChTVk0pIHN1YnN5c3RlbS4gSXMgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYT8gTm8uIEl0JiMzOTtzIG5vdCBhIGRvY3VtZW50YXRpb24gY2hhbmdlLiBJdCYjMzk7cyBub3QgdXNlcnNwYWNlIGNvZGUuIEl0JiMzOTtzIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcuIEl0JiMzOTtzIG5vdCBhIGJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZSB0aGF0IGRvZXNuJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQgQyBsb2dpYy4gS1ZNIGlzIHNwZWNpZmljYWxseSBlbXVsYXRlZC92aXJ0dWFsaXplZCBpbiBzdGFuZGFyZCBRRU1VL0tWTSBBTUQgZW52aXJvbm1lbnRzLiBJdCBpcyBub3Qgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCYjMzk7cyBub3QgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGggLyB0ZWFyZG93bi4gSXQmIzM5O3Mgbm90IGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGFyZ2V0IChhbWQ2NCkuCgpUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgdHJ1ZWAuIFRoaXMgaXNuJiMzOTt0IGEgJiMzNDtuby1vcCYjMzQ7IGNoYW5nZTsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gYSBjb3JlIG1hY3JvIGFmZmVjdGluZyBtdWx0aXBsZSBrZXkgZnVuY3Rpb25zIHdpdGhpbiBhIGNydWNpYWwgc3Vic3lzdGVtLgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gVGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZCBhcmU6IGBzdm1faW5qZWN0X2V4Y2VwdGlvbmAsIGBzdm1faW5qZWN0X25taWAsIGBzdm1faW5qZWN0X2lycWAsIGB0YXNrX3N3aXRjaF9pbnRlcmNlcHRpb25gLCBgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHNgLCBgc3ZtX2dldF9leGl0X2luZm9gLCBgc3ZtX2dldF9lbnRyeV9pbmZvYCBmcm9tIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYDsgYW5kIGBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luamAsIGBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZWAsIGFuZCBgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJgIGZyb20gYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLiBJIG5lZWQgdG8gbm93IGRldGVybWluZSBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMuIEkgd2lsbCBub3cgZXhhbWluZSB0aGVpciBkZWZpbml0aW9ucyBpbiB0aGVpciByZXNwZWN0aXZlIGAuY2AgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV9pbmplY3RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zNy1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg6c3RhdGljIHZvaWQgbmVzdGVkX3N2bV9pbmplY3RfbnBmX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz05OT1zdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luaXRfbW11X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTE4LVx0dmNwdS1cdTAwM2VhcmNoLm5ncGFfd2Fsay5nZXRfcGRwdHIgICAgICAgICA9IG5lc3RlZF9zdm1fZ2V0X3RkcF9wZHB0cjtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTE5Olx0dmNwdS1cdTAwM2VhcmNoLm5ncGFfd2Fsay5pbmplY3RfcGFnZV9mYXVsdCA9IG5lc3RlZF9zdm1faW5qZWN0X25wZl9leGl0O1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTY3Mz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2lzX2V4Y2VwdGlvbl92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNjgwLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxNjgxOnN0YXRpYyB2b2lkIG5lc3RlZF9zdm1faW5qZWN0X2V4Y2VwdGlvbl92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNjgyLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE3MjE9c3RhdGljIGludCBzdm1fY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNzUyLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE3NTM6XHRcdG5lc3RlZF9zdm1faW5qZWN0X2V4Y2VwdGlvbl92bWV4aXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE3NTQtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzQyPXN0YXRpYyBpbnQgc3ZtX3VwZGF0ZV9zb2Z0X2ludGVycnVwdF9yaXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4OTpzdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM5MC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNzYyPXN0YXRpYyBpbnQgcHJlX3N2bV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc4Ny1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzc4ODpzdGF0aWMgdm9pZCBzdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3ODkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzgxOT1zdGF0aWMgYm9vbCBzdm1fc2V0X3ZubWlfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODQxLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozODQyOnN0YXRpYyB2b2lkIHN2bV9pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCByZWluamVjdGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MzkzLVx0LnBhdGNoX2h5cGVyY2FsbCA9IHN2bV9wYXRjaF9oeXBlcmNhbGwsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzOTQ6XHQuaW5qZWN0X2lycSA9IHN2bV9pbmplY3RfaXJxLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1Mzk1Olx0LmluamVjdF9ubWkgPSBzdm1faW5qZWN0X25taSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTM5Ni1cdC5pc192bm1pX3BlbmRpbmcgPSBzdm1faXNfdm5taV9wZW5kaW5nLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzk3LVx0LnNldF92bm1pX3BlbmRpbmcgPSBzdm1fc2V0X3ZubWlfcGVuZGluZyxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTM5ODpcdC5pbmplY3RfZXhjZXB0aW9uID0gc3ZtX2luamVjdF9leGNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzOTktXHQuY2FuY2VsX2luamVjdGlvbiA9IHN2bV9jYW5jZWxfaW5qZWN0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU5NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG5lc3RlZC5jYCBGdW5jdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5lc3RlZC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBmdW5jdGlvbnMgYXJlIGluIGhlcmUgYW5kIHdoYXQmIzM5O3MgdGhlaXIgcHVycG9zZT8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgbW9kdWxlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXN0ZWQgbG9vcHM/IFJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscz8gUGVyaGFwcyBzb21lIGRlZXBseSBuZXN0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGFjY2VzcyBtZXRob2RzPyBLbm93aW5nIHRoZSBsYW5kc2NhcGUgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb21wbGV4aXR5IGhvdHNwb3RzIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZyBsYXRlciBvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTUxMj1zdGF0aWNcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NTEzOnZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy01MTQtXHRcdFx0XHRcdCBzdHJ1Y3Qgdm1jYl9jdHJsX2FyZWFfY2FjaGVkICp0byxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTU3MD12b2lkIG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU3Mi17XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU3MzpcdF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKFx1MDAyNnN2bS1cdTAwM2V2Y3B1LCBcdTAwMjZzdm0tXHUwMDNlbmVzdGVkLmN0bCwgY29udHJvbCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU3NC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xOTQ2PXN0YXRpYyBpbnQgc3ZtX3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjAwNy1cdHJldCA9IC1FSU5WQUw7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIwMDg6XHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkLCBjdGwpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMDA5LVx0aWYgKCFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgZnVuY3Rpb246CgoqKkRpdmluZyBpbnRvIGBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luamAqKgoKT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiBjaGVja2luZyBmb3IgZXZlbnQgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcywgcG90ZW50aWFsbHkgd2l0aGluIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmVzIChTVk0pLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWFzLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBldmVudHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXN0ZWQgc3RydWN0dXJlLCB3aGF0IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycyB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlLCBhbmQgd2hldGhlciBpdCYjMzk7cyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgaW5wdXQgdmFsaWRhdGlvbiwgb3IgYW55IGxvZ2ljIGZsYXdzIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkIHRvIGluamVjdCBtYWxpY2lvdXMgZXZlbnRzIG9yIGJ5cGFzcyBzZWN1cml0eSBjaGVja3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgZnVuY3Rpb24gd2hlcmUgYSBzaW5nbGUgb3ZlcnNpZ2h0IGNhbiBoYXZlIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcywgc28gaXQmIzM5O3MgY3JpdGljYWwgdG8gc2NydXRpbml6ZSBldmVyeSBsaW5lIG9mIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGwgZ3JhcGggYW5kIHRoZW4gZGl2aW5nIGRlZXAgaW50byBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0zNTg9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9ldmVudF9pbmpfdmFsaWRfZXhlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODYtICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4NzpzdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4OC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz00MDY9c3RhdGljIGJvb2wgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDMwLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo0MzE6XHRpZiAoQ0MoIW5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHZjcHUsIGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qKSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQzMi1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc4MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5lc3RlZCBWTSBTdGF0ZSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmVzdGVkIFZNIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkLCBzbyBteSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byBlaXRoZXIgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCBvciBgbmVzdGVkX3N2bV92bXJ1bmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGxpa2VseSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nIGFuZCB0cmFuc2l0aW9uaW5nIHRoZSBWTSBzdGF0ZSB3aGVuIG5lc3RlZC4gT2YgY291cnNlLCBgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHNgIGlzIHRoZSBmdW5jdGlvbiB0aGV5IGNhbGwgaW4gbWFueSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBJIHNob3VsZCBjaGVjayBpdCwgYXMgdGhhdOKAmXMgdXN1YWxseSB3aGVyZSB0aGUgc3BlY2lmaWMgY29udHJvbCBiaXRzIGFuZCBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIFZNIHRyYW5zaXRpb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBhY3R1YWwgc3RhdGUgY2hhbmdlIGxvZ2ljPyYjMzQ7IE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGgsIHRoZSBwbGFjZSB0aGF0IGlzIGhhbmRsaW5nIHRoZSBjaGVja3MgYW5kIHRoZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiB0aGUgbmVzdGVkIFZNQ0Igc3RydWN0dXJlcy4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9Mzg3PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGV2ZW50X2luailcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQwNS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NDA2OnN0YXRpYyBib29sIG5lc3RlZF92bWNiX2NoZWNrX2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDA3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCB2bWNiX2N0cmxfYXJlYV9jYWNoZWQgKmNvbnRyb2wpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz00ODc9aW50IG5lc3RlZF9zdm1fY2hlY2tfY2FjaGVkX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00OTItXHRcdFx0XHQgICAgbDJfaGFzX3NlcGFyYXRlX3BhdCh2Y3B1KSkgfHxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NDkzOlx0ICAgICFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcdTAwMjZzdm0tXHUwMDNlbmVzdGVkLmN0bCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQ5NC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz01MTM9dm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy01NTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU1NzpcdC8qIENvcHkgYXNpZCBoZXJlIGJlY2F1c2UgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoKSB3aWxsIGNoZWNrIGl0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU1OC1cdHRvLVx1MDAzZWFzaWQgICAgICAgICAgID0gZnJvbS1cdTAwM2Vhc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTk0Nj1zdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIwMDgtXHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkLCBjdGwpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMDA5Olx0aWYgKCFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjAxMC1cdFx0Z290byBvdXRfZnJlZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NjAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMmAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBnb29kIGxvb2sgYXQgYG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBsYXJnZXIgcGljdHVyZSwgcGFydGljdWxhcmx5IGl0cyByZWxhdGlvbiB0byB0aGUgVmlydHVhbCBNYWNoaW5lIENvbnRyb2wgQmxvY2ssIHNwZWNpZmljYWxseSBWTUNCMTIuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzYWZlbHkgYW5kIGVmZmljaWVudGx5IG1hbmFnaW5nIHBlbmRpbmcgZXZlbnRzLCBsaWtlbHkgd2l0aGluIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbnRleHQuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIGFyb3VuZCBhdG9taWNpdHkgYW5kIGRhdGEgY29uc2lzdGVuY3kuIFdoYXQmIzM5O3MgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaGVyZT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGRlYWRsb2Nrcz8KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29kZSYjMzk7cyBlZmZpY2llbmN5IHRvby4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZnJlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzPyBBbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLCBwZXJoYXBzIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0b3JzIG9yIGNsZXZlciBkYXRhIHN0cnVjdHVyZXM/IFRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgaGVyZSBjb3VsZCBiZSBzaWduaWZpY2FudCwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgbmVzdGVkIGVudmlyb25tZW50LiBBbmQgb2YgY291cnNlLCBJIGhhdmUgdG8gbWVudGFsbHkgd2FsayB0aHJvdWdoIHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgc2F2ZSBvcGVyYXRpb24/IEFyZSB0aGVyZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlcyBhbmQgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiBwbGFjZT8gSSBob3BlIHRoZSBkZXZlbG9wZXJzIGhhdmUgY29uc2lkZXJlZCBhbGwgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4gU2VjdXJpdHkgaXMgYWxzbyBhIGh1Z2UgY29uY2Vybi4gQW55IGNoYW5jZSBvZiB2dWxuZXJhYmlsaXR5IGV4cGxvaXRhdGlvbj8KClVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gY29uZmlybSB0aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCwgc2VjdXJlLCBhbmQgcGVyZm9ybXMgb3B0aW1hbGx5IHdpdGhpbiB0aGUgc3lzdGVtJiMzOTtzIGRlc2lnbiBjb25zdHJhaW50cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz02MjA9dm9pZCBuZXN0ZWRfc3luY19jb250cm9sX2Zyb21fdm1jYjAyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjU0LSAqL1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NTU6c3RhdGljIHZvaWQgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTIoc3RydWN0IHZjcHVfc3ZtICpzdm0sXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY1Ni1cdFx0XHRcdFx0XHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTI0OT1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTI5NC1cdGlmICghc3ZtX2lzX3ZtcnVuX2ZhaWx1cmUodm1jYjEyLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTI5NTpcdFx0bmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTIoc3ZtLCB2bWNiMTIpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMjk2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOgoKKipDaGVja2luZyBFdmVudCBJbmplY3Rpb24gRmxhZ3MqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMgYW5hbHlzaXMsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RhdGUgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBmbGFncy4gU3BlY2lmaWNhbGx5LCBgaXNfZXZ0aW5qX3NvZnRgIGFuZCBgaXNfZXZ0aW5qX25taWAuICBLbm93aW5nIHRoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIGlzIGZ1bmRhbWVudGFsLiBUaGV5IGRpY3RhdGUgdGhlIGJlaGF2aW9yIG9mIHNldmVyYWwgY29yZSBjb21wb25lbnRzLCBpbmZsdWVuY2luZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNlcnRhaW4gaW50ZXJydXB0cyBvciBldmVudHMuIEEgc2ltcGxlIG1pc2ludGVycHJldGF0aW9uIGhlcmUgY291bGQgbGVhZCBtZSBkb3duIGEgY29tcGxldGVseSB3cm9uZyBwYXRoLCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBwYXJhbW91bnQuIFRoaXMgaW5pdGlhbCBiaXQgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHRvIGF2b2lkIHdhc3RlZCB0aW1lIGFuZCBtYWtlIHRoZSBpbnZlc3RpZ2F0aW9uIG1vcmUgZWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19ldnRpbmpfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDQ9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MjctXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgyODpzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXZ0aW5qX3NvZnQodTMyIGV2dGluailcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI5LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0MS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQyOnN0YXRpYyBib29sIGlzX2V2dGlual9ubWkodTMyIGV2dGluailcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg1Mj1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk3My1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6OTc0Olx0c3ZtLVx1MDAzZW5taV9sMV90b19sMiA9IGlzX2V2dGlual9ubWkodm1jYjAyLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtOTc1LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtOTc5LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjk4MDpcdGlmIChpc19ldnRpbmpfc29mdCh2bWNiMDItXHUwMDNlY29udHJvbC5ldmVudF9pbmopKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk4MS1cdFx0c3ZtLVx1MDAzZXNvZnRfaW50X2luamVjdGVkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMDgKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogNTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTS9TVk0gRXZlbnQgSW5qZWN0aW9uIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgdGhlIGRlZmluaXRpb24gb2YgYFNWTV9FVlRJTkpfVkFMSURgIGZyb20gYCgxICZsdDsmbHQ7IDMxKWAgdG8gYEJJVCgzMSlgIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhpcyBtYWNybyBpcyBjcnVjaWFsIGluIHRoZSBLVk0vU1ZNIGV2ZW50IGluamVjdGlvbiBwcm9jZXNzLCB3aGljaCBoYXMgc29tZSByYXRoZXIgY29tcGxpY2F0ZWQgaW50ZXJhY3Rpb25zLCBlc3BlY2lhbGx5IG5lc3RlZCBTVk0gdmlydHVhbGl6YXRpb24uIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpbmplY3RlZCBleGNlcHRpb25zLCBOTUlzLCBhbmQgSVJRcywgYXMgd2VsbCBhcyB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIGludGVycnVwdHMgd2l0aGluIHRoZSBLVk0gQU1EIHN1YnN5c3RlbS4gVGhhdCBjaGFuZ2UgYWZmZWN0cyBzb21lIHRyaWNreSBiaXQgbWFuaXB1bGF0aW9uIGFuZCBtYXNrcyAobGlrZSBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCkuIFRoaXMgYWxzbyBpbmRpY2F0ZXMgdGhpcyBjaGFuZ2UgYWZmZWN0cyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIHRoZSBLVk0gQU1EIHN1YnN5c3RlbS4KCk15IGZvY3VzIG5vdyBpcyBvbiB3aGF0IHNwZWNpZmljYWxseSB1c2VzIHRoaXMgbWFjcm8uIEkgc2VlIHRoYXQgc2V2ZXJhbCBLVk0vU1ZNIGZ1bmN0aW9ucyBkaXJlY3RseSB1c2Ugb3Igd3JhcCB0aGUgbW9kaWZpZWQgbWFjcm8uIFRob3NlIGZ1bmN0aW9ucyBhcmU6IGBzdm1faW5qZWN0X2V4Y2VwdGlvbmAsIGBzdm1faW5qZWN0X25taWAsIGBzdm1faW5qZWN0X2lycWAsIGBzdm1fY29tcGxldGVfaW50ZXJydXB0c2AsIGBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luamAsIGBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZWAsIGBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMmAsIGBpc19ldnRpbmpfc29mdGAsIGFuZCBgaXNfZXZ0aW5qX25taWAuIFRoZXNlIGFyZSBhbGwgcG90ZW50aWFsIGFyZWFzIHRvIGRpZyBpbnRvIGZ1cnRoZXIuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgcHJvcGVybHkuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncyBhcmUgYEtWTV9BTURgIGFuZCwgb2J2aW91c2x5LCBgS1ZNYC4gTGV0IG1lIG1ha2Ugc3VyZSBgS1ZNX0FNRGAgaXMgc3RhbmRhcmQsIGFoIHllcywgaXQgZGVwZW5kcyBvbiBgS1ZNICZhbXA7JmFtcDsgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pYC4gU28gYEtWTWAgYW5kIGBLVk1fQU1EYCBhcmUgY29uZmlybWVkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gbm90aW5nIGRvd24gYWxsIG15IGtleSBmaW5kaW5nczogdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUgKGluZGljYXRpbmcgdGhpcyBpcyBhbiBhcmVhIG9mIGludGVyZXN0KSwgYEVuYWJsZUNvbmZpZ3NgIGFyZSAmIzM0O0tWTSYjMzQ7LCAmIzM0O0tWTV9BTUQmIzM0OywgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSwgYXMgcHJldmlvdXNseSBub3RlZCwgdGhvc2UgZnVuY3Rpb25zIHVzaW5nIHRoZSBtYWNyby4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1faW5qZWN0X2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X25taSYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X2lycSYjMzQ7LAogICAgJiMzNDtzdm1fY29tcGxldGVfaW50ZXJydXB0cyYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaiYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMiYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFx1MDAzY1x1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1faW5qZWN0X2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X25taSYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X2lycSYjMzQ7LAogICAgJiMzNDtzdm1fY29tcGxldGVfaW50ZXJydXB0cyYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaiYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMiYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFx1MDAzY1x1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFx1MDAzY1x1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhdm9pZHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIGVuc3VyZXMgdGhlIGNvbnN0YW50IGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgYml0bWFzay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBtZW1vcnkgZGlzY2xvc3VyZSBpc3N1ZXMgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYzRjZDI3NjU1N2Q1NjVkNWY4OWNkNjk3YmM4MmQ4Y2I4NDAwNmYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uOTIxZTZlY2M0ODM1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTYzNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyAmbHQ7Jmx0OyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0ICZsdDsmbHQ7IFNWTV9FVlRJTkpfVFlQRV9TSElGVCkKIAotI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxICZsdDsmbHQ7IDMxKQomIzQzOyNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxICZsdDsmbHQ7IDExKQogCiAjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVk0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggZm9jdXNlcyBvbiBhIG1hY3JvIGRlZmluaXRpb24gd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBmaXhpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgU1ZNX0VWVElOSl9WQUxJRGAuIEluaXRpYWxseSwgaXQgd2FzIGRlZmluZWQgYXMgYDEgJmx0OyZsdDsgMzFgLCB3aGljaCwgaW4gYSBzaWduZWQgaW50ZWdlciBjb250ZXh0LCBpcyBhIGtub3duIGFyZWEgb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGR1ZSB0byB0aGUgcG90ZW50aWFsIGZvciBvdmVyZmxvdy4gVGhlIGZpeCByZXBsYWNlcyB0aGlzIHdpdGggYEJJVCgzMSlgLiBUaGlzIGlzIGEgbXVjaCBzYWZlciBhcHByb2FjaCwgZW5zdXJpbmcgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBhbiB1bnNpZ25lZCBiaXQgc2hpZnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGFuZCBlbnN1cmUgdGhhdCB0aGUgdW5zaWduZWQgYml0IHNoaWZ0IGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGZvciB0aGlzIHJlZ2lzdGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2UgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyBzdWJ0bGUgaW5jb21wYXRpYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGFyb3VuZCBsaW5lIDYzNyB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBgU1ZNX0VWVElOSl9WQUxJRGAgaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgbWFjcm9zIGxpa2UgYFNWTV9FVlRJTkpfVFlQRV9FWEVQVGAsIGBTVk1fRVZUSU5KX1RZUEVfU09GVGAsIGFuZCB0aGUgbWFza3MuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBmb3IgdGhlIFNWTSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcbiA2MzE6XHRcbiA2MzI6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TSElGVCA4XG4gNjMzOlx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIDYzNDpcdFxuIDYzNTpcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2MzY6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9OTUkgKDIgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2Mzc6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIDYzODpcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2Mzk6XHRcbiA2NDA6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuIDY0MTpcdCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuIDY0MjpcdFxuIDY0MzpcdCNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcbiA2NDQ6XHRcdFx0XHRcdCAgIFNWTV9FVlRJTkpfVkFMSURfRVJSIHwgU1ZNX0VWVElOSl9WQUxJRClcbiA2NDU6XHRcbiA2NDY6XHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXG4gNjQ3Olx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXG4gNjQ4Olx0XG4gNjQ5Olx0I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxuIDY1MDpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXG4gNjUxOlx0I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXG4gNjUyOlx0I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxuIDY1MzpcdFxuIDY1NDpcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEIFNWTV9FVlRJTkpfVkFMSURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uY2VwdHMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgU1ZNIEV2ZW50IEluamVjdGlvbiBhbmQgRXhpdCBJbmZvcm1hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBTVk0tcmVsYXRlZCB0ZXJtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBTVk1fRVZUSU5KX1ZBTElEYCwgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AsIGFuZCBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYC4gRnJvbSBhIGh5cGVydmlzb3ImIzM5O3MgcGVyc3BlY3RpdmUsIHRoZXNlIGFyZSBjcnVjaWFsIGZvciBjb250cm9sbGluZyB0aGUgZ3Vlc3QmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaG9zdCBhbmQgbWFuYWdpbmcgaW50ZXJydXB0cy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbnNpZGVyZWQgKnZhbGlkKiBhYm91dCBldmVudCBpbmplY3Rpb24uIGBTVk1fRVZUSU5KX1ZBTElEYCBpcyB0aGUgZmxhZyBJJiMzOTttIGNvbmNlcm5lZCB3aXRoLiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciB0aGF0IHRlbGxzIG1lIHdoZXRoZXIgdGhlIG90aGVyIGZpZWxkcyB3aXRoaW4gdGhlIGV2ZW50IGluamVjdGlvbiBjb250cm9sIHN0cnVjdHVyZSBhcmUgYWN0dWFsbHkgdHJ1c3R3b3J0aHkgYW5kIGNhbiBiZSB1c2VkIHRvIGluamVjdCBhbiBpbnRlcnJ1cHQgaW50byB0aGUgZ3Vlc3QgVk0uIElmIHRoaXMgYml0IGlzIHNldCwgSSBjYW4gY29uZmlkZW50bHkgaW50ZXJwcmV0IHRoZSBkYXRhLiBJZiBub3QsIEkgbmVlZCB0byBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZS4gSSBzdXNwZWN0IHRoZSBtZWFuaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgbmFtZSwgd2hlcmUgaXQgYmVpbmcgJiMzOTsxJiMzOTsgc2lnbmlmaWVzIGl0JiMzOTtzIHZhbGlkLCBhbmQgJiMzOTswJiMzOTsgc2lnbmlmaWVzIHRoZSBvcHBvc2l0ZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFNgLiBUaGVzZSBhcmUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIEluIGFueSBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlLCAmIzM0O3Jlc2VydmVkJiMzNDsgYml0cyBhcmUgYSBkb3VibGUtZWRnZWQgc3dvcmQuIE9uIG9uZSBoYW5kLCB0aGV5IGNvdWxkIGJlIHNldCB0byB6ZXJvLiBPbiB0aGUgb3RoZXIsIHRoZXkgY291bGQgYmUgc29tZXRoaW5nIHRoYXQgaGFzIGFuIHVuZGVmaW5lZCB2YWx1ZS4gVGhleSBhcmUgdGhlcmUgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgKmFsd2F5cyogbWFzayB0aGVtLiBJZ25vcmluZyB0aGVtIGFsdG9nZXRoZXIgaXMgYXNraW5nIGZvciB0cm91YmxlLiBGdXR1cmUgcmV2aXNpb25zIG9mIHRoZSBoYXJkd2FyZSBvciBtaWNyb2NvZGUgY291bGQgcmVwdXJwb3NlIHRoZXNlIGJpdHMsIGFuZCBpZiBteSBoeXBlcnZpc29yIGlzIG5vdCBjYXJlZnVsLCBpdCBjb3VsZCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBwb3RlbnRpYWxseSBldmVuIGNyYXNoZXMuIFNvLCB3aGVuIGRlYWxpbmcgd2l0aCBldmVudCBpbmplY3Rpb24gZGF0YSwgbXkgY29kZSBoYXMgdG8gZXhwbGljaXRseSBjbGVhciBvciBtYXNrIHRoZSByZXNlcnZlZCBiaXRzLiBUaGlzIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVhc3VyZSBhcyB3ZWxsIGFzIGEgc3RhYmlsaXR5IG9uZS4KCkZpbmFsbHksIGBTVk1fRVhJVElOVElORk9fVkFMSURgIGlzIHRoZSBzYW1lIGNvbmNlcHQgYXMgYFNWTV9FVlRJTkpfVkFMSURgLCBidXQgaXQgYXBwbGllcyB0byAqZXhpdCBpbmZvcm1hdGlvbiouIEVzc2VudGlhbGx5LCB3aGVuZXZlciB0aGUgZ3Vlc3QgVk0gZXhpdHMgdG8gdGhlIGhvc3QsIGl0JiMzOTtzIHByb3ZpZGluZyB0aGlzIGRhdGEuIEkgbmVlZCBhIHNpbWlsYXIgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB3aGF0IHRoZSBWTSBpcyBnaXZpbmcgbWUgYXMgYW4gJiMzNDtleGl0IHJlYXNvbiYjMzQ7IG9yICYjMzQ7aW50ZXJydXB0IGluZm9ybWF0aW9uJiMzNDsgaXMgY29ycmVjdCBvciBub3QuIEkmIzM5O2QgaW1hZ2luZSB0aGF0IGluIHNvbWUgY2FzZXMsIHRoZSBWTSB3b3VsZCBleGl0IGR1ZSB0byBhbiBpbnRlcnJ1cHQuIElmIHRoaXMgYml0IGlzbiYjMzk7dCBzZXQsIGFueSBkYXRhIGluIHRoZSBvdGhlciBmaWVsZHMgcmVsYXRlZCB0byB0aGlzIGludGVycnVwdCBhcmUgbWVhbmluZ2xlc3MuIFRoaXMgY291bGQgYmUgdXNlZnVsIHdoZW4gZGVidWdnaW5nIG9yIGRvaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhcyB3ZWxsIGFzIGZvciBoYW5kbGluZyBzcGVjaWZpYyB0eXBlcyBvZiBWTSBleGl0cy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBleGFtcGxlcyBvZiBob3cgdGhlICYjMzQ7ZXhpdCByZWFzb24mIzM0OyBpcyByZXBvcnRlZC4KCkluIHN1bW1hcnksIHRoZXNlIHRocmVlIGVsZW1lbnRzIGFyZSBjcml0aWNhbCBmb3IgcmVsaWFibGUgYW5kIHNlY3VyZSBndWVzdC1ob3N0IGludGVyYWN0aW9uIGluIGFuIFNWTSBlbnZpcm9ubWVudC4gVGhlIGtleSBpcyBjYXJlZnVsIHZhbGlkYXRpb246ICphbHdheXMqIGNoZWNrIHRoZSB2YWxpZCBiaXRzLCAqYWx3YXlzKiBtYXNrIHRoZSByZXNlcnZlZCBiaXRzLCBhbmQgY29ycmVjdGx5IGludGVycHJldCBhbmQgcmVhY3QgdG8gdGhlIHZhbGlkaXR5IGZsYWdzLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBidWlsZGluZyBhIHJvYnVzdCBhbmQgc2VjdXJlIGh5cGVydmlzb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NWTV9FVlRJTkpfVkFMSUR8U1ZNX0VYSVRJTlRJTkZPX1ZBTElEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jPTQxNj1lbnVtIGVzX3Jlc3VsdCB2ZXJpZnlfZXhjZXB0aW9uX2luZm8oc3RydWN0IGdoY2IgKmdoY2IsIHN0cnVjdCBlc19lbV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQyOC1cdFx0LyogQ2hlY2sgaWYgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGZyb20gaHlwZXJ2aXNvciBpcyBzYW5lLiAqL1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDI5Olx0XHRpZiAoKGluZm8gXHUwMDI2IFNWTV9FVlRJTkpfVkFMSUQpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMwLVx0XHQgICAgKCh2ID09IFg4Nl9UUkFQX0dQKSB8fCAodiA9PSBYODZfVFJBUF9VRCkpIFx1MDAyNlx1MDAyNlxuLS1cbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzMy1cbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jOjQzNDpcdFx0XHRpZiAoaW5mbyBcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRF9FUlIpXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzUtXHRcdFx0XHRjdHh0LVx1MDAzZWZpLmVycm9yX2NvZGUgPSBpbmZvIFx1MDAzZVx1MDAzZSAzMjtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD01NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjM5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQwOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDE6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcdTAwM2NcdTAwM2MgMTEpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDMtI2RlZmluZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgfihTVk1fRVZUSU5KX1ZFQ19NQVNLIHwgU1ZNX0VWVElOSl9UWVBFX01BU0sgfCBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ0Olx0XHRcdFx0ICAgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ1LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1My1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTU6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NTYtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0zNTg9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9ldmVudF9pbmpfdmFsaWRfZXhlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODEtLypcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MzgyOiAqIEFjY29yZGluZyB0byB0aGUgQVBNLCBWTVJVTiBleGl0cyB3aXRoIFNWTV9FWElUX0VSUiBpZiBTVk1fRVZUSU5KX1ZBTElEIGlzXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4My0gKiBzZXQgYW5kOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9Mzg3PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGV2ZW50X2luailcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MzkyOlx0aWYgKCEoZXZlbnRfaW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzkzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTY1NT1zdGF0aWMgdm9pZCBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2My1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uLnZlY3RvcjtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY0Olx0XHRleGl0X2ludF9pbmZvID0gbnIgfCBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjUtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2Ni1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY3Olx0XHRcdGV4aXRfaW50X2luZm8gfD0gU1ZNX0VWVElOSl9WQUxJRF9FUlI7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2OC1cdFx0XHR2bWNiMTItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzItXHR9IGVsc2UgaWYgKHZjcHUtXHUwMDNlYXJjaC5ubWlfaW5qZWN0ZWQpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjczOlx0XHRleGl0X2ludF9pbmZvID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3Ni1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guaW50ZXJydXB0Lm5yO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Nzc6XHRcdGV4aXRfaW50X2luZm8gPSBuciB8IFNWTV9FVlRJTkpfVkFMSUQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTgyOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZXZ0aW5qX3NvZnQodTMyIGV2dGluailcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzMi1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODMzOlx0aWYgKCEoZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NDI9c3RhdGljIGJvb2wgaXNfZXZ0aW5qX25taSh1MzIgZXZ0aW5qKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQ1LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDY6XHRpZiAoIShldnRpbmogXHUwMDI2IFNWTV9FVlRJTkpfVkFMSUQpKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4OT1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDAtXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGV4LVx1MDAzZXZlY3RvclxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDE6XHRcdHwgU1ZNX0VWVElOSl9WQUxJRFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDI6XHRcdHwgKGV4LVx1MDAzZWhhc19lcnJvcl9jb2RlID8gU1ZNX0VWVElOSl9WQUxJRF9FUlIgOiAwKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDMtXHRcdHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYwLVx0dWludDMyX3QgaWR0X3YgPVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDYxOlx0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRDtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ2Mi1cdGJvb2wgaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2ODM9c3RhdGljIHZvaWQgc3ZtX2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXHQqaW50cl9pbmZvID0gY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlx0aWYgKCgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjk0Olx0ICAgICgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY5NS1cdFx0KmVycm9yX2NvZGUgPSBjb250cm9sLVx1MDAzZWV4aXRfaW50X2luZm9fZXJyO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzcwMD1zdGF0aWMgdm9pZCBzdm1fZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDc6XHRpZiAoKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XHQgICAgKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVx0XHQqZXJyb3JfY29kZSA9IGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qX2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3ODg9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzc5MjpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODQyPXN0YXRpYyB2b2lkIHN2bV9pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCByZWluamVjdGVkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg3NzpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gaW50ci1cdTAwM2VuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCB0eXBlO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODc4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQzMzg9c3RhdGljIHZvaWQgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2NC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM2NTpcdGlmICghKGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzY2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzg5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MzkwOlx0XHRpZiAoZXhpdGludGluZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTEtXHRcdFx0ZXJyb3JfY29kZSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnI7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkzLVx0XHRrdm1fcmVxdWV1ZV9leGNlcHRpb24odmNwdSwgdmVjdG9yLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0Mzk0Olx0XHRcdFx0ICAgICAgZXhpdGludGluZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTUtXHRcdFx0XHQgICAgICBlcnJvcl9jb2RlKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTIte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTM6XHR1NjQgZGF0YSA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfCB2ZWN0b3I7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk3OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk4OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwODojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA5OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jPTc5PXN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdTY0IGlzX25taSwgdTY0IGlkdF9hbHQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYy05Mi1cdGlmIChpc19ubWkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6OTM6XHRcdHZtY2ItXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTQtXHR9IGVsc2Uge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5NTpcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IElOVF9OUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfU09GVDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTYtXHRcdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2sgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6MTI2Olx0dm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IEJQX1ZFQ1RPUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNy1cdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2ssIHNraXAgb3ZlciBVRDIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyNAoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBCaXRtYXNrIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2Ugd2hlcmUgYFNWTV9FVlRJTkpfVkFMSURgIHdhcyBkZWZpbmVkIGFzIGAoMSAmbHQ7Jmx0OyAzMSlgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJbiAzMi1iaXQgc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYywgdGhhdCYjMzk7cyB1bmRlZmluZWQgYmVoYXZpb3IsIGxpa2VseSBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgaW50ZWdlciBvciBgMHg4MDAwMDAwMGAgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciYjMzk7cyBpbnRlcnByZXRhdGlvbiDigJMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LiBUaGUgZml4IOKAkyBjaGFuZ2luZyBpdCB0byBgQklUKDMxKWAgb3IgYCgxVUwgJmx0OyZsdDsgMzEpYCDigJMgaXMgc3BvdCBvbi4gVGhhdCBjbGVhcmx5IGRlZmluZXMgaXQgYXMgYW4gdW5zaWduZWQgbG9uZyBiaXRtYXNrLCB3aGljaCBpcyBmYXIgY2xlYW5lciBhbmQgbW9yZSBwcmVkaWN0YWJsZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcy4gTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgY2hlY2tsaXN0OiBObyBuZXcgYWxsb2NhdGlvbnM/IE5vcGUuIE5vIG1vZGlmaWVkIGJ1ZmZlcnM/IE5vLiBObyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZD8gTm8sIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBObyBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMgb3IgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M/IEFsc28gbm8uIEFuZCBjcml0aWNhbGx5LCBubyBicmFuY2hpbmcgbG9naWMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLgoKVGhpcyBpcyBlc3NlbnRpYWxseSBhIG1hY3JvIGNsZWFudXAuIEl0JiMzOTtzIGFib3V0IGZpeGluZyBhIGJpdG1hc2sgcmVwcmVzZW50YXRpb24gdGhhdCB3YXMgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGNvbXBpbGVyIHdhcm5pbmdzLiBUaGUgS0FTQU4vVUJTQU4gdG9vbHMgYXJlIGFscmVhZHkgaW4gcGxhY2UgdG8gY2F0Y2ggc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgb3Igb3RoZXIgdW5kZWZpbmVkIGJlaGF2aW9ycyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGJ1dCBLTVNBTiwgc3BlY2lmaWNhbGx5LCBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBpbiB0aGF0IGFyZWEuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBldmVyeXRoaW5nIGFsaWduczoKCiogICBgTmVlZHNLTVNBTjogZmFsc2VgCiogICBgS01TQU5SZWFzb25pbmc6IERldGFpbGVkIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtNU0FOIHZzIEtBU0FOLmAKCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYFNWTV9FVlRJTkpfVkFMSURgIG1hY3JvIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAgZnJvbSBgKDEgXHUwMDNjXHUwMDNjIDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGF2b2lkcyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgZW5zdXJlcyB0aGUgY29uc3RhbnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBiaXRtYXNrLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIHBhc3NlZCB0byB1c2Vyc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIG1lbW9yeSBkaXNjbG9zdXJlIGlzc3VlcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFx1MDAzY1x1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhdm9pZHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIGVuc3VyZXMgdGhlIGNvbnN0YW50IGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgYml0bWFzay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBtZW1vcnkgZGlzY2xvc3VyZSBpc3N1ZXMgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjAzOjU2Ljc4MzI0MTMyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDI0NzM1MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV9pbmplY3RfZXhjZXB0aW9uXCIsXG4gICAgXCJzdm1faW5qZWN0X25taVwiLFxuICAgIFwic3ZtX2luamVjdF9pcnFcIixcbiAgICBcInN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2lualwiLFxuICAgIFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgICBcIl9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgU1ZNX0VWVElOSl9WQUxJRGAgbWFjcm8gaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCBmcm9tIGAoMSBcXHUwMDNjXFx1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhdm9pZHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIGVuc3VyZXMgdGhlIGNvbnN0YW50IGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgYml0bWFzay5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIHBhc3NlZCB0byB1c2Vyc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIG1lbW9yeSBkaXNjbG9zdXJlIGlzc3VlcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFxcdTAwM2NcXHUwMDNjIDMxKSB0byBCSVQoMzEpIGluIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLCBjaGFuZ2luZyBpdHMgc2lnbmVkbmVzcy90eXBlIHJlcHJlc2VudGF0aW9uIGluIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgYW5kIG1hc2sgZGVmaW5pdGlvbnMgbGlrZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgYWNyb3NzIEtWTSBBTUQgYW5kIG5lc3RlZCBTVk0gZXZlbnQgaW5qZWN0aW9uIHJvdXRpbmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowMzo1Ni43ODMyNDgxNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDgxNTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjNGNkMjc2NTU3ZDU2NWQ1Zjg5Y2Q2OTdiYzgyZDhjYjg0MDA2ZjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uOTIxZTZlY2M0ODM1NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuQEAgLTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gXFxuLSNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcXHUwMDNjXFx1MDAzYyAzMSlcXG4rI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG4gI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG4gXFxuICNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowMzo1Ny4yOTg4OTkzMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYxNTgwNjg1MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV9pbmplY3RfZXhjZXB0aW9uXCIsXG4gICAgXCJzdm1faW5qZWN0X25taVwiLFxuICAgIFwic3ZtX2luamVjdF9pcnFcIixcbiAgICBcInN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2lualwiLFxuICAgIFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgICBcIl9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBTVk1fRVZUSU5KX1ZBTElEIG1hY3JvIGRlZmluaXRpb24gZnJvbSAoMSBcXHUwMDNjXFx1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYzRjZDI3NjU1N2Q1NjVkNWY4OWNkNjk3YmM4MmQ4Y2I4NDAwNmYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGFhNjM0MzFiYTkyYzMuLjkyMWU2ZWNjNDgzNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gXG4tI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxIFx1MDAzY1x1MDAzYyAzMSlcbisjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuICNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuIFxuICNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjAzOjU3LjI5ODkwMDU0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MTIyNTAxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVk0gSGVhZGVyIEZpbGUqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgZGlmZi4gSSBzZWUgY2hhbmdlcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvbWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBldmVudCBpbmplY3Rpb24uIExvb2tzIGxpa2UgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBoYXMgYmVlbiBtb2RpZmllZC4gVGhleSd2ZSByZXBsYWNlZCBgKDEgXHUwMDNjXHUwMDNjIDMxKWAgd2l0aCBgQklUKDMxKWAuIEludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgcmVhc29uIGZvciB0aGlzIGNoYW5nZT8gQ291bGQgYmUgYSBzdHlsaXN0aWMgdGhpbmcsIG9yIG1heWJlIHRoZXJlIGFyZSBpbXBsaWNhdGlvbnMgZm9yIGJpdCBtYW5pcHVsYXRpb24gdGhhdCBJIG5lZWQgdG8gY29uc2lkZXIuXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQuIExldCBtZSBqdXN0IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBpbiB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MzcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb25zdGFudHMgYXJlIGJlaW5nIHVzZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIgZGVmaW5pdGlvbnMsIGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIGl0J3MgYmVoYXZpb3IuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgYXBwcm9wcmlhdGUgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzOSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjAzLjcxMTE1MzIyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcXG4gNjMxOlxcdFxcbiA2MzI6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOFxcbiA2MzM6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuIDYzNDpcXHRcXG4gNjM1OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiA2MzY6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM3OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM4OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiA2Mzk6XFx0XFxuIDY0MDpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxcbiA2NDE6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG4gNjQyOlxcdFxcbiA2NDM6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgfihTVk1fRVZUSU5KX1ZFQ19NQVNLIHwgU1ZNX0VWVElOSl9UWVBFX01BU0sgfCBcXFxcXFxuIDY0NDpcXHRcXHRcXHRcXHRcXHQgICBTVk1fRVZUSU5KX1ZBTElEX0VSUiB8IFNWTV9FVlRJTkpfVkFMSUQpXFxuIDY0NTpcXHRcXG4gNjQ2OlxcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcXG4gNjQ3OlxcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSyBTVk1fRVZUSU5KX1RZUEVfTUFTS1xcbiA2NDg6XFx0XFxuIDY0OTpcXHQjZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxcbiA2NTA6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXFxuIDY1MTpcXHQjZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXFxuIDY1MjpcXHQjZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxcbiA2NTM6XFx0XFxuIDY1NDpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXFxuIDY1NTpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlJcXG4gNjU2OlxcdFxcbiA2NTc6XFx0I2RlZmluZSBTVk1fRVhJVElORk9TSElGVF9UU19SRUFTT05fSVJFVCAzNlxcbiA2NTg6XFx0I2RlZmluZSBTVk1fRVhJVElORk9TSElGVF9UU19SRUFTT05fSk1QIDM4XFxuIDY1OTpcXHQjZGVmaW5lIFNWTV9FWElUSU5GT1NISUZUX1RTX0hBU19FUlJPUl9DT0RFIDQ0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjAzLjcxMTI5OTg4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTA1MjMzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJpdHdpc2UgT3BlcmF0aW9ucyBhbmQgRGF0YSBUeXBlcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbXBhcmUgYEJJVCgzMSlgIHdpdGggYCgxIFx1MDAzY1x1MDAzYyAzMSlgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGluIEMsIGAoMSBcdTAwM2NcdTAwM2MgMzEpYCB3aGVuIHVzaW5nIGEgMzItYml0IGBpbnRgLCBldmFsdWF0ZXMgdG8gYDB4ODAwMDAwMDBgLCB3aGljaCBpcyBwcm9ibGVtYXRpYyBkdWUgdG8gcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciBvciBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGluIEM5OS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBmb3IgYW55IGlzc3Vlcy5cblxuQWhhISBMaW5lIDY0MyByZXZlYWxzIHRoYXQgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AgaXMgZGVmaW5lZCBhcyB0aGUgYml0d2lzZSBOT1Qgb2YgYSBjb21iaW5hdGlvbiBvZiBtYXNrcy4gVGhlIHNpZ25pZmljYW50IHRoaW5nIGhlcmUgaXMgdGhhdCBpZiBgU1ZNX0VWVElOSl9WQUxJRGAgdXNlcyBgKDEgXHUwMDNjXHUwMDNjIDMxKWAgd2l0aCBhIDMyLWJpdCBgaW50YCwgdGhlbiB0aGUgYml0d2lzZSBOT1QsIGB+KC4uLilgLCB3aWxsIGVpdGhlciBzaWduLWV4dGVuZCB0byA2NC1iaXQgd2hlbiBjYXN0IHRvIGB1NjRgIG9yIHdpbGwgYmUgYSBzaWduZWQgMzItYml0IGBpbnRgLlxuXG5Ib3dldmVyLCBpZiBgU1ZNX0VWVElOSl9WQUxJRGAgdXNlcyBgQklUKDMxKWAsIHdoaWNoIGlzIGAoMVVMIFx1MDAzY1x1MDAzYyAzMSlgLCB3ZSBoYXZlIGEgZGlmZmVyZW50IHBpY3R1cmUuIE9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZSBsaWtlIHg4Nl82NCwgYDFVTGAgaXMgYW4gYHVuc2lnbmVkIGxvbmdgIHdoaWNoIGlzIDY0LWJpdC4gVGhlcmVmb3JlLCB0aGUgZW50aXJlIGV4cHJlc3Npb24gaW5jbHVkaW5nIHRoZSBtYXNrcyB0YWtlcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZ2AgaW4gNjQtYml0IGFyY2hpdGVjdHVyZS4gU28sIHRoZSBgfmAgb2YgdGhpcyB1bnNpZ25lZCBsb25nLCBpbiA2NC1iaXQgd2lsbCBzZXQgYml0cyAzMi4uNjMgdG8gMS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBvciBgU1ZNX0VWVElOSl9WQUxJRGAgYXJlIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG11c3QgY2hlY2sgdXNhZ2UgdG8gYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjA4LjEwMTgyNTY2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc4Mjc3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNWTV9FVlRJTkpfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jPTQxNj1lbnVtIGVzX3Jlc3VsdCB2ZXJpZnlfZXhjZXB0aW9uX2luZm8oc3RydWN0IGdoY2IgKmdoY2IsIHN0cnVjdCBlc19lbV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI1LVxcdFxcdHU2NCBpbmZvID0gZ2hjYi1cXHUwMDNlc2F2ZS5zd19leGl0X2luZm9fMjtcXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0MjY6XFx0XFx0dW5zaWduZWQgbG9uZyB2ID0gaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI3LVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQyOC1cXHRcXHQvKiBDaGVjayBpZiBleGNlcHRpb24gaW5mb3JtYXRpb24gZnJvbSBoeXBlcnZpc29yIGlzIHNhbmUuICovXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDI5OlxcdFxcdGlmICgoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkFMSUQpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMwLVxcdFxcdCAgICAoKHYgPT0gWDg2X1RSQVBfR1ApIHx8ICh2ID09IFg4Nl9UUkFQX1VEKSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0MzE6XFx0XFx0ICAgICgoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLKSA9PSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQpKSB7XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMyLVxcdFxcdFxcdGN0eHQtXFx1MDAzZWZpLnZlY3RvciA9IHY7XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMzLVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jOjQzNDpcXHRcXHRcXHRpZiAoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkFMSURfRVJSKVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzNS1cXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VmaS5lcnJvcl9jb2RlID0gaW5mbyBcXHUwMDNlXFx1MDAzZSAzMjtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYyOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzA6I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02MzEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjMyOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NISUZUIDhcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjM0LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzNTojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9JTlRSICgwIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzY6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2Mzc6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzODojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02MzktXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQwOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQxOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0MzojZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDQ6XFx0XFx0XFx0XFx0ICAgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY0NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDY6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkVDX01BU0sgU1ZNX0VWVElOSl9WRUNfTUFTS1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NzojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ5OiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSIFNWTV9FVlRJTkpfVFlQRV9JTlRSXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjUwOiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MTojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjUyOiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIFNWTV9FVlRJTkpfVFlQRV9TT0ZUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjUzLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU1OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MzU4PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fZXZlbnRfaW5qX3ZhbGlkX2V4ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODEtLypcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4MjogKiBBY2NvcmRpbmcgdG8gdGhlIEFQTSwgVk1SVU4gZXhpdHMgd2l0aCBTVk1fRVhJVF9FUlIgaWYgU1ZNX0VWVElOSl9WQUxJRCBpc1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzgzLSAqIHNldCBhbmQ6XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODQtICogLSBUaGUgdHlwZSBvZiBldmVudF9pbmogaXMgbm90IG9uZSBvZiB0aGUgZGVmaW5lZCB2YWx1ZXMuXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozODU6ICogLSBUaGUgdHlwZSBpcyBTVk1fRVZUSU5KX1RZUEVfRVhFUFQsIGJ1dCB0aGUgdmVjdG9yIGlzIG5vdCBhIHZhbGlkIGV4Y2VwdGlvbi5cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4Ni0gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM4Nz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODgte1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg5OlxcdHUzMiB0eXBlID0gZXZlbnRfaW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9UWVBFX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTA6XFx0dTggdmVjdG9yID0gZXZlbnRfaW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9WRUNfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5MjpcXHRpZiAoIShldmVudF9pbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5NTpcXHRpZiAodHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfSU5UUiBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IFNWTV9FVlRJTkpfVFlQRV9OTUkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5NjpcXHQgICAgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfU09GVClcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOTgtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTk6XFx0aWYgKHR5cGUgPT0gU1ZNX0VWVElOSl9UWVBFX0VYRVBUIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00MDAtXFx0ICAgICFuZXN0ZWRfc3ZtX2V2ZW50X2lual92YWxpZF9leGVwdCh2Y3B1LCB2ZWN0b3IpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz01MTM9dm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU0OC1cXHR0by1cXHUwMDNlZXhpdF9pbnRfaW5mb19lcnIgICA9IGZyb20tXFx1MDAzZWV4aXRfaW50X2luZm9fZXJyO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NTQ5OlxcdHRvLVxcdTAwM2VldmVudF9pbmogICAgICAgICAgID0gZnJvbS1cXHUwMDNlZXZlbnRfaW5qIFxcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUUztcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU1MC1cXHR0by1cXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXFx1MDAzZWV2ZW50X2lual9lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTY1NT1zdGF0aWMgdm9pZCBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjYzLVxcdFxcdG5yID0gdmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb24udmVjdG9yO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY0OlxcdFxcdGV4aXRfaW50X2luZm8gPSBuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQ7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjUtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjYtXFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Njc6XFx0XFx0XFx0ZXhpdF9pbnRfaW5mbyB8PSBTVk1fRVZUSU5KX1ZBTElEX0VSUjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2OC1cXHRcXHRcXHR2bWNiMTItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIgPVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzItXFx0fSBlbHNlIGlmICh2Y3B1LVxcdTAwM2VhcmNoLm5taV9pbmplY3RlZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjczOlxcdFxcdGV4aXRfaW50X2luZm8gPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc2LVxcdFxcdG5yID0gdmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQubnI7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Nzc6XFx0XFx0ZXhpdF9pbnRfaW5mbyA9IG5yIHwgU1ZNX0VWVElOSl9WQUxJRDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OS1cXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQuc29mdClcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY4MDpcXHRcXHRcXHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjgxLVxcdFxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY4MjpcXHRcXHRcXHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVFlQRV9JTlRSO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjgzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9ODI4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19ldnRpbmpfc29mdCh1MzIgZXZ0aW5qKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI5LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMDpcXHR1MzIgdHlwZSA9IGV2dGluaiBcXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODMxOlxcdHU4IHZlY3RvciA9IGV2dGluaiBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzItXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4MzM6XFx0aWYgKCEoZXZ0aW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM1LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODM2OlxcdGlmICh0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9TT0ZUKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM3LVxcdFxcdHJldHVybiB0cnVlO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM4LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODM5OlxcdHJldHVybiB0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCBcXHUwMDI2XFx1MDAyNiBrdm1fZXhjZXB0aW9uX2lzX3NvZnQodmVjdG9yKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0MC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg0Mj1zdGF0aWMgYm9vbCBpc19ldnRpbmpfbm1pKHUzMiBldnRpbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDMte1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ0OlxcdHUzMiB0eXBlID0gZXZ0aW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9UWVBFX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDUtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDY6XFx0aWYgKCEoZXZ0aW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQ4LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ5OlxcdHJldHVybiB0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9OTUk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NTAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODk9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDAtXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGV4LVxcdTAwM2V2ZWN0b3JcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQwMTpcXHRcXHR8IFNWTV9FVlRJTkpfVkFMSURcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQwMjpcXHRcXHR8IChleC1cXHUwMDNlaGFzX2Vycm9yX2NvZGUgPyBTVk1fRVZUSU5KX1ZBTElEX0VSUiA6IDApXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDM6XFx0XFx0fCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDQtXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2lual9lcnIgPSBleC1cXHUwMDNlZXJyb3JfY29kZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTYtXFx0XFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0NTc6XFx0aW50IGludF92ZWMgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU4LVxcdHVpbnQzMl90IHR5cGUgPVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNzg4PXN0YXRpYyB2b2lkIHN2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3OTI6XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5My1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9Mzg0Mj1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmVpbmplY3RlZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg1MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4NTI6XFx0XFx0dHlwZSA9IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg1My1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg1NDpcXHRcXHR0eXBlID0gU1ZNX0VWVElOSl9UWVBFX0lOVFI7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODU1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4Nzc6XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGludHItXFx1MDAzZW5yIHwgU1ZNX0VWVElOSl9WQUxJRCB8IHR5cGU7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODc4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NzExPXN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1OCB2ZWN0b3IpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTIte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzEzOlxcdHU2NCBkYXRhID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCB8IHZlY3RvcjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaD0yMzM9c3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYiB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjg2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyODc6I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjg4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyODk6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTA6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MjkyOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk0OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk1OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5NzojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgKDEgXFx1MDAzY1xcdTAwM2MgMzEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5ODojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFxcdTAwM2NcXHUwMDNjIDExKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzAyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDM6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA0OiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDU6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDY6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDg6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM9Nzk9c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB1NjQgaXNfbm1pLCB1NjQgaWR0X2FsdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTItXFx0aWYgKGlzX25taSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6OTM6XFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk0LVxcdH0gZWxzZSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5NTpcXHRcXHR2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IElOVF9OUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfU09GVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk2LVxcdFxcdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2sgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6MTI2OlxcdHZtY2ItXFx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gQlBfVkVDVE9SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNy1cXHQvKiBUaGUgcmV0dXJuIGFkZHJlc3MgcHVzaGVkIG9uIHN0YWNrLCBza2lwIG92ZXIgVUQyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjEwLjQ4MDExMDUxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzM1MzQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVk0gRXhpdCBJbmZvcm1hdGlvbiBWYWxpZGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBTVk1fRVhJVElOVElORk9fVkFMSURgIG1hY3JvLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBhcyBgU1ZNX0VWVElOSl9WQUxJRGAuICBIbW0sIGludGVyZXN0aW5nLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHN1YnN0aXR1dGlvbiBpcyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFsaWRpdHkgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGVyZSBpcyBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYCBhY3R1YWxseSByZWZlcmVuY2VkPyBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiAgTGV0J3Mgc2VlIHdoZXJlIHRoaXMgdGhpbmcgcG9wcyB1cC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjEyLjkxMzY0NjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTUxOTIxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1ZNX0VYSVRJTlRJTkZPX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD01NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDUtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ2OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDc6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ4LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0OTojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MDojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTk1JIFNWTV9FVlRJTkpfVFlQRV9OTUlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTE6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MjojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1My1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTQ6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlJcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NTYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI0NTA9c3RhdGljIGludCB0YXNrX3N3aXRjaF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU1LVxcdGludCBpbnRfdHlwZSA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvIFxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0NTY6XFx0XFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTctXFx0aW50IGludF92ZWMgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU4LVxcdHVpbnQzMl90IHR5cGUgPVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ1OTpcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19UWVBFX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYwLVxcdHVpbnQzMl90IGlkdF92ID1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0NjE6XFx0XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYyLVxcdGJvb2wgaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ3OS1cXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0ODA6XFx0XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9OTUk6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDgxLVxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDgyLVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ4MzpcXHRcXHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUOlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ4NC1cXHRcXHRcXHRpZiAoc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFxcdTAwMjZcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ5MS1cXHRcXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0OTI6XFx0XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSOlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ5MzpcXHRcXHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDk0LVxcdFxcdFxcdGt2bV9jbGVhcl9pbnRlcnJ1cHRfcXVldWUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MDEtXFx0aWYgKHJlYXNvbiAhPSBUQVNLX1NXSVRDSF9HQVRFIHx8XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTAyOlxcdCAgICBpbnRfdHlwZSA9PSBTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIHx8XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTAzOlxcdCAgICAoaW50X3R5cGUgPT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MDQtXFx0ICAgICAoaW50X3ZlYyA9PSBPRl9WRUNUT1IgfHwgaW50X3ZlYyA9PSBCUF9WRUNUT1IpKSkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNTA4LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjUwOTpcXHRpZiAoaW50X3R5cGUgIT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MTAtXFx0XFx0aW50X3ZlYyA9IC0xO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNjgzPXN0YXRpYyB2b2lkIHN2bV9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXFx0KmludHJfaW5mbyA9IGNvbnRyb2wtXFx1MDAzZWV4aXRfaW50X2luZm87XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM2OTQ6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjk1LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXhpdF9pbnRfaW5mb19lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3MDA9c3RhdGljIHZvaWQgc3ZtX2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzA3OlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXZlbnRfaW5qX2VycjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDI5ND1zdGF0aWMgdm9pZCBzdm1fY29tcGxldGVfc29mdF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQyOTYte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI5NzpcXHRib29sIGlzX2V4Y2VwdGlvbiA9ICh0eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQyOTg6XFx0Ym9vbCBpc19zb2Z0ID0gKHR5cGUgPT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mjk5LVxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00MzM4PXN0YXRpYyB2b2lkIHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNjU6XFx0aWYgKCEoZXhpdGludGluZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzNjktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MzcwOlxcdHZlY3RvciA9IGV4aXRpbnRpbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM3MTpcXHR0eXBlID0gZXhpdGludGluZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM3Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM3Ni1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNzc6XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9OTUk6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzc4LVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubm1pX2luamVjdGVkID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4MC1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzODE6XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9FWEVQVDoge1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4Mi1cXHRcXHR1MzIgZXJyb3JfY29kZSA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzODktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MzkwOlxcdFxcdGlmIChleGl0aW50aW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkxLVxcdFxcdFxcdGVycm9yX2NvZGUgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTMtXFx0XFx0a3ZtX3JlcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlY3RvcixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzOTQ6XFx0XFx0XFx0XFx0ICAgICAgZXhpdGludGluZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5NS1cXHRcXHRcXHRcXHQgICAgICBlcnJvcl9jb2RlKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5Ny1cXHR9XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0Mzk4OlxcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUjpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTktXFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCB2ZWN0b3IsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ0MDAtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0NDAxOlxcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ0MDItXFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCB2ZWN0b3IsIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MTMxPXN0YXRpYyBpbnQgc3ZtX2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MTM4LVxcdC8qIENoZWNrIHRoYXQgZW11bGF0aW9uIGlzIHBvc3NpYmxlIGR1cmluZyBldmVudCB2ZWN0b3JpbmcgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUxMzk6XFx0aWYgKChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19UWVBFX01BU0spIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MTQwLVxcdCAgICAha3ZtX2Nhbl9lbXVsYXRlX2V2ZW50X3ZlY3RvcmluZyhlbXVsX3R5cGUpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oPTIzMz1zdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzAyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDM6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA0OiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDU6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDY6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDg6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6MTQuOTY4ODQ0ODI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMDAxNzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gS1ZNL1NWTSBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AsIHNwZWNpZmljYWxseSB0aGlzIGxpbmU6IGB0by1cdTAwM2VldmVudF9pbmogPSBmcm9tLVx1MDAzZWV2ZW50X2luaiBcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUUztgLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGlrZWx5IGhpbmdlcyBvbiBob3cgdGhpcyBiaXRtYXNrIGludGVyYWN0cyB3aXRoIHRoZSBgZXZlbnRfaW5qYCBmaWVsZC4gSXQgbG9va3MgbGlrZSBgdG8tXHUwMDNlZXZlbnRfaW5qYCBpcyBhIGB1MzJgLiBXZSdyZSBtYXNraW5nIGl0IHdpdGggdGhlIGJpdHdpc2UgaW52ZXJzZSBvZiBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHZhbHVlIG9mIGBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFNgLiBJdCdzIGRlZmluZWQgYXMgdGhlIGJpdHdpc2UgTk9UIG9mIGEgY29tYmluYXRpb24gb2YgbWFza3M6IGB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFNWTV9FVlRJTkpfVkFMSURfRVJSIHwgU1ZNX0VWVElOSl9WQUxJRClgLiBOb3csIHRoZSBsZWdhY3kgZGVmaW5pdGlvbiBvZiBgU1ZNX0VWVElOSl9WQUxJRGAgd2FzIGAoMSBcdTAwM2NcdTAwM2MgMzEpYC4gQW5kIHRoaXMgaXMgd2hlcmUgdGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvdyBjb21lcyBpbnRvIHBsYXkuIElmIHdlIHRyZWF0IGAoMSBcdTAwM2NcdTAwM2MgMzEpYCBhcyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBpbiBDLCB3aGljaCBpcyB3aGF0IHRoZSBjb2RlIHNlZW1pbmdseSBkb2VzLCB0aGlzIG9wZXJhdGlvbiB0cmlnZ2VycyB1bmRlZmluZWQgYmVoYXZpb3IuIENvbXBpbGVycyBsaWtlIEdDQy9DbGFuZyB3aWxsIHR5cGljYWxseSBpbnRlcnByZXQgdGhpcyBhcyAtMjE0NzQ4MzY0OCAoMHg4MDAwMDAwMCkuXG5cblNvLCB0aGUgY29tYmluZWQgbWFzaywgaW4gdGhlIG9yaWdpbmFsIGRlZmluaXRpb24sIGV2YWx1YXRlcyB0byBhIG5lZ2F0aXZlIGBpbnRgIHZhbHVlLCBhbmQgdGFraW5nIGl0cyBiaXR3aXNlIGludmVyc2UgZ2l2ZXMgdXMgYW5vdGhlciBuZWdhdGl2ZSBudW1iZXIuIEJ1dCwgaWYgYFNWTV9FVlRJTkpfVkFMSURgIGlzIG5vdyBkZWZpbmVkIHVzaW5nIGBCSVQoMzEpYCwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBgKDFVTCBcdTAwM2NcdTAwM2MgMzEpYCwgaXQncyBhIDY0LWJpdCBvcGVyYXRpb24gb24geDg2XzY0LCB3aGljaCByZXNvbHZlcyB0byBgMHg4MDAwMDAwMFVMYC4gTm93LCBjYWxjdWxhdGluZyB0aGF0IGNvbWJpbmVkIG1hc2sgaW4gdGhlIG5ldyBkZWZpbml0aW9uLCB3aXRoIHRoZSA2NCBiaXQgZGVmaW5pdGlvbiwgcmVzdWx0cyBpbiBhIGRpZmZlcmVudCB2YWx1ZSB0aGF0J3MgbXVjaCBsYXJnZXIgdGhhbiBhIHUzMiwgYW5kIHRha2luZyB0aGUgYml0d2lzZSBpbnZlcnNlLCBzdGlsbCBnaXZlcyB1cyB0aGUgcmlnaHQgYml0cywgYnV0IGFzIGEgbXVjaCBsYXJnZXIgYHVuc2lnbmVkIGxvbmdgIHZhbHVlLlxuXG5UaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIHN1YnNlcXVlbnQgYml0d2lzZSBBTkQ6IGBmcm9tLVx1MDAzZWV2ZW50X2luaiBcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AuIElmIHRoZSBjb21waWxlciBzdGlsbCB0cmVhdHMgdGhlIGV4cHJlc3Npb24gYXMgc2lnbmVkIDMyIGJpdCwgdGhlbiBpdCB3aWxsIGdldCBhbiBpbmNvcnJlY3QgdmFsdWUgYW5kIHRoZSBtYXNrIGJlY29tZXMgbXVjaCBiaWdnZXIgd2hlbiBjb25zaWRlcmluZyBgQklUKDMxKWAgYW5kIHRoZSBwcm9tb3Rpb24gdGhhdCBoYXBwZW5zIGhlcmUuIFRoZSBiaXR3aXNlIG1hc2sgdGhhdCB3ZSdyZSBhcHBseWluZyB3aXRoIGB+U1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCB3aWxsIGltcGFjdCBob3cgdGhlIGBmcm9tLVx1MDAzZWV2ZW50X2luamAgdmFsdWUgaXMgdWx0aW1hdGVseSBtb2RpZmllZC4gVGhlIHUzMiB2YWx1ZSBpcyBnZXR0aW5nIG1hc2tlZCB3aXRoIHdoYXQgYXBwZWFycyB0byBiZSBhIG11Y2ggbGFyZ2VyIG1hc2suXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBwdWxsIHVwIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGBnaXQgbG9nIC0xIC1wYCB0byBzZWUgdGhlIGFjdHVhbCBwYXRjaCB0aGF0IGludHJvZHVjZWQgdGhpcyBjaGFuZ2UgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDoyMC4zOTg4NjQxNDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzE4NjE1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDA6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDE6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk3OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcXHUwMDNjXFx1MDAzYyAzMSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk4OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6MjIuMjcwNzM0NDU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNDQ3OTIxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogQSBGb2N1c2VkIEV4YW1pbmF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIGNoYW5nZS4uLiBkb2VzIGl0IHRvdWNoIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlPyBMZXQncyB0cmFjZSBpdC4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGBTVk1fRVZUSU5KX1ZBTElEYC4gIEkga25vdyB0aGF0J3MgdXNlZCB3aXRoaW4gdGhlIEtWTSBBTUQgKFNWTSkgdmlydHVhbGl6YXRpb24gZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuICBUaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgS1ZNIEFNRCBTVk0gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIGNvbnRleHQ/XG5cbkhtbSwgY2FuIHdlIGdldCB0aGVyZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IEkgbmVlZCB0byBjbGFyaWZ5OiBpcyBLVk0gKGt2bV9hbWQgc3BlY2lmaWNhbGx5KSBmdXp6ZWQgaW4gdGhvc2Ugc2NlbmFyaW9zPyAgSSBrbm93IHN5emthbGxlciAqY2FuKiBmdXp6IEtWTSBpZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgS1ZNIGFyZSBlbmFibGVkLCBidXQgZG9lcyBpdCBhY3R1YWxseSAqZG8qIGl0PyBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3l6a2FsbGVyIEtWTSBmdXp6aW5nIGNvbmZpZy5cblxuTGV0J3MgY2FyZWZ1bGx5IHJlZmVyIHRvIHRoZSBwcm9tcHQncyBzZWN0aW9ucyB0byBtYWtlIHN1cmUgSSBnZXQgdGhpcyByaWdodC5cblxuKiAgICoqU2VjdGlvbiAxOiBUaGUgUmVhY2hhYmlsaXR5IEdhdGUqKiAgRnV6emluZyBpcyBvbmx5IHZhbGlkIGZvciBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IHJ1biBpbiB0aGUgZXhwZWN0ZWQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VLCBHQ0UsIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMpLiBJZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBieSBkZXNpZ24sIG5vIGZ1enppbmcgaXMgbmVlZGVkLCBldmVuIGlmIHRoZXJlIGFyZSBhc3NlcnRpb25zIG9yIGNvbXBsZXggbmV3IGxvZ2ljLiBDbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIHJlZmFjdG9yaW5nIG5lZWQgdG8gYmUgdGhvcm91Z2hseSBjaGVja2VkLiBOZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiAqcmVhY2hhYmxlKiBjb2RlICptdXN0KiBiZSBmdXp6ZWQuXG4qICAgKipTZWN0aW9uIDI6IE5lZ2F0aXZlIENyaXRlcmlhIChXaGVuIHRvIFJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCkqKiAgT25seSByZXR1cm4gYGZhbHNlYCBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczogbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSAoRG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nL3RyYWNlcG9pbnRzLCBidWlsZCBzeXN0ZW0vS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWx0ZXIgdGhlIGNvbXBpbGVkIEMgbG9naWMpLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgKHNwZWNpZmljIFBDSWUvTklDL0dQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSksIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyAoZS5nLiwgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgdHJpZ2dlciBvbiBob3QtdW5wbHVnKS5cbiogICAqKlNlY3Rpb24gMzogUG9zaXRpdmUgQ3JpdGVyaWEgKFdoZW4gdG8gUmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWApKiogUmV0dXJuIGB0cnVlYCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlczogY29yZSBzdWJzeXN0ZW1zIChNTSwgc3luYywgQlBGLCBldGMuKSwgcmVmYWN0b3JpbmdzL2NvZGUgY2xlYW51cHMgYWZmZWN0aW5nIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgcnVudGltZSBhc3NlcnRpb25zL2RlZmVuc2l2ZSBjaGVja3MsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMgKGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMpLlxuXG5Ob3csIGxldCdzIGdldCBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgYCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpYCBiZWluZyBjaGFuZ2VkIHRvIGAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYC4gSXMgdGhpcyBhIG1hY3JvIGRlZmluaXRpb24gY2hhbmdlIHRoYXQgYWZmZWN0cyBjb21waWxlZCBDIGNvZGU/IFllcywgaXQncyBhIGtlcm5lbCBoZWFkZXIuIEkgdW5kZXJzdGFuZCB0aGF0LlxuXG5TbywgaXMgS1ZNIEFNRCByZWFjaGFibGU/IEluIFFFTVUgKHVzaW5nIG5lc3RlZCBBTUQgU1ZNIG9yIEFNRCBDUFUgZW11bGF0aW9uIHdpdGggYHFlbXUtc3lzdGVtLXg4Nl82NCAtY3B1IGhvc3RgIG9yIGAtY3B1IEVQWUNgKSwgdGhlIGBrdm1fYW1kYCBtb2R1bGUgaXMgY29tcGlsZWQsIGFuZCBpdCdzIHJlYWNoYWJsZSB3aGVuIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkLCBvciBBTUQgQ1BVIGlzIGVtdWxhdGVkLCBldmVuIHZpYSBLVk0gaW9jdGxzICgvZGV2L2t2bSkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBLVk1cXF9BTUQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjIzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjI5LjQxNTUzMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQwNjcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDozMS4yMTk2MDM3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTcwOTc2NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHg4NioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMuIExldCdzIHN0YXJ0IHdpdGggYGFyY2gveDg2L2t2bS9LY29uZmlnYCwgYXJvdW5kIGxpbmUgMTQ2LiBUaGF0IGFyZWEgdHlwaWNhbGx5IGRlYWxzIHdpdGggY29yZSBmZWF0dXJlIGVuYWJsZW1lbnQsIHNvIHRoYXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBLY29uZmlnIGZyYWdtZW50IGlzIHN0cnVjdHVyZWQsIGhvdyBpdCBjb250cm9scyB0aGUgYnVpbGQsIGFuZCB3aGF0J3MgZGVwZW5kZW50IG9uIHdoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgaGllcmFyY2h5IG9mIGNvbmRpdGlvbmFscyDigJMgYGlmIEtWTWAsIG5lc3RlZCBmdXJ0aGVyIGJhc2VkIG9uIENQVSBmZWF0dXJlcywgbWF5YmUgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzLCBhbmQgbGlrZWx5IHNvbWUgY3J1Y2lhbCBkZWZhdWx0cyB0aGF0IGFmZmVjdCB0aGUgb3ZlcmFsbCBLVk0gcGVyZm9ybWFuY2UgcHJvZmlsZS4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgc2VjdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgd2hpY2ggb3RoZXIgS2NvbmZpZ3MgYXJlIHJlZmVyZW5jZWQgb3IgaW5jbHVkZWQgaGVyZSwgYW5kIGhvdyB0aGlzIHNlY3Rpb24gcmVsYXRlcyB0byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLiBIb3BlZnVsbHksIGl0IHdpbGwgcXVpY2tseSBvcmllbnQgbWUgdG8gdGhlIGNvZGUgSSBhbSBpbnZlc3RpZ2F0aW5nIGFuZCBJIGNhbiBiZWdpbiBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGdldCBteSB0ZXN0aW5nIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjM0LjE5MDU4MzM4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxcbiAxNTE6XFx0XFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxNTQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxcbiAxNTU6XFx0XFxuIDE1NjpcXHRjb25maWcgS1ZNX0FNRF9TRVZcXG4gMTU3OlxcdFxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuIDE1ODpcXHRcXHRkZWZhdWx0IHlcXG4gMTU5OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0FNRCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4gMTYwOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXFx1MDAyNlxcdTAwMjYgIShLVk1fQU1EPXkgXFx1MDAyNlxcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcXG4gMTYxOlxcdFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiAxNjI6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDE2MzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG4gMTY0OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxcbiAxNjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuIDE2NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE2NzpcXHRcXHRoZWxwXFxuIDE2ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcXG4gMTY5OlxcdFxcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6MzQuMTkwNjU4MzM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1ODI4ODI1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgU1ZNX0VWVElOSl9WQUxJRCBNYWNybyBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIHdoZXJlIGBTVk1fRVZUSU5KX1ZBTElEYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgYXJlYXMgd2l0aGluIHRoZSBLVk0gQU1EIChTVk0pIHN1YnN5c3RlbTogYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oYCwgYW5kIGBhcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuY2AuIFRoaXMgaXNuJ3QganVzdCBhIG1pbm9yIGNoYW5nZTsgdGhpcyBpcyBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCdzIGdvaW5nIHRvIHJpcHBsZSB0aHJvdWdoIHNldmVyYWwgY29yZSBmdW5jdGlvbnMuXG5cbk5vdywgdGhlIGZ1enppbmcgZ3VpZGFuY2UgaXMgY3JpdGljYWwgaGVyZS4gVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIHJlZ3Jlc3Npb25zLCBidWdzLCBhbmQgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLCBhbmQgaXQgaGluZ2VzIG9uIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIGNvZGUuIFRoZSBtb2RpZmllZCBjb2RlJ3Mgc3RydWN0dXJhbCByZWFjaGFiaWxpdHkgdGFrZXMgcHJlY2VkZW5jZS4gSWYgdGhlIGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgc2hvdWxkIG5vdCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2YgaG93IGNvbXBsZXggdGhlIGFkZGVkIGNvZGUgb3IgaG93IG1hbnkgYXNzZXJ0aW9ucy4gSSBjYW4ndCB0YWtlIGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgYXQgZmFjZSB2YWx1ZSwgcmVmYWN0b3JpbmdzIGluIGNvcmUgc3Vic3lzdGVtcyBvZnRlbiBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cy4gQW55IG5ldyBvciBtb2RpZmllZCBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBjb2RlIGFic29sdXRlbHkgKm11c3QqIGJlIGZ1enplZC4gQ29udmVyc2VseSwgSSBjYW4gb25seSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgKmFsbCogbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSDigJMgd2hpY2ggYXJlIGVhc2lseSBjaGVja2FibGUuXG5cbkhlcmUncyB0aGUgcnViOiB0aGUgY2hhbmdlIHRyYW5zZm9ybXMgYFNWTV9FVlRJTkpfVkFMSURgIGZyb20gYCgxIFx1MDAzY1x1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhZmZlY3RzIEMgbWFjcm8gZXhwYW5zaW9uIHdpdGhpbiB0aGUgS1ZNIEFNRCAoU1ZNKSBzdWJzeXN0ZW0uIElzIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWE/IE5vLiBJdCdzIG5vdCBhIGRvY3VtZW50YXRpb24gY2hhbmdlLiBJdCdzIG5vdCB1c2Vyc3BhY2UgY29kZS4gSXQncyBub3QgZGVjb3JhdGl2ZSBsb2dnaW5nLiBJdCdzIG5vdCBhIGJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IHRoZSBjb21waWxlZCBDIGxvZ2ljLiBLVk0gaXMgc3BlY2lmaWNhbGx5IGVtdWxhdGVkL3ZpcnR1YWxpemVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIEFNRCBlbnZpcm9ubWVudHMuIEl0IGlzIG5vdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEl0J3Mgbm90IHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoIC8gdGVhcmRvd24uIEl0J3Mgbm90IGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGFyZ2V0IChhbWQ2NCkuXG5cblRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgYFdvcnRoRnV6emluZ2AgKm11c3QqIGJlIGB0cnVlYC4gVGhpcyBpc24ndCBhIFwibm8tb3BcIiBjaGFuZ2U7IGl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gYSBjb3JlIG1hY3JvIGFmZmVjdGluZyBtdWx0aXBsZSBrZXkgZnVuY3Rpb25zIHdpdGhpbiBhIGNydWNpYWwgc3Vic3lzdGVtLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSByZWxldmFudCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGFyZTogYHN2bV9pbmplY3RfZXhjZXB0aW9uYCwgYHN2bV9pbmplY3Rfbm1pYCwgYHN2bV9pbmplY3RfaXJxYCwgYHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbmAsIGBzdm1fY29tcGxldGVfaW50ZXJydXB0c2AsIGBzdm1fZ2V0X2V4aXRfaW5mb2AsIGBzdm1fZ2V0X2VudHJ5X2luZm9gIGZyb20gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgOyBhbmQgYG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qYCwgYF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlYCwgYW5kIGBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMmAgZnJvbSBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AuIEkgbmVlZCB0byBub3cgZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3Igbm9uLXN0YXRpYy4gSSB3aWxsIG5vdyBleGFtaW5lIHRoZWlyIGRlZmluaXRpb25zIGluIHRoZWlyIHJlc3BlY3RpdmUgYC5jYCBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NDEuNzczNTQzNzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTE1NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV9pbmplY3RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzctXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozODpzdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luamVjdF9ucGZfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz05OT1zdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luaXRfbW11X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMTgtXFx0dmNwdS1cXHUwMDNlYXJjaC5uZ3BhX3dhbGsuZ2V0X3BkcHRyICAgICAgICAgPSBuZXN0ZWRfc3ZtX2dldF90ZHBfcGRwdHI7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMTk6XFx0dmNwdS1cXHUwMDNlYXJjaC5uZ3BhX3dhbGsuaW5qZWN0X3BhZ2VfZmF1bHQgPSBuZXN0ZWRfc3ZtX2luamVjdF9ucGZfZXhpdDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyMC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE2NzM9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9pc19leGNlcHRpb25fdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNjgwLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTY4MTpzdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luamVjdF9leGNlcHRpb25fdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE2ODIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xNzIxPXN0YXRpYyBpbnQgc3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNzUyLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxNzUzOlxcdFxcdG5lc3RlZF9zdm1faW5qZWN0X2V4Y2VwdGlvbl92bWV4aXQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNzU0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNDI9c3RhdGljIGludCBzdm1fdXBkYXRlX3NvZnRfaW50ZXJydXB0X3JpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg4LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg5OnN0YXRpYyB2b2lkIHN2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM5MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3NjI9c3RhdGljIGludCBwcmVfc3ZtX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3ODctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzg4OnN0YXRpYyB2b2lkIHN2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3ODkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODE5PXN0YXRpYyBib29sIHN2bV9zZXRfdm5taV9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg0MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4NDI6c3RhdGljIHZvaWQgc3ZtX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJlaW5qZWN0ZWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyOD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTM5My1cXHQucGF0Y2hfaHlwZXJjYWxsID0gc3ZtX3BhdGNoX2h5cGVyY2FsbCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzOTQ6XFx0LmluamVjdF9pcnEgPSBzdm1faW5qZWN0X2lycSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzOTU6XFx0LmluamVjdF9ubWkgPSBzdm1faW5qZWN0X25taSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzOTYtXFx0LmlzX3ZubWlfcGVuZGluZyA9IHN2bV9pc192bm1pX3BlbmRpbmcsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzk3LVxcdC5zZXRfdm5taV9wZW5kaW5nID0gc3ZtX3NldF92bm1pX3BlbmRpbmcsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1Mzk4OlxcdC5pbmplY3RfZXhjZXB0aW9uID0gc3ZtX2luamVjdF9leGNlcHRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzk5LVxcdC5jYW5jZWxfaW5qZWN0aW9uID0gc3ZtX2NhbmNlbF9pbmplY3Rpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQxLjgyNjA2NDcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTk3ODM2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmVzdGVkLmNgIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXN0ZWQuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgZnVuY3Rpb25zIGFyZSBpbiBoZXJlIGFuZCB3aGF0J3MgdGhlaXIgcHVycG9zZT9cIiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgbW9kdWxlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXN0ZWQgbG9vcHM/IFJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscz8gUGVyaGFwcyBzb21lIGRlZXBseSBuZXN0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGFjY2VzcyBtZXRob2RzPyBLbm93aW5nIHRoZSBsYW5kc2NhcGUgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb21wbGV4aXR5IGhvdHNwb3RzIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZyBsYXRlciBvbi4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTk3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NDQuMTg1ODUwMzg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYwNjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTUxMj1zdGF0aWNcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjUxMzp2b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTUxNC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZtY2JfY3RybF9hcmVhX2NhY2hlZCAqdG8sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTU3MD12b2lkIG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTcyLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU3MzpcXHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1LCBcXHUwMDI2c3ZtLVxcdTAwM2VuZXN0ZWQuY3RsLCBjb250cm9sKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU3NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE5NDY9c3RhdGljIGludCBzdm1fc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIwMDctXFx0cmV0ID0gLUVJTlZBTDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIwMDg6XFx0X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUodmNwdSwgXFx1MDAyNmN0bF9jYWNoZWQsIGN0bCk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMDA5LVxcdGlmICghbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHModmNwdSwgXFx1MDAyNmN0bF9jYWNoZWQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDo0NC4yMzI0NjE4NDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyMjMxMDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbjpcblxuKipEaXZpbmcgaW50byBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIGNoZWNraW5nIGZvciBldmVudCBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzLCBwb3RlbnRpYWxseSB3aXRoaW4gYSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gU2VjdXJlIFZpcnR1YWwgTWFjaGluZXMgKFNWTSkuIFRoYXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcmVhcywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBldmVudHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXN0ZWQgc3RydWN0dXJlLCB3aGF0IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycyB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlLCBhbmQgd2hldGhlciBpdCdzIGltcGxlbWVudGVkIGNvcnJlY3RseS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIGlucHV0IHZhbGlkYXRpb24sIG9yIGFueSBsb2dpYyBmbGF3cyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCB0byBpbmplY3QgbWFsaWNpb3VzIGV2ZW50cyBvciBieXBhc3Mgc2VjdXJpdHkgY2hlY2tzLiBUaGlzIGlzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHdoZXJlIGEgc2luZ2xlIG92ZXJzaWdodCBjYW4gaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIHNvIGl0J3MgY3JpdGljYWwgdG8gc2NydXRpbml6ZSBldmVyeSBsaW5lIG9mIGNvZGUuIEknbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsIGdyYXBoIGFuZCB0aGVuIGRpdmluZyBkZWVwIGludG8gaXRzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIxMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQ2LjU1NDc3NTc4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4OTcxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0zNTg9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9ldmVudF9pbmpfdmFsaWRfZXhlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4Ni0gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4NzpzdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz00MDY9c3RhdGljIGJvb2wgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00MzAtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo0MzE6XFx0aWYgKENDKCFuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaih2Y3B1LCBjb250cm9sLVxcdTAwM2VldmVudF9pbmopKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQzMi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQ2LjYwNDY4MDcxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjUwMzg3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5lc3RlZCBWTSBTdGF0ZSBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3RhdGUgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXN0ZWQgVk0gdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQsIHNvIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGVpdGhlciBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgIG9yIGBuZXN0ZWRfc3ZtX3ZtcnVuYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBtYW5pcHVsYXRpbmcgYW5kIHRyYW5zaXRpb25pbmcgdGhlIFZNIHN0YXRlIHdoZW4gbmVzdGVkLiBPZiBjb3Vyc2UsIGBuZXN0ZWRfdm1jYl9jaGVja19jb250cm9sc2AgaXMgdGhlIGZ1bmN0aW9uIHRoZXkgY2FsbCBpbiBtYW55IGltcGxlbWVudGF0aW9ucywgYW5kIEkgc2hvdWxkIGNoZWNrIGl0LCBhcyB0aGF04oCZcyB1c3VhbGx5IHdoZXJlIHRoZSBzcGVjaWZpYyBjb250cm9sIGJpdHMgYW5kIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgVk0gdHJhbnNpdGlvbi4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZywgXCJXaGVyZSdzIHRoZSBhY3R1YWwgc3RhdGUgY2hhbmdlIGxvZ2ljP1wiIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGgsIHRoZSBwbGFjZSB0aGF0IGlzIGhhbmRsaW5nIHRoZSBjaGVja3MgYW5kIHRoZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiB0aGUgbmVzdGVkIFZNQ0Igc3RydWN0dXJlcy4gVGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzgxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NDguNjY5NzIyMDQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI3OTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfdm1jYl9jaGVja19jb250cm9sc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM4Nz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQwNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjQwNjpzdGF0aWMgYm9vbCBuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00MDctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bWNiX2N0cmxfYXJlYV9jYWNoZWQgKmNvbnRyb2wpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTQ4Nz1pbnQgbmVzdGVkX3N2bV9jaGVja19jYWNoZWRfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDkyLVxcdFxcdFxcdFxcdCAgICBsMl9oYXNfc2VwYXJhdGVfcGF0KHZjcHUpKSB8fFxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NDkzOlxcdCAgICAhbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHModmNwdSwgXFx1MDAyNnN2bS1cXHUwMDNlbmVzdGVkLmN0bCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00OTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTUxMz12b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTU2LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NTU3OlxcdC8qIENvcHkgYXNpZCBoZXJlIGJlY2F1c2UgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoKSB3aWxsIGNoZWNrIGl0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy01NTgtXFx0dG8tXFx1MDAzZWFzaWQgICAgICAgICAgID0gZnJvbS1cXHUwMDNlYXNpZDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTk0Nj1zdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjAwOC1cXHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSh2Y3B1LCBcXHUwMDI2Y3RsX2NhY2hlZCwgY3RsKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIwMDk6XFx0aWYgKCFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcXHUwMDI2Y3RsX2NhY2hlZCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMDEwLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQ4LjcyMTAwNjA3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjM3Mjc1MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBnb29kIGxvb2sgYXQgYG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIGxhcmdlciBwaWN0dXJlLCBwYXJ0aWN1bGFybHkgaXRzIHJlbGF0aW9uIHRvIHRoZSBWaXJ0dWFsIE1hY2hpbmUgQ29udHJvbCBCbG9jaywgc3BlY2lmaWNhbGx5IFZNQ0IxMi4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2FmZWx5IGFuZCBlZmZpY2llbnRseSBtYW5hZ2luZyBwZW5kaW5nIGV2ZW50cywgbGlrZWx5IHdpdGhpbiBhIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LiBNeSBwcmltYXJ5IGNvbmNlcm5zIGFyZSBhcm91bmQgYXRvbWljaXR5IGFuZCBkYXRhIGNvbnNpc3RlbmN5LiBXaGF0J3MgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaGVyZT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGRlYWRsb2Nrcz9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb2RlJ3MgZWZmaWNpZW5jeSB0b28uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGZyZXF1ZW50IG1lbW9yeSBhY2Nlc3Nlcz8gQW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiwgcGVyaGFwcyB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdG9ycyBvciBjbGV2ZXIgZGF0YSBzdHJ1Y3R1cmVzPyBUaGUgcGVyZm9ybWFuY2UgaW1wYWN0IGhlcmUgY291bGQgYmUgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5IG5lc3RlZCBlbnZpcm9ubWVudC4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIHNhdmUgb3BlcmF0aW9uPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMgaW4gcGxhY2U/IEkgaG9wZSB0aGUgZGV2ZWxvcGVycyBoYXZlIGNvbnNpZGVyZWQgYWxsIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMuIFNlY3VyaXR5IGlzIGFsc28gYSBodWdlIGNvbmNlcm4uIEFueSBjaGFuY2Ugb2YgdnVsbmVyYWJpbGl0eSBleHBsb2l0YXRpb24/XG5cblVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gY29uZmlybSB0aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCwgc2VjdXJlLCBhbmQgcGVyZm9ybXMgb3B0aW1hbGx5IHdpdGhpbiB0aGUgc3lzdGVtJ3MgZGVzaWduIGNvbnN0cmFpbnRzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY2MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjUxLjk1ODI4MzA1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDgyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz02MjA9dm9pZCBuZXN0ZWRfc3luY19jb250cm9sX2Zyb21fdm1jYjAyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NTQtICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NTU6c3RhdGljIHZvaWQgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTIoc3RydWN0IHZjcHVfc3ZtICpzdm0sXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NTYtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZtY2IgKnZtY2IxMilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTI0OT1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMjk0LVxcdGlmICghc3ZtX2lzX3ZtcnVuX2ZhaWx1cmUodm1jYjEyLVxcdTAwM2Vjb250cm9sLmV4aXRfY29kZSkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMjk1OlxcdFxcdG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyKHN2bSwgdm1jYjEyKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyOTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjUyLjAwNzQzNzIwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc0OTgxMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6XG5cbioqQ2hlY2tpbmcgRXZlbnQgSW5qZWN0aW9uIEZsYWdzKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMgYW5hbHlzaXMsIGxldCdzIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdGF0ZSBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGZsYWdzLiBTcGVjaWZpY2FsbHksIGBpc19ldnRpbmpfc29mdGAgYW5kIGBpc19ldnRpbmpfbm1pYC4gIEtub3dpbmcgdGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgaXMgZnVuZGFtZW50YWwuIFRoZXkgZGljdGF0ZSB0aGUgYmVoYXZpb3Igb2Ygc2V2ZXJhbCBjb3JlIGNvbXBvbmVudHMsIGluZmx1ZW5jaW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgY2VydGFpbiBpbnRlcnJ1cHRzIG9yIGV2ZW50cy4gQSBzaW1wbGUgbWlzaW50ZXJwcmV0YXRpb24gaGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSBjb21wbGV0ZWx5IHdyb25nIHBhdGgsIHNvIGEgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIHBhcmFtb3VudC4gVGhpcyBpbml0aWFsIGJpdCBvZiBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgdG8gYXZvaWQgd2FzdGVkIHRpbWUgYW5kIG1ha2UgdGhlIGludmVzdGlnYXRpb24gbW9yZSBlZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NTMuOTgyNDIxNDI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA2NDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19ldnRpbmpfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NzQ0PXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MjctXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4Mjg6c3RhdGljIGlubGluZSBib29sIGlzX2V2dGlual9zb2Z0KHUzMiBldnRpbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04Mjkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDEtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDI6c3RhdGljIGJvb2wgaXNfZXZ0aW5qX25taSh1MzIgZXZ0aW5qKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9ODUyPXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05NzMtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo5NzQ6XFx0c3ZtLVxcdTAwM2VubWlfbDFfdG9fbDIgPSBpc19ldnRpbmpfbm1pKHZtY2IwMi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmopO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtOTc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05NzktXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo5ODA6XFx0aWYgKGlzX2V2dGlual9zb2Z0KHZtY2IwMi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmopKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05ODEtXFx0XFx0c3ZtLVxcdTAwM2Vzb2Z0X2ludF9pbmplY3RlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjU0LjAyODQ5MTYzOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Nzc0MjYyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9TVk0gRXZlbnQgSW5qZWN0aW9uIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBjaGFuZ2VzIHRoZSBkZWZpbml0aW9uIG9mIGBTVk1fRVZUSU5KX1ZBTElEYCBmcm9tIGAoMSBcdTAwM2NcdTAwM2MgMzEpYCB0byBgQklUKDMxKWAgd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIG1hY3JvIGlzIGNydWNpYWwgaW4gdGhlIEtWTS9TVk0gZXZlbnQgaW5qZWN0aW9uIHByb2Nlc3MsIHdoaWNoIGhhcyBzb21lIHJhdGhlciBjb21wbGljYXRlZCBpbnRlcmFjdGlvbnMsIGVzcGVjaWFsbHkgbmVzdGVkIFNWTSB2aXJ0dWFsaXphdGlvbi4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluamVjdGVkIGV4Y2VwdGlvbnMsIE5NSXMsIGFuZCBJUlFzLCBhcyB3ZWxsIGFzIHRoZSBvdmVyYWxsIG1hbmFnZW1lbnQgb2YgaW50ZXJydXB0cyB3aXRoaW4gdGhlIEtWTSBBTUQgc3Vic3lzdGVtLiBUaGF0IGNoYW5nZSBhZmZlY3RzIHNvbWUgdHJpY2t5IGJpdCBtYW5pcHVsYXRpb24gYW5kIG1hc2tzIChsaWtlIGBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFNgKS4gVGhpcyBhbHNvIGluZGljYXRlcyB0aGlzIGNoYW5nZSBhZmZlY3RzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIEtWTSBBTUQgc3Vic3lzdGVtLlxuXG5NeSBmb2N1cyBub3cgaXMgb24gd2hhdCBzcGVjaWZpY2FsbHkgdXNlcyB0aGlzIG1hY3JvLiBJIHNlZSB0aGF0IHNldmVyYWwgS1ZNL1NWTSBmdW5jdGlvbnMgZGlyZWN0bHkgdXNlIG9yIHdyYXAgdGhlIG1vZGlmaWVkIG1hY3JvLiBUaG9zZSBmdW5jdGlvbnMgYXJlOiBgc3ZtX2luamVjdF9leGNlcHRpb25gLCBgc3ZtX2luamVjdF9ubWlgLCBgc3ZtX2luamVjdF9pcnFgLCBgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHNgLCBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgLCBgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGVgLCBgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJgLCBgaXNfZXZ0aW5qX3NvZnRgLCBhbmQgYGlzX2V2dGlual9ubWlgLiBUaGVzZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0byBkaWcgaW50byBmdXJ0aGVyLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgcHJvcGVybHkuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzIGFyZSBgS1ZNX0FNRGAgYW5kLCBvYnZpb3VzbHksIGBLVk1gLiBMZXQgbWUgbWFrZSBzdXJlIGBLVk1fQU1EYCBpcyBzdGFuZGFyZCwgYWggeWVzLCBpdCBkZXBlbmRzIG9uIGBLVk0gXHUwMDI2XHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKWAuIFNvIGBLVk1gIGFuZCBgS1ZNX0FNRGAgYXJlIGNvbmZpcm1lZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSBub3RpbmcgZG93biBhbGwgbXkga2V5IGZpbmRpbmdzOiB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAoaW5kaWNhdGluZyB0aGlzIGlzIGFuIGFyZWEgb2YgaW50ZXJlc3QpLCBgRW5hYmxlQ29uZmlnc2AgYXJlIFwiS1ZNXCIsIFwiS1ZNX0FNRFwiLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlLCBhcyBwcmV2aW91c2x5IG5vdGVkLCB0aG9zZSBmdW5jdGlvbnMgdXNpbmcgdGhlIG1hY3JvLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAwOCwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NTguODAyNzU2Mjk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4MjM5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV9pbmplY3RfZXhjZXB0aW9uXCIsXG4gICAgXCJzdm1faW5qZWN0X25taVwiLFxuICAgIFwic3ZtX2luamVjdF9pcnFcIixcbiAgICBcInN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2lualwiLFxuICAgIFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgICBcIl9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBTVk1fRVZUSU5KX1ZBTElEIG1hY3JvIGRlZmluaXRpb24gZnJvbSAoMSBcXHUwMDNjXFx1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdm1faW5qZWN0X2V4Y2VwdGlvblwiLFxuICAgIFwic3ZtX2luamVjdF9ubWlcIixcbiAgICBcInN2bV9pbmplY3RfaXJxXCIsXG4gICAgXCJzdm1fY29tcGxldGVfaW50ZXJydXB0c1wiLFxuICAgIFwibmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpcIixcbiAgICBcIm5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyXCIsXG4gICAgXCJfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyB0aGUgU1ZNX0VWVElOSl9WQUxJRCBtYWNybyBkZWZpbml0aW9uIGZyb20gKDEgXFx1MDAzY1xcdTAwM2MgMzEpIHRvIEJJVCgzMSkgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgsIGNoYW5naW5nIGl0cyBzaWduZWRuZXNzL3R5cGUgcmVwcmVzZW50YXRpb24gaW4gYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhbmQgbWFzayBkZWZpbml0aW9ucyBsaWtlIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyBhY3Jvc3MgS1ZNIEFNRCBhbmQgbmVzdGVkIFNWTSBldmVudCBpbmplY3Rpb24gcm91dGluZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjU4Ljg3OTU5MDE1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MjgzNzYxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDo1OC44ODAxNDUzODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjkyNzgxNjAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYFNWTV9FVlRJTkpfVkFMSURgIG1hY3JvIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAgZnJvbSBgKDEgXFx1MDAzY1xcdTAwM2MgMzEpYCB0byBgQklUKDMxKWAuIFRoaXMgYXZvaWRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBlbnN1cmVzIHRoZSBjb25zdGFudCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIGJpdG1hc2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBtZW1vcnkgZGlzY2xvc3VyZSBpc3N1ZXMgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWM0Y2QyNzY1NTdkNTY1ZDVmODljZDY5N2JjODJkOGNiODQwMDZmMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDY6MDM6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5pbmRleCBhYTYzNDMxYmE5MmMzLi45MjFlNmVjYzQ4MzU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtNjM3LDcgKzYzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuICNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU09GVCAoNCBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIFxuLSNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG4rI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcbiAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFx1MDAzY1x1MDAzYyAxMSlcbiBcbiAjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFxcXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDo1OC44ODAxNDYyMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk1MDcyMTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNWTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggZm9jdXNlcyBvbiBhIG1hY3JvIGRlZmluaXRpb24gd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBmaXhpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgU1ZNX0VWVElOSl9WQUxJRGAuIEluaXRpYWxseSwgaXQgd2FzIGRlZmluZWQgYXMgYDEgXHUwMDNjXHUwMDNjIDMxYCwgd2hpY2gsIGluIGEgc2lnbmVkIGludGVnZXIgY29udGV4dCwgaXMgYSBrbm93biBhcmVhIG9mIHVuZGVmaW5lZCBiZWhhdmlvciBkdWUgdG8gdGhlIHBvdGVudGlhbCBmb3Igb3ZlcmZsb3cuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBCSVQoMzEpYC4gVGhpcyBpcyBhIG11Y2ggc2FmZXIgYXBwcm9hY2gsIGVuc3VyaW5nIHdlJ3JlIHdvcmtpbmcgd2l0aCBhbiB1bnNpZ25lZCBiaXQgc2hpZnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGFuZCBlbnN1cmUgdGhhdCB0aGUgdW5zaWduZWQgYml0IHNoaWZ0IGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGZvciB0aGlzIHJlZ2lzdGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2UgZG9lc24ndCBjcmVhdGUgbmV3IHN1YnRsZSBpbmNvbXBhdGliaWxpdGllcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCBhcm91bmQgbGluZSA2MzcgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24uIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBgU1ZNX0VWVElOSl9WQUxJRGAgaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgbWFjcm9zIGxpa2UgYFNWTV9FVlRJTkpfVFlQRV9FWEVQVGAsIGBTVk1fRVZUSU5KX1RZUEVfU09GVGAsIGFuZCB0aGUgbWFza3MuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgZm9yIHRoZSBTVk0gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNTowMy44MzA4Njk3NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMwOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9WRUNfTUFTSyAweGZmXFxuIDYzMTpcXHRcXG4gNjMyOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NISUZUIDhcXG4gNjMzOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX01BU0sgKDcgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiA2MzQ6XFx0XFxuIDYzNTpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9JTlRSICgwIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM2OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX05NSSAoMiBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuIDYzNzpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuIDYzODpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM5OlxcdFxcbiA2NDA6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG4gNjQxOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuIDY0MjpcXHRcXG4gNjQzOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcXFxcbiA2NDQ6XFx0XFx0XFx0XFx0XFx0ICAgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKVxcbiA2NDU6XFx0XFxuIDY0NjpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXFxuIDY0NzpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcXG4gNjUwOlxcdCNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbiA2NTE6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbiA2NTI6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNTowMy44MzA5NDg5NDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEzODM3MTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uY2VwdHMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyBTVk0gRXZlbnQgSW5qZWN0aW9uIGFuZCBFeGl0IEluZm9ybWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBTVk0tcmVsYXRlZCB0ZXJtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBTVk1fRVZUSU5KX1ZBTElEYCwgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AsIGFuZCBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYC4gRnJvbSBhIGh5cGVydmlzb3IncyBwZXJzcGVjdGl2ZSwgdGhlc2UgYXJlIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBndWVzdCdzIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QgYW5kIG1hbmFnaW5nIGludGVycnVwdHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY29uc2lkZXJlZCAqdmFsaWQqIGFib3V0IGV2ZW50IGluamVjdGlvbi4gYFNWTV9FVlRJTkpfVkFMSURgIGlzIHRoZSBmbGFnIEknbSBjb25jZXJuZWQgd2l0aC4gSXQncyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciB0aGF0IHRlbGxzIG1lIHdoZXRoZXIgdGhlIG90aGVyIGZpZWxkcyB3aXRoaW4gdGhlIGV2ZW50IGluamVjdGlvbiBjb250cm9sIHN0cnVjdHVyZSBhcmUgYWN0dWFsbHkgdHJ1c3R3b3J0aHkgYW5kIGNhbiBiZSB1c2VkIHRvIGluamVjdCBhbiBpbnRlcnJ1cHQgaW50byB0aGUgZ3Vlc3QgVk0uIElmIHRoaXMgYml0IGlzIHNldCwgSSBjYW4gY29uZmlkZW50bHkgaW50ZXJwcmV0IHRoZSBkYXRhLiBJZiBub3QsIEkgbmVlZCB0byBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZS4gSSBzdXNwZWN0IHRoZSBtZWFuaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgbmFtZSwgd2hlcmUgaXQgYmVpbmcgJzEnIHNpZ25pZmllcyBpdCdzIHZhbGlkLCBhbmQgJzAnIHNpZ25pZmllcyB0aGUgb3Bwb3NpdGUuXG5cblRoZW4sIHRoZXJlJ3MgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AuIFRoZXNlIGFyZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gSW4gYW55IGluc3RydWN0aW9uIHNldCBhcmNoaXRlY3R1cmUsIFwicmVzZXJ2ZWRcIiBiaXRzIGFyZSBhIGRvdWJsZS1lZGdlZCBzd29yZC4gT24gb25lIGhhbmQsIHRoZXkgY291bGQgYmUgc2V0IHRvIHplcm8uIE9uIHRoZSBvdGhlciwgdGhleSBjb3VsZCBiZSBzb21ldGhpbmcgdGhhdCBoYXMgYW4gdW5kZWZpbmVkIHZhbHVlLiBUaGV5IGFyZSB0aGVyZSBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSAqYWx3YXlzKiBtYXNrIHRoZW0uIElnbm9yaW5nIHRoZW0gYWx0b2dldGhlciBpcyBhc2tpbmcgZm9yIHRyb3VibGUuIEZ1dHVyZSByZXZpc2lvbnMgb2YgdGhlIGhhcmR3YXJlIG9yIG1pY3JvY29kZSBjb3VsZCByZXB1cnBvc2UgdGhlc2UgYml0cywgYW5kIGlmIG15IGh5cGVydmlzb3IgaXMgbm90IGNhcmVmdWwsIGl0IGNvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIHBvdGVudGlhbGx5IGV2ZW4gY3Jhc2hlcy4gU28sIHdoZW4gZGVhbGluZyB3aXRoIGV2ZW50IGluamVjdGlvbiBkYXRhLCBteSBjb2RlIGhhcyB0byBleHBsaWNpdGx5IGNsZWFyIG9yIG1hc2sgdGhlIHJlc2VydmVkIGJpdHMuIFRoaXMgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBtZWFzdXJlIGFzIHdlbGwgYXMgYSBzdGFiaWxpdHkgb25lLlxuXG5GaW5hbGx5LCBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYCBpcyB0aGUgc2FtZSBjb25jZXB0IGFzIGBTVk1fRVZUSU5KX1ZBTElEYCwgYnV0IGl0IGFwcGxpZXMgdG8gKmV4aXQgaW5mb3JtYXRpb24qLiBFc3NlbnRpYWxseSwgd2hlbmV2ZXIgdGhlIGd1ZXN0IFZNIGV4aXRzIHRvIHRoZSBob3N0LCBpdCdzIHByb3ZpZGluZyB0aGlzIGRhdGEuIEkgbmVlZCBhIHNpbWlsYXIgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB3aGF0IHRoZSBWTSBpcyBnaXZpbmcgbWUgYXMgYW4gXCJleGl0IHJlYXNvblwiIG9yIFwiaW50ZXJydXB0IGluZm9ybWF0aW9uXCIgaXMgY29ycmVjdCBvciBub3QuIEknZCBpbWFnaW5lIHRoYXQgaW4gc29tZSBjYXNlcywgdGhlIFZNIHdvdWxkIGV4aXQgZHVlIHRvIGFuIGludGVycnVwdC4gSWYgdGhpcyBiaXQgaXNuJ3Qgc2V0LCBhbnkgZGF0YSBpbiB0aGUgb3RoZXIgZmllbGRzIHJlbGF0ZWQgdG8gdGhpcyBpbnRlcnJ1cHQgYXJlIG1lYW5pbmdsZXNzLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZyBvciBkb2luZyBwZXJmb3JtYW5jZSBhbmFseXNpcywgYXMgd2VsbCBhcyBmb3IgaGFuZGxpbmcgc3BlY2lmaWMgdHlwZXMgb2YgVk0gZXhpdHMuIEknbSBnb2luZyB0byBsb29rIGZvciBleGFtcGxlcyBvZiBob3cgdGhlIFwiZXhpdCByZWFzb25cIiBpcyByZXBvcnRlZC5cblxuSW4gc3VtbWFyeSwgdGhlc2UgdGhyZWUgZWxlbWVudHMgYXJlIGNyaXRpY2FsIGZvciByZWxpYWJsZSBhbmQgc2VjdXJlIGd1ZXN0LWhvc3QgaW50ZXJhY3Rpb24gaW4gYW4gU1ZNIGVudmlyb25tZW50LiBUaGUga2V5IGlzIGNhcmVmdWwgdmFsaWRhdGlvbjogKmFsd2F5cyogY2hlY2sgdGhlIHZhbGlkIGJpdHMsICphbHdheXMqIG1hc2sgdGhlIHJlc2VydmVkIGJpdHMsIGFuZCBjb3JyZWN0bHkgaW50ZXJwcmV0IGFuZCByZWFjdCB0byB0aGUgdmFsaWRpdHkgZmxhZ3MuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGJ1aWxkaW5nIGEgcm9idXN0IGFuZCBzZWN1cmUgaHlwZXJ2aXNvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDU6MDguOTY5MzI1NDEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAxMTcwMTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNWTV9FVlRJTkpfVkFMSUR8U1ZNX0VYSVRJTlRJTkZPX1ZBTElEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jPTQxNj1lbnVtIGVzX3Jlc3VsdCB2ZXJpZnlfZXhjZXB0aW9uX2luZm8oc3RydWN0IGdoY2IgKmdoY2IsIHN0cnVjdCBlc19lbV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI4LVxcdFxcdC8qIENoZWNrIGlmIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGh5cGVydmlzb3IgaXMgc2FuZS4gKi9cXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0Mjk6XFx0XFx0aWYgKChpbmZvIFxcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzAtXFx0XFx0ICAgICgodiA9PSBYODZfVFJBUF9HUCkgfHwgKHYgPT0gWDg2X1RSQVBfVUQpKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMzLVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jOjQzNDpcXHRcXHRcXHRpZiAoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkFMSURfRVJSKVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzNS1cXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VmaS5lcnJvcl9jb2RlID0gaW5mbyBcXHUwMDNlXFx1MDAzZSAzMjtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDA6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDE6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQzLSNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NDpcXHRcXHRcXHRcXHQgICBTVk1fRVZUSU5KX1ZBTElEX0VSUiB8IFNWTV9FVlRJTkpfVkFMSUQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ1LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjUzLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU1OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MzU4PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fZXZlbnRfaW5qX3ZhbGlkX2V4ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODEtLypcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4MjogKiBBY2NvcmRpbmcgdG8gdGhlIEFQTSwgVk1SVU4gZXhpdHMgd2l0aCBTVk1fRVhJVF9FUlIgaWYgU1ZNX0VWVElOSl9WQUxJRCBpc1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzgzLSAqIHNldCBhbmQ6XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM4Nz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5MjpcXHRpZiAoIShldmVudF9pbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NjU1PXN0YXRpYyB2b2lkIG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjMtXFx0XFx0bnIgPSB2Y3B1LVxcdTAwM2VhcmNoLmV4Y2VwdGlvbi52ZWN0b3I7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NjQ6XFx0XFx0ZXhpdF9pbnRfaW5mbyA9IG5yIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2Ni1cXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY2NzpcXHRcXHRcXHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVkFMSURfRVJSO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjY4LVxcdFxcdFxcdHZtY2IxMi1cXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3Mi1cXHR9IGVsc2UgaWYgKHZjcHUtXFx1MDAzZWFyY2gubm1pX2luamVjdGVkKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NzM6XFx0XFx0ZXhpdF9pbnRfaW5mbyA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzYtXFx0XFx0bnIgPSB2Y3B1LVxcdTAwM2VhcmNoLmludGVycnVwdC5ucjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY3NzpcXHRcXHRleGl0X2ludF9pbmZvID0gbnIgfCBTVk1fRVZUSU5KX1ZBTElEO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04Mjg9c3RhdGljIGlubGluZSBib29sIGlzX2V2dGlual9zb2Z0KHUzMiBldnRpbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzMi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMzpcXHRpZiAoIShldnRpbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg0Mj1zdGF0aWMgYm9vbCBpc19ldnRpbmpfbm1pKHUzMiBldnRpbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjg0NjpcXHRpZiAoIShldnRpbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4OT1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQwMC1cXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gZXgtXFx1MDAzZXZlY3RvclxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDAxOlxcdFxcdHwgU1ZNX0VWVElOSl9WQUxJRFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDAyOlxcdFxcdHwgKGV4LVxcdTAwM2VoYXNfZXJyb3JfY29kZSA/IFNWTV9FVlRJTkpfVkFMSURfRVJSIDogMClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQwMy1cXHRcXHR8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NjAtXFx0dWludDMyX3QgaWR0X3YgPVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ2MTpcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NjItXFx0Ym9vbCBoYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNjgzPXN0YXRpYyB2b2lkIHN2bV9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXFx0KmludHJfaW5mbyA9IGNvbnRyb2wtXFx1MDAzZWV4aXRfaW50X2luZm87XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM2OTQ6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjk1LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXhpdF9pbnRfaW5mb19lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3MDA9c3RhdGljIHZvaWQgc3ZtX2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzA3OlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXZlbnRfaW5qX2VycjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9Mzc4OD1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTEtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzkyOlxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4NDI9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJlaW5qZWN0ZWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM4NzYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozODc3OlxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBpbnRyLVxcdTAwM2VuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCB0eXBlO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3OC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQzMzg9c3RhdGljIHZvaWQgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzY0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM2NTpcXHRpZiAoIShleGl0aW50aW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzY2LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzOTA6XFx0XFx0aWYgKGV4aXRpbnRpbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTEtXFx0XFx0XFx0ZXJyb3JfY29kZSA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VycjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5My1cXHRcXHRrdm1fcmVxdWV1ZV9leGNlcHRpb24odmNwdSwgdmVjdG9yLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5NDpcXHRcXHRcXHRcXHQgICAgICBleGl0aW50aW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk1LVxcdFxcdFxcdFxcdCAgICAgIGVycm9yX2NvZGUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3RvcilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxMi17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTM6XFx0dTY0IGRhdGEgPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUIHwgdmVjdG9yO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oPTIzMz1zdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5NzojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgKDEgXFx1MDAzY1xcdTAwM2MgMzEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5ODojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFxcdTAwM2NcXHUwMDNjIDExKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDg6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM9Nzk9c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB1NjQgaXNfbm1pLCB1NjQgaWR0X2FsdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTItXFx0aWYgKGlzX25taSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6OTM6XFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk0LVxcdH0gZWxzZSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5NTpcXHRcXHR2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IElOVF9OUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfU09GVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk2LVxcdFxcdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2sgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6MTI2OlxcdHZtY2ItXFx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gQlBfVkVDVE9SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNy1cXHQvKiBUaGUgcmV0dXJuIGFkZHJlc3MgcHVzaGVkIG9uIHN0YWNrLCBza2lwIG92ZXIgVUQyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA1OjExLjc3MDUwMTQzMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM3NDM5Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQml0bWFzayBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSB3aGVyZSBgU1ZNX0VWVElOSl9WQUxJRGAgd2FzIGRlZmluZWQgYXMgYCgxIFx1MDAzY1x1MDAzYyAzMSlgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCdzIGEgcmVkIGZsYWcuIEluIDMyLWJpdCBzaWduZWQgaW50ZWdlciBhcml0aG1ldGljLCB0aGF0J3MgdW5kZWZpbmVkIGJlaGF2aW9yLCBsaWtlbHkgbGVhZGluZyB0byBhIG5lZ2F0aXZlIGludGVnZXIgb3IgYDB4ODAwMDAwMDBgIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIncyBpbnRlcnByZXRhdGlvbiDigJMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LiBUaGUgZml4IOKAkyBjaGFuZ2luZyBpdCB0byBgQklUKDMxKWAgb3IgYCgxVUwgXHUwMDNjXHUwMDNjIDMxKWAg4oCTIGlzIHNwb3Qgb24uIFRoYXQgY2xlYXJseSBkZWZpbmVzIGl0IGFzIGFuIHVuc2lnbmVkIGxvbmcgYml0bWFzaywgd2hpY2ggaXMgZmFyIGNsZWFuZXIgYW5kIG1vcmUgcHJlZGljdGFibGUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcy4gTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgY2hlY2tsaXN0OiBObyBuZXcgYWxsb2NhdGlvbnM/IE5vcGUuIE5vIG1vZGlmaWVkIGJ1ZmZlcnM/IE5vLiBObyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZD8gTm8sIHRoYXQncyBub3QgdGhlIGNhc2UuIE5vIHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcz8gQWxzbyBuby4gQW5kIGNyaXRpY2FsbHksIG5vIGJyYW5jaGluZyBsb2dpYyB0aGF0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgYSBodWdlIHJlbGllZi5cblxuVGhpcyBpcyBlc3NlbnRpYWxseSBhIG1hY3JvIGNsZWFudXAuIEl0J3MgYWJvdXQgZml4aW5nIGEgYml0bWFzayByZXByZXNlbnRhdGlvbiB0aGF0IHdhcyBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgY29tcGlsZXIgd2FybmluZ3MuIFRoZSBLQVNBTi9VQlNBTiB0b29scyBhcmUgYWxyZWFkeSBpbiBwbGFjZSB0byBjYXRjaCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3JzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgaW4gdGhhdCBhcmVhLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgZXZlcnl0aGluZyBhbGlnbnM6XG5cbiogICBgTmVlZHNLTVNBTjogZmFsc2VgXG4qICAgYEtNU0FOUmVhc29uaW5nOiBEZXRhaWxlZCBleHBsYW5hdGlvbiBjb250cmFzdGluZyBLTVNBTiB2cyBLQVNBTi5gXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI0LCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNToxNS44MDc5NDQ2ODVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFxcdTAwM2NcXHUwMDNjIDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGF2b2lkcyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgZW5zdXJlcyB0aGUgY29uc3RhbnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBiaXRtYXNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgcGFzc2VkIHRvIHVzZXJzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgbWVtb3J5IGRpc2Nsb3N1cmUgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFxcdTAwM2NcXHUwMDNjIDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGF2b2lkcyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgZW5zdXJlcyB0aGUgY29uc3RhbnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBiaXRtYXNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgcGFzc2VkIHRvIHVzZXJzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgbWVtb3J5IGRpc2Nsb3N1cmUgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 05:41:26 +0000 UTC FinishedAt: 2026-09-08 06:05:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "cd5d63ad-7f96-4335-bb06-aec3541a1bb0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "svm_inject_exception", "svm_inject_nmi", "svm_inject_irq", "svm_complete_interrupts", "nested_svm_check_event_inj", "nested_save_pending_event_to_vmcb12", "__nested_copy_vmcb_control_to_cache" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX2luamVjdF9leGNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9ubWkmIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9pcnEmIzM0OywKICAgICYjMzQ7c3ZtX2NvbXBsZXRlX2ludGVycnVwdHMmIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmomIzM0OywKICAgICYjMzQ7bmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTImIzM0OywKICAgICYjMzQ7X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgU1ZNX0VWVElOSl9WQUxJRGAgbWFjcm8gaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCBmcm9tIGAoMSBcdTAwM2NcdTAwM2MgMzEpYCB0byBgQklUKDMxKWAuIFRoaXMgYXZvaWRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBlbnN1cmVzIHRoZSBjb25zdGFudCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIGJpdG1hc2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgcGFzc2VkIHRvIHVzZXJzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgbWVtb3J5IGRpc2Nsb3N1cmUgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFx1MDAzY1x1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVjNGNkMjc2NTU3ZDU2NWQ1Zjg5Y2Q2OTdiYzgyZDhjYjg0MDA2ZjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA2OjAzOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGFhNjM0MzFiYTkyYzMuLjkyMWU2ZWNjNDgzNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC02MzcsNyAmIzQzOzYzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuICNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU09GVCAoNCBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIFxuLSNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG4mIzQzOyNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcdTAwM2NcdTAwM2MgMTEpXG4gXG4gI2RlZmluZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgfihTVk1fRVZUSU5KX1ZFQ19NQVNLIHwgU1ZNX0VWVElOSl9UWVBFX01BU0sgfCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX2luamVjdF9leGNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9ubWkmIzM0OywKICAgICYjMzQ7c3ZtX2luamVjdF9pcnEmIzM0OywKICAgICYjMzQ7c3ZtX2NvbXBsZXRlX2ludGVycnVwdHMmIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmomIzM0OywKICAgICYjMzQ7bmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTImIzM0OywKICAgICYjMzQ7X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBTVk1fRVZUSU5KX1ZBTElEIG1hY3JvIGRlZmluaXRpb24gZnJvbSAoMSBcdTAwM2NcdTAwM2MgMzEpIHRvIEJJVCgzMSkgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgsIGNoYW5naW5nIGl0cyBzaWduZWRuZXNzL3R5cGUgcmVwcmVzZW50YXRpb24gaW4gYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhbmQgbWFzayBkZWZpbml0aW9ucyBsaWtlIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyBhY3Jvc3MgS1ZNIEFNRCBhbmQgbmVzdGVkIFNWTSBldmVudCBpbmplY3Rpb24gcm91dGluZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYzRjZDI3NjU1N2Q1NjVkNWY4OWNkNjk3YmM4MmQ4Y2I4NDAwNmYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uOTIxZTZlY2M0ODM1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTYzNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyAmbHQ7Jmx0OyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0ICZsdDsmbHQ7IFNWTV9FVlRJTkpfVFlQRV9TSElGVCkKIAotI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxICZsdDsmbHQ7IDMxKQomIzQzOyNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxICZsdDsmbHQ7IDExKQogCiAjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNWTSBIZWFkZXIgRmlsZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGRpZmYuIEkgc2VlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzb21lIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZXZlbnQgaW5qZWN0aW9uLiBMb29rcyBsaWtlIHRoZSBgU1ZNX0VWVElOSl9WQUxJRGAgbWFjcm8gaGFzIGJlZW4gbW9kaWZpZWQuIFRoZXkmIzM5O3ZlIHJlcGxhY2VkIGAoMSAmbHQ7Jmx0OyAzMSlgIHdpdGggYEJJVCgzMSlgLiBJbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIHRoaXMgY2hhbmdlPyBDb3VsZCBiZSBhIHN0eWxpc3RpYyB0aGluZywgb3IgbWF5YmUgdGhlcmUgYXJlIGltcGxpY2F0aW9ucyBmb3IgYml0IG1hbmlwdWxhdGlvbiB0aGF0IEkgbmVlZCB0byBjb25zaWRlci4KClJpZ2h0LCB0aW1lIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQuIExldCBtZSBqdXN0IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBpbiB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MzcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb25zdGFudHMgYXJlIGJlaW5nIHVzZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIgZGVmaW5pdGlvbnMsIGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIGl0JiMzOTtzIGJlaGF2aW9yLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIGFwcHJvcHJpYXRlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdCNkZWZpbmUgU1ZNX0VWVElOSl9WRUNfTUFTSyAweGZmXG4gNjMxOlx0XG4gNjMyOlx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOFxuIDYzMzpcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX01BU0sgKDcgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2MzQ6XHRcbiA2MzU6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9JTlRSICgwIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gNjM2Olx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gNjM3Olx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2Mzg6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gNjM5Olx0XG4gNjQwOlx0I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcbiA2NDE6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFx1MDAzY1x1MDAzYyAxMSlcbiA2NDI6XHRcbiA2NDM6XHQjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFxcXG4gNjQ0Olx0XHRcdFx0XHQgICBTVk1fRVZUSU5KX1ZBTElEX0VSUiB8IFNWTV9FVlRJTkpfVkFMSUQpXG4gNjQ1Olx0XG4gNjQ2Olx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkVDX01BU0sgU1ZNX0VWVElOSl9WRUNfTUFTS1xuIDY0NzpcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSyBTVk1fRVZUSU5KX1RZUEVfTUFTS1xuIDY0ODpcdFxuIDY0OTpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcbiA2NTA6XHQjZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxuIDY1MTpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxuIDY1MjpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcbiA2NTM6XHRcbiA2NTQ6XHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG4gNjU1Olx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXG4gNjU2Olx0XG4gNjU3Olx0I2RlZmluZSBTVk1fRVhJVElORk9TSElGVF9UU19SRUFTT05fSVJFVCAzNlxuIDY1ODpcdCNkZWZpbmUgU1ZNX0VYSVRJTkZPU0hJRlRfVFNfUkVBU09OX0pNUCAzOFxuIDY1OTpcdCNkZWZpbmUgU1ZNX0VYSVRJTkZPU0hJRlRfVFNfSEFTX0VSUk9SX0NPREUgNDRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCaXR3aXNlIE9wZXJhdGlvbnMgYW5kIERhdGEgVHlwZXMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbXBhcmUgYEJJVCgzMSlgIHdpdGggYCgxICZsdDsmbHQ7IDMxKWAuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgaW4gQywgYCgxICZsdDsmbHQ7IDMxKWAgd2hlbiB1c2luZyBhIDMyLWJpdCBgaW50YCwgZXZhbHVhdGVzIHRvIGAweDgwMDAwMDAwYCwgd2hpY2ggaXMgcHJvYmxlbWF0aWMgZHVlIHRvIHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3Igb3IgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBpbiBDOTkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTm93LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AgZm9yIGFueSBpc3N1ZXMuCgpBaGEhIExpbmUgNjQzIHJldmVhbHMgdGhhdCBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBpcyBkZWZpbmVkIGFzIHRoZSBiaXR3aXNlIE5PVCBvZiBhIGNvbWJpbmF0aW9uIG9mIG1hc2tzLiBUaGUgc2lnbmlmaWNhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGlmIGBTVk1fRVZUSU5KX1ZBTElEYCB1c2VzIGAoMSAmbHQ7Jmx0OyAzMSlgIHdpdGggYSAzMi1iaXQgYGludGAsIHRoZW4gdGhlIGJpdHdpc2UgTk9ULCBgfiguLi4pYCwgd2lsbCBlaXRoZXIgc2lnbi1leHRlbmQgdG8gNjQtYml0IHdoZW4gY2FzdCB0byBgdTY0YCBvciB3aWxsIGJlIGEgc2lnbmVkIDMyLWJpdCBgaW50YC4KCkhvd2V2ZXIsIGlmIGBTVk1fRVZUSU5KX1ZBTElEYCB1c2VzIGBCSVQoMzEpYCwgd2hpY2ggaXMgYCgxVUwgJmx0OyZsdDsgMzEpYCwgd2UgaGF2ZSBhIGRpZmZlcmVudCBwaWN0dXJlLiBPbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgbGlrZSB4ODZfNjQsIGAxVUxgIGlzIGFuIGB1bnNpZ25lZCBsb25nYCB3aGljaCBpcyA2NC1iaXQuIFRoZXJlZm9yZSwgdGhlIGVudGlyZSBleHByZXNzaW9uIGluY2x1ZGluZyB0aGUgbWFza3MgdGFrZXMgdGhlIHR5cGUgYHVuc2lnbmVkIGxvbmdgIGluIDY0LWJpdCBhcmNoaXRlY3R1cmUuIFNvLCB0aGUgYH5gIG9mIHRoaXMgdW5zaWduZWQgbG9uZywgaW4gNjQtYml0IHdpbGwgc2V0IGJpdHMgMzIuLjYzIHRvIDEuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBvciBgU1ZNX0VWVElOSl9WQUxJRGAgYXJlIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG11c3QgY2hlY2sgdXNhZ2UgdG8gYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVk1fRVZUSU5KXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYz00MTY9ZW51bSBlc19yZXN1bHQgdmVyaWZ5X2V4Y2VwdGlvbl9pbmZvKHN0cnVjdCBnaGNiICpnaGNiLCBzdHJ1Y3QgZXNfZW1fY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MjUtXHRcdHU2NCBpbmZvID0gZ2hjYi1cdTAwM2VzYXZlLnN3X2V4aXRfaW5mb18yO1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDI2Olx0XHR1bnNpZ25lZCBsb25nIHYgPSBpbmZvIFx1MDAyNiBTVk1fRVZUSU5KX1ZFQ19NQVNLO1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI3LVxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI4LVx0XHQvKiBDaGVjayBpZiBleGNlcHRpb24gaW5mb3JtYXRpb24gZnJvbSBoeXBlcnZpc29yIGlzIHNhbmUuICovXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0Mjk6XHRcdGlmICgoaW5mbyBcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzAtXHRcdCAgICAoKHYgPT0gWDg2X1RSQVBfR1ApIHx8ICh2ID09IFg4Nl9UUkFQX1VEKSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0MzE6XHRcdCAgICAoKGluZm8gXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLKSA9PSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQpKSB7XG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzItXHRcdFx0Y3R4dC1cdTAwM2VmaS52ZWN0b3IgPSB2O1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMzLVxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDM0Olx0XHRcdGlmIChpbmZvIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEX0VSUilcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzNS1cdFx0XHRcdGN0eHQtXHUwMDNlZmkuZXJyb3JfY29kZSA9IGluZm8gXHUwMDNlXHUwMDNlIDMyO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02MjktXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzA6I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzMS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzMjojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TSElGVCA4XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjM0LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjM1OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzNjojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9OTUkgKDIgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzNzojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjM4OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0MDojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQxOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQzOiNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NDpcdFx0XHRcdCAgIFNWTV9FVlRJTkpfVkFMSURfRVJSIHwgU1ZNX0VWVElOSl9WQUxJRClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY0NS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NjojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDc6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDk6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjUwOiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTE6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTI6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjUzLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU0OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEIFNWTV9FVlRJTkpfVkFMSURcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlJcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM1OD1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2V2ZW50X2lual92YWxpZF9leGVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4MS0vKlxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozODI6ICogQWNjb3JkaW5nIHRvIHRoZSBBUE0sIFZNUlVOIGV4aXRzIHdpdGggU1ZNX0VYSVRfRVJSIGlmIFNWTV9FVlRJTkpfVkFMSUQgaXNcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzgzLSAqIHNldCBhbmQ6XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4NC0gKiAtIFRoZSB0eXBlIG9mIGV2ZW50X2luaiBpcyBub3Qgb25lIG9mIHRoZSBkZWZpbmVkIHZhbHVlcy5cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg1OiAqIC0gVGhlIHR5cGUgaXMgU1ZNX0VWVElOSl9UWVBFX0VYRVBULCBidXQgdGhlIHZlY3RvciBpcyBub3QgYSB2YWxpZCBleGNlcHRpb24uXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4Ni0gKi9cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9Mzg3PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGV2ZW50X2luailcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzg4LXtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg5Olx0dTMyIHR5cGUgPSBldmVudF9pbmogXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTA6XHR1OCB2ZWN0b3IgPSBldmVudF9pbmogXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MzkyOlx0aWYgKCEoZXZlbnRfaW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzkzLVx0XHRyZXR1cm4gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzk0LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTU6XHRpZiAodHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfSU5UUiBcdTAwMjZcdTAwMjYgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfTk1JIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTY6XHQgICAgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgXHUwMDI2XHUwMDI2IHR5cGUgIT0gU1ZNX0VWVElOSl9UWVBFX1NPRlQpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5Ny1cdFx0cmV0dXJuIGZhbHNlO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5OTpcdGlmICh0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDAwLVx0ICAgICFuZXN0ZWRfc3ZtX2V2ZW50X2lual92YWxpZF9leGVwdCh2Y3B1LCB2ZWN0b3IpKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NTEzPXZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTQ4LVx0dG8tXHUwMDNlZXhpdF9pbnRfaW5mb19lcnIgICA9IGZyb20tXHUwMDNlZXhpdF9pbnRfaW5mb19lcnI7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU0OTpcdHRvLVx1MDAzZWV2ZW50X2luaiAgICAgICAgICAgPSBmcm9tLVx1MDAzZWV2ZW50X2luaiBcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUUztcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTUwLVx0dG8tXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXHUwMDNlZXZlbnRfaW5qX2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTY1NT1zdGF0aWMgdm9pZCBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2My1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uLnZlY3RvcjtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY0Olx0XHRleGl0X2ludF9pbmZvID0gbnIgfCBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjUtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2Ni1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY3Olx0XHRcdGV4aXRfaW50X2luZm8gfD0gU1ZNX0VWVElOSl9WQUxJRF9FUlI7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2OC1cdFx0XHR2bWNiMTItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzItXHR9IGVsc2UgaWYgKHZjcHUtXHUwMDNlYXJjaC5ubWlfaW5qZWN0ZWQpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjczOlx0XHRleGl0X2ludF9pbmZvID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3Ni1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guaW50ZXJydXB0Lm5yO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Nzc6XHRcdGV4aXRfaW50X2luZm8gPSBuciB8IFNWTV9FVlRJTkpfVkFMSUQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OC1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc5LVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmludGVycnVwdC5zb2Z0KVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2ODA6XHRcdFx0ZXhpdF9pbnRfaW5mbyB8PSBTVk1fRVZUSU5KX1RZUEVfU09GVDtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjgxLVx0XHRlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY4MjpcdFx0XHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVFlQRV9JTlRSO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02ODMtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04Mjg9c3RhdGljIGlubGluZSBib29sIGlzX2V2dGlual9zb2Z0KHUzMiBldnRpbmopXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgyOS17XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMDpcdHUzMiB0eXBlID0gZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1RZUEVfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODMxOlx0dTggdmVjdG9yID0gZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZFQ19NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzItXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMzpcdGlmICghKGV2dGluaiBcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzNC1cdFx0cmV0dXJuIGZhbHNlO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzUtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzNjpcdGlmICh0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9TT0ZUKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzctXHRcdHJldHVybiB0cnVlO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzgtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzOTpcdHJldHVybiB0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCBcdTAwMjZcdTAwMjYga3ZtX2V4Y2VwdGlvbl9pc19zb2Z0KHZlY3Rvcik7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0MC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NDI9c3RhdGljIGJvb2wgaXNfZXZ0aW5qX25taSh1MzIgZXZ0aW5qKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDMte1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDQ6XHR1MzIgdHlwZSA9IGV2dGluaiBcdTAwMjYgU1ZNX0VWVElOSl9UWVBFX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0NS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ2Olx0aWYgKCEoZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQ3LVx0XHRyZXR1cm4gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0OC1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ5Olx0cmV0dXJuIHR5cGUgPT0gU1ZNX0VWVElOSl9UWVBFX05NSTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODUwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4OT1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDAtXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGV4LVx1MDAzZXZlY3RvclxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDE6XHRcdHwgU1ZNX0VWVElOSl9WQUxJRFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDI6XHRcdHwgKGV4LVx1MDAzZWhhc19lcnJvcl9jb2RlID8gU1ZNX0VWVElOSl9WQUxJRF9FUlIgOiAwKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDM6XHRcdHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDQtXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2lual9lcnIgPSBleC1cdTAwM2VlcnJvcl9jb2RlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU2LVx0XHRTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDU3Olx0aW50IGludF92ZWMgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTgtXHR1aW50MzJfdCB0eXBlID1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3ODg9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzc5MjpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODQyPXN0YXRpYyB2b2lkIHN2bV9pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCByZWluamVjdGVkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg1MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg1MjpcdFx0dHlwZSA9IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODUzLVx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg1NDpcdFx0dHlwZSA9IFNWTV9FVlRJTkpfVFlQRV9JTlRSO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODU1LVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg3NzpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gaW50ci1cdTAwM2VuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCB0eXBlO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODc4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTIte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTM6XHR1NjQgZGF0YSA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfCB2ZWN0b3I7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjg3OiNkZWZpbmUgU1ZNX0VWVElOSl9WRUNfTUFTSyAweGZmXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjg4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI4OTojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TSElGVCA4XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MjkwOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX01BU0sgKDcgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MjkyOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk0OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk1OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk3OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk4OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDA6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkVDX01BU0sgU1ZNX0VWVElOSl9WRUNfTUFTS1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0zMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzAzOiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDQ6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTk1JIFNWTV9FVlRJTkpfVFlQRV9OTUlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDU6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA2OiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0zMDctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA4OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEIFNWTV9FVlRJTkpfVkFMSURcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzEwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM9Nzk9c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB1NjQgaXNfbm1pLCB1NjQgaWR0X2FsdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTkyLVx0aWYgKGlzX25taSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5MzpcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYy05NC1cdH0gZWxzZSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jOjk1Olx0XHR2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gSU5UX05SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYy05Ni1cdFx0LyogVGhlIHJldHVybiBhZGRyZXNzIHB1c2hlZCBvbiBzdGFjayAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzoxMjY6XHR2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gQlBfVkVDVE9SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI3LVx0LyogVGhlIHJldHVybiBhZGRyZXNzIHB1c2hlZCBvbiBzdGFjaywgc2tpcCBvdmVyIFVEMiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVk0gRXhpdCBJbmZvcm1hdGlvbiBWYWxpZGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYFNWTV9FWElUSU5USU5GT19WQUxJRGAgbWFjcm8uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBhcyBgU1ZNX0VWVElOSl9WQUxJRGAuICBIbW0sIGludGVyZXN0aW5nLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHN1YnN0aXR1dGlvbiBpcyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFsaWRpdHkgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGVyZSBpcyBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYCBhY3R1YWxseSByZWZlcmVuY2VkPyBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gIExldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyB0aGluZyBwb3BzIHVwLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1ZNX0VYSVRJTlRJTkZPXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD01NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ1LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ2OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NzojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY0OC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0OTojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSIFNWTV9FVlRJTkpfVFlQRV9JTlRSXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTA6I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTk1JIFNWTV9FVlRJTkpfVFlQRV9OTUlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MTojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9FWEVQVCBTVk1fRVZUSU5KX1RZUEVfRVhFUFRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MjojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIFNWTV9FVlRJTkpfVFlQRV9TT0ZUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NTMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTQ6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU1OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjU2LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU1LVx0aW50IGludF90eXBlID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvIFx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDU2Olx0XHRTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU3LVx0aW50IGludF92ZWMgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTgtXHR1aW50MzJfdCB0eXBlID1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ1OTpcdFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYwLVx0dWludDMyX3QgaWR0X3YgPVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDYxOlx0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRDtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ2Mi1cdGJvb2wgaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NzktXHRcdHN3aXRjaCAodHlwZSkge1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDgwOlx0XHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX05NSTpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ4MS1cdFx0XHR2Y3B1LVx1MDAzZWFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0ODItXHRcdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0ODM6XHRcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQ6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0ODQtXHRcdFx0aWYgKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzIgXHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDkxLVx0XHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDkyOlx0XHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFI6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0OTM6XHRcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ5NC1cdFx0XHRrdm1fY2xlYXJfaW50ZXJydXB0X3F1ZXVlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjUwMS1cdGlmIChyZWFzb24gIT0gVEFTS19TV0lUQ0hfR0FURSB8fFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTAyOlx0ICAgIGludF90eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgfHxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjUwMzpcdCAgICAoaW50X3R5cGUgPT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MDQtXHQgICAgIChpbnRfdmVjID09IE9GX1ZFQ1RPUiB8fCBpbnRfdmVjID09IEJQX1ZFQ1RPUikpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNTA4LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTA5Olx0aWYgKGludF90eXBlICE9IFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MTAtXHRcdGludF92ZWMgPSAtMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2ODM9c3RhdGljIHZvaWQgc3ZtX2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXHQqaW50cl9pbmZvID0gY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlx0aWYgKCgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjk0Olx0ICAgICgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY5NS1cdFx0KmVycm9yX2NvZGUgPSBjb250cm9sLVx1MDAzZWV4aXRfaW50X2luZm9fZXJyO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzcwMD1zdGF0aWMgdm9pZCBzdm1fZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDc6XHRpZiAoKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XHQgICAgKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVx0XHQqZXJyb3JfY29kZSA9IGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qX2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQyOTQ9c3RhdGljIHZvaWQgc3ZtX2NvbXBsZXRlX3NvZnRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI5Ni17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQyOTc6XHRib29sIGlzX2V4Y2VwdGlvbiA9ICh0eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI5ODpcdGJvb2wgaXNfc29mdCA9ICh0eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mjk5LVx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00MzM4PXN0YXRpYyB2b2lkIHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzNjQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNjU6XHRpZiAoIShleGl0aW50aW5mbyBcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2OS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM3MDpcdHZlY3RvciA9IGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkVDX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNzE6XHR0eXBlID0gZXhpdGludGluZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19UWVBFX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzNzItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzc2LVx0c3dpdGNoICh0eXBlKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNzc6XHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX05NSTpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM3OC1cdFx0dmNwdS1cdTAwM2VhcmNoLm5taV9pbmplY3RlZCA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzgwLVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM4MTpcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQ6IHtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4Mi1cdFx0dTMyIGVycm9yX2NvZGUgPSAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4OS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5MDpcdFx0aWYgKGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkxLVx0XHRcdGVycm9yX2NvZGUgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm9fZXJyO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5My1cdFx0a3ZtX3JlcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlY3RvcixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5NDpcdFx0XHRcdCAgICAgIGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk1LVx0XHRcdFx0ICAgICAgZXJyb3JfY29kZSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk3LVx0fVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0Mzk4Olx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSOlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk5LVx0XHRrdm1fcXVldWVfaW50ZXJydXB0KHZjcHUsIHZlY3RvciwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NDAwLVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDQwMTpcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDQwMi1cdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCB2ZWN0b3IsIHRydWUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTEzMT1zdGF0aWMgaW50IHN2bV9jaGVja19lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxfdHlwZSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUxMzgtXHQvKiBDaGVjayB0aGF0IGVtdWxhdGlvbiBpcyBwb3NzaWJsZSBkdXJpbmcgZXZlbnQgdmVjdG9yaW5nICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUxMzk6XHRpZiAoKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUxNDAtXHQgICAgIWt2bV9jYW5fZW11bGF0ZV9ldmVudF92ZWN0b3JpbmcoZW11bF90eXBlKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzAwOiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDE6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzAyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMzojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSIFNWTV9FVlRJTkpfVFlQRV9JTlRSXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA0OiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA1OiNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwNjojZGVmaW5lXHRTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIFNWTV9FVlRJTkpfVFlQRV9TT0ZUXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwODojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA5OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gS1ZNL1NWTSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AsIHNwZWNpZmljYWxseSB0aGlzIGxpbmU6IGB0by0mZ3Q7ZXZlbnRfaW5qID0gZnJvbS0mZ3Q7ZXZlbnRfaW5qICZhbXA7IH5TVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFM7YC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpa2VseSBoaW5nZXMgb24gaG93IHRoaXMgYml0bWFzayBpbnRlcmFjdHMgd2l0aCB0aGUgYGV2ZW50X2luamAgZmllbGQuIEl0IGxvb2tzIGxpa2UgYHRvLSZndDtldmVudF9pbmpgIGlzIGEgYHUzMmAuIFdlJiMzOTtyZSBtYXNraW5nIGl0IHdpdGggdGhlIGJpdHdpc2UgaW52ZXJzZSBvZiBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSB2YWx1ZSBvZiBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyB0aGUgYml0d2lzZSBOT1Qgb2YgYSBjb21iaW5hdGlvbiBvZiBtYXNrczogYH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKWAuIE5vdywgdGhlIGxlZ2FjeSBkZWZpbml0aW9uIG9mIGBTVk1fRVZUSU5KX1ZBTElEYCB3YXMgYCgxICZsdDsmbHQ7IDMxKWAuIEFuZCB0aGlzIGlzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3cgY29tZXMgaW50byBwbGF5LiBJZiB3ZSB0cmVhdCBgKDEgJmx0OyZsdDsgMzEpYCBhcyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBpbiBDLCB3aGljaCBpcyB3aGF0IHRoZSBjb2RlIHNlZW1pbmdseSBkb2VzLCB0aGlzIG9wZXJhdGlvbiB0cmlnZ2VycyB1bmRlZmluZWQgYmVoYXZpb3IuIENvbXBpbGVycyBsaWtlIEdDQy9DbGFuZyB3aWxsIHR5cGljYWxseSBpbnRlcnByZXQgdGhpcyBhcyAtMjE0NzQ4MzY0OCAoMHg4MDAwMDAwMCkuCgpTbywgdGhlIGNvbWJpbmVkIG1hc2ssIGluIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLCBldmFsdWF0ZXMgdG8gYSBuZWdhdGl2ZSBgaW50YCB2YWx1ZSwgYW5kIHRha2luZyBpdHMgYml0d2lzZSBpbnZlcnNlIGdpdmVzIHVzIGFub3RoZXIgbmVnYXRpdmUgbnVtYmVyLiBCdXQsIGlmIGBTVk1fRVZUSU5KX1ZBTElEYCBpcyBub3cgZGVmaW5lZCB1c2luZyBgQklUKDMxKWAsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gYCgxVUwgJmx0OyZsdDsgMzEpYCwgaXQmIzM5O3MgYSA2NC1iaXQgb3BlcmF0aW9uIG9uIHg4Nl82NCwgd2hpY2ggcmVzb2x2ZXMgdG8gYDB4ODAwMDAwMDBVTGAuIE5vdywgY2FsY3VsYXRpbmcgdGhhdCBjb21iaW5lZCBtYXNrIGluIHRoZSBuZXcgZGVmaW5pdGlvbiwgd2l0aCB0aGUgNjQgYml0IGRlZmluaXRpb24sIHJlc3VsdHMgaW4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCYjMzk7cyBtdWNoIGxhcmdlciB0aGFuIGEgdTMyLCBhbmQgdGFraW5nIHRoZSBiaXR3aXNlIGludmVyc2UsIHN0aWxsIGdpdmVzIHVzIHRoZSByaWdodCBiaXRzLCBidXQgYXMgYSBtdWNoIGxhcmdlciBgdW5zaWduZWQgbG9uZ2AgdmFsdWUuCgpUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIHN1YnNlcXVlbnQgYml0d2lzZSBBTkQ6IGBmcm9tLSZndDtldmVudF9pbmogJmFtcDsgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AuIElmIHRoZSBjb21waWxlciBzdGlsbCB0cmVhdHMgdGhlIGV4cHJlc3Npb24gYXMgc2lnbmVkIDMyIGJpdCwgdGhlbiBpdCB3aWxsIGdldCBhbiBpbmNvcnJlY3QgdmFsdWUgYW5kIHRoZSBtYXNrIGJlY29tZXMgbXVjaCBiaWdnZXIgd2hlbiBjb25zaWRlcmluZyBgQklUKDMxKWAgYW5kIHRoZSBwcm9tb3Rpb24gdGhhdCBoYXBwZW5zIGhlcmUuIFRoZSBiaXR3aXNlIG1hc2sgdGhhdCB3ZSYjMzk7cmUgYXBwbHlpbmcgd2l0aCBgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2Agd2lsbCBpbXBhY3QgaG93IHRoZSBgZnJvbS0mZ3Q7ZXZlbnRfaW5qYCB2YWx1ZSBpcyB1bHRpbWF0ZWx5IG1vZGlmaWVkLiBUaGUgdTMyIHZhbHVlIGlzIGdldHRpbmcgbWFza2VkIHdpdGggd2hhdCBhcHBlYXJzIHRvIGJlIGEgbXVjaCBsYXJnZXIgbWFzay4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBwdWxsIHVwIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGBnaXQgbG9nIC0xIC1wYCB0byBzZWUgdGhlIGFjdHVhbCBwYXRjaCB0aGF0IGludHJvZHVjZWQgdGhpcyBjaGFuZ2UgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg9NTY0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0MDojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQxOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaD0yMzM9c3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYiB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTc6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxIFx1MDAzY1x1MDAzYyAzMSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTg6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcdTAwM2NcdTAwM2MgMTEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDk1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBBIEZvY3VzZWQgRXhhbWluYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgY2hhbmdlLi4uIGRvZXMgaXQgdG91Y2ggcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGU/IExldCYjMzk7cyB0cmFjZSBpdC4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgU1ZNX0VWVElOSl9WQUxJRGAuICBJIGtub3cgdGhhdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgS1ZNIEFNRCAoU1ZNKSB2aXJ0dWFsaXphdGlvbiBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AgYW5kIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4gIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyBLVk0gQU1EIFNWTSAqcmVhY2hhYmxlKiBpbiBhIGZ1enppbmcgY29udGV4dD8KCkhtbSwgY2FuIHdlIGdldCB0aGVyZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IEkgbmVlZCB0byBjbGFyaWZ5OiBpcyBLVk0gKGt2bV9hbWQgc3BlY2lmaWNhbGx5KSBmdXp6ZWQgaW4gdGhvc2Ugc2NlbmFyaW9zPyAgSSBrbm93IHN5emthbGxlciAqY2FuKiBmdXp6IEtWTSBpZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgS1ZNIGFyZSBlbmFibGVkLCBidXQgZG9lcyBpdCBhY3R1YWxseSAqZG8qIGl0PyBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3l6a2FsbGVyIEtWTSBmdXp6aW5nIGNvbmZpZy4KCkxldCYjMzk7cyBjYXJlZnVsbHkgcmVmZXIgdG8gdGhlIHByb21wdCYjMzk7cyBzZWN0aW9ucyB0byBtYWtlIHN1cmUgSSBnZXQgdGhpcyByaWdodC4KCiogICAqKlNlY3Rpb24gMTogVGhlIFJlYWNoYWJpbGl0eSBHYXRlKiogIEZ1enppbmcgaXMgb25seSB2YWxpZCBmb3IgY29kZSB0aGF0IGNhbiBhY3R1YWxseSBydW4gaW4gdGhlIGV4cGVjdGVkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSwgR0NFLCB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzKS4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgZGVzaWduLCBubyBmdXp6aW5nIGlzIG5lZWRlZCwgZXZlbiBpZiB0aGVyZSBhcmUgYXNzZXJ0aW9ucyBvciBjb21wbGV4IG5ldyBsb2dpYy4gQ2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciByZWZhY3RvcmluZyBuZWVkIHRvIGJlIHRob3JvdWdobHkgY2hlY2tlZC4gTmV3IG9yIG1vZGlmaWVkIGFzc2VydGlvbnMgaW4gKnJlYWNoYWJsZSogY29kZSAqbXVzdCogYmUgZnV6emVkLgoqICAgKipTZWN0aW9uIDI6IE5lZ2F0aXZlIENyaXRlcmlhIChXaGVuIHRvIFJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCkqKiAgT25seSByZXR1cm4gYGZhbHNlYCBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczogbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSAoRG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nL3RyYWNlcG9pbnRzLCBidWlsZCBzeXN0ZW0vS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIHRoZSBjb21waWxlZCBDIGxvZ2ljKSwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIChzcGVjaWZpYyBQQ0llL05JQy9HUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUpLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGUuZy4sIGRyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHRyaWdnZXIgb24gaG90LXVucGx1ZykuCiogICAqKlNlY3Rpb24gMzogUG9zaXRpdmUgQ3JpdGVyaWEgKFdoZW4gdG8gUmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWApKiogUmV0dXJuIGB0cnVlYCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlczogY29yZSBzdWJzeXN0ZW1zIChNTSwgc3luYywgQlBGLCBldGMuKSwgcmVmYWN0b3JpbmdzL2NvZGUgY2xlYW51cHMgYWZmZWN0aW5nIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgcnVudGltZSBhc3NlcnRpb25zL2RlZmVuc2l2ZSBjaGVja3MsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMgKGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMpLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgYCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSAmbHQ7Jmx0OyAzMSlgIGJlaW5nIGNoYW5nZWQgdG8gYCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpYCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgLiBJcyB0aGlzIGEgbWFjcm8gZGVmaW5pdGlvbiBjaGFuZ2UgdGhhdCBhZmZlY3RzIGNvbXBpbGVkIEMgY29kZT8gWWVzLCBpdCYjMzk7cyBhIGtlcm5lbCBoZWFkZXIuIEkgdW5kZXJzdGFuZCB0aGF0LgoKU28sIGlzIEtWTSBBTUQgcmVhY2hhYmxlPyBJbiBRRU1VICh1c2luZyBuZXN0ZWQgQU1EIFNWTSBvciBBTUQgQ1BVIGVtdWxhdGlvbiB3aXRoIGBxZW11LXN5c3RlbS14ODZfNjQgLWNwdSBob3N0YCBvciBgLWNwdSBFUFlDYCksIHRoZSBga3ZtX2FtZGAgbW9kdWxlIGlzIGNvbXBpbGVkLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIHdoZW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQsIG9yIEFNRCBDUFUgaXMgZW11bGF0ZWQsIGV2ZW4gdmlhIEtWTSBpb2N0bHMgKC9kZXYva3ZtKSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBLVk1cX0FNRC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHg4NioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYXJjaC94ODYva3ZtL0tjb25maWdgLCBhcm91bmQgbGluZSAxNDYuIFRoYXQgYXJlYSB0eXBpY2FsbHkgZGVhbHMgd2l0aCBjb3JlIGZlYXR1cmUgZW5hYmxlbWVudCwgc28gdGhhdCYjMzk7cyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBLY29uZmlnIGZyYWdtZW50IGlzIHN0cnVjdHVyZWQsIGhvdyBpdCBjb250cm9scyB0aGUgYnVpbGQsIGFuZCB3aGF0JiMzOTtzIGRlcGVuZGVudCBvbiB3aGF0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBoaWVyYXJjaHkgb2YgY29uZGl0aW9uYWxzIOKAkyBgaWYgS1ZNYCwgbmVzdGVkIGZ1cnRoZXIgYmFzZWQgb24gQ1BVIGZlYXR1cmVzLCBtYXliZSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGRlZmluZXMsIGFuZCBsaWtlbHkgc29tZSBjcnVjaWFsIGRlZmF1bHRzIHRoYXQgYWZmZWN0IHRoZSBvdmVyYWxsIEtWTSBwZXJmb3JtYW5jZSBwcm9maWxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgc2VjdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgd2hpY2ggb3RoZXIgS2NvbmZpZ3MgYXJlIHJlZmVyZW5jZWQgb3IgaW5jbHVkZWQgaGVyZSwgYW5kIGhvdyB0aGlzIHNlY3Rpb24gcmVsYXRlcyB0byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLiBIb3BlZnVsbHksIGl0IHdpbGwgcXVpY2tseSBvcmllbnQgbWUgdG8gdGhlIGNvZGUgSSBhbSBpbnZlc3RpZ2F0aW5nIGFuZCBJIGNhbiBiZWdpbiBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGdldCBteSB0ZXN0aW5nIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBTVk1fRVZUSU5KX1ZBTElEIE1hY3JvIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNlZSB3aGVyZSBgU1ZNX0VWVElOSl9WQUxJRGAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBhcmVhcyB3aXRoaW4gdGhlIEtWTSBBTUQgKFNWTSkgc3Vic3lzdGVtOiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgLCBhbmQgYGFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIG1pbm9yIGNoYW5nZTsgdGhpcyBpcyBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCYjMzk7cyBnb2luZyB0byByaXBwbGUgdGhyb3VnaCBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zLgoKTm93LCB0aGUgZnV6emluZyBndWlkYW5jZSBpcyBjcml0aWNhbCBoZXJlLiBUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGZvY3VzZXMgb24gaWRlbnRpZnlpbmcgcmVncmVzc2lvbnMsIGJ1Z3MsIGFuZCB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMsIGFuZCBpdCBoaW5nZXMgb24gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgY29kZS4gVGhlIG1vZGlmaWVkIGNvZGUmIzM5O3Mgc3RydWN0dXJhbCByZWFjaGFiaWxpdHkgdGFrZXMgcHJlY2VkZW5jZS4gSWYgdGhlIGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgc2hvdWxkIG5vdCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2YgaG93IGNvbXBsZXggdGhlIGFkZGVkIGNvZGUgb3IgaG93IG1hbnkgYXNzZXJ0aW9ucy4gSSBjYW4mIzM5O3QgdGFrZSBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBpbiBjb3JlIHN1YnN5c3RlbXMgb2Z0ZW4gaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMuIEFueSBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBhYnNvbHV0ZWx5ICptdXN0KiBiZSBmdXp6ZWQuIENvbnZlcnNlbHksIEkgY2FuIG9ubHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmICphbGwqIG1vZGlmaWVkIGNvZGUgZmFsbHMgaW50byB0aGUgbmVnYXRpdmUgY3JpdGVyaWEg4oCTIHdoaWNoIGFyZSBlYXNpbHkgY2hlY2thYmxlLgoKSGVyZSYjMzk7cyB0aGUgcnViOiB0aGUgY2hhbmdlIHRyYW5zZm9ybXMgYFNWTV9FVlRJTkpfVkFMSURgIGZyb20gYCgxICZsdDsmbHQ7IDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGFmZmVjdHMgQyBtYWNybyBleHBhbnNpb24gd2l0aGluIHRoZSBLVk0gQU1EIChTVk0pIHN1YnN5c3RlbS4gSXMgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYT8gTm8uIEl0JiMzOTtzIG5vdCBhIGRvY3VtZW50YXRpb24gY2hhbmdlLiBJdCYjMzk7cyBub3QgdXNlcnNwYWNlIGNvZGUuIEl0JiMzOTtzIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcuIEl0JiMzOTtzIG5vdCBhIGJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZSB0aGF0IGRvZXNuJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQgQyBsb2dpYy4gS1ZNIGlzIHNwZWNpZmljYWxseSBlbXVsYXRlZC92aXJ0dWFsaXplZCBpbiBzdGFuZGFyZCBRRU1VL0tWTSBBTUQgZW52aXJvbm1lbnRzLiBJdCBpcyBub3Qgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCYjMzk7cyBub3QgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGggLyB0ZWFyZG93bi4gSXQmIzM5O3Mgbm90IGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGFyZ2V0IChhbWQ2NCkuCgpUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgdHJ1ZWAuIFRoaXMgaXNuJiMzOTt0IGEgJiMzNDtuby1vcCYjMzQ7IGNoYW5nZTsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gYSBjb3JlIG1hY3JvIGFmZmVjdGluZyBtdWx0aXBsZSBrZXkgZnVuY3Rpb25zIHdpdGhpbiBhIGNydWNpYWwgc3Vic3lzdGVtLgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gVGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZCBhcmU6IGBzdm1faW5qZWN0X2V4Y2VwdGlvbmAsIGBzdm1faW5qZWN0X25taWAsIGBzdm1faW5qZWN0X2lycWAsIGB0YXNrX3N3aXRjaF9pbnRlcmNlcHRpb25gLCBgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHNgLCBgc3ZtX2dldF9leGl0X2luZm9gLCBgc3ZtX2dldF9lbnRyeV9pbmZvYCBmcm9tIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYDsgYW5kIGBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luamAsIGBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZWAsIGFuZCBgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJgIGZyb20gYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLiBJIG5lZWQgdG8gbm93IGRldGVybWluZSBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMuIEkgd2lsbCBub3cgZXhhbWluZSB0aGVpciBkZWZpbml0aW9ucyBpbiB0aGVpciByZXNwZWN0aXZlIGAuY2AgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV9pbmplY3RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zNy1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg6c3RhdGljIHZvaWQgbmVzdGVkX3N2bV9pbmplY3RfbnBmX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz05OT1zdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luaXRfbW11X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTE4LVx0dmNwdS1cdTAwM2VhcmNoLm5ncGFfd2Fsay5nZXRfcGRwdHIgICAgICAgICA9IG5lc3RlZF9zdm1fZ2V0X3RkcF9wZHB0cjtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTE5Olx0dmNwdS1cdTAwM2VhcmNoLm5ncGFfd2Fsay5pbmplY3RfcGFnZV9mYXVsdCA9IG5lc3RlZF9zdm1faW5qZWN0X25wZl9leGl0O1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTY3Mz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2lzX2V4Y2VwdGlvbl92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNjgwLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxNjgxOnN0YXRpYyB2b2lkIG5lc3RlZF9zdm1faW5qZWN0X2V4Y2VwdGlvbl92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNjgyLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE3MjE9c3RhdGljIGludCBzdm1fY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNzUyLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE3NTM6XHRcdG5lc3RlZF9zdm1faW5qZWN0X2V4Y2VwdGlvbl92bWV4aXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE3NTQtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzQyPXN0YXRpYyBpbnQgc3ZtX3VwZGF0ZV9zb2Z0X2ludGVycnVwdF9yaXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4OTpzdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM5MC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNzYyPXN0YXRpYyBpbnQgcHJlX3N2bV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc4Ny1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzc4ODpzdGF0aWMgdm9pZCBzdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3ODkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzgxOT1zdGF0aWMgYm9vbCBzdm1fc2V0X3ZubWlfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODQxLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozODQyOnN0YXRpYyB2b2lkIHN2bV9pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCByZWluamVjdGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MzkzLVx0LnBhdGNoX2h5cGVyY2FsbCA9IHN2bV9wYXRjaF9oeXBlcmNhbGwsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzOTQ6XHQuaW5qZWN0X2lycSA9IHN2bV9pbmplY3RfaXJxLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1Mzk1Olx0LmluamVjdF9ubWkgPSBzdm1faW5qZWN0X25taSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTM5Ni1cdC5pc192bm1pX3BlbmRpbmcgPSBzdm1faXNfdm5taV9wZW5kaW5nLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzk3LVx0LnNldF92bm1pX3BlbmRpbmcgPSBzdm1fc2V0X3ZubWlfcGVuZGluZyxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTM5ODpcdC5pbmplY3RfZXhjZXB0aW9uID0gc3ZtX2luamVjdF9leGNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzOTktXHQuY2FuY2VsX2luamVjdGlvbiA9IHN2bV9jYW5jZWxfaW5qZWN0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU5NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG5lc3RlZC5jYCBGdW5jdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5lc3RlZC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBmdW5jdGlvbnMgYXJlIGluIGhlcmUgYW5kIHdoYXQmIzM5O3MgdGhlaXIgcHVycG9zZT8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgbW9kdWxlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXN0ZWQgbG9vcHM/IFJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscz8gUGVyaGFwcyBzb21lIGRlZXBseSBuZXN0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGFjY2VzcyBtZXRob2RzPyBLbm93aW5nIHRoZSBsYW5kc2NhcGUgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb21wbGV4aXR5IGhvdHNwb3RzIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZyBsYXRlciBvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTUxMj1zdGF0aWNcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NTEzOnZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy01MTQtXHRcdFx0XHRcdCBzdHJ1Y3Qgdm1jYl9jdHJsX2FyZWFfY2FjaGVkICp0byxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTU3MD12b2lkIG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU3Mi17XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU3MzpcdF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKFx1MDAyNnN2bS1cdTAwM2V2Y3B1LCBcdTAwMjZzdm0tXHUwMDNlbmVzdGVkLmN0bCwgY29udHJvbCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU3NC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xOTQ2PXN0YXRpYyBpbnQgc3ZtX3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjAwNy1cdHJldCA9IC1FSU5WQUw7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIwMDg6XHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkLCBjdGwpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMDA5LVx0aWYgKCFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgZnVuY3Rpb246CgoqKkRpdmluZyBpbnRvIGBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luamAqKgoKT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiBjaGVja2luZyBmb3IgZXZlbnQgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcywgcG90ZW50aWFsbHkgd2l0aGluIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50IG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmVzIChTVk0pLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWFzLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBldmVudHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXN0ZWQgc3RydWN0dXJlLCB3aGF0IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycyB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlLCBhbmQgd2hldGhlciBpdCYjMzk7cyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgaW5wdXQgdmFsaWRhdGlvbiwgb3IgYW55IGxvZ2ljIGZsYXdzIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkIHRvIGluamVjdCBtYWxpY2lvdXMgZXZlbnRzIG9yIGJ5cGFzcyBzZWN1cml0eSBjaGVja3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgZnVuY3Rpb24gd2hlcmUgYSBzaW5nbGUgb3ZlcnNpZ2h0IGNhbiBoYXZlIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcywgc28gaXQmIzM5O3MgY3JpdGljYWwgdG8gc2NydXRpbml6ZSBldmVyeSBsaW5lIG9mIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGwgZ3JhcGggYW5kIHRoZW4gZGl2aW5nIGRlZXAgaW50byBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0zNTg9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9ldmVudF9pbmpfdmFsaWRfZXhlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODYtICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4NzpzdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4OC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz00MDY9c3RhdGljIGJvb2wgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDMwLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo0MzE6XHRpZiAoQ0MoIW5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHZjcHUsIGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qKSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQzMi1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc4MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5lc3RlZCBWTSBTdGF0ZSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmVzdGVkIFZNIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkLCBzbyBteSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byBlaXRoZXIgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCBvciBgbmVzdGVkX3N2bV92bXJ1bmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGxpa2VseSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nIGFuZCB0cmFuc2l0aW9uaW5nIHRoZSBWTSBzdGF0ZSB3aGVuIG5lc3RlZC4gT2YgY291cnNlLCBgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHNgIGlzIHRoZSBmdW5jdGlvbiB0aGV5IGNhbGwgaW4gbWFueSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBJIHNob3VsZCBjaGVjayBpdCwgYXMgdGhhdOKAmXMgdXN1YWxseSB3aGVyZSB0aGUgc3BlY2lmaWMgY29udHJvbCBiaXRzIGFuZCBjaGVja3MgYXJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIFZNIHRyYW5zaXRpb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBhY3R1YWwgc3RhdGUgY2hhbmdlIGxvZ2ljPyYjMzQ7IE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGgsIHRoZSBwbGFjZSB0aGF0IGlzIGhhbmRsaW5nIHRoZSBjaGVja3MgYW5kIHRoZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiB0aGUgbmVzdGVkIFZNQ0Igc3RydWN0dXJlcy4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9Mzg3PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGV2ZW50X2luailcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQwNS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NDA2OnN0YXRpYyBib29sIG5lc3RlZF92bWNiX2NoZWNrX2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDA3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCB2bWNiX2N0cmxfYXJlYV9jYWNoZWQgKmNvbnRyb2wpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz00ODc9aW50IG5lc3RlZF9zdm1fY2hlY2tfY2FjaGVkX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00OTItXHRcdFx0XHQgICAgbDJfaGFzX3NlcGFyYXRlX3BhdCh2Y3B1KSkgfHxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NDkzOlx0ICAgICFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcdTAwMjZzdm0tXHUwMDNlbmVzdGVkLmN0bCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQ5NC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz01MTM9dm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy01NTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU1NzpcdC8qIENvcHkgYXNpZCBoZXJlIGJlY2F1c2UgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoKSB3aWxsIGNoZWNrIGl0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU1OC1cdHRvLVx1MDAzZWFzaWQgICAgICAgICAgID0gZnJvbS1cdTAwM2Vhc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTk0Nj1zdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIwMDgtXHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkLCBjdGwpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMDA5Olx0aWYgKCFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcdTAwMjZjdGxfY2FjaGVkKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjAxMC1cdFx0Z290byBvdXRfZnJlZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NjAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMmAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBnb29kIGxvb2sgYXQgYG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBsYXJnZXIgcGljdHVyZSwgcGFydGljdWxhcmx5IGl0cyByZWxhdGlvbiB0byB0aGUgVmlydHVhbCBNYWNoaW5lIENvbnRyb2wgQmxvY2ssIHNwZWNpZmljYWxseSBWTUNCMTIuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzYWZlbHkgYW5kIGVmZmljaWVudGx5IG1hbmFnaW5nIHBlbmRpbmcgZXZlbnRzLCBsaWtlbHkgd2l0aGluIGEgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbnRleHQuIE15IHByaW1hcnkgY29uY2VybnMgYXJlIGFyb3VuZCBhdG9taWNpdHkgYW5kIGRhdGEgY29uc2lzdGVuY3kuIFdoYXQmIzM5O3MgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaGVyZT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGRlYWRsb2Nrcz8KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29kZSYjMzk7cyBlZmZpY2llbmN5IHRvby4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZnJlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzPyBBbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLCBwZXJoYXBzIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0b3JzIG9yIGNsZXZlciBkYXRhIHN0cnVjdHVyZXM/IFRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgaGVyZSBjb3VsZCBiZSBzaWduaWZpY2FudCwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgbmVzdGVkIGVudmlyb25tZW50LiBBbmQgb2YgY291cnNlLCBJIGhhdmUgdG8gbWVudGFsbHkgd2FsayB0aHJvdWdoIHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgc2F2ZSBvcGVyYXRpb24/IEFyZSB0aGVyZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlcyBhbmQgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiBwbGFjZT8gSSBob3BlIHRoZSBkZXZlbG9wZXJzIGhhdmUgY29uc2lkZXJlZCBhbGwgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4gU2VjdXJpdHkgaXMgYWxzbyBhIGh1Z2UgY29uY2Vybi4gQW55IGNoYW5jZSBvZiB2dWxuZXJhYmlsaXR5IGV4cGxvaXRhdGlvbj8KClVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gY29uZmlybSB0aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCwgc2VjdXJlLCBhbmQgcGVyZm9ybXMgb3B0aW1hbGx5IHdpdGhpbiB0aGUgc3lzdGVtJiMzOTtzIGRlc2lnbiBjb25zdHJhaW50cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz02MjA9dm9pZCBuZXN0ZWRfc3luY19jb250cm9sX2Zyb21fdm1jYjAyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjU0LSAqL1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NTU6c3RhdGljIHZvaWQgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTIoc3RydWN0IHZjcHVfc3ZtICpzdm0sXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY1Ni1cdFx0XHRcdFx0XHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTI0OT1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTI5NC1cdGlmICghc3ZtX2lzX3ZtcnVuX2ZhaWx1cmUodm1jYjEyLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTI5NTpcdFx0bmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTIoc3ZtLCB2bWNiMTIpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMjk2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOgoKKipDaGVja2luZyBFdmVudCBJbmplY3Rpb24gRmxhZ3MqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMgYW5hbHlzaXMsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RhdGUgb2YgdGhlIGV2ZW50IGluamVjdGlvbiBmbGFncy4gU3BlY2lmaWNhbGx5LCBgaXNfZXZ0aW5qX3NvZnRgIGFuZCBgaXNfZXZ0aW5qX25taWAuICBLbm93aW5nIHRoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIGlzIGZ1bmRhbWVudGFsLiBUaGV5IGRpY3RhdGUgdGhlIGJlaGF2aW9yIG9mIHNldmVyYWwgY29yZSBjb21wb25lbnRzLCBpbmZsdWVuY2luZyBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNlcnRhaW4gaW50ZXJydXB0cyBvciBldmVudHMuIEEgc2ltcGxlIG1pc2ludGVycHJldGF0aW9uIGhlcmUgY291bGQgbGVhZCBtZSBkb3duIGEgY29tcGxldGVseSB3cm9uZyBwYXRoLCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBwYXJhbW91bnQuIFRoaXMgaW5pdGlhbCBiaXQgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHRvIGF2b2lkIHdhc3RlZCB0aW1lIGFuZCBtYWtlIHRoZSBpbnZlc3RpZ2F0aW9uIG1vcmUgZWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19ldnRpbmpfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDQ9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MjctXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgyODpzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXZ0aW5qX3NvZnQodTMyIGV2dGluailcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI5LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0MS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQyOnN0YXRpYyBib29sIGlzX2V2dGlual9ubWkodTMyIGV2dGluailcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg1Mj1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk3My1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6OTc0Olx0c3ZtLVx1MDAzZW5taV9sMV90b19sMiA9IGlzX2V2dGlual9ubWkodm1jYjAyLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtOTc1LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtOTc5LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjk4MDpcdGlmIChpc19ldnRpbmpfc29mdCh2bWNiMDItXHUwMDNlY29udHJvbC5ldmVudF9pbmopKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk4MS1cdFx0c3ZtLVx1MDAzZXNvZnRfaW50X2luamVjdGVkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMDgKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogNTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTS9TVk0gRXZlbnQgSW5qZWN0aW9uIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgdGhlIGRlZmluaXRpb24gb2YgYFNWTV9FVlRJTkpfVkFMSURgIGZyb20gYCgxICZsdDsmbHQ7IDMxKWAgdG8gYEJJVCgzMSlgIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhpcyBtYWNybyBpcyBjcnVjaWFsIGluIHRoZSBLVk0vU1ZNIGV2ZW50IGluamVjdGlvbiBwcm9jZXNzLCB3aGljaCBoYXMgc29tZSByYXRoZXIgY29tcGxpY2F0ZWQgaW50ZXJhY3Rpb25zLCBlc3BlY2lhbGx5IG5lc3RlZCBTVk0gdmlydHVhbGl6YXRpb24uIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpbmplY3RlZCBleGNlcHRpb25zLCBOTUlzLCBhbmQgSVJRcywgYXMgd2VsbCBhcyB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIGludGVycnVwdHMgd2l0aGluIHRoZSBLVk0gQU1EIHN1YnN5c3RlbS4gVGhhdCBjaGFuZ2UgYWZmZWN0cyBzb21lIHRyaWNreSBiaXQgbWFuaXB1bGF0aW9uIGFuZCBtYXNrcyAobGlrZSBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCkuIFRoaXMgYWxzbyBpbmRpY2F0ZXMgdGhpcyBjaGFuZ2UgYWZmZWN0cyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIHRoZSBLVk0gQU1EIHN1YnN5c3RlbS4KCk15IGZvY3VzIG5vdyBpcyBvbiB3aGF0IHNwZWNpZmljYWxseSB1c2VzIHRoaXMgbWFjcm8uIEkgc2VlIHRoYXQgc2V2ZXJhbCBLVk0vU1ZNIGZ1bmN0aW9ucyBkaXJlY3RseSB1c2Ugb3Igd3JhcCB0aGUgbW9kaWZpZWQgbWFjcm8uIFRob3NlIGZ1bmN0aW9ucyBhcmU6IGBzdm1faW5qZWN0X2V4Y2VwdGlvbmAsIGBzdm1faW5qZWN0X25taWAsIGBzdm1faW5qZWN0X2lycWAsIGBzdm1fY29tcGxldGVfaW50ZXJydXB0c2AsIGBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luamAsIGBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZWAsIGBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMmAsIGBpc19ldnRpbmpfc29mdGAsIGFuZCBgaXNfZXZ0aW5qX25taWAuIFRoZXNlIGFyZSBhbGwgcG90ZW50aWFsIGFyZWFzIHRvIGRpZyBpbnRvIGZ1cnRoZXIuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgcHJvcGVybHkuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncyBhcmUgYEtWTV9BTURgIGFuZCwgb2J2aW91c2x5LCBgS1ZNYC4gTGV0IG1lIG1ha2Ugc3VyZSBgS1ZNX0FNRGAgaXMgc3RhbmRhcmQsIGFoIHllcywgaXQgZGVwZW5kcyBvbiBgS1ZNICZhbXA7JmFtcDsgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pYC4gU28gYEtWTWAgYW5kIGBLVk1fQU1EYCBhcmUgY29uZmlybWVkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gbm90aW5nIGRvd24gYWxsIG15IGtleSBmaW5kaW5nczogdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUgKGluZGljYXRpbmcgdGhpcyBpcyBhbiBhcmVhIG9mIGludGVyZXN0KSwgYEVuYWJsZUNvbmZpZ3NgIGFyZSAmIzM0O0tWTSYjMzQ7LCAmIzM0O0tWTV9BTUQmIzM0OywgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSwgYXMgcHJldmlvdXNseSBub3RlZCwgdGhvc2UgZnVuY3Rpb25zIHVzaW5nIHRoZSBtYWNyby4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1faW5qZWN0X2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X25taSYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X2lycSYjMzQ7LAogICAgJiMzNDtzdm1fY29tcGxldGVfaW50ZXJydXB0cyYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaiYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMiYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFx1MDAzY1x1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1faW5qZWN0X2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X25taSYjMzQ7LAogICAgJiMzNDtzdm1faW5qZWN0X2lycSYjMzQ7LAogICAgJiMzNDtzdm1fY29tcGxldGVfaW50ZXJydXB0cyYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaiYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMiYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFx1MDAzY1x1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFx1MDAzY1x1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhdm9pZHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIGVuc3VyZXMgdGhlIGNvbnN0YW50IGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgYml0bWFzay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBtZW1vcnkgZGlzY2xvc3VyZSBpc3N1ZXMgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYzRjZDI3NjU1N2Q1NjVkNWY4OWNkNjk3YmM4MmQ4Y2I4NDAwNmYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uOTIxZTZlY2M0ODM1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTYzNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyAmbHQ7Jmx0OyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0ICZsdDsmbHQ7IFNWTV9FVlRJTkpfVFlQRV9TSElGVCkKIAotI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxICZsdDsmbHQ7IDMxKQomIzQzOyNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpCiAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxICZsdDsmbHQ7IDExKQogCiAjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVk0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggZm9jdXNlcyBvbiBhIG1hY3JvIGRlZmluaXRpb24gd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBmaXhpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgU1ZNX0VWVElOSl9WQUxJRGAuIEluaXRpYWxseSwgaXQgd2FzIGRlZmluZWQgYXMgYDEgJmx0OyZsdDsgMzFgLCB3aGljaCwgaW4gYSBzaWduZWQgaW50ZWdlciBjb250ZXh0LCBpcyBhIGtub3duIGFyZWEgb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGR1ZSB0byB0aGUgcG90ZW50aWFsIGZvciBvdmVyZmxvdy4gVGhlIGZpeCByZXBsYWNlcyB0aGlzIHdpdGggYEJJVCgzMSlgLiBUaGlzIGlzIGEgbXVjaCBzYWZlciBhcHByb2FjaCwgZW5zdXJpbmcgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBhbiB1bnNpZ25lZCBiaXQgc2hpZnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGFuZCBlbnN1cmUgdGhhdCB0aGUgdW5zaWduZWQgYml0IHNoaWZ0IGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGZvciB0aGlzIHJlZ2lzdGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2UgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyBzdWJ0bGUgaW5jb21wYXRpYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGFyb3VuZCBsaW5lIDYzNyB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBgU1ZNX0VWVElOSl9WQUxJRGAgaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgbWFjcm9zIGxpa2UgYFNWTV9FVlRJTkpfVFlQRV9FWEVQVGAsIGBTVk1fRVZUSU5KX1RZUEVfU09GVGAsIGFuZCB0aGUgbWFza3MuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBmb3IgdGhlIFNWTSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMwOlx0I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcbiA2MzE6XHRcbiA2MzI6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TSElGVCA4XG4gNjMzOlx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIDYzNDpcdFxuIDYzNTpcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2MzY6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9OTUkgKDIgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2Mzc6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIDYzODpcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiA2Mzk6XHRcbiA2NDA6XHQjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuIDY0MTpcdCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuIDY0MjpcdFxuIDY0MzpcdCNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcbiA2NDQ6XHRcdFx0XHRcdCAgIFNWTV9FVlRJTkpfVkFMSURfRVJSIHwgU1ZNX0VWVElOSl9WQUxJRClcbiA2NDU6XHRcbiA2NDY6XHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXG4gNjQ3Olx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXG4gNjQ4Olx0XG4gNjQ5Olx0I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxuIDY1MDpcdCNkZWZpbmVcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXG4gNjUxOlx0I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXG4gNjUyOlx0I2RlZmluZVx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxuIDY1MzpcdFxuIDY1NDpcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEIFNWTV9FVlRJTkpfVkFMSURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uY2VwdHMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgU1ZNIEV2ZW50IEluamVjdGlvbiBhbmQgRXhpdCBJbmZvcm1hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBTVk0tcmVsYXRlZCB0ZXJtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBTVk1fRVZUSU5KX1ZBTElEYCwgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AsIGFuZCBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYC4gRnJvbSBhIGh5cGVydmlzb3ImIzM5O3MgcGVyc3BlY3RpdmUsIHRoZXNlIGFyZSBjcnVjaWFsIGZvciBjb250cm9sbGluZyB0aGUgZ3Vlc3QmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaG9zdCBhbmQgbWFuYWdpbmcgaW50ZXJydXB0cy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbnNpZGVyZWQgKnZhbGlkKiBhYm91dCBldmVudCBpbmplY3Rpb24uIGBTVk1fRVZUSU5KX1ZBTElEYCBpcyB0aGUgZmxhZyBJJiMzOTttIGNvbmNlcm5lZCB3aXRoLiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciB0aGF0IHRlbGxzIG1lIHdoZXRoZXIgdGhlIG90aGVyIGZpZWxkcyB3aXRoaW4gdGhlIGV2ZW50IGluamVjdGlvbiBjb250cm9sIHN0cnVjdHVyZSBhcmUgYWN0dWFsbHkgdHJ1c3R3b3J0aHkgYW5kIGNhbiBiZSB1c2VkIHRvIGluamVjdCBhbiBpbnRlcnJ1cHQgaW50byB0aGUgZ3Vlc3QgVk0uIElmIHRoaXMgYml0IGlzIHNldCwgSSBjYW4gY29uZmlkZW50bHkgaW50ZXJwcmV0IHRoZSBkYXRhLiBJZiBub3QsIEkgbmVlZCB0byBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZS4gSSBzdXNwZWN0IHRoZSBtZWFuaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgbmFtZSwgd2hlcmUgaXQgYmVpbmcgJiMzOTsxJiMzOTsgc2lnbmlmaWVzIGl0JiMzOTtzIHZhbGlkLCBhbmQgJiMzOTswJiMzOTsgc2lnbmlmaWVzIHRoZSBvcHBvc2l0ZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFNgLiBUaGVzZSBhcmUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIEluIGFueSBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlLCAmIzM0O3Jlc2VydmVkJiMzNDsgYml0cyBhcmUgYSBkb3VibGUtZWRnZWQgc3dvcmQuIE9uIG9uZSBoYW5kLCB0aGV5IGNvdWxkIGJlIHNldCB0byB6ZXJvLiBPbiB0aGUgb3RoZXIsIHRoZXkgY291bGQgYmUgc29tZXRoaW5nIHRoYXQgaGFzIGFuIHVuZGVmaW5lZCB2YWx1ZS4gVGhleSBhcmUgdGhlcmUgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgKmFsd2F5cyogbWFzayB0aGVtLiBJZ25vcmluZyB0aGVtIGFsdG9nZXRoZXIgaXMgYXNraW5nIGZvciB0cm91YmxlLiBGdXR1cmUgcmV2aXNpb25zIG9mIHRoZSBoYXJkd2FyZSBvciBtaWNyb2NvZGUgY291bGQgcmVwdXJwb3NlIHRoZXNlIGJpdHMsIGFuZCBpZiBteSBoeXBlcnZpc29yIGlzIG5vdCBjYXJlZnVsLCBpdCBjb3VsZCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBwb3RlbnRpYWxseSBldmVuIGNyYXNoZXMuIFNvLCB3aGVuIGRlYWxpbmcgd2l0aCBldmVudCBpbmplY3Rpb24gZGF0YSwgbXkgY29kZSBoYXMgdG8gZXhwbGljaXRseSBjbGVhciBvciBtYXNrIHRoZSByZXNlcnZlZCBiaXRzLiBUaGlzIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVhc3VyZSBhcyB3ZWxsIGFzIGEgc3RhYmlsaXR5IG9uZS4KCkZpbmFsbHksIGBTVk1fRVhJVElOVElORk9fVkFMSURgIGlzIHRoZSBzYW1lIGNvbmNlcHQgYXMgYFNWTV9FVlRJTkpfVkFMSURgLCBidXQgaXQgYXBwbGllcyB0byAqZXhpdCBpbmZvcm1hdGlvbiouIEVzc2VudGlhbGx5LCB3aGVuZXZlciB0aGUgZ3Vlc3QgVk0gZXhpdHMgdG8gdGhlIGhvc3QsIGl0JiMzOTtzIHByb3ZpZGluZyB0aGlzIGRhdGEuIEkgbmVlZCBhIHNpbWlsYXIgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB3aGF0IHRoZSBWTSBpcyBnaXZpbmcgbWUgYXMgYW4gJiMzNDtleGl0IHJlYXNvbiYjMzQ7IG9yICYjMzQ7aW50ZXJydXB0IGluZm9ybWF0aW9uJiMzNDsgaXMgY29ycmVjdCBvciBub3QuIEkmIzM5O2QgaW1hZ2luZSB0aGF0IGluIHNvbWUgY2FzZXMsIHRoZSBWTSB3b3VsZCBleGl0IGR1ZSB0byBhbiBpbnRlcnJ1cHQuIElmIHRoaXMgYml0IGlzbiYjMzk7dCBzZXQsIGFueSBkYXRhIGluIHRoZSBvdGhlciBmaWVsZHMgcmVsYXRlZCB0byB0aGlzIGludGVycnVwdCBhcmUgbWVhbmluZ2xlc3MuIFRoaXMgY291bGQgYmUgdXNlZnVsIHdoZW4gZGVidWdnaW5nIG9yIGRvaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhcyB3ZWxsIGFzIGZvciBoYW5kbGluZyBzcGVjaWZpYyB0eXBlcyBvZiBWTSBleGl0cy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBleGFtcGxlcyBvZiBob3cgdGhlICYjMzQ7ZXhpdCByZWFzb24mIzM0OyBpcyByZXBvcnRlZC4KCkluIHN1bW1hcnksIHRoZXNlIHRocmVlIGVsZW1lbnRzIGFyZSBjcml0aWNhbCBmb3IgcmVsaWFibGUgYW5kIHNlY3VyZSBndWVzdC1ob3N0IGludGVyYWN0aW9uIGluIGFuIFNWTSBlbnZpcm9ubWVudC4gVGhlIGtleSBpcyBjYXJlZnVsIHZhbGlkYXRpb246ICphbHdheXMqIGNoZWNrIHRoZSB2YWxpZCBiaXRzLCAqYWx3YXlzKiBtYXNrIHRoZSByZXNlcnZlZCBiaXRzLCBhbmQgY29ycmVjdGx5IGludGVycHJldCBhbmQgcmVhY3QgdG8gdGhlIHZhbGlkaXR5IGZsYWdzLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBidWlsZGluZyBhIHJvYnVzdCBhbmQgc2VjdXJlIGh5cGVydmlzb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NWTV9FVlRJTkpfVkFMSUR8U1ZNX0VYSVRJTlRJTkZPX1ZBTElEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jPTQxNj1lbnVtIGVzX3Jlc3VsdCB2ZXJpZnlfZXhjZXB0aW9uX2luZm8oc3RydWN0IGdoY2IgKmdoY2IsIHN0cnVjdCBlc19lbV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQyOC1cdFx0LyogQ2hlY2sgaWYgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGZyb20gaHlwZXJ2aXNvciBpcyBzYW5lLiAqL1xuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDI5Olx0XHRpZiAoKGluZm8gXHUwMDI2IFNWTV9FVlRJTkpfVkFMSUQpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMwLVx0XHQgICAgKCh2ID09IFg4Nl9UUkFQX0dQKSB8fCAodiA9PSBYODZfVFJBUF9VRCkpIFx1MDAyNlx1MDAyNlxuLS1cbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzMy1cbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jOjQzNDpcdFx0XHRpZiAoaW5mbyBcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRF9FUlIpXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzUtXHRcdFx0XHRjdHh0LVx1MDAzZWZpLmVycm9yX2NvZGUgPSBpbmZvIFx1MDAzZVx1MDAzZSAzMjtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD01NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjM5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQwOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDE6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcdTAwM2NcdTAwM2MgMTEpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDMtI2RlZmluZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgfihTVk1fRVZUSU5KX1ZFQ19NQVNLIHwgU1ZNX0VWVElOSl9UWVBFX01BU0sgfCBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ0Olx0XHRcdFx0ICAgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ1LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1My1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTU6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NTYtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0zNTg9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9ldmVudF9pbmpfdmFsaWRfZXhlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODEtLypcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MzgyOiAqIEFjY29yZGluZyB0byB0aGUgQVBNLCBWTVJVTiBleGl0cyB3aXRoIFNWTV9FWElUX0VSUiBpZiBTVk1fRVZUSU5KX1ZBTElEIGlzXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4My0gKiBzZXQgYW5kOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9Mzg3PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGV2ZW50X2luailcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MzkyOlx0aWYgKCEoZXZlbnRfaW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzkzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTY1NT1zdGF0aWMgdm9pZCBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2My1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guZXhjZXB0aW9uLnZlY3RvcjtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY0Olx0XHRleGl0X2ludF9pbmZvID0gbnIgfCBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjUtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2Ni1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY3Olx0XHRcdGV4aXRfaW50X2luZm8gfD0gU1ZNX0VWVElOSl9WQUxJRF9FUlI7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2OC1cdFx0XHR2bWNiMTItXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzItXHR9IGVsc2UgaWYgKHZjcHUtXHUwMDNlYXJjaC5ubWlfaW5qZWN0ZWQpIHtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjczOlx0XHRleGl0X2ludF9pbmZvID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3Ni1cdFx0bnIgPSB2Y3B1LVx1MDAzZWFyY2guaW50ZXJydXB0Lm5yO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Nzc6XHRcdGV4aXRfaW50X2luZm8gPSBuciB8IFNWTV9FVlRJTkpfVkFMSUQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTgyOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZXZ0aW5qX3NvZnQodTMyIGV2dGluailcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzMi1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODMzOlx0aWYgKCEoZXZ0aW5qIFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NDI9c3RhdGljIGJvb2wgaXNfZXZ0aW5qX25taSh1MzIgZXZ0aW5qKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQ1LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDY6XHRpZiAoIShldnRpbmogXHUwMDI2IFNWTV9FVlRJTkpfVkFMSUQpKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4OT1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDAtXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGV4LVx1MDAzZXZlY3RvclxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDE6XHRcdHwgU1ZNX0VWVElOSl9WQUxJRFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDI6XHRcdHwgKGV4LVx1MDAzZWhhc19lcnJvcl9jb2RlID8gU1ZNX0VWVElOSl9WQUxJRF9FUlIgOiAwKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDMtXHRcdHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYwLVx0dWludDMyX3QgaWR0X3YgPVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDYxOlx0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRDtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ2Mi1cdGJvb2wgaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2ODM9c3RhdGljIHZvaWQgc3ZtX2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXHQqaW50cl9pbmZvID0gY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlx0aWYgKCgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjk0Olx0ICAgICgqaW50cl9pbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY5NS1cdFx0KmVycm9yX2NvZGUgPSBjb250cm9sLVx1MDAzZWV4aXRfaW50X2luZm9fZXJyO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzcwMD1zdGF0aWMgdm9pZCBzdm1fZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDc6XHRpZiAoKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XHQgICAgKCppbnRyX2luZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVx0XHQqZXJyb3JfY29kZSA9IGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qX2Vycjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3ODg9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzc5MjpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9OTUk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODQyPXN0YXRpYyB2b2lkIHN2bV9pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCByZWluamVjdGVkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg3NzpcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gaW50ci1cdTAwM2VuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCB0eXBlO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODc4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQzMzg9c3RhdGljIHZvaWQgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2NC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM2NTpcdGlmICghKGV4aXRpbnRpbmZvIFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzY2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzg5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MzkwOlx0XHRpZiAoZXhpdGludGluZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTEtXHRcdFx0ZXJyb3JfY29kZSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnI7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkzLVx0XHRrdm1fcmVxdWV1ZV9leGNlcHRpb24odmNwdSwgdmVjdG9yLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0Mzk0Olx0XHRcdFx0ICAgICAgZXhpdGludGluZm8gXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTUtXHRcdFx0XHQgICAgICBlcnJvcl9jb2RlKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTIte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTM6XHR1NjQgZGF0YSA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfCB2ZWN0b3I7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk3OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk4OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwODojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA5OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jPTc5PXN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdTY0IGlzX25taSwgdTY0IGlkdF9hbHQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYy05Mi1cdGlmIChpc19ubWkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6OTM6XHRcdHZtY2ItXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTQtXHR9IGVsc2Uge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5NTpcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IElOVF9OUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfU09GVDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTYtXHRcdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2sgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6MTI2Olx0dm1jYi1cdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IEJQX1ZFQ1RPUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNy1cdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2ssIHNraXAgb3ZlciBVRDIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyNAoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBCaXRtYXNrIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2Ugd2hlcmUgYFNWTV9FVlRJTkpfVkFMSURgIHdhcyBkZWZpbmVkIGFzIGAoMSAmbHQ7Jmx0OyAzMSlgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJbiAzMi1iaXQgc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYywgdGhhdCYjMzk7cyB1bmRlZmluZWQgYmVoYXZpb3IsIGxpa2VseSBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgaW50ZWdlciBvciBgMHg4MDAwMDAwMGAgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciYjMzk7cyBpbnRlcnByZXRhdGlvbiDigJMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LiBUaGUgZml4IOKAkyBjaGFuZ2luZyBpdCB0byBgQklUKDMxKWAgb3IgYCgxVUwgJmx0OyZsdDsgMzEpYCDigJMgaXMgc3BvdCBvbi4gVGhhdCBjbGVhcmx5IGRlZmluZXMgaXQgYXMgYW4gdW5zaWduZWQgbG9uZyBiaXRtYXNrLCB3aGljaCBpcyBmYXIgY2xlYW5lciBhbmQgbW9yZSBwcmVkaWN0YWJsZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcy4gTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgY2hlY2tsaXN0OiBObyBuZXcgYWxsb2NhdGlvbnM/IE5vcGUuIE5vIG1vZGlmaWVkIGJ1ZmZlcnM/IE5vLiBObyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZD8gTm8sIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBObyBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMgb3IgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M/IEFsc28gbm8uIEFuZCBjcml0aWNhbGx5LCBubyBicmFuY2hpbmcgbG9naWMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLgoKVGhpcyBpcyBlc3NlbnRpYWxseSBhIG1hY3JvIGNsZWFudXAuIEl0JiMzOTtzIGFib3V0IGZpeGluZyBhIGJpdG1hc2sgcmVwcmVzZW50YXRpb24gdGhhdCB3YXMgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGNvbXBpbGVyIHdhcm5pbmdzLiBUaGUgS0FTQU4vVUJTQU4gdG9vbHMgYXJlIGFscmVhZHkgaW4gcGxhY2UgdG8gY2F0Y2ggc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgb3Igb3RoZXIgdW5kZWZpbmVkIGJlaGF2aW9ycyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGJ1dCBLTVNBTiwgc3BlY2lmaWNhbGx5LCBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBpbiB0aGF0IGFyZWEuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBldmVyeXRoaW5nIGFsaWduczoKCiogICBgTmVlZHNLTVNBTjogZmFsc2VgCiogICBgS01TQU5SZWFzb25pbmc6IERldGFpbGVkIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtNU0FOIHZzIEtBU0FOLmAKCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYFNWTV9FVlRJTkpfVkFMSURgIG1hY3JvIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAgZnJvbSBgKDEgXHUwMDNjXHUwMDNjIDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGF2b2lkcyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgZW5zdXJlcyB0aGUgY29uc3RhbnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBiaXRtYXNrLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIHBhc3NlZCB0byB1c2Vyc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIG1lbW9yeSBkaXNjbG9zdXJlIGlzc3VlcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFx1MDAzY1x1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhdm9pZHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIGVuc3VyZXMgdGhlIGNvbnN0YW50IGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgYml0bWFzay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBtZW1vcnkgZGlzY2xvc3VyZSBpc3N1ZXMgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjAzOjU2Ljc4MzI0MTMyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDI0NzM1MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV9pbmplY3RfZXhjZXB0aW9uXCIsXG4gICAgXCJzdm1faW5qZWN0X25taVwiLFxuICAgIFwic3ZtX2luamVjdF9pcnFcIixcbiAgICBcInN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2lualwiLFxuICAgIFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgICBcIl9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgU1ZNX0VWVElOSl9WQUxJRGAgbWFjcm8gaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCBmcm9tIGAoMSBcXHUwMDNjXFx1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhdm9pZHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIGVuc3VyZXMgdGhlIGNvbnN0YW50IGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgYml0bWFzay5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgcGFkZGluZywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIHBhc3NlZCB0byB1c2Vyc3BhY2UuIEJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIG1lbW9yeSBkaXNjbG9zdXJlIGlzc3VlcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgdGhlIFNWTV9FVlRJTkpfVkFMSUQgbWFjcm8gZGVmaW5pdGlvbiBmcm9tICgxIFxcdTAwM2NcXHUwMDNjIDMxKSB0byBCSVQoMzEpIGluIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLCBjaGFuZ2luZyBpdHMgc2lnbmVkbmVzcy90eXBlIHJlcHJlc2VudGF0aW9uIGluIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgYW5kIG1hc2sgZGVmaW5pdGlvbnMgbGlrZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgYWNyb3NzIEtWTSBBTUQgYW5kIG5lc3RlZCBTVk0gZXZlbnQgaW5qZWN0aW9uIHJvdXRpbmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowMzo1Ni43ODMyNDgxNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDgxNTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjNGNkMjc2NTU3ZDU2NWQ1Zjg5Y2Q2OTdiYzgyZDhjYjg0MDA2ZjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uOTIxZTZlY2M0ODM1NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuQEAgLTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gXFxuLSNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcXHUwMDNjXFx1MDAzYyAzMSlcXG4rI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG4gI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG4gXFxuICNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowMzo1Ny4yOTg4OTkzMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYxNTgwNjg1MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV9pbmplY3RfZXhjZXB0aW9uXCIsXG4gICAgXCJzdm1faW5qZWN0X25taVwiLFxuICAgIFwic3ZtX2luamVjdF9pcnFcIixcbiAgICBcInN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2lualwiLFxuICAgIFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgICBcIl9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBTVk1fRVZUSU5KX1ZBTElEIG1hY3JvIGRlZmluaXRpb24gZnJvbSAoMSBcXHUwMDNjXFx1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYzRjZDI3NjU1N2Q1NjVkNWY4OWNkNjk3YmM4MmQ4Y2I4NDAwNmYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNjowMzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGFhNjM0MzFiYTkyYzMuLjkyMWU2ZWNjNDgzNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXHUwMDNjXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcbiAjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gXG4tI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEICgxIFx1MDAzY1x1MDAzYyAzMSlcbisjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxuICNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXHUwMDNjXHUwMDNjIDExKVxuIFxuICNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjAzOjU3LjI5ODkwMDU0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MTIyNTAxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVk0gSGVhZGVyIEZpbGUqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgZGlmZi4gSSBzZWUgY2hhbmdlcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvbWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBldmVudCBpbmplY3Rpb24uIExvb2tzIGxpa2UgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBoYXMgYmVlbiBtb2RpZmllZC4gVGhleSd2ZSByZXBsYWNlZCBgKDEgXHUwMDNjXHUwMDNjIDMxKWAgd2l0aCBgQklUKDMxKWAuIEludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgcmVhc29uIGZvciB0aGlzIGNoYW5nZT8gQ291bGQgYmUgYSBzdHlsaXN0aWMgdGhpbmcsIG9yIG1heWJlIHRoZXJlIGFyZSBpbXBsaWNhdGlvbnMgZm9yIGJpdCBtYW5pcHVsYXRpb24gdGhhdCBJIG5lZWQgdG8gY29uc2lkZXIuXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQuIExldCBtZSBqdXN0IHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBpbiB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MzcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb25zdGFudHMgYXJlIGJlaW5nIHVzZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIgZGVmaW5pdGlvbnMsIGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIGl0J3MgYmVoYXZpb3IuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgYXBwcm9wcmlhdGUgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzOSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjAzLjcxMTE1MzIyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcXG4gNjMxOlxcdFxcbiA2MzI6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOFxcbiA2MzM6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuIDYzNDpcXHRcXG4gNjM1OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiA2MzY6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM3OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM4OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiA2Mzk6XFx0XFxuIDY0MDpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKVxcbiA2NDE6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG4gNjQyOlxcdFxcbiA2NDM6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFMgfihTVk1fRVZUSU5KX1ZFQ19NQVNLIHwgU1ZNX0VWVElOSl9UWVBFX01BU0sgfCBcXFxcXFxuIDY0NDpcXHRcXHRcXHRcXHRcXHQgICBTVk1fRVZUSU5KX1ZBTElEX0VSUiB8IFNWTV9FVlRJTkpfVkFMSUQpXFxuIDY0NTpcXHRcXG4gNjQ2OlxcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcXG4gNjQ3OlxcdCNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSyBTVk1fRVZUSU5KX1RZUEVfTUFTS1xcbiA2NDg6XFx0XFxuIDY0OTpcXHQjZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxcbiA2NTA6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX05NSSBTVk1fRVZUSU5KX1RZUEVfTk1JXFxuIDY1MTpcXHQjZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXFxuIDY1MjpcXHQjZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxcbiA2NTM6XFx0XFxuIDY1NDpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXFxuIDY1NTpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlJcXG4gNjU2OlxcdFxcbiA2NTc6XFx0I2RlZmluZSBTVk1fRVhJVElORk9TSElGVF9UU19SRUFTT05fSVJFVCAzNlxcbiA2NTg6XFx0I2RlZmluZSBTVk1fRVhJVElORk9TSElGVF9UU19SRUFTT05fSk1QIDM4XFxuIDY1OTpcXHQjZGVmaW5lIFNWTV9FWElUSU5GT1NISUZUX1RTX0hBU19FUlJPUl9DT0RFIDQ0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjAzLjcxMTI5OTg4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTA1MjMzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJpdHdpc2UgT3BlcmF0aW9ucyBhbmQgRGF0YSBUeXBlcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbXBhcmUgYEJJVCgzMSlgIHdpdGggYCgxIFx1MDAzY1x1MDAzYyAzMSlgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGluIEMsIGAoMSBcdTAwM2NcdTAwM2MgMzEpYCB3aGVuIHVzaW5nIGEgMzItYml0IGBpbnRgLCBldmFsdWF0ZXMgdG8gYDB4ODAwMDAwMDBgLCB3aGljaCBpcyBwcm9ibGVtYXRpYyBkdWUgdG8gcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvciBvciBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGluIEM5OS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBmb3IgYW55IGlzc3Vlcy5cblxuQWhhISBMaW5lIDY0MyByZXZlYWxzIHRoYXQgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AgaXMgZGVmaW5lZCBhcyB0aGUgYml0d2lzZSBOT1Qgb2YgYSBjb21iaW5hdGlvbiBvZiBtYXNrcy4gVGhlIHNpZ25pZmljYW50IHRoaW5nIGhlcmUgaXMgdGhhdCBpZiBgU1ZNX0VWVElOSl9WQUxJRGAgdXNlcyBgKDEgXHUwMDNjXHUwMDNjIDMxKWAgd2l0aCBhIDMyLWJpdCBgaW50YCwgdGhlbiB0aGUgYml0d2lzZSBOT1QsIGB+KC4uLilgLCB3aWxsIGVpdGhlciBzaWduLWV4dGVuZCB0byA2NC1iaXQgd2hlbiBjYXN0IHRvIGB1NjRgIG9yIHdpbGwgYmUgYSBzaWduZWQgMzItYml0IGBpbnRgLlxuXG5Ib3dldmVyLCBpZiBgU1ZNX0VWVElOSl9WQUxJRGAgdXNlcyBgQklUKDMxKWAsIHdoaWNoIGlzIGAoMVVMIFx1MDAzY1x1MDAzYyAzMSlgLCB3ZSBoYXZlIGEgZGlmZmVyZW50IHBpY3R1cmUuIE9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZSBsaWtlIHg4Nl82NCwgYDFVTGAgaXMgYW4gYHVuc2lnbmVkIGxvbmdgIHdoaWNoIGlzIDY0LWJpdC4gVGhlcmVmb3JlLCB0aGUgZW50aXJlIGV4cHJlc3Npb24gaW5jbHVkaW5nIHRoZSBtYXNrcyB0YWtlcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZ2AgaW4gNjQtYml0IGFyY2hpdGVjdHVyZS4gU28sIHRoZSBgfmAgb2YgdGhpcyB1bnNpZ25lZCBsb25nLCBpbiA2NC1iaXQgd2lsbCBzZXQgYml0cyAzMi4uNjMgdG8gMS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBvciBgU1ZNX0VWVElOSl9WQUxJRGAgYXJlIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG11c3QgY2hlY2sgdXNhZ2UgdG8gYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjA4LjEwMTgyNTY2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc4Mjc3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNWTV9FVlRJTkpfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jPTQxNj1lbnVtIGVzX3Jlc3VsdCB2ZXJpZnlfZXhjZXB0aW9uX2luZm8oc3RydWN0IGdoY2IgKmdoY2IsIHN0cnVjdCBlc19lbV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI1LVxcdFxcdHU2NCBpbmZvID0gZ2hjYi1cXHUwMDNlc2F2ZS5zd19leGl0X2luZm9fMjtcXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0MjY6XFx0XFx0dW5zaWduZWQgbG9uZyB2ID0gaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI3LVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQyOC1cXHRcXHQvKiBDaGVjayBpZiBleGNlcHRpb24gaW5mb3JtYXRpb24gZnJvbSBoeXBlcnZpc29yIGlzIHNhbmUuICovXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmM6NDI5OlxcdFxcdGlmICgoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkFMSUQpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMwLVxcdFxcdCAgICAoKHYgPT0gWDg2X1RSQVBfR1ApIHx8ICh2ID09IFg4Nl9UUkFQX1VEKSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0MzE6XFx0XFx0ICAgICgoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLKSA9PSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQpKSB7XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMyLVxcdFxcdFxcdGN0eHQtXFx1MDAzZWZpLnZlY3RvciA9IHY7XFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMzLVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jOjQzNDpcXHRcXHRcXHRpZiAoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkFMSURfRVJSKVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzNS1cXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VmaS5lcnJvcl9jb2RlID0gaW5mbyBcXHUwMDNlXFx1MDAzZSAzMjtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYyOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzA6I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02MzEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjMyOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NISUZUIDhcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjM0LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzNTojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9JTlRSICgwIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2MzY6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2Mzc6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgKDMgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjYzODojZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02MzktXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQwOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCBCSVQoMzEpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQxOiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0MzojZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDQ6XFx0XFx0XFx0XFx0ICAgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY0NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDY6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkVDX01BU0sgU1ZNX0VWVElOSl9WRUNfTUFTS1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NzojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ5OiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSIFNWTV9FVlRJTkpfVFlQRV9JTlRSXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjUwOiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MTojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgU1ZNX0VWVElOSl9UWVBFX0VYRVBUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjUyOiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIFNWTV9FVlRJTkpfVFlQRV9TT0ZUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjUzLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU1OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MzU4PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fZXZlbnRfaW5qX3ZhbGlkX2V4ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODEtLypcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4MjogKiBBY2NvcmRpbmcgdG8gdGhlIEFQTSwgVk1SVU4gZXhpdHMgd2l0aCBTVk1fRVhJVF9FUlIgaWYgU1ZNX0VWVElOSl9WQUxJRCBpc1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzgzLSAqIHNldCBhbmQ6XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODQtICogLSBUaGUgdHlwZSBvZiBldmVudF9pbmogaXMgbm90IG9uZSBvZiB0aGUgZGVmaW5lZCB2YWx1ZXMuXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozODU6ICogLSBUaGUgdHlwZSBpcyBTVk1fRVZUSU5KX1RZUEVfRVhFUFQsIGJ1dCB0aGUgdmVjdG9yIGlzIG5vdCBhIHZhbGlkIGV4Y2VwdGlvbi5cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4Ni0gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM4Nz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODgte1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6Mzg5OlxcdHUzMiB0eXBlID0gZXZlbnRfaW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9UWVBFX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTA6XFx0dTggdmVjdG9yID0gZXZlbnRfaW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9WRUNfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5MjpcXHRpZiAoIShldmVudF9pbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5NTpcXHRpZiAodHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfSU5UUiBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IFNWTV9FVlRJTkpfVFlQRV9OTUkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5NjpcXHQgICAgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBTVk1fRVZUSU5KX1RZUEVfU09GVClcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOTgtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozOTk6XFx0aWYgKHR5cGUgPT0gU1ZNX0VWVElOSl9UWVBFX0VYRVBUIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00MDAtXFx0ICAgICFuZXN0ZWRfc3ZtX2V2ZW50X2lual92YWxpZF9leGVwdCh2Y3B1LCB2ZWN0b3IpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz01MTM9dm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU0OC1cXHR0by1cXHUwMDNlZXhpdF9pbnRfaW5mb19lcnIgICA9IGZyb20tXFx1MDAzZWV4aXRfaW50X2luZm9fZXJyO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NTQ5OlxcdHRvLVxcdTAwM2VldmVudF9pbmogICAgICAgICAgID0gZnJvbS1cXHUwMDNlZXZlbnRfaW5qIFxcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUUztcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU1MC1cXHR0by1cXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXFx1MDAzZWV2ZW50X2lual9lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTY1NT1zdGF0aWMgdm9pZCBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjYzLVxcdFxcdG5yID0gdmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb24udmVjdG9yO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjY0OlxcdFxcdGV4aXRfaW50X2luZm8gPSBuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQ7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjUtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjYtXFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Njc6XFx0XFx0XFx0ZXhpdF9pbnRfaW5mbyB8PSBTVk1fRVZUSU5KX1ZBTElEX0VSUjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2OC1cXHRcXHRcXHR2bWNiMTItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIgPVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzItXFx0fSBlbHNlIGlmICh2Y3B1LVxcdTAwM2VhcmNoLm5taV9pbmplY3RlZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NjczOlxcdFxcdGV4aXRfaW50X2luZm8gPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc2LVxcdFxcdG5yID0gdmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQubnI7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2Nzc6XFx0XFx0ZXhpdF9pbnRfaW5mbyA9IG5yIHwgU1ZNX0VWVElOSl9WQUxJRDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3OS1cXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQuc29mdClcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY4MDpcXHRcXHRcXHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjgxLVxcdFxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY4MjpcXHRcXHRcXHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVFlQRV9JTlRSO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjgzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9ODI4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19ldnRpbmpfc29mdCh1MzIgZXZ0aW5qKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI5LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMDpcXHR1MzIgdHlwZSA9IGV2dGluaiBcXHUwMDI2IFNWTV9FVlRJTkpfVFlQRV9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODMxOlxcdHU4IHZlY3RvciA9IGV2dGluaiBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzItXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4MzM6XFx0aWYgKCEoZXZ0aW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM1LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODM2OlxcdGlmICh0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9TT0ZUKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM3LVxcdFxcdHJldHVybiB0cnVlO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODM4LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODM5OlxcdHJldHVybiB0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCBcXHUwMDI2XFx1MDAyNiBrdm1fZXhjZXB0aW9uX2lzX3NvZnQodmVjdG9yKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0MC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg0Mj1zdGF0aWMgYm9vbCBpc19ldnRpbmpfbm1pKHUzMiBldnRpbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDMte1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ0OlxcdHUzMiB0eXBlID0gZXZ0aW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9UWVBFX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDUtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDY6XFx0aWYgKCEoZXZ0aW5qIFxcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQ4LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODQ5OlxcdHJldHVybiB0eXBlID09IFNWTV9FVlRJTkpfVFlQRV9OTUk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NTAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODk9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDAtXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGV4LVxcdTAwM2V2ZWN0b3JcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQwMTpcXHRcXHR8IFNWTV9FVlRJTkpfVkFMSURcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQwMjpcXHRcXHR8IChleC1cXHUwMDNlaGFzX2Vycm9yX2NvZGUgPyBTVk1fRVZUSU5KX1ZBTElEX0VSUiA6IDApXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MDM6XFx0XFx0fCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MDQtXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2lual9lcnIgPSBleC1cXHUwMDNlZXJyb3JfY29kZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTYtXFx0XFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0NTc6XFx0aW50IGludF92ZWMgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU4LVxcdHVpbnQzMl90IHR5cGUgPVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNzg4PXN0YXRpYyB2b2lkIHN2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3OTI6XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzc5My1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9Mzg0Mj1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcmVpbmplY3RlZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg1MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4NTI6XFx0XFx0dHlwZSA9IFNWTV9FVlRJTkpfVFlQRV9TT0ZUO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg1My1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg1NDpcXHRcXHR0eXBlID0gU1ZNX0VWVElOSl9UWVBFX0lOVFI7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODU1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4Nzc6XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IGludHItXFx1MDAzZW5yIHwgU1ZNX0VWVElOSl9WQUxJRCB8IHR5cGU7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODc4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NzExPXN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1OCB2ZWN0b3IpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTIte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzEzOlxcdHU2NCBkYXRhID0gU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVCB8IHZlY3RvcjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaD0yMzM9c3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYiB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjg2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyODc6I2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmZcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMjg4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyODk6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTA6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MjkyOiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDoyOTM6I2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk0OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk1OiNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5NzojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgKDEgXFx1MDAzY1xcdTAwM2MgMzEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5ODojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFxcdTAwM2NcXHUwMDNjIDExKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzAyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDM6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA0OiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDU6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDY6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDg6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM9Nzk9c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB1NjQgaXNfbm1pLCB1NjQgaWR0X2FsdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTItXFx0aWYgKGlzX25taSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6OTM6XFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk0LVxcdH0gZWxzZSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5NTpcXHRcXHR2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IElOVF9OUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfU09GVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk2LVxcdFxcdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2sgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6MTI2OlxcdHZtY2ItXFx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gQlBfVkVDVE9SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNy1cXHQvKiBUaGUgcmV0dXJuIGFkZHJlc3MgcHVzaGVkIG9uIHN0YWNrLCBza2lwIG92ZXIgVUQyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjEwLjQ4MDExMDUxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzM1MzQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVk0gRXhpdCBJbmZvcm1hdGlvbiBWYWxpZGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBTVk1fRVhJVElOVElORk9fVkFMSURgIG1hY3JvLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBhcyBgU1ZNX0VWVElOSl9WQUxJRGAuICBIbW0sIGludGVyZXN0aW5nLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHN1YnN0aXR1dGlvbiBpcyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdmFsaWRpdHkgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGVyZSBpcyBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYCBhY3R1YWxseSByZWZlcmVuY2VkPyBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiAgTGV0J3Mgc2VlIHdoZXJlIHRoaXMgdGhpbmcgcG9wcyB1cC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjEyLjkxMzY0NjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTUxOTIxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1ZNX0VYSVRJTlRJTkZPX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaD01NjQ9c3RhdGljIGlubGluZSB2b2lkIF9fdW51c2VkX3NpemVfY2hlY2tzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDUtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjQ2OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLIFNWTV9FVlRJTkpfVkVDX01BU0tcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDc6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLIFNWTV9FVlRJTkpfVFlQRV9NQVNLXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ4LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0OTojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MDojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTk1JIFNWTV9FVlRJTkpfVFlQRV9OTUlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTE6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1MjojZGVmaW5lXFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1My1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NTQ6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlJcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NTYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI0NTA9c3RhdGljIGludCB0YXNrX3N3aXRjaF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU1LVxcdGludCBpbnRfdHlwZSA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvIFxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0NTY6XFx0XFx0U1ZNX0VYSVRJTlRJTkZPX1RZUEVfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NTctXFx0aW50IGludF92ZWMgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkVDX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDU4LVxcdHVpbnQzMl90IHR5cGUgPVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ1OTpcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19UWVBFX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYwLVxcdHVpbnQzMl90IGlkdF92ID1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0NjE6XFx0XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDYyLVxcdGJvb2wgaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ3OS1cXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0ODA6XFx0XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9OTUk6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDgxLVxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDgyLVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ4MzpcXHRcXHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUOlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ4NC1cXHRcXHRcXHRpZiAoc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFxcdTAwMjZcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQ5MS1cXHRcXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0OTI6XFx0XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9JTlRSOlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ5MzpcXHRcXHRjYXNlIFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQ6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDk0LVxcdFxcdFxcdGt2bV9jbGVhcl9pbnRlcnJ1cHRfcXVldWUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MDEtXFx0aWYgKHJlYXNvbiAhPSBUQVNLX1NXSVRDSF9HQVRFIHx8XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTAyOlxcdCAgICBpbnRfdHlwZSA9PSBTVk1fRVhJVElOVElORk9fVFlQRV9TT0ZUIHx8XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTAzOlxcdCAgICAoaW50X3R5cGUgPT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MDQtXFx0ICAgICAoaW50X3ZlYyA9PSBPRl9WRUNUT1IgfHwgaW50X3ZlYyA9PSBCUF9WRUNUT1IpKSkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNTA4LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjUwOTpcXHRpZiAoaW50X3R5cGUgIT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MTAtXFx0XFx0aW50X3ZlYyA9IC0xO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNjgzPXN0YXRpYyB2b2lkIHN2bV9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXFx0KmludHJfaW5mbyA9IGNvbnRyb2wtXFx1MDAzZWV4aXRfaW50X2luZm87XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM2OTQ6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjk1LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXhpdF9pbnRfaW5mb19lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3MDA9c3RhdGljIHZvaWQgc3ZtX2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzA3OlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXZlbnRfaW5qX2VycjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDI5ND1zdGF0aWMgdm9pZCBzdm1fY29tcGxldGVfc29mdF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQyOTYte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI5NzpcXHRib29sIGlzX2V4Y2VwdGlvbiA9ICh0eXBlID09IFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQyOTg6XFx0Ym9vbCBpc19zb2Z0ID0gKHR5cGUgPT0gU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mjk5LVxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00MzM4PXN0YXRpYyB2b2lkIHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNjU6XFx0aWYgKCEoZXhpdGludGluZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSUQpKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM2Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzNjktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MzcwOlxcdHZlY3RvciA9IGV4aXRpbnRpbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZFQ19NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM3MTpcXHR0eXBlID0gZXhpdGludGluZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVFlQRV9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM3Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM3Ni1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzNzc6XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9OTUk6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzc4LVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubm1pX2luamVjdGVkID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4MC1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzODE6XFx0Y2FzZSBTVk1fRVhJVElOVElORk9fVFlQRV9FWEVQVDoge1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4Mi1cXHRcXHR1MzIgZXJyb3JfY29kZSA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzODktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0MzkwOlxcdFxcdGlmIChleGl0aW50aW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzkxLVxcdFxcdFxcdGVycm9yX2NvZGUgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTMtXFx0XFx0a3ZtX3JlcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlY3RvcixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzOTQ6XFx0XFx0XFx0XFx0ICAgICAgZXhpdGludGluZm8gXFx1MDAyNiBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5NS1cXHRcXHRcXHRcXHQgICAgICBlcnJvcl9jb2RlKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5Ny1cXHR9XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0Mzk4OlxcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUjpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTktXFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCB2ZWN0b3IsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ0MDAtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0NDAxOlxcdGNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ0MDItXFx0XFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCB2ZWN0b3IsIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MTMxPXN0YXRpYyBpbnQgc3ZtX2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MTM4LVxcdC8qIENoZWNrIHRoYXQgZW11bGF0aW9uIGlzIHBvc3NpYmxlIGR1cmluZyBldmVudCB2ZWN0b3JpbmcgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUxMzk6XFx0aWYgKChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19UWVBFX01BU0spIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MTQwLVxcdCAgICAha3ZtX2Nhbl9lbXVsYXRlX2V2ZW50X3ZlY3RvcmluZyhlbXVsX3R5cGUpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oPTIzMz1zdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjMwMTojZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzAyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDM6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6MzA0OiNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDU6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDY6I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDg6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6MTQuOTY4ODQ0ODI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMDAxNzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gS1ZNL1NWTSBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AsIHNwZWNpZmljYWxseSB0aGlzIGxpbmU6IGB0by1cdTAwM2VldmVudF9pbmogPSBmcm9tLVx1MDAzZWV2ZW50X2luaiBcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUUztgLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGlrZWx5IGhpbmdlcyBvbiBob3cgdGhpcyBiaXRtYXNrIGludGVyYWN0cyB3aXRoIHRoZSBgZXZlbnRfaW5qYCBmaWVsZC4gSXQgbG9va3MgbGlrZSBgdG8tXHUwMDNlZXZlbnRfaW5qYCBpcyBhIGB1MzJgLiBXZSdyZSBtYXNraW5nIGl0IHdpdGggdGhlIGJpdHdpc2UgaW52ZXJzZSBvZiBgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHZhbHVlIG9mIGBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFNgLiBJdCdzIGRlZmluZWQgYXMgdGhlIGJpdHdpc2UgTk9UIG9mIGEgY29tYmluYXRpb24gb2YgbWFza3M6IGB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFNWTV9FVlRJTkpfVkFMSURfRVJSIHwgU1ZNX0VWVElOSl9WQUxJRClgLiBOb3csIHRoZSBsZWdhY3kgZGVmaW5pdGlvbiBvZiBgU1ZNX0VWVElOSl9WQUxJRGAgd2FzIGAoMSBcdTAwM2NcdTAwM2MgMzEpYC4gQW5kIHRoaXMgaXMgd2hlcmUgdGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvdyBjb21lcyBpbnRvIHBsYXkuIElmIHdlIHRyZWF0IGAoMSBcdTAwM2NcdTAwM2MgMzEpYCBhcyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBpbiBDLCB3aGljaCBpcyB3aGF0IHRoZSBjb2RlIHNlZW1pbmdseSBkb2VzLCB0aGlzIG9wZXJhdGlvbiB0cmlnZ2VycyB1bmRlZmluZWQgYmVoYXZpb3IuIENvbXBpbGVycyBsaWtlIEdDQy9DbGFuZyB3aWxsIHR5cGljYWxseSBpbnRlcnByZXQgdGhpcyBhcyAtMjE0NzQ4MzY0OCAoMHg4MDAwMDAwMCkuXG5cblNvLCB0aGUgY29tYmluZWQgbWFzaywgaW4gdGhlIG9yaWdpbmFsIGRlZmluaXRpb24sIGV2YWx1YXRlcyB0byBhIG5lZ2F0aXZlIGBpbnRgIHZhbHVlLCBhbmQgdGFraW5nIGl0cyBiaXR3aXNlIGludmVyc2UgZ2l2ZXMgdXMgYW5vdGhlciBuZWdhdGl2ZSBudW1iZXIuIEJ1dCwgaWYgYFNWTV9FVlRJTkpfVkFMSURgIGlzIG5vdyBkZWZpbmVkIHVzaW5nIGBCSVQoMzEpYCwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBgKDFVTCBcdTAwM2NcdTAwM2MgMzEpYCwgaXQncyBhIDY0LWJpdCBvcGVyYXRpb24gb24geDg2XzY0LCB3aGljaCByZXNvbHZlcyB0byBgMHg4MDAwMDAwMFVMYC4gTm93LCBjYWxjdWxhdGluZyB0aGF0IGNvbWJpbmVkIG1hc2sgaW4gdGhlIG5ldyBkZWZpbml0aW9uLCB3aXRoIHRoZSA2NCBiaXQgZGVmaW5pdGlvbiwgcmVzdWx0cyBpbiBhIGRpZmZlcmVudCB2YWx1ZSB0aGF0J3MgbXVjaCBsYXJnZXIgdGhhbiBhIHUzMiwgYW5kIHRha2luZyB0aGUgYml0d2lzZSBpbnZlcnNlLCBzdGlsbCBnaXZlcyB1cyB0aGUgcmlnaHQgYml0cywgYnV0IGFzIGEgbXVjaCBsYXJnZXIgYHVuc2lnbmVkIGxvbmdgIHZhbHVlLlxuXG5UaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIHN1YnNlcXVlbnQgYml0d2lzZSBBTkQ6IGBmcm9tLVx1MDAzZWV2ZW50X2luaiBcdTAwMjYgflNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AuIElmIHRoZSBjb21waWxlciBzdGlsbCB0cmVhdHMgdGhlIGV4cHJlc3Npb24gYXMgc2lnbmVkIDMyIGJpdCwgdGhlbiBpdCB3aWxsIGdldCBhbiBpbmNvcnJlY3QgdmFsdWUgYW5kIHRoZSBtYXNrIGJlY29tZXMgbXVjaCBiaWdnZXIgd2hlbiBjb25zaWRlcmluZyBgQklUKDMxKWAgYW5kIHRoZSBwcm9tb3Rpb24gdGhhdCBoYXBwZW5zIGhlcmUuIFRoZSBiaXR3aXNlIG1hc2sgdGhhdCB3ZSdyZSBhcHBseWluZyB3aXRoIGB+U1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTYCB3aWxsIGltcGFjdCBob3cgdGhlIGBmcm9tLVx1MDAzZWV2ZW50X2luamAgdmFsdWUgaXMgdWx0aW1hdGVseSBtb2RpZmllZC4gVGhlIHUzMiB2YWx1ZSBpcyBnZXR0aW5nIG1hc2tlZCB3aXRoIHdoYXQgYXBwZWFycyB0byBiZSBhIG11Y2ggbGFyZ2VyIG1hc2suXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBwdWxsIHVwIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGBnaXQgbG9nIC0xIC1wYCB0byBzZWUgdGhlIGFjdHVhbCBwYXRjaCB0aGF0IGludHJvZHVjZWQgdGhpcyBjaGFuZ2UgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDoyMC4zOTg4NjQxNDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzE4NjE1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDA6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDE6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg9MjMzPXN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Ige1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk3OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcXHUwMDNjXFx1MDAzYyAzMSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmg6Mjk4OiNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTI5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6MjIuMjcwNzM0NDU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNDQ3OTIxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogQSBGb2N1c2VkIEV4YW1pbmF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIGNoYW5nZS4uLiBkb2VzIGl0IHRvdWNoIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlPyBMZXQncyB0cmFjZSBpdC4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGBTVk1fRVZUSU5KX1ZBTElEYC4gIEkga25vdyB0aGF0J3MgdXNlZCB3aXRoaW4gdGhlIEtWTSBBTUQgKFNWTSkgdmlydHVhbGl6YXRpb24gZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuICBUaGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgS1ZNIEFNRCBTVk0gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIGNvbnRleHQ/XG5cbkhtbSwgY2FuIHdlIGdldCB0aGVyZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IEkgbmVlZCB0byBjbGFyaWZ5OiBpcyBLVk0gKGt2bV9hbWQgc3BlY2lmaWNhbGx5KSBmdXp6ZWQgaW4gdGhvc2Ugc2NlbmFyaW9zPyAgSSBrbm93IHN5emthbGxlciAqY2FuKiBmdXp6IEtWTSBpZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgS1ZNIGFyZSBlbmFibGVkLCBidXQgZG9lcyBpdCBhY3R1YWxseSAqZG8qIGl0PyBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3l6a2FsbGVyIEtWTSBmdXp6aW5nIGNvbmZpZy5cblxuTGV0J3MgY2FyZWZ1bGx5IHJlZmVyIHRvIHRoZSBwcm9tcHQncyBzZWN0aW9ucyB0byBtYWtlIHN1cmUgSSBnZXQgdGhpcyByaWdodC5cblxuKiAgICoqU2VjdGlvbiAxOiBUaGUgUmVhY2hhYmlsaXR5IEdhdGUqKiAgRnV6emluZyBpcyBvbmx5IHZhbGlkIGZvciBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IHJ1biBpbiB0aGUgZXhwZWN0ZWQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VLCBHQ0UsIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMpLiBJZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBieSBkZXNpZ24sIG5vIGZ1enppbmcgaXMgbmVlZGVkLCBldmVuIGlmIHRoZXJlIGFyZSBhc3NlcnRpb25zIG9yIGNvbXBsZXggbmV3IGxvZ2ljLiBDbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIHJlZmFjdG9yaW5nIG5lZWQgdG8gYmUgdGhvcm91Z2hseSBjaGVja2VkLiBOZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiAqcmVhY2hhYmxlKiBjb2RlICptdXN0KiBiZSBmdXp6ZWQuXG4qICAgKipTZWN0aW9uIDI6IE5lZ2F0aXZlIENyaXRlcmlhIChXaGVuIHRvIFJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCkqKiAgT25seSByZXR1cm4gYGZhbHNlYCBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczogbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSAoRG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nL3RyYWNlcG9pbnRzLCBidWlsZCBzeXN0ZW0vS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG9uJ3QgYWx0ZXIgdGhlIGNvbXBpbGVkIEMgbG9naWMpLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgKHNwZWNpZmljIFBDSWUvTklDL0dQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSksIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyAoZS5nLiwgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgdHJpZ2dlciBvbiBob3QtdW5wbHVnKS5cbiogICAqKlNlY3Rpb24gMzogUG9zaXRpdmUgQ3JpdGVyaWEgKFdoZW4gdG8gUmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWApKiogUmV0dXJuIGB0cnVlYCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlczogY29yZSBzdWJzeXN0ZW1zIChNTSwgc3luYywgQlBGLCBldGMuKSwgcmVmYWN0b3JpbmdzL2NvZGUgY2xlYW51cHMgYWZmZWN0aW5nIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcywgcnVudGltZSBhc3NlcnRpb25zL2RlZmVuc2l2ZSBjaGVja3MsIGFuZCByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMgKGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMpLlxuXG5Ob3csIGxldCdzIGdldCBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgYCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpYCBiZWluZyBjaGFuZ2VkIHRvIGAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgQklUKDMxKWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYC4gSXMgdGhpcyBhIG1hY3JvIGRlZmluaXRpb24gY2hhbmdlIHRoYXQgYWZmZWN0cyBjb21waWxlZCBDIGNvZGU/IFllcywgaXQncyBhIGtlcm5lbCBoZWFkZXIuIEkgdW5kZXJzdGFuZCB0aGF0LlxuXG5TbywgaXMgS1ZNIEFNRCByZWFjaGFibGU/IEluIFFFTVUgKHVzaW5nIG5lc3RlZCBBTUQgU1ZNIG9yIEFNRCBDUFUgZW11bGF0aW9uIHdpdGggYHFlbXUtc3lzdGVtLXg4Nl82NCAtY3B1IGhvc3RgIG9yIGAtY3B1IEVQWUNgKSwgdGhlIGBrdm1fYW1kYCBtb2R1bGUgaXMgY29tcGlsZWQsIGFuZCBpdCdzIHJlYWNoYWJsZSB3aGVuIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkLCBvciBBTUQgQ1BVIGlzIGVtdWxhdGVkLCBldmVuIHZpYSBLVk0gaW9jdGxzICgvZGV2L2t2bSkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBLVk1cXF9BTUQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjIzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjI5LjQxNTUzMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQwNjcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDozMS4yMTk2MDM3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTcwOTc2NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHg4NioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMuIExldCdzIHN0YXJ0IHdpdGggYGFyY2gveDg2L2t2bS9LY29uZmlnYCwgYXJvdW5kIGxpbmUgMTQ2LiBUaGF0IGFyZWEgdHlwaWNhbGx5IGRlYWxzIHdpdGggY29yZSBmZWF0dXJlIGVuYWJsZW1lbnQsIHNvIHRoYXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBLY29uZmlnIGZyYWdtZW50IGlzIHN0cnVjdHVyZWQsIGhvdyBpdCBjb250cm9scyB0aGUgYnVpbGQsIGFuZCB3aGF0J3MgZGVwZW5kZW50IG9uIHdoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgaGllcmFyY2h5IG9mIGNvbmRpdGlvbmFscyDigJMgYGlmIEtWTWAsIG5lc3RlZCBmdXJ0aGVyIGJhc2VkIG9uIENQVSBmZWF0dXJlcywgbWF5YmUgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzLCBhbmQgbGlrZWx5IHNvbWUgY3J1Y2lhbCBkZWZhdWx0cyB0aGF0IGFmZmVjdCB0aGUgb3ZlcmFsbCBLVk0gcGVyZm9ybWFuY2UgcHJvZmlsZS4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgc2VjdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgd2hpY2ggb3RoZXIgS2NvbmZpZ3MgYXJlIHJlZmVyZW5jZWQgb3IgaW5jbHVkZWQgaGVyZSwgYW5kIGhvdyB0aGlzIHNlY3Rpb24gcmVsYXRlcyB0byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLiBIb3BlZnVsbHksIGl0IHdpbGwgcXVpY2tseSBvcmllbnQgbWUgdG8gdGhlIGNvZGUgSSBhbSBpbnZlc3RpZ2F0aW5nIGFuZCBJIGNhbiBiZWdpbiBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGdldCBteSB0ZXN0aW5nIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjM0LjE5MDU4MzM4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxcbiAxNTE6XFx0XFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxNTQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxcbiAxNTU6XFx0XFxuIDE1NjpcXHRjb25maWcgS1ZNX0FNRF9TRVZcXG4gMTU3OlxcdFxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuIDE1ODpcXHRcXHRkZWZhdWx0IHlcXG4gMTU5OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0FNRCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4gMTYwOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXFx1MDAyNlxcdTAwMjYgIShLVk1fQU1EPXkgXFx1MDAyNlxcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcXG4gMTYxOlxcdFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiAxNjI6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDE2MzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG4gMTY0OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxcbiAxNjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuIDE2NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE2NzpcXHRcXHRoZWxwXFxuIDE2ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcXG4gMTY5OlxcdFxcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6MzQuMTkwNjU4MzM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1ODI4ODI1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgU1ZNX0VWVElOSl9WQUxJRCBNYWNybyBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIHdoZXJlIGBTVk1fRVZUSU5KX1ZBTElEYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgYXJlYXMgd2l0aGluIHRoZSBLVk0gQU1EIChTVk0pIHN1YnN5c3RlbTogYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oYCwgYW5kIGBhcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuY2AuIFRoaXMgaXNuJ3QganVzdCBhIG1pbm9yIGNoYW5nZTsgdGhpcyBpcyBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCdzIGdvaW5nIHRvIHJpcHBsZSB0aHJvdWdoIHNldmVyYWwgY29yZSBmdW5jdGlvbnMuXG5cbk5vdywgdGhlIGZ1enppbmcgZ3VpZGFuY2UgaXMgY3JpdGljYWwgaGVyZS4gVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIHJlZ3Jlc3Npb25zLCBidWdzLCBhbmQgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLCBhbmQgaXQgaGluZ2VzIG9uIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIGNvZGUuIFRoZSBtb2RpZmllZCBjb2RlJ3Mgc3RydWN0dXJhbCByZWFjaGFiaWxpdHkgdGFrZXMgcHJlY2VkZW5jZS4gSWYgdGhlIGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgc2hvdWxkIG5vdCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2YgaG93IGNvbXBsZXggdGhlIGFkZGVkIGNvZGUgb3IgaG93IG1hbnkgYXNzZXJ0aW9ucy4gSSBjYW4ndCB0YWtlIGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgYXQgZmFjZSB2YWx1ZSwgcmVmYWN0b3JpbmdzIGluIGNvcmUgc3Vic3lzdGVtcyBvZnRlbiBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cy4gQW55IG5ldyBvciBtb2RpZmllZCBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBjb2RlIGFic29sdXRlbHkgKm11c3QqIGJlIGZ1enplZC4gQ29udmVyc2VseSwgSSBjYW4gb25seSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgKmFsbCogbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSDigJMgd2hpY2ggYXJlIGVhc2lseSBjaGVja2FibGUuXG5cbkhlcmUncyB0aGUgcnViOiB0aGUgY2hhbmdlIHRyYW5zZm9ybXMgYFNWTV9FVlRJTkpfVkFMSURgIGZyb20gYCgxIFx1MDAzY1x1MDAzYyAzMSlgIHRvIGBCSVQoMzEpYC4gVGhpcyBhZmZlY3RzIEMgbWFjcm8gZXhwYW5zaW9uIHdpdGhpbiB0aGUgS1ZNIEFNRCAoU1ZNKSBzdWJzeXN0ZW0uIElzIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWE/IE5vLiBJdCdzIG5vdCBhIGRvY3VtZW50YXRpb24gY2hhbmdlLiBJdCdzIG5vdCB1c2Vyc3BhY2UgY29kZS4gSXQncyBub3QgZGVjb3JhdGl2ZSBsb2dnaW5nLiBJdCdzIG5vdCBhIGJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IHRoZSBjb21waWxlZCBDIGxvZ2ljLiBLVk0gaXMgc3BlY2lmaWNhbGx5IGVtdWxhdGVkL3ZpcnR1YWxpemVkIGluIHN0YW5kYXJkIFFFTVUvS1ZNIEFNRCBlbnZpcm9ubWVudHMuIEl0IGlzIG5vdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEl0J3Mgbm90IHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoIC8gdGVhcmRvd24uIEl0J3Mgbm90IGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGFyZ2V0IChhbWQ2NCkuXG5cblRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgYFdvcnRoRnV6emluZ2AgKm11c3QqIGJlIGB0cnVlYC4gVGhpcyBpc24ndCBhIFwibm8tb3BcIiBjaGFuZ2U7IGl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gYSBjb3JlIG1hY3JvIGFmZmVjdGluZyBtdWx0aXBsZSBrZXkgZnVuY3Rpb25zIHdpdGhpbiBhIGNydWNpYWwgc3Vic3lzdGVtLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSByZWxldmFudCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGFyZTogYHN2bV9pbmplY3RfZXhjZXB0aW9uYCwgYHN2bV9pbmplY3Rfbm1pYCwgYHN2bV9pbmplY3RfaXJxYCwgYHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbmAsIGBzdm1fY29tcGxldGVfaW50ZXJydXB0c2AsIGBzdm1fZ2V0X2V4aXRfaW5mb2AsIGBzdm1fZ2V0X2VudHJ5X2luZm9gIGZyb20gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgOyBhbmQgYG5lc3RlZF9zdm1fY2hlY2tfZXZlbnRfaW5qYCwgYF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlYCwgYW5kIGBuZXN0ZWRfc2F2ZV9wZW5kaW5nX2V2ZW50X3RvX3ZtY2IxMmAgZnJvbSBgYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY2AuIEkgbmVlZCB0byBub3cgZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3Igbm9uLXN0YXRpYy4gSSB3aWxsIG5vdyBleGFtaW5lIHRoZWlyIGRlZmluaXRpb25zIGluIHRoZWlyIHJlc3BlY3RpdmUgYC5jYCBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NDEuNzczNTQzNzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTE1NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV9pbmplY3RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzctXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzozODpzdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luamVjdF9ucGZfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zOS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz05OT1zdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luaXRfbW11X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMTgtXFx0dmNwdS1cXHUwMDNlYXJjaC5uZ3BhX3dhbGsuZ2V0X3BkcHRyICAgICAgICAgPSBuZXN0ZWRfc3ZtX2dldF90ZHBfcGRwdHI7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMTk6XFx0dmNwdS1cXHUwMDNlYXJjaC5uZ3BhX3dhbGsuaW5qZWN0X3BhZ2VfZmF1bHQgPSBuZXN0ZWRfc3ZtX2luamVjdF9ucGZfZXhpdDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyMC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE2NzM9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9pc19leGNlcHRpb25fdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNjgwLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTY4MTpzdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX2luamVjdF9leGNlcHRpb25fdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE2ODIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xNzIxPXN0YXRpYyBpbnQgc3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNzUyLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxNzUzOlxcdFxcdG5lc3RlZF9zdm1faW5qZWN0X2V4Y2VwdGlvbl92bWV4aXQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNzU0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNDI9c3RhdGljIGludCBzdm1fdXBkYXRlX3NvZnRfaW50ZXJydXB0X3JpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg4LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mzg5OnN0YXRpYyB2b2lkIHN2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM5MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3NjI9c3RhdGljIGludCBwcmVfc3ZtX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3ODctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzg4OnN0YXRpYyB2b2lkIHN2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3ODkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zODE5PXN0YXRpYyBib29sIHN2bV9zZXRfdm5taV9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg0MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM4NDI6c3RhdGljIHZvaWQgc3ZtX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJlaW5qZWN0ZWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zODQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyOD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTM5My1cXHQucGF0Y2hfaHlwZXJjYWxsID0gc3ZtX3BhdGNoX2h5cGVyY2FsbCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzOTQ6XFx0LmluamVjdF9pcnEgPSBzdm1faW5qZWN0X2lycSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzOTU6XFx0LmluamVjdF9ubWkgPSBzdm1faW5qZWN0X25taSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzOTYtXFx0LmlzX3ZubWlfcGVuZGluZyA9IHN2bV9pc192bm1pX3BlbmRpbmcsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzk3LVxcdC5zZXRfdm5taV9wZW5kaW5nID0gc3ZtX3NldF92bm1pX3BlbmRpbmcsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1Mzk4OlxcdC5pbmplY3RfZXhjZXB0aW9uID0gc3ZtX2luamVjdF9leGNlcHRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzk5LVxcdC5jYW5jZWxfaW5qZWN0aW9uID0gc3ZtX2NhbmNlbF9pbmplY3Rpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQxLjgyNjA2NDcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTk3ODM2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGYsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmVzdGVkLmNgIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXN0ZWQuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgZnVuY3Rpb25zIGFyZSBpbiBoZXJlIGFuZCB3aGF0J3MgdGhlaXIgcHVycG9zZT9cIiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoaXMgbW9kdWxlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXN0ZWQgbG9vcHM/IFJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscz8gUGVyaGFwcyBzb21lIGRlZXBseSBuZXN0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGFjY2VzcyBtZXRob2RzPyBLbm93aW5nIHRoZSBsYW5kc2NhcGUgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb21wbGV4aXR5IGhvdHNwb3RzIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbiBvciByZWZhY3RvcmluZyBsYXRlciBvbi4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTk3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NDQuMTg1ODUwMzg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYwNjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTUxMj1zdGF0aWNcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjUxMzp2b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTUxNC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZtY2JfY3RybF9hcmVhX2NhY2hlZCAqdG8sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTU3MD12b2lkIG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTcyLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjU3MzpcXHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1LCBcXHUwMDI2c3ZtLVxcdTAwM2VuZXN0ZWQuY3RsLCBjb250cm9sKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTU3NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTE5NDY9c3RhdGljIGludCBzdm1fc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIwMDctXFx0cmV0ID0gLUVJTlZBTDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIwMDg6XFx0X19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUodmNwdSwgXFx1MDAyNmN0bF9jYWNoZWQsIGN0bCk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMDA5LVxcdGlmICghbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHModmNwdSwgXFx1MDAyNmN0bF9jYWNoZWQpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDo0NC4yMzI0NjE4NDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyMjMxMDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbjpcblxuKipEaXZpbmcgaW50byBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIGNoZWNraW5nIGZvciBldmVudCBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzLCBwb3RlbnRpYWxseSB3aXRoaW4gYSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gU2VjdXJlIFZpcnR1YWwgTWFjaGluZXMgKFNWTSkuIFRoYXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIHNlY3VyaXR5LXNlbnNpdGl2ZSBhcmVhcywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBldmVudHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXN0ZWQgc3RydWN0dXJlLCB3aGF0IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycyB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlLCBhbmQgd2hldGhlciBpdCdzIGltcGxlbWVudGVkIGNvcnJlY3RseS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIGlucHV0IHZhbGlkYXRpb24sIG9yIGFueSBsb2dpYyBmbGF3cyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCB0byBpbmplY3QgbWFsaWNpb3VzIGV2ZW50cyBvciBieXBhc3Mgc2VjdXJpdHkgY2hlY2tzLiBUaGlzIGlzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHdoZXJlIGEgc2luZ2xlIG92ZXJzaWdodCBjYW4gaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIHNvIGl0J3MgY3JpdGljYWwgdG8gc2NydXRpbml6ZSBldmVyeSBsaW5lIG9mIGNvZGUuIEknbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsIGdyYXBoIGFuZCB0aGVuIGRpdmluZyBkZWVwIGludG8gaXRzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIxMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQ2LjU1NDc3NTc4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4OTcxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0zNTg9c3RhdGljIGJvb2wgbmVzdGVkX3N2bV9ldmVudF9pbmpfdmFsaWRfZXhlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM4Ni0gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4NzpzdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz00MDY9c3RhdGljIGJvb2wgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00MzAtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo0MzE6XFx0aWYgKENDKCFuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaih2Y3B1LCBjb250cm9sLVxcdTAwM2VldmVudF9pbmopKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQzMi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQ2LjYwNDY4MDcxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjUwMzg3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5lc3RlZCBWTSBTdGF0ZSBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3RhdGUgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXN0ZWQgVk0gdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQsIHNvIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGVpdGhlciBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgIG9yIGBuZXN0ZWRfc3ZtX3ZtcnVuYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBtYW5pcHVsYXRpbmcgYW5kIHRyYW5zaXRpb25pbmcgdGhlIFZNIHN0YXRlIHdoZW4gbmVzdGVkLiBPZiBjb3Vyc2UsIGBuZXN0ZWRfdm1jYl9jaGVja19jb250cm9sc2AgaXMgdGhlIGZ1bmN0aW9uIHRoZXkgY2FsbCBpbiBtYW55IGltcGxlbWVudGF0aW9ucywgYW5kIEkgc2hvdWxkIGNoZWNrIGl0LCBhcyB0aGF04oCZcyB1c3VhbGx5IHdoZXJlIHRoZSBzcGVjaWZpYyBjb250cm9sIGJpdHMgYW5kIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgVk0gdHJhbnNpdGlvbi4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZywgXCJXaGVyZSdzIHRoZSBhY3R1YWwgc3RhdGUgY2hhbmdlIGxvZ2ljP1wiIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGgsIHRoZSBwbGFjZSB0aGF0IGlzIGhhbmRsaW5nIHRoZSBjaGVja3MgYW5kIHRoZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiB0aGUgbmVzdGVkIFZNQ0Igc3RydWN0dXJlcy4gVGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzgxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NDguNjY5NzIyMDQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI3OTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfdm1jYl9jaGVja19jb250cm9sc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM4Nz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTQwNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjQwNjpzdGF0aWMgYm9vbCBuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00MDctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bWNiX2N0cmxfYXJlYV9jYWNoZWQgKmNvbnRyb2wpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTQ4Nz1pbnQgbmVzdGVkX3N2bV9jaGVja19jYWNoZWRfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNDkyLVxcdFxcdFxcdFxcdCAgICBsMl9oYXNfc2VwYXJhdGVfcGF0KHZjcHUpKSB8fFxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NDkzOlxcdCAgICAhbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHModmNwdSwgXFx1MDAyNnN2bS1cXHUwMDNlbmVzdGVkLmN0bCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy00OTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTUxMz12b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNTU2LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NTU3OlxcdC8qIENvcHkgYXNpZCBoZXJlIGJlY2F1c2UgbmVzdGVkX3ZtY2JfY2hlY2tfY29udHJvbHMoKSB3aWxsIGNoZWNrIGl0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy01NTgtXFx0dG8tXFx1MDAzZWFzaWQgICAgICAgICAgID0gZnJvbS1cXHUwMDNlYXNpZDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTk0Nj1zdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjAwOC1cXHRfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZSh2Y3B1LCBcXHUwMDI2Y3RsX2NhY2hlZCwgY3RsKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjIwMDk6XFx0aWYgKCFuZXN0ZWRfdm1jYl9jaGVja19jb250cm9scyh2Y3B1LCBcXHUwMDI2Y3RsX2NhY2hlZCkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMDEwLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjQ4LjcyMTAwNjA3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjM3Mjc1MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBnb29kIGxvb2sgYXQgYG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIGxhcmdlciBwaWN0dXJlLCBwYXJ0aWN1bGFybHkgaXRzIHJlbGF0aW9uIHRvIHRoZSBWaXJ0dWFsIE1hY2hpbmUgQ29udHJvbCBCbG9jaywgc3BlY2lmaWNhbGx5IFZNQ0IxMi4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2FmZWx5IGFuZCBlZmZpY2llbnRseSBtYW5hZ2luZyBwZW5kaW5nIGV2ZW50cywgbGlrZWx5IHdpdGhpbiBhIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LiBNeSBwcmltYXJ5IGNvbmNlcm5zIGFyZSBhcm91bmQgYXRvbWljaXR5IGFuZCBkYXRhIGNvbnNpc3RlbmN5LiBXaGF0J3MgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaGVyZT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGRlYWRsb2Nrcz9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb2RlJ3MgZWZmaWNpZW5jeSB0b28uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGZyZXF1ZW50IG1lbW9yeSBhY2Nlc3Nlcz8gQW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiwgcGVyaGFwcyB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdG9ycyBvciBjbGV2ZXIgZGF0YSBzdHJ1Y3R1cmVzPyBUaGUgcGVyZm9ybWFuY2UgaW1wYWN0IGhlcmUgY291bGQgYmUgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgaW4gYSBoZWF2aWx5IG5lc3RlZCBlbnZpcm9ubWVudC4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIHNhdmUgb3BlcmF0aW9uPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMgaW4gcGxhY2U/IEkgaG9wZSB0aGUgZGV2ZWxvcGVycyBoYXZlIGNvbnNpZGVyZWQgYWxsIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMuIFNlY3VyaXR5IGlzIGFsc28gYSBodWdlIGNvbmNlcm4uIEFueSBjaGFuY2Ugb2YgdnVsbmVyYWJpbGl0eSBleHBsb2l0YXRpb24/XG5cblVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gY29uZmlybSB0aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCwgc2VjdXJlLCBhbmQgcGVyZm9ybXMgb3B0aW1hbGx5IHdpdGhpbiB0aGUgc3lzdGVtJ3MgZGVzaWduIGNvbnN0cmFpbnRzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY2MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjUxLjk1ODI4MzA1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDgyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz02MjA9dm9pZCBuZXN0ZWRfc3luY19jb250cm9sX2Zyb21fdm1jYjAyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NTQtICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NTU6c3RhdGljIHZvaWQgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTIoc3RydWN0IHZjcHVfc3ZtICpzdm0sXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NTYtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZtY2IgKnZtY2IxMilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTI0OT1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMjk0LVxcdGlmICghc3ZtX2lzX3ZtcnVuX2ZhaWx1cmUodm1jYjEyLVxcdTAwM2Vjb250cm9sLmV4aXRfY29kZSkpXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMjk1OlxcdFxcdG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyKHN2bSwgdm1jYjEyKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyOTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjUyLjAwNzQzNzIwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc0OTgxMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6XG5cbioqQ2hlY2tpbmcgRXZlbnQgSW5qZWN0aW9uIEZsYWdzKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMgYW5hbHlzaXMsIGxldCdzIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdGF0ZSBvZiB0aGUgZXZlbnQgaW5qZWN0aW9uIGZsYWdzLiBTcGVjaWZpY2FsbHksIGBpc19ldnRpbmpfc29mdGAgYW5kIGBpc19ldnRpbmpfbm1pYC4gIEtub3dpbmcgdGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgaXMgZnVuZGFtZW50YWwuIFRoZXkgZGljdGF0ZSB0aGUgYmVoYXZpb3Igb2Ygc2V2ZXJhbCBjb3JlIGNvbXBvbmVudHMsIGluZmx1ZW5jaW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgY2VydGFpbiBpbnRlcnJ1cHRzIG9yIGV2ZW50cy4gQSBzaW1wbGUgbWlzaW50ZXJwcmV0YXRpb24gaGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSBjb21wbGV0ZWx5IHdyb25nIHBhdGgsIHNvIGEgcXVpY2sgdmVyaWZpY2F0aW9uIGlzIHBhcmFtb3VudC4gVGhpcyBpbml0aWFsIGJpdCBvZiBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgdG8gYXZvaWQgd2FzdGVkIHRpbWUgYW5kIG1ha2UgdGhlIGludmVzdGlnYXRpb24gbW9yZSBlZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NTMuOTgyNDIxNDI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA2NDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19ldnRpbmpfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NzQ0PXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MjctXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4Mjg6c3RhdGljIGlubGluZSBib29sIGlzX2V2dGlual9zb2Z0KHUzMiBldnRpbmopXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04Mjkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04NDEtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4NDI6c3RhdGljIGJvb2wgaXNfZXZ0aW5qX25taSh1MzIgZXZ0aW5qKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9ODUyPXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05NzMtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo5NzQ6XFx0c3ZtLVxcdTAwM2VubWlfbDFfdG9fbDIgPSBpc19ldnRpbmpfbm1pKHZtY2IwMi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmopO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtOTc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05NzktXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo5ODA6XFx0aWYgKGlzX2V2dGlual9zb2Z0KHZtY2IwMi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmopKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05ODEtXFx0XFx0c3ZtLVxcdTAwM2Vzb2Z0X2ludF9pbmplY3RlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjU0LjAyODQ5MTYzOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Nzc0MjYyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9TVk0gRXZlbnQgSW5qZWN0aW9uIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBjaGFuZ2VzIHRoZSBkZWZpbml0aW9uIG9mIGBTVk1fRVZUSU5KX1ZBTElEYCBmcm9tIGAoMSBcdTAwM2NcdTAwM2MgMzEpYCB0byBgQklUKDMxKWAgd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIG1hY3JvIGlzIGNydWNpYWwgaW4gdGhlIEtWTS9TVk0gZXZlbnQgaW5qZWN0aW9uIHByb2Nlc3MsIHdoaWNoIGhhcyBzb21lIHJhdGhlciBjb21wbGljYXRlZCBpbnRlcmFjdGlvbnMsIGVzcGVjaWFsbHkgbmVzdGVkIFNWTSB2aXJ0dWFsaXphdGlvbi4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluamVjdGVkIGV4Y2VwdGlvbnMsIE5NSXMsIGFuZCBJUlFzLCBhcyB3ZWxsIGFzIHRoZSBvdmVyYWxsIG1hbmFnZW1lbnQgb2YgaW50ZXJydXB0cyB3aXRoaW4gdGhlIEtWTSBBTUQgc3Vic3lzdGVtLiBUaGF0IGNoYW5nZSBhZmZlY3RzIHNvbWUgdHJpY2t5IGJpdCBtYW5pcHVsYXRpb24gYW5kIG1hc2tzIChsaWtlIGBTVk1fRVZUSU5KX1JFU0VSVkVEX0JJVFNgKS4gVGhpcyBhbHNvIGluZGljYXRlcyB0aGlzIGNoYW5nZSBhZmZlY3RzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIEtWTSBBTUQgc3Vic3lzdGVtLlxuXG5NeSBmb2N1cyBub3cgaXMgb24gd2hhdCBzcGVjaWZpY2FsbHkgdXNlcyB0aGlzIG1hY3JvLiBJIHNlZSB0aGF0IHNldmVyYWwgS1ZNL1NWTSBmdW5jdGlvbnMgZGlyZWN0bHkgdXNlIG9yIHdyYXAgdGhlIG1vZGlmaWVkIG1hY3JvLiBUaG9zZSBmdW5jdGlvbnMgYXJlOiBgc3ZtX2luamVjdF9leGNlcHRpb25gLCBgc3ZtX2luamVjdF9ubWlgLCBgc3ZtX2luamVjdF9pcnFgLCBgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHNgLCBgbmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpgLCBgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGVgLCBgbmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJgLCBgaXNfZXZ0aW5qX3NvZnRgLCBhbmQgYGlzX2V2dGlual9ubWlgLiBUaGVzZSBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyB0byBkaWcgaW50byBmdXJ0aGVyLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgcHJvcGVybHkuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWdzIGFyZSBgS1ZNX0FNRGAgYW5kLCBvYnZpb3VzbHksIGBLVk1gLiBMZXQgbWUgbWFrZSBzdXJlIGBLVk1fQU1EYCBpcyBzdGFuZGFyZCwgYWggeWVzLCBpdCBkZXBlbmRzIG9uIGBLVk0gXHUwMDI2XHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKWAuIFNvIGBLVk1gIGFuZCBgS1ZNX0FNRGAgYXJlIGNvbmZpcm1lZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbSBub3RpbmcgZG93biBhbGwgbXkga2V5IGZpbmRpbmdzOiB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAoaW5kaWNhdGluZyB0aGlzIGlzIGFuIGFyZWEgb2YgaW50ZXJlc3QpLCBgRW5hYmxlQ29uZmlnc2AgYXJlIFwiS1ZNXCIsIFwiS1ZNX0FNRFwiLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlLCBhcyBwcmV2aW91c2x5IG5vdGVkLCB0aG9zZSBmdW5jdGlvbnMgdXNpbmcgdGhlIG1hY3JvLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAwOCwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDQ6NTguODAyNzU2Mjk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4MjM5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV9pbmplY3RfZXhjZXB0aW9uXCIsXG4gICAgXCJzdm1faW5qZWN0X25taVwiLFxuICAgIFwic3ZtX2luamVjdF9pcnFcIixcbiAgICBcInN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2lualwiLFxuICAgIFwibmVzdGVkX3NhdmVfcGVuZGluZ19ldmVudF90b192bWNiMTJcIixcbiAgICBcIl9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBTVk1fRVZUSU5KX1ZBTElEIG1hY3JvIGRlZmluaXRpb24gZnJvbSAoMSBcXHUwMDNjXFx1MDAzYyAzMSkgdG8gQklUKDMxKSBpbiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCwgY2hhbmdpbmcgaXRzIHNpZ25lZG5lc3MvdHlwZSByZXByZXNlbnRhdGlvbiBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFuZCBtYXNrIGRlZmluaXRpb25zIGxpa2UgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIGFjcm9zcyBLVk0gQU1EIGFuZCBuZXN0ZWQgU1ZNIGV2ZW50IGluamVjdGlvbiByb3V0aW5lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdm1faW5qZWN0X2V4Y2VwdGlvblwiLFxuICAgIFwic3ZtX2luamVjdF9ubWlcIixcbiAgICBcInN2bV9pbmplY3RfaXJxXCIsXG4gICAgXCJzdm1fY29tcGxldGVfaW50ZXJydXB0c1wiLFxuICAgIFwibmVzdGVkX3N2bV9jaGVja19ldmVudF9pbmpcIixcbiAgICBcIm5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyXCIsXG4gICAgXCJfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyB0aGUgU1ZNX0VWVElOSl9WQUxJRCBtYWNybyBkZWZpbml0aW9uIGZyb20gKDEgXFx1MDAzY1xcdTAwM2MgMzEpIHRvIEJJVCgzMSkgaW4gYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgsIGNoYW5naW5nIGl0cyBzaWduZWRuZXNzL3R5cGUgcmVwcmVzZW50YXRpb24gaW4gYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhbmQgbWFzayBkZWZpbml0aW9ucyBsaWtlIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyBhY3Jvc3MgS1ZNIEFNRCBhbmQgbmVzdGVkIFNWTSBldmVudCBpbmplY3Rpb24gcm91dGluZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA0OjU4Ljg3OTU5MDE1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MjgzNzYxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDo1OC44ODAxNDUzODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjkyNzgxNjAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYFNWTV9FVlRJTkpfVkFMSURgIG1hY3JvIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAgZnJvbSBgKDEgXFx1MDAzY1xcdTAwM2MgMzEpYCB0byBgQklUKDMxKWAuIFRoaXMgYXZvaWRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBlbnN1cmVzIHRoZSBjb25zdGFudCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIGJpdG1hc2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIHBhZGRpbmcsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBtZW1vcnkgZGlzY2xvc3VyZSBpc3N1ZXMgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWM0Y2QyNzY1NTdkNTY1ZDVmODljZDY5N2JjODJkOGNiODQwMDZmMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDY6MDM6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5pbmRleCBhYTYzNDMxYmE5MmMzLi45MjFlNmVjYzQ4MzU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtNjM3LDcgKzYzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudXNlZF9zaXplX2NoZWNrcyh2b2lkKVxuICNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIFx1MDAzY1x1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXG4gI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU09GVCAoNCBcdTAwM2NcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxuIFxuLSNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRCAoMSBcdTAwM2NcdTAwM2MgMzEpXG4rI2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcbiAjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFx1MDAzY1x1MDAzYyAxMSlcbiBcbiAjZGVmaW5lIFNWTV9FVlRJTkpfUkVTRVJWRURfQklUUyB+KFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFxcXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNDo1OC44ODAxNDYyMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk1MDcyMTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNWTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggZm9jdXNlcyBvbiBhIG1hY3JvIGRlZmluaXRpb24gd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBmaXhpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgU1ZNX0VWVElOSl9WQUxJRGAuIEluaXRpYWxseSwgaXQgd2FzIGRlZmluZWQgYXMgYDEgXHUwMDNjXHUwMDNjIDMxYCwgd2hpY2gsIGluIGEgc2lnbmVkIGludGVnZXIgY29udGV4dCwgaXMgYSBrbm93biBhcmVhIG9mIHVuZGVmaW5lZCBiZWhhdmlvciBkdWUgdG8gdGhlIHBvdGVudGlhbCBmb3Igb3ZlcmZsb3cuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBCSVQoMzEpYC4gVGhpcyBpcyBhIG11Y2ggc2FmZXIgYXBwcm9hY2gsIGVuc3VyaW5nIHdlJ3JlIHdvcmtpbmcgd2l0aCBhbiB1bnNpZ25lZCBiaXQgc2hpZnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UsIGFuZCBlbnN1cmUgdGhhdCB0aGUgdW5zaWduZWQgYml0IHNoaWZ0IGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGZvciB0aGlzIHJlZ2lzdGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2UgZG9lc24ndCBjcmVhdGUgbmV3IHN1YnRsZSBpbmNvbXBhdGliaWxpdGllcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oYCBhcm91bmQgbGluZSA2MzcgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24uIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBgU1ZNX0VWVElOSl9WQUxJRGAgaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgbWFjcm9zIGxpa2UgYFNWTV9FVlRJTkpfVFlQRV9FWEVQVGAsIGBTVk1fRVZUSU5KX1RZUEVfU09GVGAsIGFuZCB0aGUgbWFza3MuIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgZm9yIHRoZSBTVk0gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNTowMy44MzA4Njk3NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMwOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9WRUNfTUFTSyAweGZmXFxuIDYzMTpcXHRcXG4gNjMyOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NISUZUIDhcXG4gNjMzOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX01BU0sgKDcgXFx1MDAzY1xcdTAwM2MgU1ZNX0VWVElOSl9UWVBFX1NISUZUKVxcbiA2MzQ6XFx0XFxuIDYzNTpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9JTlRSICgwIFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM2OlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX05NSSAoMiBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuIDYzNzpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9FWEVQVCAoMyBcXHUwMDNjXFx1MDAzYyBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpXFxuIDYzODpcXHQjZGVmaW5lIFNWTV9FVlRJTkpfVFlQRV9TT0ZUICg0IFxcdTAwM2NcXHUwMDNjIFNWTV9FVlRJTkpfVFlQRV9TSElGVClcXG4gNjM5OlxcdFxcbiA2NDA6XFx0I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG4gNjQxOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9WQUxJRF9FUlIgKDEgXFx1MDAzY1xcdTAwM2MgMTEpXFxuIDY0MjpcXHRcXG4gNjQzOlxcdCNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcXFxcbiA2NDQ6XFx0XFx0XFx0XFx0XFx0ICAgU1ZNX0VWVElOSl9WQUxJRF9FUlIgfCBTVk1fRVZUSU5KX1ZBTElEKVxcbiA2NDU6XFx0XFxuIDY0NjpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLXFxuIDY0NzpcXHQjZGVmaW5lIFNWTV9FWElUSU5USU5GT19UWVBFX01BU0sgU1ZNX0VWVElOSl9UWVBFX01BU0tcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0lOVFIgU1ZNX0VWVElOSl9UWVBFX0lOVFJcXG4gNjUwOlxcdCNkZWZpbmVcXHRTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSVxcbiA2NTE6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX0VYRVBUIFNWTV9FVlRJTkpfVFlQRV9FWEVQVFxcbiA2NTI6XFx0I2RlZmluZVxcdFNWTV9FWElUSU5USU5GT19UWVBFX1NPRlQgU1ZNX0VWVElOSl9UWVBFX1NPRlRcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNTowMy44MzA5NDg5NDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEzODM3MTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uY2VwdHMsIHB1dHRpbmcgbXlzZWxmIGluIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyBTVk0gRXZlbnQgSW5qZWN0aW9uIGFuZCBFeGl0IEluZm9ybWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBTVk0tcmVsYXRlZCB0ZXJtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBTVk1fRVZUSU5KX1ZBTElEYCwgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AsIGFuZCBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYC4gRnJvbSBhIGh5cGVydmlzb3IncyBwZXJzcGVjdGl2ZSwgdGhlc2UgYXJlIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBndWVzdCdzIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QgYW5kIG1hbmFnaW5nIGludGVycnVwdHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY29uc2lkZXJlZCAqdmFsaWQqIGFib3V0IGV2ZW50IGluamVjdGlvbi4gYFNWTV9FVlRJTkpfVkFMSURgIGlzIHRoZSBmbGFnIEknbSBjb25jZXJuZWQgd2l0aC4gSXQncyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciB0aGF0IHRlbGxzIG1lIHdoZXRoZXIgdGhlIG90aGVyIGZpZWxkcyB3aXRoaW4gdGhlIGV2ZW50IGluamVjdGlvbiBjb250cm9sIHN0cnVjdHVyZSBhcmUgYWN0dWFsbHkgdHJ1c3R3b3J0aHkgYW5kIGNhbiBiZSB1c2VkIHRvIGluamVjdCBhbiBpbnRlcnJ1cHQgaW50byB0aGUgZ3Vlc3QgVk0uIElmIHRoaXMgYml0IGlzIHNldCwgSSBjYW4gY29uZmlkZW50bHkgaW50ZXJwcmV0IHRoZSBkYXRhLiBJZiBub3QsIEkgbmVlZCB0byBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZS4gSSBzdXNwZWN0IHRoZSBtZWFuaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgbmFtZSwgd2hlcmUgaXQgYmVpbmcgJzEnIHNpZ25pZmllcyBpdCdzIHZhbGlkLCBhbmQgJzAnIHNpZ25pZmllcyB0aGUgb3Bwb3NpdGUuXG5cblRoZW4sIHRoZXJlJ3MgYFNWTV9FVlRJTkpfUkVTRVJWRURfQklUU2AuIFRoZXNlIGFyZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gSW4gYW55IGluc3RydWN0aW9uIHNldCBhcmNoaXRlY3R1cmUsIFwicmVzZXJ2ZWRcIiBiaXRzIGFyZSBhIGRvdWJsZS1lZGdlZCBzd29yZC4gT24gb25lIGhhbmQsIHRoZXkgY291bGQgYmUgc2V0IHRvIHplcm8uIE9uIHRoZSBvdGhlciwgdGhleSBjb3VsZCBiZSBzb21ldGhpbmcgdGhhdCBoYXMgYW4gdW5kZWZpbmVkIHZhbHVlLiBUaGV5IGFyZSB0aGVyZSBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSAqYWx3YXlzKiBtYXNrIHRoZW0uIElnbm9yaW5nIHRoZW0gYWx0b2dldGhlciBpcyBhc2tpbmcgZm9yIHRyb3VibGUuIEZ1dHVyZSByZXZpc2lvbnMgb2YgdGhlIGhhcmR3YXJlIG9yIG1pY3JvY29kZSBjb3VsZCByZXB1cnBvc2UgdGhlc2UgYml0cywgYW5kIGlmIG15IGh5cGVydmlzb3IgaXMgbm90IGNhcmVmdWwsIGl0IGNvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIHBvdGVudGlhbGx5IGV2ZW4gY3Jhc2hlcy4gU28sIHdoZW4gZGVhbGluZyB3aXRoIGV2ZW50IGluamVjdGlvbiBkYXRhLCBteSBjb2RlIGhhcyB0byBleHBsaWNpdGx5IGNsZWFyIG9yIG1hc2sgdGhlIHJlc2VydmVkIGJpdHMuIFRoaXMgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBtZWFzdXJlIGFzIHdlbGwgYXMgYSBzdGFiaWxpdHkgb25lLlxuXG5GaW5hbGx5LCBgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEYCBpcyB0aGUgc2FtZSBjb25jZXB0IGFzIGBTVk1fRVZUSU5KX1ZBTElEYCwgYnV0IGl0IGFwcGxpZXMgdG8gKmV4aXQgaW5mb3JtYXRpb24qLiBFc3NlbnRpYWxseSwgd2hlbmV2ZXIgdGhlIGd1ZXN0IFZNIGV4aXRzIHRvIHRoZSBob3N0LCBpdCdzIHByb3ZpZGluZyB0aGlzIGRhdGEuIEkgbmVlZCBhIHNpbWlsYXIgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB3aGF0IHRoZSBWTSBpcyBnaXZpbmcgbWUgYXMgYW4gXCJleGl0IHJlYXNvblwiIG9yIFwiaW50ZXJydXB0IGluZm9ybWF0aW9uXCIgaXMgY29ycmVjdCBvciBub3QuIEknZCBpbWFnaW5lIHRoYXQgaW4gc29tZSBjYXNlcywgdGhlIFZNIHdvdWxkIGV4aXQgZHVlIHRvIGFuIGludGVycnVwdC4gSWYgdGhpcyBiaXQgaXNuJ3Qgc2V0LCBhbnkgZGF0YSBpbiB0aGUgb3RoZXIgZmllbGRzIHJlbGF0ZWQgdG8gdGhpcyBpbnRlcnJ1cHQgYXJlIG1lYW5pbmdsZXNzLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZyBvciBkb2luZyBwZXJmb3JtYW5jZSBhbmFseXNpcywgYXMgd2VsbCBhcyBmb3IgaGFuZGxpbmcgc3BlY2lmaWMgdHlwZXMgb2YgVk0gZXhpdHMuIEknbSBnb2luZyB0byBsb29rIGZvciBleGFtcGxlcyBvZiBob3cgdGhlIFwiZXhpdCByZWFzb25cIiBpcyByZXBvcnRlZC5cblxuSW4gc3VtbWFyeSwgdGhlc2UgdGhyZWUgZWxlbWVudHMgYXJlIGNyaXRpY2FsIGZvciByZWxpYWJsZSBhbmQgc2VjdXJlIGd1ZXN0LWhvc3QgaW50ZXJhY3Rpb24gaW4gYW4gU1ZNIGVudmlyb25tZW50LiBUaGUga2V5IGlzIGNhcmVmdWwgdmFsaWRhdGlvbjogKmFsd2F5cyogY2hlY2sgdGhlIHZhbGlkIGJpdHMsICphbHdheXMqIG1hc2sgdGhlIHJlc2VydmVkIGJpdHMsIGFuZCBjb3JyZWN0bHkgaW50ZXJwcmV0IGFuZCByZWFjdCB0byB0aGUgdmFsaWRpdHkgZmxhZ3MuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGJ1aWxkaW5nIGEgcm9idXN0IGFuZCBzZWN1cmUgaHlwZXJ2aXNvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6MDU6MDguOTY5MzI1NDEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAxMTcwMTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNWTV9FVlRJTkpfVkFMSUR8U1ZNX0VYSVRJTlRJTkZPX1ZBTElEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jPTQxNj1lbnVtIGVzX3Jlc3VsdCB2ZXJpZnlfZXhjZXB0aW9uX2luZm8oc3RydWN0IGdoY2IgKmdoY2IsIHN0cnVjdCBlc19lbV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDI4LVxcdFxcdC8qIENoZWNrIGlmIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGh5cGVydmlzb3IgaXMgc2FuZS4gKi9cXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYzo0Mjk6XFx0XFx0aWYgKChpbmZvIFxcdTAwMjYgU1ZNX0VWVElOSl9WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1zaGFyZWQuYy00MzAtXFx0XFx0ICAgICgodiA9PSBYODZfVFJBUF9HUCkgfHwgKHYgPT0gWDg2X1RSQVBfVUQpKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvdmMtc2hhcmVkLmMtNDMzLVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jOjQzNDpcXHRcXHRcXHRpZiAoaW5mbyBcXHUwMDI2IFNWTV9FVlRJTkpfVkFMSURfRVJSKVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLXNoYXJlZC5jLTQzNS1cXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VmaS5lcnJvcl9jb2RlID0gaW5mbyBcXHUwMDNlXFx1MDAzZSAzMjtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oPTU2ND1zdGF0aWMgaW5saW5lIHZvaWQgX191bnVzZWRfc2l6ZV9jaGVja3Modm9pZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTYzOS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDA6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEIEJJVCgzMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaDo2NDE6I2RlZmluZSBTVk1fRVZUSU5KX1ZBTElEX0VSUiAoMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC02NDItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQzLSNkZWZpbmUgU1ZNX0VWVElOSl9SRVNFUlZFRF9CSVRTIH4oU1ZNX0VWVElOSl9WRUNfTUFTSyB8IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY0NDpcXHRcXHRcXHRcXHQgICBTVk1fRVZUSU5KX1ZBTElEX0VSUiB8IFNWTV9FVlRJTkpfVkFMSUQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjQ1LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtNjUzLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oOjY1NDojZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElEXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6NjU1OiNkZWZpbmUgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUiBTVk1fRVZUSU5KX1ZBTElEX0VSUlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oLTY1Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MzU4PXN0YXRpYyBib29sIG5lc3RlZF9zdm1fZXZlbnRfaW5qX3ZhbGlkX2V4ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0zODEtLypcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM4MjogKiBBY2NvcmRpbmcgdG8gdGhlIEFQTSwgVk1SVU4gZXhpdHMgd2l0aCBTVk1fRVhJVF9FUlIgaWYgU1ZNX0VWVElOSl9WQUxJRCBpc1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMzgzLSAqIHNldCBhbmQ6XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTM4Nz1zdGF0aWMgYm9vbCBuZXN0ZWRfc3ZtX2NoZWNrX2V2ZW50X2luaihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldmVudF9pbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjM5MjpcXHRpZiAoIShldmVudF9pbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTM5My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NjU1PXN0YXRpYyB2b2lkIG5lc3RlZF9zYXZlX3BlbmRpbmdfZXZlbnRfdG9fdm1jYjEyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NjMtXFx0XFx0bnIgPSB2Y3B1LVxcdTAwM2VhcmNoLmV4Y2VwdGlvbi52ZWN0b3I7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NjQ6XFx0XFx0ZXhpdF9pbnRfaW5mbyA9IG5yIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY2Ni1cXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY2NzpcXHRcXHRcXHRleGl0X2ludF9pbmZvIHw9IFNWTV9FVlRJTkpfVkFMSURfRVJSO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjY4LVxcdFxcdFxcdHZtY2IxMi1cXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTY3Mi1cXHR9IGVsc2UgaWYgKHZjcHUtXFx1MDAzZWFyY2gubm1pX2luamVjdGVkKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo2NzM6XFx0XFx0ZXhpdF9pbnRfaW5mbyA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfTk1JO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy02NzYtXFx0XFx0bnIgPSB2Y3B1LVxcdTAwM2VhcmNoLmludGVycnVwdC5ucjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjY3NzpcXHRcXHRleGl0X2ludF9pbmZvID0gbnIgfCBTVk1fRVZUSU5KX1ZBTElEO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtNjc4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04Mjg9c3RhdGljIGlubGluZSBib29sIGlzX2V2dGlual9zb2Z0KHUzMiBldnRpbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzMi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgzMzpcXHRpZiAoIShldnRpbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTg0Mj1zdGF0aWMgYm9vbCBpc19ldnRpbmpfbm1pKHUzMiBldnRpbmopXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjg0NjpcXHRpZiAoIShldnRpbmogXFx1MDAyNiBTVk1fRVZUSU5KX1ZBTElEKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTg0Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4OT1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQwMC1cXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gZXgtXFx1MDAzZXZlY3RvclxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDAxOlxcdFxcdHwgU1ZNX0VWVElOSl9WQUxJRFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDAyOlxcdFxcdHwgKGV4LVxcdTAwM2VoYXNfZXJyb3JfY29kZSA/IFNWTV9FVlRJTkpfVkFMSURfRVJSIDogMClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQwMy1cXHRcXHR8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQ1MD1zdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NjAtXFx0dWludDMyX3QgaWR0X3YgPVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQ2MTpcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0NjItXFx0Ym9vbCBoYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNjgzPXN0YXRpYyB2b2lkIHN2bV9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2OTItXFx0KmludHJfaW5mbyA9IGNvbnRyb2wtXFx1MDAzZWV4aXRfaW50X2luZm87XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjkzOlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM2OTQ6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjk1LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXhpdF9pbnRfaW5mb19lcnI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM3MDA9c3RhdGljIHZvaWQgc3ZtX2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3MDYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzA3OlxcdGlmICgoKmludHJfaW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM3MDg6XFx0ICAgICgqaW50cl9pbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUikpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNzA5LVxcdFxcdCplcnJvcl9jb2RlID0gY29udHJvbC1cXHUwMDNlZXZlbnRfaW5qX2VycjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9Mzc4OD1zdGF0aWMgdm9pZCBzdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTEtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNzkyOlxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM3OTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM4NDI9c3RhdGljIHZvaWQgc3ZtX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHJlaW5qZWN0ZWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM4NzYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozODc3OlxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBpbnRyLVxcdTAwM2VuciB8IFNWTV9FVlRJTkpfVkFMSUQgfCB0eXBlO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzg3OC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQzMzg9c3RhdGljIHZvaWQgc3ZtX2NvbXBsZXRlX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzY0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM2NTpcXHRpZiAoIShleGl0aW50aW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00MzY2LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM4OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQzOTA6XFx0XFx0aWYgKGV4aXRpbnRpbmZvIFxcdTAwMjYgU1ZNX0VYSVRJTlRJTkZPX1ZBTElEX0VSUilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQzOTEtXFx0XFx0XFx0ZXJyb3JfY29kZSA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2ludF9pbmZvX2VycjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDM5My1cXHRcXHRrdm1fcmVxdWV1ZV9leGNlcHRpb24odmNwdSwgdmVjdG9yLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDM5NDpcXHRcXHRcXHRcXHQgICAgICBleGl0aW50aW5mbyBcXHUwMDI2IFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00Mzk1LVxcdFxcdFxcdFxcdCAgICAgIGVycm9yX2NvZGUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3RvcilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxMi17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTM6XFx0dTY0IGRhdGEgPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUIHwgdmVjdG9yO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oPTIzMz1zdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5NzojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgKDEgXFx1MDAzY1xcdTAwM2MgMzEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oOjI5ODojZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIFxcdTAwM2NcXHUwMDNjIDExKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaC0yOTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc3ZtLmgtMzA3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDg6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSUQgU1ZNX0VWVElOSl9WQUxJRFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zdm0uaDozMDk6I2RlZmluZSBTVk1fRVhJVElOVElORk9fVkFMSURfRVJSIFNWTV9FVlRJTkpfVkFMSURfRVJSXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3N2bS5oLTMxMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM9Nzk9c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB1NjQgaXNfbm1pLCB1NjQgaWR0X2FsdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtOTItXFx0aWYgKGlzX25taSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6OTM6XFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5ldmVudF9pbmogPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX05NSTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk0LVxcdH0gZWxzZSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdm1fbmVzdGVkX3NvZnRfaW5qZWN0X3Rlc3QuYzo5NTpcXHRcXHR2bWNiLVxcdTAwM2Vjb250cm9sLmV2ZW50X2luaiA9IElOVF9OUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfU09GVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTk2LVxcdFxcdC8qIFRoZSByZXR1cm4gYWRkcmVzcyBwdXNoZWQgb24gc3RhY2sgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmMtMTI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3ZtX25lc3RlZF9zb2Z0X2luamVjdF90ZXN0LmM6MTI2OlxcdHZtY2ItXFx1MDAzZWNvbnRyb2wuZXZlbnRfaW5qID0gQlBfVkVDVE9SIHwgU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9FWEVQVDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N2bV9uZXN0ZWRfc29mdF9pbmplY3RfdGVzdC5jLTEyNy1cXHQvKiBUaGUgcmV0dXJuIGFkZHJlc3MgcHVzaGVkIG9uIHN0YWNrLCBza2lwIG92ZXIgVUQyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjA1OjExLjc3MDUwMTQzMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDM3NDM5Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQml0bWFzayBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSB3aGVyZSBgU1ZNX0VWVElOSl9WQUxJRGAgd2FzIGRlZmluZWQgYXMgYCgxIFx1MDAzY1x1MDAzYyAzMSlgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCdzIGEgcmVkIGZsYWcuIEluIDMyLWJpdCBzaWduZWQgaW50ZWdlciBhcml0aG1ldGljLCB0aGF0J3MgdW5kZWZpbmVkIGJlaGF2aW9yLCBsaWtlbHkgbGVhZGluZyB0byBhIG5lZ2F0aXZlIGludGVnZXIgb3IgYDB4ODAwMDAwMDBgIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIncyBpbnRlcnByZXRhdGlvbiDigJMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LiBUaGUgZml4IOKAkyBjaGFuZ2luZyBpdCB0byBgQklUKDMxKWAgb3IgYCgxVUwgXHUwMDNjXHUwMDNjIDMxKWAg4oCTIGlzIHNwb3Qgb24uIFRoYXQgY2xlYXJseSBkZWZpbmVzIGl0IGFzIGFuIHVuc2lnbmVkIGxvbmcgYml0bWFzaywgd2hpY2ggaXMgZmFyIGNsZWFuZXIgYW5kIG1vcmUgcHJlZGljdGFibGUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcy4gTGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgY2hlY2tsaXN0OiBObyBuZXcgYWxsb2NhdGlvbnM/IE5vcGUuIE5vIG1vZGlmaWVkIGJ1ZmZlcnM/IE5vLiBObyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW50cm9kdWNlZD8gTm8sIHRoYXQncyBub3QgdGhlIGNhc2UuIE5vIHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcz8gQWxzbyBuby4gQW5kIGNyaXRpY2FsbHksIG5vIGJyYW5jaGluZyBsb2dpYyB0aGF0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgYSBodWdlIHJlbGllZi5cblxuVGhpcyBpcyBlc3NlbnRpYWxseSBhIG1hY3JvIGNsZWFudXAuIEl0J3MgYWJvdXQgZml4aW5nIGEgYml0bWFzayByZXByZXNlbnRhdGlvbiB0aGF0IHdhcyBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgY29tcGlsZXIgd2FybmluZ3MuIFRoZSBLQVNBTi9VQlNBTiB0b29scyBhcmUgYWxyZWFkeSBpbiBwbGFjZSB0byBjYXRjaCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3JzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgaW4gdGhhdCBhcmVhLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgZXZlcnl0aGluZyBhbGlnbnM6XG5cbiogICBgTmVlZHNLTVNBTjogZmFsc2VgXG4qICAgYEtNU0FOUmVhc29uaW5nOiBEZXRhaWxlZCBleHBsYW5hdGlvbiBjb250cmFzdGluZyBLTVNBTiB2cyBLQVNBTi5gXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI0LCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjowNToxNS44MDc5NDQ2ODVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFxcdTAwM2NcXHUwMDNjIDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGF2b2lkcyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgZW5zdXJlcyB0aGUgY29uc3RhbnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBiaXRtYXNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgcGFzc2VkIHRvIHVzZXJzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgbWVtb3J5IGRpc2Nsb3N1cmUgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBTVk1fRVZUSU5KX1ZBTElEYCBtYWNybyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGZyb20gYCgxIFxcdTAwM2NcXHUwMDNjIDMxKWAgdG8gYEJJVCgzMSlgLiBUaGlzIGF2b2lkcyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgZW5zdXJlcyB0aGUgY29uc3RhbnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBiaXRtYXNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBwYWRkaW5nLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgcGFzc2VkIHRvIHVzZXJzcGFjZS4gQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgbWVtb3J5IGRpc2Nsb3N1cmUgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[1] Phase: Succeeded StartedAt: 2026-09-08 06:05:27 +0000 UTC FinishedAt: 2026-09-08 06:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 06:05:27 +0000 UTC FinishedAt: 2026-09-08 06:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2] Phase: Succeeded StartedAt: 2026-09-08 06:05:27 +0000 UTC FinishedAt: 2026-09-08 06:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 06:05:27 +0000 UTC FinishedAt: 2026-09-08 06:44:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 06:05:27 +0000 UTC FinishedAt: 2026-09-08 06:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 06:05:27 +0000 UTC FinishedAt: 2026-09-08 06:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowcfnsx/series-workflowcfnsx-convert-artifact-1755579816/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 06:05:37 +0000 UTC FinishedAt: 2026-09-08 06:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 06:05:37 +0000 UTC FinishedAt: 2026-09-08 06:22:01 +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:*b255a782-7980-4e36-802b-20222d114d49,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-workflowcfnsx/series-workflowcfnsx-convert-artifact-1755579816/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": "423f30d3-ad80-46f5-9390-9fca9a89221e", "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-workflowcfnsx/series-workflowcfnsx-build-action-3582229534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 06:05:37 +0000 UTC FinishedAt: 2026-09-08 06:21:51 +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:*b255a782-7980-4e36-802b-20222d114d49,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-workflowcfnsx/series-workflowcfnsx-convert-artifact-1755579816/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": "423f30d3-ad80-46f5-9390-9fca9a89221e", "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-workflowcfnsx/series-workflowcfnsx-build-action-3582229534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 06:22:01 +0000 UTC FinishedAt: 2026-09-08 06:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 06:22:01 +0000 UTC FinishedAt: 2026-09-08 06:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 06:22:01 +0000 UTC FinishedAt: 2026-09-08 06:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 06:22:01 +0000 UTC FinishedAt: 2026-09-08 06:22:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowcfnsx/series-workflowcfnsx-convert-artifact-2774011023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 06:22:11 +0000 UTC FinishedAt: 2026-09-08 06:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 06:22:11 +0000 UTC FinishedAt: 2026-09-08 06:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*423f30d3-ad80-46f5-9390-9fca9a89221e,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-workflowcfnsx/series-workflowcfnsx-build-action-3582229534/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-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 06:24:19 +0000 UTC FinishedAt: 2026-09-08 06:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 06:24:19 +0000 UTC FinishedAt: 2026-09-08 06:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 06:24:19 +0000 UTC FinishedAt: 2026-09-08 06:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 06:24:19 +0000 UTC FinishedAt: 2026-09-08 06:40:54 +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:*b255a782-7980-4e36-802b-20222d114d49,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-workflowcfnsx/series-workflowcfnsx-convert-artifact-2774011023/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": "44b0d31e-2e51-48a4-84e4-95dcd3e70885", "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-workflowcfnsx/series-workflowcfnsx-build-action-961605027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 06:24:19 +0000 UTC FinishedAt: 2026-09-08 06:40:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b255a782-7980-4e36-802b-20222d114d49,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-workflowcfnsx/series-workflowcfnsx-convert-artifact-2774011023/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": "44b0d31e-2e51-48a4-84e4-95dcd3e70885", "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-workflowcfnsx/series-workflowcfnsx-build-action-961605027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 06:40:54 +0000 UTC FinishedAt: 2026-09-08 06:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 06:40:54 +0000 UTC FinishedAt: 2026-09-08 06:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 06:40:54 +0000 UTC FinishedAt: 2026-09-08 06:42:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 06:40:54 +0000 UTC FinishedAt: 2026-09-08 06:42:44 +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:*44b0d31e-2e51-48a4-84e4-95dcd3e70885,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-workflowcfnsx/series-workflowcfnsx-build-action-961605027/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-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:44:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"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:*423f30d3-ad80-46f5-9390-9fca9a89221e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*44b0d31e-2e51-48a4-84e4-95dcd3e70885,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-workflowcfnsx/series-workflowcfnsx-build-action-3582229534/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-workflowcfnsx/series-workflowcfnsx-build-action-961605027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:42:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"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-workflowcfnsx/series-workflowcfnsx-convert-artifact-3553241416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:42:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:42:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 06:42:53 +0000 UTC FinishedAt: 2026-09-08 06:42:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 06:43:03 +0000 UTC FinishedAt: 2026-09-08 06:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcfnsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_inject_exception","svm_inject_nmi","svm_inject_irq","svm_complete_interrupts","nested_svm_check_event_inj","nested_save_pending_event_to_vmcb12","__nested_copy_vmcb_control_to_cache"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"cd5d63ad-7f96-4335-bb06-aec3541a1bb0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 06:43:03 +0000 UTC FinishedAt: 2026-09-08 06:44:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*423f30d3-ad80-46f5-9390-9fca9a89221e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*44b0d31e-2e51-48a4-84e4-95dcd3e70885,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-workflowcfnsx/series-workflowcfnsx-build-action-3582229534/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-workflowcfnsx/series-workflowcfnsx-build-action-961605027/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-workflowcfnsx/series-workflowcfnsx-convert-artifact-3553241416/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,}