Name: series-workflowpn429 Phase: Succeeded StartedAt: 2026-09-05 05:29:58 +0000 UTC FinishedAt: 2026-09-05 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[0] Phase: Succeeded StartedAt: 2026-09-05 05:29:58 +0000 UTC FinishedAt: 2026-09-05 05:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 05:29:58 +0000 UTC FinishedAt: 2026-09-05 05:32:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e044668419b9c444282bd09521f7ea07edbc10b1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e044668419b9c444282bd09521f7ea07edbc10b1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "series_id": "5a8425bf-fb29-49c2-9238-5aa490ba37da" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_ld_abs", "check_max_stack_depth_subprog", "in_rbtree_lock_required_cb", "bpf_btf_find_by_name_kind", "bpf_get_stack_sleepable", "bpf_get_task_stack_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfYWJzJiMzNDssCiAgICAmIzM0O2NoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgICAmIzM0O2luX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiJiMzNDssCiAgICAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBoZWxwZXIgbWV0YWRhdGE6XG4xLiBJdCBmbGFncyBoZWxwZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gKSB3aXRoIGAubWlnaHRfc2xlZXAgPSB0cnVlYCB0byBwcmV2ZW50IHRoZWlyIGludm9jYXRpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHRzLlxuMi4gSXQgYWRkcyBCUEYgdmVyaWZpZXIgY2hlY2tzIChgY2hlY2tfbGRfYWJzYCBhbmQgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCkgdG8gZGlzYWxsb3cgYEJQRl9MRF9bQUJTfElORF1gIHdpdGhpbiBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHRoZWlyIHN1YnByb2dyYW1zLlxuMy4gSXQgdXBkYXRlcyBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgIHRvIGl0ZXJhdGUgYWNyb3NzIHN0YWNrIGZyYW1lcyB0byBwcm9wZXJseSB0cmFjayByYnRyZWUgY2FsbGJhY2sgY29udGV4dC5cbjQuIEl0IGFkZHMgc2VsZnRlc3RzIGZvciB0aGVzZSB2ZXJpZmllciBzY2VuYXJpb3MuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSwgaW5pdGlhbGl6ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRhcmllcyB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGFuZCBzbGVlcC1pbi1hdG9taWMgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ODY1MGM1ZTAzMmM0YzExODZhOGFlNGNlOThhODMzZWJkZGQ0OGYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTozMToxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNWQ5M2ZkODJlNzY0NS4uOWYzM2U5NWQ1NzQxMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC04NzQ5LDYgJiM0Mzs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnRcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiYjNDM7XHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCBhODM5MDQxZTBkMDA4Li5kMDlkNGMzZmU1NDdjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC04NzUsNiAmIzQzOzg3NSw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19zbGVlcGFibGUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHZvaWQgKiwgYnVmLCB1MzIsIHNpXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSxcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuJiM0MztcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuQEAgLTkyOCw2ICYjNDM7OTI5LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWZcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiYjNDM7XHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAzMmQzMWZhNjcwMzZiLi4yY2I4ZmJhNjhjZDE1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC01MzAyLDYgJiM0Mzs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbiBcdGlmICghcHJpdl9zdGFja19zdXBwb3J0ZWQpXG4gXHRcdHN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLO1xuIHByb2Nlc3NfZnVuYzpcbiYjNDM7XHRpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHtcbiYjNDM7XHRcdGZvciAodG1wID0gaWR4OyB0bXAgXHUwMDNlPSAwOyB0bXAgPSBkaW5mb1t0bXBdLmNhbGxlcikge1xuJiM0MztcdFx0XHRpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlblxuIFx0ICogYnBmMmJwZiBjYWxscyBnZXQgY29tYmluZWQgd2l0aCB0YWlsY2FsbHMuIExpbWl0IHRoZSBjYWxsZXImIzM5O3Mgc3RhY2tcbiBcdCAqIGRlcHRoIGZvciBzdWNoIGNhc2UgZG93biB0byAyNTYgc28gdGhhdCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpb1xuQEAgLTEwMjM1LDkgJiM0MzsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRmcmFtZSA/IHN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lIC0gMV0gOiBOVUxMKTtcbiB9XG4gXG4tLyogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhIHJidHJlZSBoZWxwZXIgdGhhdCBtdXN0XG4tICogYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkPyBJZiBzbywgbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCB1bnJlbGVhc2VkXG4tICogbG9ja1xuJiM0MzsvKlxuJiM0MzsgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3RcbiYjNDM7ICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJiMzOTtzIHN1YnByb2dzPyBJZiBzbyxcbiYjNDM7ICogbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCBhbiB1bnJlbGVhc2VkIGxvY2suXG4gICovXG4gc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG5AQCAtMTAyNDUsMTcgJiM0MzsxMDI1NSwxOSBAQCBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWU7XG4gXHRpbnQga2Z1bmNfYnRmX2lkO1xuJiM0MztcdHUzMiBmcmFtZTtcbiBcbi1cdGlmICghc3RhdGUtXHUwMDNlY3VyZnJhbWUpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGNhbGxlZSA9IHN0YXRlLVx1MDAzZWZyYW1lW3N0YXRlLVx1MDAzZWN1cmZyYW1lXTtcbiYjNDM7XHRmb3IgKGZyYW1lID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGZyYW1lOyBmcmFtZS0tKSB7XG4mIzQzO1x0XHRjYWxsZWUgPSBzdGF0ZS1cdTAwM2VmcmFtZVtmcmFtZV07XG4mIzQzO1x0XHRpZiAoIWNhbGxlZS1cdTAwM2Vpbl9jYWxsYmFja19mbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoIWNhbGxlZS1cdTAwM2Vpbl9jYWxsYmFja19mbilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0a2Z1bmNfYnRmX2lkID0gaW5zbltjYWxsZWUtXHUwMDNlY2FsbHNpdGVdLmltbTtcbiYjNDM7XHRcdGlmIChpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuYyhrZnVuY19idGZfaWQpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4tXHRrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS1cdTAwM2VjYWxsc2l0ZV0uaW1tO1xuLVx0cmV0dXJuIGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuQEAgLTE3MTc5LDYgJiM0MzsxNzE5MSw3IEBAIHN0YXRpYyBib29sIG1heV9hY2Nlc3Nfc2tiKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuICAqL1xuIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuIFx0c3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182O1xuIFx0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG5AQCAtMTcxODksNiAmIzQzOzE3MjAyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0Zm9yIChpID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGk7IGktLSkge1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWZyYW1lW2ldLVx1MDAzZWluX2NhbGxiYWNrX2ZuKSB7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghZW52LVx1MDAzZW9wcy1cdTAwM2VnZW5fbGRfYWJzKSB7XG4gXHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2dlbl9sZF9hYnMgaXMgbnVsbFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODFjNDU5NDM1NjgwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5AQCAtMTE1LDYgJiM0MzsxMTUsNTggQEAgaW50IHByZWVtcHRfc2xlZXBhYmxlX2hlbHBlcih2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dXByb2JlLnNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtzbGVlcGFibGUgaGVscGVyIGJwZl9nZXRfc3RhY2sjXCYjMzQ7KVxuJiM0MztpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuJiM0MztcbiYjNDM7XHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1x0YnBmX2dldF9zdGFjayhjdHgsIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuJiM0MztcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuJiM0MztcdGJwZl9wcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3Vwcm9iZS5zXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjXCYjMzQ7KVxuJiM0MztpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3Rhc2tfc3RhY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4mIzQzO1xuJiM0MztcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1x0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuJiM0MztcdFx0XHQgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7XG4mIzQzO1x0YnBmX3ByZWVtcHRfZW5hYmxlKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dXByb2JlLnNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbiYjNDM7XG4mIzQzO1x0YnBmX2dldF9zdGFjayhjdHgsIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuJiM0MztcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3Vwcm9iZS5zXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IHNsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiYjNDM7XG4mIzQzO1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdGJwZl9nZXRfdGFza19zdGFjayh0YXNrLCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbiYjNDM7XHRcdFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/ZmVudHJ5LnMvXCYjMzQ7IFNZU19QUkVGSVggXCYjMzQ7c3lzX2dldHBnaWRcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2tlcm5lbCBmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIgaXMgc2xlZXBhYmxlIHdpdGhpbiBub24tcHJlZW1wdGlibGUgcmVnaW9uXCYjMzQ7KVxuIGludCBwcmVlbXB0X3NsZWVwYWJsZV9rZnVuYyh2b2lkICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuQEAgLTI3Miw2ICYjNDM7MjcyLDQ3IEBAIHN0YXRpYyBib29sIGxlc3NfX2JhZF9yZXNfc3Bpbl91bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z2xvY2spO1xuJiM0MztcdGJwZl9zcGluX2xvY2soXHUwMDI2Z2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyYnRyZWVfY2JfdW5sb2NrX3JlbG9jaygpO1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbGVzc19fYmFkX3N1YnByb2dfdW5sb2NrKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9hO1xuJiM0MztcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcbiYjNDM7XG4mIzQzO1x0bm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuJiM0MztcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbiYjNDM7XHRyYnRyZWVfY2JfbmVzdGVkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2Jfbm9vcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBsZXNzX19zdWJwcm9nX2FsbG93ZWQoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7XG4mIzQzO1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iO1xuJiM0MztcbiYjNDM7XHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XG4mIzQzO1x0bm9kZV9iID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuJiM0MztcdHJidHJlZV9jYl9ub29wKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlX2EtXHUwMDNla2V5IFx1MDAzYyBub2RlX2ItXHUwMDNla2V5O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiBsb25nIGFkZF93aXRoX2NiKGJvb2wgKGNiKShzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikpXG4ge1xuQEAgLTMzMCw0ICYjNDM7MzcxLDE4IEBAIGxvbmcgcmJ0cmVlX2FwaV9hZGRfYmFkX2NiX3Jlc19zcGluX3VubG9jayh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW4mIzM5O3Qgc3Bpbl97bG9jayx1bmxvY2t9IGluIHJidHJlZSBjYlwmIzM0OylcbiYjNDM7bG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0Mztsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWRkX3dpdGhfY2IobGVzc19fc3VicHJvZ19hbGxvd2VkKTtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5pbmRleCBhN2M4NGQzZmE0YzczLi5lMDkyNjc2N2JiZDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuQEAgLTEwOCw2ICYjNDM7MTA4LDMwIEBAIGludCB0aW1lcl9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdGltZXJfYnRmX2ZpbmRfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgc3RydWN0IGJwZl90aW1lciAqdGltZXIpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5hbWVbXSA9IFwmIzM0O3Rhc2tfc3RydWN0XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtzbGVlcGFibGUgaGVscGVyIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQje3tbMC05XSYjNDM7fX0gaW4gbm9uLXNsZWVwYWJsZSBwcm9nXCYjMzQ7KVxuJiM0MztpbnQgdGltZXJfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGltZXJfZWxlbSAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfdGltZXJfaW5pdChcdTAwMjZ2YWwtXHUwMDNldCwgXHUwMDI2dGltZXJfbWFwLCAwKTtcbiYjNDM7XHRicGZfdGltZXJfc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V0LCB0aW1lcl9idGZfZmluZF9jYik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19zdWNjZXNzXG4gaW50IHN5c2NhbGxfc3lzX2JwZl9wcm9nKHZvaWQgKmN0eClcbkBAIC0xMjYsNiAmIzQzOzE1MCwxNiBAQCBpbnQgc3lzY2FsbF9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IHN5c2NhbGxfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5hbWVbXSA9IFwmIzM0O3Rhc2tfc3RydWN0XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBXb3JrcXVldWUgdGVzdHMgKi9cbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG5pbmRleCAwOWU4MWI5OWVlY2I0Li4zMjk4OWY5ODFmYjY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbkBAIC0xOTQsNiAmIzQzOzE5NCwxMDIgQEAgX19uYWtlZCB2b2lkIGxkX2luZF9zdWJwcm9nX2JvdGhfcGF0aHNfc2FmZSh2b2lkKVxuIFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuJiM0MztzdGF0aWMgaW50IGxkX2Fic19jYWxsYmFjayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyNiA9ICoodTY0ICopKHIyICYjNDM7IDApO1wmIzM0O1xuJiM0MztcdFwmIzM0Oy44Ynl0ZSAlW2xkX2Fic107XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0OlxuJiM0MztcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7bGRfYWJzOiByZWplY3QgaW4gY2FsbGJhY2tcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXCYjMzQ7KVxuJiM0MztpbnQgbGRfYWJzX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRicGZfbG9vcCgxLCBsZF9hYnNfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2tfc3VicHJvZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyNiA9IHIxO1wmIzM0O1xuJiM0MztcdFwmIzM0O3I3ID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuOGJ5dGUgJVtsZF9pbmRdO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDpcbiYjNDM7XHQ6IF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjEgPSAqKHU2NCAqKShyMiAmIzQzOyAwKTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtjYWxsIGxkX2luZF9jYWxsYmFja19zdWJwcm9nO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2xkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIHN1YnByb2dcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXCYjMzQ7KVxuJiM0MztpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2dfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGJwZl9sb29wKDEsIGxkX2luZF9jYWxsYmFjaywgXHUwMDI2c2tiLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgaW50IGxkX2luZF9nbG9iYWxfc3RhdGljKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjYgPSAlW3NrYl07XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjcgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0Oy44Ynl0ZSAlW2xkX2luZF07XCYjMzQ7XG4mIzQzO1x0OlxuJiM0MztcdDogW3NrYl0gXCYjMzQ7clwmIzM0Oyhza2IpLFxuJiM0MztcdCAgX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfY29tbW9uLCBcJiMzNDtyNlwmIzM0OywgXCYjMzQ7cjdcJiMzNDspO1xuJiM0MztcdHJldHVybiBza2ItXHUwMDNlbWFyaztcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19ub2lubGluZSBpbnQgbGRfaW5kX2dsb2JhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbGRfaW5kX2dsb2JhbF9zdGF0aWMoc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrKF9fdTMyIGluZGV4LCBzdHJ1Y3QgX19za19idWZmICoqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0bGRfaW5kX2dsb2JhbCgqY3R4KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBnbG9iYWwgc3VicHJvZ1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcJiMzNDspXG4mIzQzO2ludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRicGZfbG9vcCgxLCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrLCBcdTAwMjZza2IsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2xkX2luZDogYWxsb3cgaW4gbm9uLWNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGxkX2luZF9nbG9iYWxfc3VicHJvZ19vayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbGRfaW5kX2dsb2JhbChza2IpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbGRfe2FicyxpbmR9IGluIHN1YnByb2dzIHJlcXVpcmUgc2NhbGFyIChpbnQpIHJldHVybiB0eXBlIGluIEJURi5cbiAgKiBBIHRlc3Qgd2l0aCB2b2lkIHJldHVybiBtdXN0IGJlIHJlamVjdGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfYWJzJiMzNDssCiAgICAmIzM0O2NoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgICAmIzM0O2luX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiJiMzNDssCiAgICAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzg2NTBjNWUwMzJjNGMxMTg2YThhZTRjZTk4YTgzM2ViZGRkNDhmMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDU6MzE6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA1ZDkzZmQ4MmU3NjQ1Li45ZjMzZTk1ZDU3NDEwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTg3NDksNiAmIzQzOzg3NDksNyBAQCBCUEZfQ0FMTF80KGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsIGNoYXIgKiwgbmFtZSwgaW50LCBuYW1lX3N6LCB1MzIsIGtpbmQsIGludAogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7CiAJLmZ1bmMJCT0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwKIAkuZ3BsX29ubHkJPSBmYWxzZSwKJiM0MzsJLm1pZ2h0X3NsZWVwCT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAogCS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggYTgzOTA0MWUwZDAwOC4uZDA5ZDRjM2ZlNTQ3YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwpAQCAtODc1LDYgJiM0Mzs4NzUsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaQogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0gewogCS5mdW5jCQk9IGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLAogCS5ncGxfb25seQk9IHRydWUsCiYjNDM7CS5taWdodF9zbGVlcAk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCkBAIC05MjgsNiAmIzQzOzkyOSw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHsKIAkuZnVuYwkJPSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLAogCS5ncGxfb25seQk9IGZhbHNlLAomIzQzOwkubWlnaHRfc2xlZXAJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2J0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDMyZDMxZmE2NzAzNmIuLjJjYjhmYmE2OGNkMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTUzMDIsNiAmIzQzOzUzMDIsMTUgQEAgc3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LAogCWlmICghcHJpdl9zdGFja19zdXBwb3J0ZWQpCiAJCXN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLOwogcHJvY2Vzc19mdW5jOgomIzQzOwlpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHsKJiM0MzsJCWZvciAodG1wID0gaWR4OyB0bXAgJmd0Oz0gMDsgdG1wID0gZGluZm9bdG1wXS5jYWxsZXIpIHsKJiM0MzsJCQlpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyogcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBzdGFjayBvdmVyZmxvdyB0aGF0IG1pZ2h0IGhhcHBlbiB3aGVuCiAJICogYnBmMmJwZiBjYWxscyBnZXQgY29tYmluZWQgd2l0aCB0YWlsY2FsbHMuIExpbWl0IHRoZSBjYWxsZXImIzM5O3Mgc3RhY2sKIAkgKiBkZXB0aCBmb3Igc3VjaCBjYXNlIGRvd24gdG8gMjU2IHNvIHRoYXQgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8KQEAgLTEwMjM1LDkgJiM0MzsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQlmcmFtZSA/IHN0YXRlLSZndDtmcmFtZVtmcmFtZSAtIDFdIDogTlVMTCk7CiB9CiAKLS8qIEFyZSB3ZSBjdXJyZW50bHkgdmVyaWZ5aW5nIHRoZSBjYWxsYmFjayBmb3IgYSByYnRyZWUgaGVscGVyIHRoYXQgbXVzdAotICogYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkPyBJZiBzbywgbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCB1bnJlbGVhc2VkCi0gKiBsb2NrCiYjNDM7LyoKJiM0MzsgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3QKJiM0MzsgKiBiZSBjYWxsZWQgd2l0aCBhIGxvY2sgaGVsZCwgb3Igb25lIG9mIHRoYXQgY2FsbGJhY2smIzM5O3Mgc3VicHJvZ3M/IElmIHNvLAomIzQzOyAqIG5vIG5lZWQgdG8gY29tcGxhaW4gYWJvdXQgYW4gdW5yZWxlYXNlZCBsb2NrLgogICovCiBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewpAQCAtMTAyNDUsMTcgJiM0MzsxMDI1NSwxOSBAQCBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpOwogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlOwogCWludCBrZnVuY19idGZfaWQ7CiYjNDM7CXUzMiBmcmFtZTsKIAotCWlmICghc3RhdGUtJmd0O2N1cmZyYW1lKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljYWxsZWUgPSBzdGF0ZS0mZ3Q7ZnJhbWVbc3RhdGUtJmd0O2N1cmZyYW1lXTsKJiM0MzsJZm9yIChmcmFtZSA9IHN0YXRlLSZndDtjdXJmcmFtZTsgZnJhbWU7IGZyYW1lLS0pIHsKJiM0MzsJCWNhbGxlZSA9IHN0YXRlLSZndDtmcmFtZVtmcmFtZV07CiYjNDM7CQlpZiAoIWNhbGxlZS0mZ3Q7aW5fY2FsbGJhY2tfZm4pCiYjNDM7CQkJY29udGludWU7CiAKLQlpZiAoIWNhbGxlZS0mZ3Q7aW5fY2FsbGJhY2tfZm4pCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLSZndDtjYWxsc2l0ZV0uaW1tOwomIzQzOwkJaWYgKGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KIAotCWtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLSZndDtjYWxsc2l0ZV0uaW1tOwotCXJldHVybiBpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuYyhrZnVuY19idGZfaWQpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCkBAIC0xNzE3OSw2ICYjNDM7MTcxOTEsNyBAQCBzdGF0aWMgYm9vbCBtYXlfYWNjZXNzX3NrYihlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSkKICAqLwogc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogewomIzQzOwlzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwogCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTsKIAlzdGF0aWMgY29uc3QgaW50IGN0eF9yZWcgPSBCUEZfUkVHXzY7CiAJdTggbW9kZSA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpOwpAQCAtMTcxODksNiAmIzQzOzE3MjAyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWZvciAoaSA9IHN0YXRlLSZndDtjdXJmcmFtZTsgaTsgaS0tKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2ZyYW1lW2ldLSZndDtpbl9jYWxsYmFja19mbikgewomIzQzOwkJCXZlcmJvc2UoZW52LCAmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmICghZW52LSZndDtvcHMtJmd0O2dlbl9sZF9hYnMpIHsKIAkJdmVyaWZpZXJfYnVnKGVudiwgJiMzNDtnZW5fbGRfYWJzIGlzIG51bGwmIzM0Oyk7CiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jCmluZGV4IDZkNWZjZTdlNmZmYzkuLjgxYzQ1OTQzNTY4MGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmMKQEAgLTExNSw2ICYjNDM7MTE1LDU4IEBAIGludCBwcmVlbXB0X3NsZWVwYWJsZV9oZWxwZXIodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3N0YWNrIyYjMzQ7KQomIzQzO2ludCBwcmVlbXB0X3NsZWVwYWJsZV9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CiYjNDM7CWJwZl9wcmVlbXB0X2Rpc2FibGUoKTsKJiM0MzsJYnBmX2dldF9zdGFjayhjdHgsICZhbXA7c3RhY2ssIHNpemVvZihzdGFjayksCiYjNDM7CQkgICAgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CWJwZl9wcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjJiMzNDspCiYjNDM7aW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKJiM0MzsKJiM0MzsJdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlicGZfcHJlZW1wdF9kaXNhYmxlKCk7CiYjNDM7CWJwZl9nZXRfdGFza19zdGFjayh0YXNrLCAmYW1wO3N0YWNrLCBzaXplb2Yoc3RhY2spLAomIzQzOwkJCSAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTsKJiM0MzsJYnBmX3ByZWVtcHRfZW5hYmxlKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dXByb2JlLnMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjazsKJiM0MzsKJiM0MzsJYnBmX2dldF9zdGFjayhjdHgsICZhbXA7c3RhY2ssIHNpemVvZihzdGFjayksCiYjNDM7CQkgICAgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dXByb2JlLnMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKJiM0MzsKJiM0MzsJdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlicGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgJmFtcDtzdGFjaywgc2l6ZW9mKHN0YWNrKSwKJiM0MzsJCQkgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2tlcm5lbCBmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIgaXMgc2xlZXBhYmxlIHdpdGhpbiBub24tcHJlZW1wdGlibGUgcmVnaW9uJiMzNDspCiBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYwppbmRleCA4MDM0MTlhNDdjNjI2Li40NTA0NjA4MTk2YWJkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYwpAQCAtMjcyLDYgJiM0MzsyNzIsNDcgQEAgc3RhdGljIGJvb2wgbGVzc19fYmFkX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmIKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtnbG9jayk7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtnbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX25lc3RlZF91bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXJidHJlZV9jYl91bmxvY2tfcmVsb2NrKCk7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTsKJiM0MzsJc3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iOwomIzQzOwomIzQzOwlub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CW5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTsKJiM0MzsJcmJ0cmVlX2NiX25lc3RlZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5vZGVfYS0mZ3Q7a2V5ICZsdDsgbm9kZV9iLSZndDtrZXk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX25vb3Aodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGxlc3NfX3N1YnByb2dfYWxsb3dlZChzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTsKJiM0MzsJc3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iOwomIzQzOwomIzQzOwlub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CW5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTsKJiM0MzsJcmJ0cmVlX2NiX25vb3AoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5vZGVfYS0mZ3Q7a2V5ICZsdDsgbm9kZV9iLSZndDtrZXk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZQogbG9uZyBhZGRfd2l0aF9jYihib29sIChjYikoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpKQogewpAQCAtMzMwLDQgJiM0MzszNzEsMTggQEAgbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2JfcmVzX3NwaW5fdW5sb2NrKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2NhbiYjMzk7dCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiJiMzNDspCiYjNDM7bG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmJ0cmVlX2FwaV9hZGRfY2Jfc3VicHJvZ19hbGxvd2VkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhZGRfd2l0aF9jYihsZXNzX19zdWJwcm9nX2FsbG93ZWQpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCmluZGV4IGE3Yzg0ZDNmYTRjNzMuLmUwOTI2NzY3YmJkM2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwpAQCAtMTA4LDYgJiM0MzsxMDgsMzAgQEAgaW50IHRpbWVyX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdGltZXJfYnRmX2ZpbmRfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgc3RydWN0IGJwZl90aW1lciAqdGltZXIpCiYjNDM7ewomIzQzOwljaGFyIG5hbWVbXSA9ICYjMzQ7dGFza19zdHJ1Y3QmIzM0OzsKJiM0MzsKJiM0MzsJYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZChuYW1lLCBzaXplb2YobmFtZSksIEJURl9LSU5EX1NUUlVDVCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kI3t7WzAtOV0mIzQzO319IGluIG5vbi1zbGVlcGFibGUgcHJvZyYjMzQ7KQomIzQzO2ludCB0aW1lcl9idGZfZmluZF9wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aW1lcl9lbGVtICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGltZXJfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl90aW1lcl9pbml0KCZhbXA7dmFsLSZndDt0LCAmYW1wO3RpbWVyX21hcCwgMCk7CiYjNDM7CWJwZl90aW1lcl9zZXRfY2FsbGJhY2soJmFtcDt2YWwtJmd0O3QsIHRpbWVyX2J0Zl9maW5kX2NiKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19zdWNjZXNzCiBpbnQgc3lzY2FsbF9zeXNfYnBmX3Byb2codm9pZCAqY3R4KQpAQCAtMTI2LDYgJiM0MzsxNTAsMTYgQEAgaW50IHN5c2NhbGxfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBzeXNjYWxsX2J0Zl9maW5kX3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJY2hhciBuYW1lW10gPSAmIzM0O3Rhc2tfc3RydWN0JiMzNDs7CiYjNDM7CiYjNDM7CWJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBXb3JrcXVldWUgdGVzdHMgKi8KIAogc3RydWN0IHdxX2VsZW0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jCmluZGV4IDA5ZTgxYjk5ZWVjYjQuLjMyOTg5Zjk4MWZiNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmMKQEAgLTE5NCw2ICYjNDM7MTk0LDEwMiBAQCBfX25ha2VkIHZvaWQgbGRfaW5kX3N1YnByb2dfYm90aF9wYXRoc19zYWZlKHZvaWQpCiAJOjo6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfYWJzX2NhbGxiYWNrKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3I2ID0gKih1NjQgKikocjIgJiM0MzsgMCk7JiMzNDsKJiM0MzsJJiMzNDsuOGJ5dGUgJVtsZF9hYnNdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7bGRfYWJzOiByZWplY3QgaW4gY2FsbGJhY2smIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrJiMzNDspCiYjNDM7aW50IGxkX2Fic19jYWxsYmFja19yZWplY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJYnBmX2xvb3AoMSwgbGRfYWJzX2NhbGxiYWNrLCAmYW1wO3NrYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2tfc3VicHJvZyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9IHIxOyYjMzQ7CiYjNDM7CSYjMzQ7cjcgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7LjhieXRlICVbbGRfaW5kXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2sodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CSYjMzQ7cjEgPSAqKHU2NCAqKShyMiAmIzQzOyAwKTsmIzM0OwomIzQzOwkmIzM0O2NhbGwgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2c7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIHN1YnByb2cmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrJiMzNDspCiYjNDM7aW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxLCBsZF9pbmRfY2FsbGJhY2ssICZhbXA7c2tiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3I2ID0gJVtza2JdOyYjMzQ7CiYjNDM7CSYjMzQ7cjcgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7LjhieXRlICVbbGRfaW5kXTsmIzM0OwomIzQzOwk6CiYjNDM7CTogW3NrYl0gJiMzNDtyJiMzNDsoc2tiKSwKJiM0MzsJICBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfY29tbW9uLCAmIzM0O3I2JiMzNDssICYjMzQ7cjcmIzM0Oyk7CiYjNDM7CXJldHVybiBza2ItJmd0O21hcms7CiYjNDM7fQomIzQzOwomIzQzO19fbm9pbmxpbmUgaW50IGxkX2luZF9nbG9iYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxkX2luZF9nbG9iYWxfc3RhdGljKHNrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbGRfaW5kX2dsb2JhbF9jYWxsYmFjayhfX3UzMiBpbmRleCwgc3RydWN0IF9fc2tfYnVmZiAqKmN0eCkKJiM0Mzt7CiYjNDM7CWxkX2luZF9nbG9iYWwoKmN0eCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7bGRfaW5kOiByZWplY3QgaW4gY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2cmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrJiMzNDspCiYjNDM7aW50IGxkX2luZF9nbG9iYWxfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWJwZl9sb29wKDEsIGxkX2luZF9nbG9iYWxfY2FsbGJhY2ssICZhbXA7c2tiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtsZF9pbmQ6IGFsbG93IGluIG5vbi1jYWxsYmFjayBnbG9iYWwgc3VicHJvZyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBsZF9pbmRfZ2xvYmFsX3N1YnByb2dfb2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxkX2luZF9nbG9iYWwoc2tiKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbGRfe2FicyxpbmR9IGluIHN1YnByb2dzIHJlcXVpcmUgc2NhbGFyIChpbnQpIHJldHVybiB0eXBlIGluIEJURi4KICAqIEEgdGVzdCB3aXRoIHZvaWQgcmV0dXJuIG11c3QgYmUgcmVqZWN0ZWQuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MDQKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgQlBGIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBsb29rIGF0IHRoZSBkaWZmIGFuZCB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gU28sIEkgc2VlIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW06IGBrZXJuZWwvYnBmL2J0Zi5jYCwgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AsIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgYSBzZXQgb2Ygc2VsZnRlc3RzLgoKSW1tZWRpYXRlbHksIEkgbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgLm1pZ2h0X3NsZWVwID0gdHJ1ZWAgaW4gdGhlIGAucHJvdG9gIHN0cnVjdHVyZXMgZm9yIHNldmVyYWwgZnVuY3Rpb25zOiBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IG5vdyBiZSBhYmxlIHRvIHNsZWVwLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbG9ja2luZyBhbmQgcHJlZW1wdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMsIGhvd2V2ZXIsIHNlZW1zIHRvIGJlIGluIHRoZSB2ZXJpZmllci4gU3BlY2lmaWNhbGx5LCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBzZWUgbmV3IGNoZWNrcyBpbiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBhbmQgYGNoZWNrX2xkX2Fic2AuIFRoZSB2ZXJpZmllciBpcyBjbGVhcmx5IGFkZGluZyBvciByZWZpbmluZyByZXN0cmljdGlvbnMgYXJvdW5kIHRoZSB1c2Ugb2YgYEJQRl9MRF9bQUJTfElORF1gIHdpdGhpbiBjYWxsYmFjayBmdW5jdGlvbnMuIEkgc2VlIGl0IHJlamVjdGluZyBjb2RlIHdpdGggYCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xuJiMzNDtgIGlmIGl0IGZpbmRzIGNhbGxzIHRoYXQgdXNlIHRoZXNlLiBJIGFsc28gc2VlIGNvZGUgdGhhdCB3YWxrcyB0aHJvdWdoIHRoZSBjYWxsZXIgY2hhaW4gKHRoZSBzdGFjayBmcmFtZSksIGNoZWNraW5nIHRvIHNlZSBpZiBjb2RlIG1pZ2h0IGJlIGluIGEgY2FsbGJhY2suIFRoaXMgc2lnbmFscyB0aGF0IHRoZXNlIGNhbGxzIHdpdGhpbiBjYWxsYmFja3MgYXJlIHRoZSB0aGluZyB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlc2UgY2hlY2tzIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoeSB0aGVzZSByZXN0cmljdGlvbnMgYXJlIGJlaW5nIHB1dCBpbiBwbGFjZSBub3cuIEFyZSB0aGVyZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIGlzIHRoaXMgcmVsYXRlZCB0byBzdGFiaWxpdHkgYW5kIHByZXZlbnRpbmcgaGFuZ3Mgb3IgZGVhZGxvY2tzPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaGFzX2xkX2Fic2AsIGBpc19jYmAsIGBpbl9jYWxsYmFja19mbmAsIGFuZCBgaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmNgIGFuZCBob3cgdGhleSBpbnRlcnJlbGF0ZS4KCkZpbmFsbHksIHRoZSBzZWxmdGVzdHMgYXJlIGEgZ29vZCBzaWduLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBkZXNpZ25lZCB0byB2YWxpZGF0ZSB0aGVzZSBuZXcgcmVzdHJpY3Rpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGluZ3MgYXJlIHdvcmtpbmcgYXMgaW50ZW5kZWQsIGFuZCBkb24mIzM5O3QgcmVncmVzcyBvbGQgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRob3NlIHRvIHNlZSBob3cgdGhpcyBpcyBiZWluZyB0ZXN0ZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBncmVwIGFyb3VuZCB0aG9zZSBmaWxlcyB0byBjb25uZWN0IHRoZSBkb3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG98aW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2J8Y2hlY2tfbGRfYWJzfGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYz04NzIzPUJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50LCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3NDgtXG5rZXJuZWwvYnBmL2J0Zi5jOjg3NDk6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG5rZXJuZWwvYnBmL2J0Zi5jLTg3NTAtXHQuZnVuY1x0XHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjYzMD1zeXNjYWxsX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjM2LVx0Y2FzZSBCUEZfRlVOQ19idGZfZmluZF9ieV9uYW1lX2tpbmQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjM3Olx0XHRyZXR1cm4gXHUwMDI2YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90bztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2MzgtXHRjYXNlIEJQRl9GVU5DX3N5c19jbG9zZTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEyPXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMzpzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTQtc3RhdGljIGJvb2wgaXNfdHJhY2luZ19wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01Mjc3PXN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mjg2LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUyODc6c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyODgtXHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3N1YnByb2dfY2FsbF9kZXB0aF9pbmZvICpkaW5mbyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ4OT1zdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTIxLVx0XHRcdHByaXZfc3RhY2tfc3VwcG9ydGVkID0gIWkgXHUwMDI2XHUwMDI2IHByaXZfc3RhY2tfbW9kZSA9PSBQUklWX1NUQUNLX0FEQVBUSVZFO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjU1MjI6XHRcdFx0cmV0ID0gY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coZW52LCBpLCBkaW5mbyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTIzLVx0XHRcdFx0XHRwcml2X3N0YWNrX3N1cHBvcnRlZCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg2ODk9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODM2LVx0Y2FzZSBBUkdfUFRSX1RPX1NQSU5fTE9DSzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODM3Olx0XHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTg4MzgtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbiYjMzk7dCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyMzc9c3RhdGljIHZvaWQgYWNjb3VudF9jdXJyZW50X3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyNTEtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAyNTI6c3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI1My17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNTg5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTY4LVx0XHRcdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTY5Olx0XHRcdFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk3MC1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG5vdCBhbGxvd2VkIGluIHJidHJlZSBjYlxcblwmIzM0OywgZnVuY19uYW1lKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyNTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyNTY6XHRcdFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI1Ny1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW4mIzM5O3QgcmVzX3NwaW5fe2xvY2ssdW5sb2NrfSBpbiByYnRyZWUgY2JcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY4MT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg3Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg3NzpcdGlmIChpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihlbnYpIFx1MDAyNlx1MDAyNiAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg3OC1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O0NhbGxpbmcgYnBmX3JjdV9yZWFkX3tsb2NrLHVubG9ja30gaW4gdW5uZWNlc3NhcnkgcmJ0cmVlIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcxNjU9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19za2IoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MTkxLSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MTkyOnN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzE5My17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTIzPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyMTUtXHRcdGlmIChtb2RlID09IEJQRl9BQlMgfHwgbW9kZSA9PSBCUEZfSU5EKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MjE2Olx0XHRcdHJldHVybiBjaGVja19sZF9hYnMoZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODIxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgYW5kIEhlbHBlciBGdW5jdGlvbnM6IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUgQlBGIHZlcmlmaWVyIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGp1bXAgb3V0LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGBrZXJuZWwvYnBmL2J0Zi5jYCwgYW5kIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgIOKAkyBhbGwgY29yZSBjb21wb25lbnRzIG9mIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcywgb2YgY291cnNlLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigyKWAgc3lzY2FsbC4gR2l2ZW4gb3VyIGZ1enppbmcgdHJpYWdlIGd1aWRlbGluZXMsIHRoaXMgaXMgYSBjbGVhciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBUaGUgY2hhbmdlcyBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBhIGNvcmUgc3Vic3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biB0byBpZGVudGlmeSBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgY2hlY2tfbGRfYWJzYCwgYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLgoKVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXNlIHN0YXRpYywgZXhwb3J0ZWQsIG9yIGlubGluZWQ/ICBMZXQmIzM5O3Mgc2VlOiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBhbmQgYGNoZWNrX2xkX2Fic2AgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGB2ZXJpZmllci5jYC4gIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBhcmUgKm5vdCogc3RhdGljOyB0aGV5JiMzOTtyZSBCUEZfQ0FMTHMgaW4gYGJ0Zi5jYCBhbmQgYHN0YWNrbWFwLmNgIHJlc3BlY3RpdmVseSwgd2hpY2ggaXMgZ29vZCBmb3Igb3VyIHB1cnBvc2VzLiAgQW5kIGBicGZfY2hlY2tgIGlzIHRoZSBtYWluIHZlcmlmaWVyIGVudHJ5cG9pbnQuIE5vdywgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHN0cnVjdHVyZSBhbmQgY2FsbC1mbG93IG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgd2l0aGluIGB2ZXJpZmllci5jYC4gV2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2Ugc3RhdGljIHZlcmlmaWVyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBnZXQgYSBiZXR0ZXIgYXR0YWNrIHN1cmZhY2UgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyODA6XHRcdGludCBmcmFtZTsgLyogIyBvZiBjb25zZWN1dGl2ZSBzdGF0aWMgY2FsbCBzdGFjayBmcmFtZXMgb24gdG9wIG9mIHN0YWNrICovXG41MjgxOlx0fTtcbjUyODI6XHRcbjUyODM6XHQvKiBzdGFydGluZyBmcm9tIG1haW4gYnBmIGZ1bmN0aW9uIHdhbGsgYWxsIGluc3RydWN0aW9ucyBvZiB0aGUgZnVuY3Rpb25cbjUyODQ6XHQgKiBhbmQgcmVjdXJzaXZlbHkgd2FsayBhbGwgY2FsbGVlcyB0aGF0IGdpdmVuIGZ1bmN0aW9uIGNhbiBjYWxsLlxuNTI4NTpcdCAqIElnbm9yZSBqdW1wIGFuZCBleGl0IGluc25zLlxuNTI4NjpcdCAqL1xuNTI4NzpcdHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbjUyODg6XHRcdFx0XHRcdFx0IHN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8gKmRpbmZvLFxuNTI4OTpcdFx0XHRcdFx0XHQgYm9vbCBwcml2X3N0YWNrX3N1cHBvcnRlZClcbjUyOTA6XHR7XG41MjkxOlx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG41MjkyOlx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG41MjkzOlx0XHRpbnQgZGVwdGggPSAwLCBmcmFtZSA9IDAsIGksIHN1YnByb2dfZW5kLCBzdWJwcm9nX2RlcHRoO1xuNTI5NDpcdFx0Ym9vbCB0YWlsX2NhbGxfcmVhY2hhYmxlID0gZmFsc2U7XG41Mjk1Olx0XHRpbnQgdG90YWw7XG41Mjk2Olx0XHRpbnQgdG1wO1xuNTI5NzpcdFxuNTI5ODpcdFx0Lyogbm8gY2FsbGVyIGlkeCAqL1xuNTI5OTpcdFx0ZGluZm9baWR4XS5jYWxsZXIgPSAtMTtcbjUzMDA6XHRcbjUzMDE6XHRcdGkgPSBzdWJwcm9nW2lkeF0uc3RhcnQ7XG41MzAyOlx0XHRpZiAoIXByaXZfc3RhY2tfc3VwcG9ydGVkKVxuNTMwMzpcdFx0XHRzdWJwcm9nW2lkeF0ucHJpdl9zdGFja19tb2RlID0gTk9fUFJJVl9TVEFDSztcbjUzMDQ6XHRwcm9jZXNzX2Z1bmM6XG41MzA1Olx0XHRpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHtcbjUzMDY6XHRcdFx0Zm9yICh0bXAgPSBpZHg7IHRtcCBcdTAwM2U9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7XG41MzA3Olx0XHRcdFx0aWYgKHN1YnByb2dbdG1wXS5pc19jYikge1xuNTMwODpcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXG5cJiMzNDspO1xuNTMwOTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41MzEwOlx0XHRcdFx0fVxuNTMxMTpcdFx0XHR9XG41MzEyOlx0XHR9XG41MzEzOlx0XG41MzE0Olx0XHQvKiBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHRoYXQgbWlnaHQgaGFwcGVuIHdoZW5cbjUzMTU6XHRcdCAqIGJwZjJicGYgY2FsbHMgZ2V0IGNvbWJpbmVkIHdpdGggdGFpbGNhbGxzLiBMaW1pdCB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrXG41MzE2Olx0XHQgKiBkZXB0aCBmb3Igc3VjaCBjYXNlIGRvd24gdG8gMjU2IHNvIHRoYXQgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW9cbjUzMTc6XHRcdCAqIHdvdWxkIHJlc3VsdCBpbiA4ayBzdGFjayBzaXplICgzMiB3aGljaCBpcyB0YWlsY2FsbCBsaW1pdCAqIDI1NiA9XG41MzE4Olx0XHQgKiA4aykuXG41MzE5Olx0XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQlRGIGFuZCBTdGFja21hcCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQlRGIGFuZCBzdGFjayBtYXBzIGFyZSB3b3JraW5nLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGZpbmRpbmcgQlRGIGRhdGEgYnkgbmFtZSBhbmQgY2hlY2tpbmcgZm9yIHNsZWVwYWJpbGl0eSBvbiB0aGUgc3RhY2suIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBleGFtaW5lIHRoZSBjb2RlIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgIGFuZCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgIGZ1bmN0aW9ucy4gR2l2ZW4gdGhhdCB0aGV5JiMzOTtyZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXRpZXMsIHRoZXkmIzM5O3JlIHByb2JhYmx5IHJlc2lkaW5nIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbnMgdG8gc3RhcnQgYXJlIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBsb2dpYyBmbG93IG9mIHRoZXNlIGtleSBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgdGhlIGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg3NDA6XHRcdFx0XHRyZXR1cm4gYnRmX29ial9mZDtcbjg3NDE6XHRcdFx0fVxuODc0MjpcdFx0XHRyZXR1cm4gcmV0IHwgKCgodTY0KWJ0Zl9vYmpfZmQpIFx1MDAzY1x1MDAzYyAzMik7XG44NzQzOlx0XHR9XG44NzQ0Olx0XHRpZiAocmV0IFx1MDAzZSAwKVxuODc0NTpcdFx0XHRidGZfcHV0KGJ0Zik7XG44NzQ2Olx0XHRyZXR1cm4gcmV0O1xuODc0NzpcdH1cbjg3NDg6XHRcbjg3NDk6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbjg3NTA6XHRcdC5mdW5jXHRcdD0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCxcbjg3NTE6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjg3NTI6XHRcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuODc1MzpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuODc1NDpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG44NzU1Olx0XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbjg3NTY6XHRcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuODc1NzpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG44NzU4Olx0fTtcbjg3NTk6XHRcbjg3NjA6XHRCVEZfSURfTElTVF9HTE9CQUwoYnRmX3RyYWNpbmdfaWRzLCBNQVhfQlRGX1RSQUNJTkdfVFlQRSlcbjg3NjE6XHQjZGVmaW5lIEJURl9UUkFDSU5HX1RZUEUobmFtZSwgdHlwZSkgQlRGX0lEKHN0cnVjdCwgdHlwZSlcbjg3NjI6XHRCVEZfVFJBQ0lOR19UWVBFX3h4eFxuODc2MzpcdCN1bmRlZiBCVEZfVFJBQ0lOR19UWVBFXG44NzY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgU3RhY2sgTWFwIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzdGFjayBtYXBzIHdvcmsgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyBuYXZpZ2F0ZSBkaXJlY3RseSB0byBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gVGhpcyBmaWxlIHNob3VsZCBob2xkIHRoZSBrZXkgbG9naWMgZm9yIGFsbG9jYXRpbmcsIG1hbmFnaW5nLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBCUEYgc3RhY2sgbWFwcy4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBzdGFjayBzcGFjZSBpcyByZXNlcnZlZCwgaG93IGRhdGEgaXMgd3JpdHRlbiBhbmQgcmVhZCwgYW5kIGhvdyB0aGVzZSBtYXBzIGludGVncmF0ZSB3aXRoIHRoZSBicm9hZGVyIEJQRiB2ZXJpZmllciBhbmQgZXhlY3V0aW9uIGVudmlyb25tZW50LiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGV5IGVtcGxveSwgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHVzZWQgdG8gbWFrZSBzdGFjayBtYXBzIGVmZmljaWVudCBpbiB0aGUgY29udGV4dCBvZiBCUEYgcHJvZ3JhbXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg3MDpcdFx0ICAgdTY0LCBmbGFncylcbiA4NzE6XHR7XG4gODcyOlx0XHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcbiA4NzM6XHR9XG4gODc0Olx0XG4gODc1Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIDg3NjpcdFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSxcbiA4Nzc6XHRcdC5ncGxfb25seVx0PSB0cnVlLFxuIDg3ODpcdFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gODc5Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gODgwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIDg4MTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4gODgyOlx0XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIDg4MzpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gODg0Olx0fTtcbiA4ODU6XHRcbiA4ODY6XHRzdGF0aWMgbG9uZyBfX2JwZl9nZXRfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4gODg3Olx0XHRcdFx0XHQgdTY0IGZsYWdzLCBib29sIG1heV9mYXVsdClcbiA4ODg6XHR7XG4gODg5Olx0XHRzdHJ1Y3QgcHRfcmVncyAqcmVncztcbiA4OTA6XHRcdGxvbmcgcmVzID0gLUVJTlZBTDtcbiA4OTE6XHRcbiA4OTI6XHRcdGlmICghdHJ5X2dldF90YXNrX3N0YWNrKHRhc2spKSB7XG4gODkzOlx0XHRcdG1lbXNldChidWYsIDAsIHNpemUpO1xuIDg5NDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4OTU6XHRcdH1cbiA4OTY6XHRcbiA4OTc6XHRcdHJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7XG4gODk4Olx0XHRpZiAocmVncylcbiA4OTk6XHRcdFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XG4gOTAwOlx0XHRlbHNlXG4gOTAxOlx0XHRcdG1lbXNldChidWYsIDAsIHNpemUpO1xuIDkwMjpcdFx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XG4gOTAzOlx0XHRyZXR1cm4gcmVzO1xuIDkwNDpcdH1cbiA5MDU6XHRcbiA5MDY6XHRCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFjaywgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxuIDkwNzpcdFx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxuIDkwODpcdHtcbiA5MDk6XHRcdHJldHVybiBfX2JwZl9nZXRfdGFza19zdGFjayh0YXNrLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiA5MTA6XHR9XG4gOTExOlx0XG4gOTEyOlx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHtcbiA5MTM6XHRcdC5mdW5jXHRcdD0gYnBmX2dldF90YXNrX3N0YWNrLFxuIDkxNDpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIDkxNTpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIDkxNjpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiA5MTc6XHRcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbiA5MTg6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuIDkxOTpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiA5MjA6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIDkyMTpcdH07XG4gOTIyOlx0XG4gOTIzOlx0QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWYsXG4gOTI0Olx0XHQgICB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXG4gOTI1Olx0e1xuIDkyNjpcdFx0cmV0dXJuIF9fYnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogIW1heV9mYXVsdCAqLyk7XG4gOTI3Olx0fVxuIDkyODpcdFxuIDkyOTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIDkzMDpcdFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxuIDkzMTpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIDkzMjpcdFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gOTMzOlx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gOTM0Olx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIDkzNTpcdFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuIDkzNjpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4gOTM3Olx0XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIDkzODpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gOTM5Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEJQRiBWZXJpZmllciBhbmQgSGVscGVycyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEJQRiBoZWxwZXJzIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoZXJlJiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZXNlIHNldHRpbmdzPyBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBsb29raW5nIGluIHRoZSBwbGFjZXMgdGhhdCBkZWZpbmUgdGhlIGNvcmUgQlBGIGZlYXR1cmVzLiBMaWtlbHkgY2FuZGlkYXRlcyBmb3IgS2NvbmZpZyBmaWxlcyB3b3VsZCBiZSBga2VybmVsL2JwZi9LY29uZmlnYCBvciBwb3NzaWJseSBldmVuIGBpbml0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgZ2xvYmFsIG9wdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCBzZXR0aW5ncyB0aGF0IHdvdWxkIGFmZmVjdCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRob3NlIGZpbGVzIGFuZCB0cmFjZSBvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW5zIHRvIGVuc3VyZSBub3RoaW5n4oCZcyBicm9rZW4gb3IgdW5pbnRlbnRpb25hbGx5IGRpc2FibGVkLiBJdCYjMzk7cyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHZlcmlmeSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjoKCioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEJQRiBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gQlBGIHdpbGwgcmVzaWRlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNlZSBob3cgaXQgYnVpbGRzLCBhbmQgSSYjMzk7bGwgYWxzbyBjaGVjayBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgaXQgbWlnaHQgY29udGFpbi4gVGhlbiwgdG8gZ2V0IHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGBpbml0L0tjb25maWdgIGlzIHRoZSBwbGFjZSB0byBsb29rIGZvciB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuZCB1cCBpbiBgLmNvbmZpZ2AuIEl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgbmV3IG9yIGFueSBjaGFuZ2VzIHRvIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgQlBGIGNvbmZpZ3MuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgaXMgZW5hYmxlZCBhbmQgY29udHJvbGxlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN0YWNrbWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzItZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJldXNlcG9ydF9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc3RydWN0X29wcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjItXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJlbG9fY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX3JlbG9jYXRlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0ga21lbV9jYWNoZV9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRtYWJ1Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgQlBGIGFuZCBQZXJmIEV2ZW50IENvbmZpZ3VyYXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGRlZmluaXRpb25zLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGhvdyBgQlBGX1NZU0NBTExgIGFuZCBgUEVSRl9FVkVOVFNgIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWFrZSBhc3N1bXB0aW9ucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZlYXR1cmVzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhlaXIgZW5hYmxlbWVudCBvciBkaXNhYmxlbWVudC4gVGhpcyBtZWFucyBsb29raW5nIGJleW9uZCBqdXN0IHRoZSBpbW1lZGlhdGUgZGVmaW5pdGlvbnMsIHRyYWNpbmcgdGhyb3VnaCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBzZWVpbmcgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8ga25vdyBldmVyeXRoaW5nIGFib3V0IHRoZWlyIGNvbmZpZ3VyYXRpb24sIGhvdyB0aGV5IHRpZSBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gdGhlaXIgYmVoYXZpb3IgYmFzZWQgb24gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IHNlcmlvdXMgYW5hbHlzaXMgb3IgZGV2ZWxvcG1lbnQgaW52b2x2aW5nIEJQRiBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gTXkgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoQlBGX1NZU0NBTEx8QlBGKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZy0zLSMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcbmtlcm5lbC9icGYvS2NvbmZpZy01LVx0Ym9vbFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXHRib29sIFwmIzM0O0Rpc2FibGUgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0XCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzoyOm1lbnVjb25maWcgQlBGX1BSRUxPQURcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1ByZWxvYWQgQlBGIGZpbGUgc3lzdGVtIHdpdGgga2VybmVsIHNwZWNpZmljIHByb2dyYW0gYW5kIG1hcCBpdGVyYXRvcnNcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0xND1pZiBCUEZfUFJFTE9BRFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6MTU6Y29uZmlnIEJQRl9QUkVMT0FEX1VNRFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDticGZfcHJlbG9hZCBrZXJuZWwgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ0CgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDc3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGJyZWFrIGRvd24gaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEZpcnN0LCBJIHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb246IGB2ZXJpZmllci5jYCBhbmQgYGJ0Zi5jYCBhcmUgY29tcGlsZWQgdW5kZXIgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgc3RhY2ttYXAuY2AgcmVxdWlyZXMgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AuIE5hdHVyYWxseSwgYENPTkZJR19CUEZgIGlzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgY2hlY2tfbGRfYWJzYCwgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCwgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCwgYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLiBRdWljayBjaGVjaywgYW5kIEkgc2VlIHRoYXQgdGhlIGZpcnN0IHRocmVlIChgY2hlY2tfbGRfYWJzYCwgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCwgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCkgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGB2ZXJpZmllci5jYCwgd2hpY2ggbWFrZXMgdGhlbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgaW4gdGhlIGNvbnRleHQgb2YgdmVyaWZpY2F0aW9uLiBUaGUgbGFzdCB0aHJlZSAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWApIGFyZSBmdW5jdGlvbnMgaW4gYGJ0Zi5jYCBhbmQgYHN0YWNrbWFwLmNgLCByZXNwZWN0aXZlbHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgYGJwZl9jaGVja2AsIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBzZW5zZSB0byBtZSB0byBjb25zaWRlciB0aG9zZSBzeW1ib2xzIEkgbm90ZWQgZWFybGllci4gVGhlIHBhdGNoIGluZGljYXRlcyB0aGF0IGBjaGVja19sZF9hYnNgLCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBzaG91bGQgYWxsIGJlIGNvbnNpZGVyZWQuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdmVyaWZpZXIgbG9naWMgY2hhbmdlcyBpbiBgdmVyaWZpZXIuY2AgKGRpc2FibGluZyBgQlBGX0xEX0FCUy9JTkRgIGluc2lkZSBzdWJwcm9ncmFtIGNhbGxiYWNrcywgdXBkYXRpbmcgcmJ0cmVlIGxvY2sgdmVyaWZpZXIgY2hlY2tzKSBhbmQgYWRkaW5nIGAubWlnaHRfc2xlZXAgPSB0cnVlYCBmbGFncyB0byBzZXZlcmFsIEJQRiBoZWxwZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGNvcmUgY2hhbmdlcywgYW5kIGRpcmVjdGx5IHRvdWNoYWJsZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggYSBoaWdoIHByaW9yaXR5IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYEJQRl9TWVNDQUxMYCBhbmQgYFBFUkZfRVZFTlRTYC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGUgb25lcyBtZW50aW9uZWQgZWFybGllcjogYGNoZWNrX2xkX2Fic2AsIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAsIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYC4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19sZF9hYnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2cmIzM0OywKICAgICYjMzQ7aW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2ImIzM0OywKICAgICYjMzQ7YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfYWJzJiMzNDssCiAgICAmIzM0O2NoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgICAmIzM0O2luX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiJiMzNDssCiAgICAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcbjEuIEl0IGZsYWdzIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzIChgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2ApIHdpdGggYC5taWdodF9zbGVlcCA9IHRydWVgIHRvIHByZXZlbnQgdGhlaXIgaW52b2NhdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXG4yLiBJdCBhZGRzIEJQRiB2ZXJpZmllciBjaGVja3MgKGBjaGVja19sZF9hYnNgIGFuZCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgKSB0byBkaXNhbGxvdyBgQlBGX0xEX1tBQlN8SU5EXWAgd2l0aGluIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxuNC4gSXQgYWRkcyBzZWxmdGVzdHMgZm9yIHRoZXNlIHZlcmlmaWVyIHNjZW5hcmlvcy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4NjUwYzVlMDMyYzRjMTE4NmE4YWU0Y2U5OGE4MzNlYmRkZDQ4ZjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjMxOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmMKaW5kZXggNWQ5M2ZkODJlNzY0NS4uOWYzM2U5NWQ1NzQxMCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2J0Zi5jCkBAIC04NzQ5LDYgJiM0Mzs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnQKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvID0gewogCS5mdW5jCQk9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsCiAJLmdwbF9vbmx5CT0gZmFsc2UsCiYjNDM7CS5taWdodF9zbGVlcAk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKIAkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jCmluZGV4IGE4MzkwNDFlMGQwMDguLmQwOWQ0YzNmZTU0N2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKQEAgLTg3NSw2ICYjNDM7ODc1LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2kKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHsKIAkuZnVuYwkJPSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwKIAkuZ3BsX29ubHkJPSB0cnVlLAomIzQzOwkubWlnaHRfc2xlZXAJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLApAQCAtOTI4LDYgJiM0Mzs5MjksNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZgogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CiAJLmZ1bmMJCT0gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwKIAkuZ3BsX29ubHkJPSBmYWxzZSwKJiM0MzsJLm1pZ2h0X3NsZWVwCT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAzMmQzMWZhNjcwMzZiLi4yY2I4ZmJhNjhjZDE1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01MzAyLDYgJiM0Mzs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwKIAlpZiAoIXByaXZfc3RhY2tfc3VwcG9ydGVkKQogCQlzdWJwcm9nW2lkeF0ucHJpdl9zdGFja19tb2RlID0gTk9fUFJJVl9TVEFDSzsKIHByb2Nlc3NfZnVuYzoKJiM0MzsJaWYgKHN1YnByb2dbaWR4XS5oYXNfbGRfYWJzKSB7CiYjNDM7CQlmb3IgKHRtcCA9IGlkeDsgdG1wICZndDs9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7CiYjNDM7CQkJaWYgKHN1YnByb2dbdG1wXS5pc19jYikgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlbgogCSAqIGJwZjJicGYgY2FsbHMgZ2V0IGNvbWJpbmVkIHdpdGggdGFpbGNhbGxzLiBMaW1pdCB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrCiAJICogZGVwdGggZm9yIHN1Y2ggY2FzZSBkb3duIHRvIDI1NiBzbyB0aGF0IHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvCkBAIC0xMDIzNSw5ICYjNDM7MTAyNDQsMTAgQEAgc3RhdGljIHZvaWQgYWNjb3VudF9jdXJyZW50X3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkJZnJhbWUgPyBzdGF0ZS0mZ3Q7ZnJhbWVbZnJhbWUgLSAxXSA6IE5VTEwpOwogfQogCi0vKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGEgcmJ0cmVlIGhlbHBlciB0aGF0IG11c3QKLSAqIGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZD8gSWYgc28sIG5vIG5lZWQgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWxlYXNlZAotICogbG9jawomIzQzOy8qCiYjNDM7ICogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhbiByYnRyZWUga2Z1bmMgdGhhdCBtdXN0CiYjNDM7ICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJiMzOTtzIHN1YnByb2dzPyBJZiBzbywKJiM0MzsgKiBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IGFuIHVucmVsZWFzZWQgbG9jay4KICAqLwogc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKQEAgLTEwMjQ1LDE3ICYjNDM7MTAyNTUsMTkgQEAgc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZTsKIAlpbnQga2Z1bmNfYnRmX2lkOwomIzQzOwl1MzIgZnJhbWU7CiAKLQlpZiAoIXN0YXRlLSZndDtjdXJmcmFtZSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JY2FsbGVlID0gc3RhdGUtJmd0O2ZyYW1lW3N0YXRlLSZndDtjdXJmcmFtZV07CiYjNDM7CWZvciAoZnJhbWUgPSBzdGF0ZS0mZ3Q7Y3VyZnJhbWU7IGZyYW1lOyBmcmFtZS0tKSB7CiYjNDM7CQljYWxsZWUgPSBzdGF0ZS0mZ3Q7ZnJhbWVbZnJhbWVdOwomIzQzOwkJaWYgKCFjYWxsZWUtJmd0O2luX2NhbGxiYWNrX2ZuKQomIzQzOwkJCWNvbnRpbnVlOwogCi0JaWYgKCFjYWxsZWUtJmd0O2luX2NhbGxiYWNrX2ZuKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS0mZ3Q7Y2FsbHNpdGVdLmltbTsKJiM0MzsJCWlmIChpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuYyhrZnVuY19idGZfaWQpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiAKLQlrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS0mZ3Q7Y2FsbHNpdGVdLmltbTsKLQlyZXR1cm4gaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQpAQCAtMTcxNzksNiAmIzQzOzE3MTkxLDcgQEAgc3RhdGljIGJvb2wgbWF5X2FjY2Vzc19za2IoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpCiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUgPSBlbnYtJmd0O2N1cl9zdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7CiAJc3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182OwogCXU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLSZndDtjb2RlKTsKQEAgLTE3MTg5LDYgJiM0MzsxNzIwMiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlmb3IgKGkgPSBzdGF0ZS0mZ3Q7Y3VyZnJhbWU7IGk7IGktLSkgewomIzQzOwkJaWYgKHN0YXRlLSZndDtmcmFtZVtpXS0mZ3Q7aW5fY2FsbGJhY2tfZm4pIHsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWVudi0mZ3Q7b3BzLSZndDtnZW5fbGRfYWJzKSB7CiAJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7Z2VuX2xkX2FicyBpcyBudWxsJiMzNDspOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYwppbmRleCA2ZDVmY2U3ZTZmZmM5Li44MWM0NTk0MzU2ODBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jCkBAIC0xMTUsNiAmIzQzOzExNSw1OCBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfaGVscGVyKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz91cHJvYmUucyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF9zdGFjayMmIzM0OykKJiM0MztpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrOwomIzQzOwomIzQzOwlicGZfcHJlZW1wdF9kaXNhYmxlKCk7CiYjNDM7CWJwZl9nZXRfc3RhY2soY3R4LCAmYW1wO3N0YWNrLCBzaXplb2Yoc3RhY2spLAomIzQzOwkJICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpOwomIzQzOwlicGZfcHJlZW1wdF9lbmFibGUoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz91cHJvYmUucyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF90YXNrX3N0YWNrIyYjMzQ7KQomIzQzO2ludCBwcmVlbXB0X3NsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CiYjNDM7CXRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJYnBmX3ByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwlicGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgJmFtcDtzdGFjaywgc2l6ZW9mKHN0YWNrKSwKJiM0MzsJCQkgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CWJwZl9wcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHNsZWVwYWJsZV9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CiYjNDM7CWJwZl9nZXRfc3RhY2soY3R4LCAmYW1wO3N0YWNrLCBzaXplb2Yoc3RhY2spLAomIzQzOwkJICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHNsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CiYjNDM7CXRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJYnBmX2dldF90YXNrX3N0YWNrKHRhc2ssICZhbXA7c3RhY2ssIHNpemVvZihzdGFjayksCiYjNDM7CQkJICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/ZmVudHJ5LnMvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtrZXJuZWwgZnVuYyBicGZfY29weV9mcm9tX3VzZXJfc3RyIGlzIHNsZWVwYWJsZSB3aXRoaW4gbm9uLXByZWVtcHRpYmxlIHJlZ2lvbiYjMzQ7KQogaW50IHByZWVtcHRfc2xlZXBhYmxlX2tmdW5jKHZvaWQgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMKaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMKQEAgLTI3Miw2ICYjNDM7MjcyLDQ3IEBAIHN0YXRpYyBib29sIGxlc3NfX2JhZF9yZXNfc3Bpbl91bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfdW5sb2NrX3JlbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7Z2xvY2spOwomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7Z2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlyYnRyZWVfY2JfdW5sb2NrX3JlbG9jaygpOwomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBsZXNzX19iYWRfc3VicHJvZ191bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjsKJiM0MzsKJiM0MzsJbm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpOwomIzQzOwlub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CXJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9ub29wKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBsZXNzX19zdWJwcm9nX2FsbG93ZWQoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjsKJiM0MzsKJiM0MzsJbm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpOwomIzQzOwlub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CXJidHJlZV9jYl9ub29wKCk7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUKIGxvbmcgYWRkX3dpdGhfY2IoYm9vbCAoY2IpKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKSkKIHsKQEAgLTMzMCw0ICYjNDM7MzcxLDE4IEBAIGxvbmcgcmJ0cmVlX2FwaV9hZGRfYmFkX2NiX3Jlc19zcGluX3VubG9jayh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW4mIzM5O3Qgc3Bpbl97bG9jayx1bmxvY2t9IGluIHJidHJlZSBjYiYjMzQ7KQomIzQzO2xvbmcgcmJ0cmVlX2FwaV9hZGRfYmFkX2NiX3N1YnByb2dfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhZGRfd2l0aF9jYihsZXNzX19iYWRfc3VicHJvZ191bmxvY2spOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0Mztsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWRkX3dpdGhfY2IobGVzc19fc3VicHJvZ19hbGxvd2VkKTsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwppbmRleCBhN2M4NGQzZmE0YzczLi5lMDkyNjc2N2JiZDNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKQEAgLTEwOCw2ICYjNDM7MTA4LDMwIEBAIGludCB0aW1lcl9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRpbWVyX2J0Zl9maW5kX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHN0cnVjdCBicGZfdGltZXIgKnRpbWVyKQomIzQzO3sKJiM0MzsJY2hhciBuYW1lW10gPSAmIzM0O3Rhc2tfc3RydWN0JiMzNDs7CiYjNDM7CiYjNDM7CWJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NsZWVwYWJsZSBoZWxwZXIgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCN7e1swLTldJiM0Mzt9fSBpbiBub24tc2xlZXBhYmxlIHByb2cmIzM0OykKJiM0MztpbnQgdGltZXJfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXJfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RpbWVyX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfdGltZXJfaW5pdCgmYW1wO3ZhbC0mZ3Q7dCwgJmFtcDt0aW1lcl9tYXAsIDApOwomIzQzOwlicGZfdGltZXJfc2V0X2NhbGxiYWNrKCZhbXA7dmFsLSZndDt0LCB0aW1lcl9idGZfZmluZF9jYik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fc3VjY2VzcwogaW50IHN5c2NhbGxfc3lzX2JwZl9wcm9nKHZvaWQgKmN0eCkKQEAgLTEyNiw2ICYjNDM7MTUwLDE2IEBAIGludCBzeXNjYWxsX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgc3lzY2FsbF9idGZfZmluZF9wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWNoYXIgbmFtZVtdID0gJiMzNDt0YXNrX3N0cnVjdCYjMzQ7OwomIzQzOwomIzQzOwlicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogV29ya3F1ZXVlIHRlc3RzICovCiAKIHN0cnVjdCB3cV9lbGVtIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYwppbmRleCAwOWU4MWI5OWVlY2I0Li4zMjk4OWY5ODFmYjY5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jCkBAIC0xOTQsNiAmIzQzOzE5NCwxMDIgQEAgX19uYWtlZCB2b2lkIGxkX2luZF9zdWJwcm9nX2JvdGhfcGF0aHNfc2FmZSh2b2lkKQogCTo6OiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWQKJiM0MztzdGF0aWMgaW50IGxkX2Fic19jYWxsYmFjayh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9ICoodTY0ICopKHIyICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7LjhieXRlICVbbGRfYWJzXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xkX2FiczogcmVqZWN0IGluIGNhbGxiYWNrJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayYjMzQ7KQomIzQzO2ludCBsZF9hYnNfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWJwZl9sb29wKDEsIGxkX2Fic19jYWxsYmFjaywgJmFtcDtza2IsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CSYjMzQ7cjYgPSByMTsmIzM0OwomIzQzOwkmIzM0O3I3ID0gMDsmIzM0OwomIzQzOwkmIzM0Oy44Ynl0ZSAlW2xkX2luZF07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IxID0gKih1NjQgKikocjIgJiM0MzsgMCk7JiMzNDsKJiM0MzsJJiMzNDtjYWxsIGxkX2luZF9jYWxsYmFja19zdWJwcm9nOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBzdWJwcm9nJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayYjMzQ7KQomIzQzO2ludCBsZF9pbmRfY2FsbGJhY2tfc3VicHJvZ19yZWplY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJYnBmX2xvb3AoMSwgbGRfaW5kX2NhbGxiYWNrLCAmYW1wO3NrYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSBpbnQgbGRfaW5kX2dsb2JhbF9zdGF0aWMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9ICVbc2tiXTsmIzM0OwomIzQzOwkmIzM0O3I3ID0gMDsmIzM0OwomIzQzOwkmIzM0Oy44Ynl0ZSAlW2xkX2luZF07JiMzNDsKJiM0MzsJOgomIzQzOwk6IFtza2JdICYjMzQ7ciYjMzQ7KHNrYiksCiYjNDM7CSAgX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpCiYjNDM7CTogX19jbG9iYmVyX2NvbW1vbiwgJiMzNDtyNiYjMzQ7LCAmIzM0O3I3JiMzNDspOwomIzQzOwlyZXR1cm4gc2tiLSZndDttYXJrOwomIzQzO30KJiM0MzsKJiM0MztfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGxkX2luZF9nbG9iYWxfY2FsbGJhY2soX191MzIgaW5kZXgsIHN0cnVjdCBfX3NrX2J1ZmYgKipjdHgpCiYjNDM7ewomIzQzOwlsZF9pbmRfZ2xvYmFsKCpjdHgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayYjMzQ7KQomIzQzO2ludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxLCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrLCAmYW1wO3NrYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7bGRfaW5kOiBhbGxvdyBpbiBub24tY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2cmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgbGRfaW5kX2dsb2JhbF9zdWJwcm9nX29rKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiBsZF9pbmRfZ2xvYmFsKHNrYik7CiYjNDM7fQomIzQzOwogLyoKICAqIGxkX3thYnMsaW5kfSBpbiBzdWJwcm9ncyByZXF1aXJlIHNjYWxhciAoaW50KSByZXR1cm4gdHlwZSBpbiBCVEYuCiAgKiBBIHRlc3Qgd2l0aCB2b2lkIHJldHVybiBtdXN0IGJlIHJlamVjdGVkLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNgoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDk1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQSBCUEYgUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gVGltZSB0byB0aGluayBsaWtlIGFuIGV4cGVydC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBwcm9iYWJseSBub3QuIExldCYjMzk7cyBkZWx2ZSBpbi4KCkZpcnN0LCBJIHNlZSBjaGFuZ2VzIHByaW1hcmlseSBmb2N1c2VkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogc3BlY2lmaWNhbGx5LCBpbiB0aGUgdmVyaWZpZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBhdHRyaWJ1dGVzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgc2VsZi10ZXN0cy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aHJlZSBrZXkgYXJlYXMuCgoxLiAgV2UmIzM5O3ZlIGdvdCBgbWlnaHRfc2xlZXAgPSB0cnVlYCBiZWluZyBhZGRlZCB0byBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgaXMgYWJvdXQgdGhlIHZlcmlmaWVyIGVuZm9yY2luZyB0aGF0IHNsZWVwYWJsZSBoZWxwZXJzIGFyZSB1c2VkIGNvcnJlY3RseSDigJMgaS5lLiwgb25seSBpbiBzbGVlcGFibGUgY29udGV4dHMsIG5vdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQgb3IgaW4gUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBTdGFuZGFyZCBzdHVmZi4KCjIuICBUaGUgdmVyaWZpZXIgbm93IGV4cGxpY2l0bHkgZGlzYWxsb3dzIGBCUEZfTERfQUJTYCBhbmQgYEJQRl9MRF9JTkRgIHdpdGhpbiBCUEYgY2FsbGJhY2tzIGFuZCBzdWJwcm9ncmFtcyB0aGF0IHRob3NlIGNhbGxiYWNrcyBjYWxsLiBUaGlzIGlzIGV4cGVjdGVkIHNpbmNlIHRoZXNlIGluc3RydWN0aW9ucyBpbnZvbHZlIHNwZWNpYWwgSklUIHRyYW5zZm9ybWF0aW9ucyBvciByZS1lbnRyeSB0aGF0IGRvZXNuJiMzOTt0IGdlbCB3aXRoIGNhbGxiYWNrIGV4ZWN1dGlvbi4gSXQgbWFrZXMgc2Vuc2UgdG8gZm9yYmlkIHRoZW0uCgozLiAgVGhlIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdmVyaWZpZXIgY2hlY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgc3VicHJvZ3JhbXMgY2FsbGVkIGZyb20gcmJ0cmVlIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgdGhlIHZlcmlmaWVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZXJlYnkgYXZvaWRpbmcgZmFsc2UgcG9zaXRpdmVzIGFib3V0IHVucmVsZWFzZWQgbG9ja3MgaWYgdGhlIHN1YnByb2dyYW0gaXMgY29ycmVjdGx5IGhhbmRsaW5nIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBpbnNpZGUgdGhlIHJidHJlZSBjYWxsYmFjay4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgYXBwcm9hY2ggdGhpcyBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIFdoYXQga2luZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgbWlnaHQgdGhpcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlPyBJIGhhdmUgdG8gYmUgc3lzdGVtYXRpYy4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlIEluZm9ybWF0aW9uIExlYWs6KiogVGhpcyBwYXRjaCBzZXJpZXMgZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoZSB0eXBpY2FsIGN1bHByaXRzIC0gIG5vIGBjb3B5X3RvX3VzZXJgLCBubyBuZXRsaW5rIG1lc3NhZ2VzLCBubyBpb2N0bHMuIE5vIGRhdGEgZXhwb3N1cmUgaXMgYWRkZWQgb3IgYWx0ZXJlZC4gSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIGhlcmUuCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgVXNhZ2UgaW4gQ29uZGl0aW9uYWwgTG9naWM6KiogVGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyBsb29rIHRvIGJlIHdlbGwtZGVmaW5lZC4gTm8gd2VpcmQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgSSBzZWUgbm8gY29uY2VybnMuCjMuICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gSXNzdWVzOioqIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgYnkgdGhlc2UgY2hhbmdlcy4KNC4gICoqQm91bmRzIENoZWNrcy9VbmluaXRpYWxpemVkIEJ5dGVzOioqIFRoZSBjaGFuZ2VzIHJlc3RyaWN0IGluc3RydWN0aW9ucyBpbiBjYWxsYmFja3MsIG1vZGlmeSBzbGVlcGFibGUgaGVscGVyIGF0dHJpYnV0ZXMsIGFuZCBpbXByb3ZlIHZlcmlmaWVyIGxvZ2ljIHJlbGF0ZWQgdG8gcmJ0cmVlIGNhbGxiYWNrcy4gIE5vIGNoYW5jZSBoZXJlLgoKU28sIHdoZXJlJiMzOTtzIHRoZSBLTVNBTiBob29rPyBIb25lc3RseSwgSSBkb24mIzM5O3Qgc2VlIGFueS4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mbyBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbCBhYm91dCBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBhdHRyaWJ1dGVzLiBBbnkgc2xlZXBhYmxlIG9yIGxvY2tpbmcgYnVncyBvciB2ZXJpZmllciBpc3N1ZXMgdGhhdCBjcmVlcCB1cCBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSB2ZXJpZmllciBpdHNlbGYsIExPQ0tERVAsIG9yIHRob3NlIHN0YW5kYXJkIGtlcm5lbCBydW50aW1lIGNoZWNrcy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgbWlnaHQgd2FudCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgIGFyb3VuZCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAgYnV0IG15IGNvbmNsdXNpb24gaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd29ydGggYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0NBTExfNFxcKGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9ODcxMj1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG4tLVxua2VybmVsL2JwZi9idGYuYy04NzIyLVxua2VybmVsL2JwZi9idGYuYzo4NzIzOkJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50LCBmbGFncylcbmtlcm5lbC9icGYvYnRmLmMtODcyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEJURiBJbnRlcm5hbHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgQlBGIHR5cGUgZm9ybWF0IChCVEYpIGNvZGUsIHNwZWNpZmljYWxseSwgd2hlcmUgdGhlIGFjdGlvbiBpcyB0YWtpbmcgcGxhY2UuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvYnRmLmNgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBCVEYgaW1wbGVtZW50YXRpb24gbGlrZWx5IHJlc2lkZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhcm91bmQgbGluZSA4NzIzLiBJdCYjMzk7cyBub3QgYSByYW5kb20gbnVtYmVyOyBpdCYjMzk7cyBhIHN0cmF0ZWdpYyBzdGFydGluZyBwb2ludCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIGNvZGViYXNlcy4gSG9wZWZ1bGx5LCB0aGlzIGFyZWEgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJlaGF2aW9yIEkmIzM5O20gdHJ5aW5nIHRvIGRpYWdub3NlIG9yIHVuZGVyc3RhbmQgYmV0dGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIGFuZCB0aGVuIHVzZSB0aGF0IGFzIGEganVtcGluZy1vZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODcyMDpcdFx0cmV0dXJuIDA7XG44NzIxOlx0fVxuODcyMjpcdFxuODcyMzpcdEJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50LCBmbGFncylcbjg3MjQ6XHR7XG44NzI1Olx0XHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xuODcyNjpcdFx0aW50IGJ0Zl9vYmpfZmQgPSAwO1xuODcyNzpcdFx0bG9uZyByZXQ7XG44NzI4Olx0XG44NzI5Olx0XHRpZiAoZmxhZ3MpXG44NzMwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuODczMTpcdFxuODczMjpcdFx0aWYgKG5hbWVfc3ogXHUwMDNjPSAxIHx8IG5hbWVbbmFtZV9zeiAtIDFdKVxuODczMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjg3MzQ6XHRcbjg3MzU6XHRcdHJldCA9IGJwZl9maW5kX2J0Zl9pZChuYW1lLCBraW5kLCBcdTAwMjZidGYpO1xuODczNjpcdFx0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYnRmX2lzX21vZHVsZShidGYpKSB7XG44NzM3Olx0XHRcdGJ0Zl9vYmpfZmQgPSBfX2J0Zl9uZXdfZmQoYnRmKTtcbjg3Mzg6XHRcdFx0aWYgKGJ0Zl9vYmpfZmQgXHUwMDNjIDApIHtcbjg3Mzk6XHRcdFx0XHRidGZfcHV0KGJ0Zik7XG44NzQwOlx0XHRcdFx0cmV0dXJuIGJ0Zl9vYmpfZmQ7XG44NzQxOlx0XHRcdH1cbjg3NDI6XHRcdFx0cmV0dXJuIHJldCB8ICgoKHU2NClidGZfb2JqX2ZkKSBcdTAwM2NcdTAwM2MgMzIpO1xuODc0MzpcdFx0fVxuODc0NDpcdFx0aWYgKHJldCBcdTAwM2UgMClcbjg3NDU6XHRcdFx0YnRmX3B1dChidGYpO1xuODc0NjpcdFx0cmV0dXJuIHJldDtcbjg3NDc6XHR9XG44NzQ4Olx0XG44NzQ5Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG44NzUwOlx0XHQuZnVuY1x0XHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXG44NzUxOlx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG44NzUyOlx0XHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbjg3NTM6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjg3NTQ6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuODc1NTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG44NzU2Olx0XHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbjg3NTc6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuODc1ODpcdH07XG44NzU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MjkKCQkJCQkJCW91dHB1dDogMjc3CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCB0aGlzIGxvb2tzIHByZXR0eSBjbGVhbi1jdXQuIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwcm9wb3NlZCBjaGFuZ2VzLCBhbmQgaXQmIzM5O3MgYWxsIHJhdGhlciBkaXJlY3QuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIGEgYC5taWdodF9zbGVlcCA9IHRydWVgIGZsYWcgdG8gc29tZSBCUEYgaGVscGVyIGZ1bmN0aW9uIGRlZmluaXRpb25zOiBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgc2lnbmlmaWVzIHRoYXQgdGhlc2UgZnVuY3Rpb25zICpjYW4qIHBvdGVudGlhbGx5IHNsZWVwLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSB2ZXJpZmllciB0byB1bmRlcnN0YW5kLgoKQmV5b25kIHRoYXQsIHdlIGhhdmUgdmVyaWZpZXIgdmFsaWRhdGlvbiBhZGRpdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHMgY2hlY2tzIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCBpbiBjYWxsYmFja3MgYW5kIHRoZWlyIHN1YnByb2dyYW1zLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSB0aWdodGVuaW5nIHRoZSB2ZXJpZmljYXRpb24gcnVsZXMgcmVnYXJkaW5nIGRpcmVjdCBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGVzZSBjb250ZXh0cywgdXNpbmcgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCBhbmQgYGNoZWNrX2xkX2Fic2AuIFdlIGFsc28gaGF2ZSBhIGZpeCBmb3IgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCB0byBjb3JyZWN0bHkgYW5hbHl6ZSB0aGUgY2FsbGVyIGZyYW1lcyBmb3IgcmJ0cmVlIGNhbGxiYWNrIGNvbnRleHQuCgpGaW5hbGx5LCBzb21lIG5ldyBzZWxmdGVzdHMgYXJlIGluY2x1ZGVkIHRvIGNvdmVyIHRoZXNlIG5ldyB2ZXJpZmllciBydWxlcyBhbmQgc2xlZXBhYmxlIGhlbHBlcnMsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciBvbmdvaW5nIHJlbGlhYmlsaXR5LgoKSW1wb3J0YW50bHksIGJhc2VkIG9uIG15IGFuYWx5c2lzLCAqbm9uZSogb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGNoYW5nZSBtZW1vcnkgc2FmZXR5IHNlbWFudGljcyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIEtNU0FOLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55dGhpbmcgaGVyZSB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIHRvIGNhdGNoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGNhbiBiZSBzZXQgdG8gYGZhbHNlYC4KCk5vdywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzIGFzc2Vzc21lbnQuIFdoZW4gc2V0dGluZyB0aGUgcmVzdWx0cyBJJiMzOTtsbCBwcm92aWRlIGEgY2xlYXIgZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4vTE9DS0RFUCB3aXRoIEtNU0FOLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hhdCBlYWNoIHRvb2wgaXMgaW50ZW5kZWQgZm9yLCBhbmQgd2hpbGUgS0FTQU4vTE9DS0RFUCBhcmUgY3JpdGljYWwgZm9yIGRldGVjdGluZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIEtNU0FOIGlzIHRhaWxvcmVkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHBlcnRpbmVudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgaGVscGVyIG1ldGFkYXRhOlxuMS4gSXQgZmxhZ3MgaGVscGVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCkgd2l0aCBgLm1pZ2h0X3NsZWVwID0gdHJ1ZWAgdG8gcHJldmVudCB0aGVpciBpbnZvY2F0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0cy5cbjIuIEl0IGFkZHMgQlBGIHZlcmlmaWVyIGNoZWNrcyAoYGNoZWNrX2xkX2Fic2AgYW5kIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2ApIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0aGVpciBzdWJwcm9ncmFtcy5cbjMuIEl0IHVwZGF0ZXMgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCB0byBpdGVyYXRlIGFjcm9zcyBzdGFjayBmcmFtZXMgdG8gcHJvcGVybHkgdHJhY2sgcmJ0cmVlIGNhbGxiYWNrIGNvbnRleHQuXG40LiBJdCBhZGRzIHNlbGZ0ZXN0cyBmb3IgdGhlc2UgdmVyaWZpZXIgc2NlbmFyaW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUsIGluaXRpYWxpemUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzL2JvdW5kYXJpZXMgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBhbmQgc2xlZXAtaW4tYXRvbWljIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCB0b29scyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcbjEuIEl0IGZsYWdzIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzIChgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2ApIHdpdGggYC5taWdodF9zbGVlcCA9IHRydWVgIHRvIHByZXZlbnQgdGhlaXIgaW52b2NhdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXG4yLiBJdCBhZGRzIEJQRiB2ZXJpZmllciBjaGVja3MgKGBjaGVja19sZF9hYnNgIGFuZCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgKSB0byBkaXNhbGxvdyBgQlBGX0xEX1tBQlN8SU5EXWAgd2l0aGluIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxuNC4gSXQgYWRkcyBzZWxmdGVzdHMgZm9yIHRoZXNlIHZlcmlmaWVyIHNjZW5hcmlvcy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6MjAuMDI5NTE2NTA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjk3MjY4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfbGRfYWJzXCIsXG4gICAgXCJjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ1wiLFxuICAgIFwiaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JcIixcbiAgICBcImJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgaGVscGVyIG1ldGFkYXRhOlxcbjEuIEl0IGZsYWdzIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzIChgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2ApIHdpdGggYC5taWdodF9zbGVlcCA9IHRydWVgIHRvIHByZXZlbnQgdGhlaXIgaW52b2NhdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXFxuMi4gSXQgYWRkcyBCUEYgdmVyaWZpZXIgY2hlY2tzIChgY2hlY2tfbGRfYWJzYCBhbmQgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCkgdG8gZGlzYWxsb3cgYEJQRl9MRF9bQUJTfElORF1gIHdpdGhpbiBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHRoZWlyIHN1YnByb2dyYW1zLlxcbjMuIEl0IHVwZGF0ZXMgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCB0byBpdGVyYXRlIGFjcm9zcyBzdGFjayBmcmFtZXMgdG8gcHJvcGVybHkgdHJhY2sgcmJ0cmVlIGNhbGxiYWNrIGNvbnRleHQuXFxuNC4gSXQgYWRkcyBzZWxmdGVzdHMgZm9yIHRoZXNlIHZlcmlmaWVyIHNjZW5hcmlvcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUsIGluaXRpYWxpemUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzL2JvdW5kYXJpZXMgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBhbmQgc2xlZXAtaW4tYXRvbWljIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCB0b29scyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjIwLjAyOTUyMDk5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MzUzMjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4NjUwYzVlMDMyYzRjMTE4NmE4YWU0Y2U5OGE4MzNlYmRkZDQ4ZjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTozMToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IDVkOTNmZDgyZTc2NDUuLjlmMzNlOTVkNTc0MTAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtODc0OSw2ICs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnRcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XFxuIFxcdC5mdW5jXFx0XFx0PSBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLFxcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbitcXHQubWlnaHRfc2xlZXBcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG5pbmRleCBhODM5MDQxZTBkMDA4Li5kMDlkNGMzZmU1NDdjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbkBAIC04NzUsNiArODc1LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2lcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbiBcXHQuZnVuY1xcdFxcdD0gYnBmX2dldF9zdGFja19zbGVlcGFibGUsXFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4rXFx0Lm1pZ2h0X3NsZWVwXFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbkBAIC05MjgsNiArOTI5LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWZcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XFxuIFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbitcXHQubWlnaHRfc2xlZXBcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMzJkMzFmYTY3MDM2Yi4uMmNiOGZiYTY4Y2QxNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNTMwMiw2ICs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcXG4gXFx0aWYgKCFwcml2X3N0YWNrX3N1cHBvcnRlZClcXG4gXFx0XFx0c3VicHJvZ1tpZHhdLnByaXZfc3RhY2tfbW9kZSA9IE5PX1BSSVZfU1RBQ0s7XFxuIHByb2Nlc3NfZnVuYzpcXG4rXFx0aWYgKHN1YnByb2dbaWR4XS5oYXNfbGRfYWJzKSB7XFxuK1xcdFxcdGZvciAodG1wID0gaWR4OyB0bXAgXFx1MDAzZT0gMDsgdG1wID0gZGluZm9bdG1wXS5jYWxsZXIpIHtcXG4rXFx0XFx0XFx0aWYgKHN1YnByb2dbdG1wXS5pc19jYikge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlblxcbiBcXHQgKiBicGYyYnBmIGNhbGxzIGdldCBjb21iaW5lZCB3aXRoIHRhaWxjYWxscy4gTGltaXQgdGhlIGNhbGxlcidzIHN0YWNrXFxuIFxcdCAqIGRlcHRoIGZvciBzdWNoIGNhc2UgZG93biB0byAyNTYgc28gdGhhdCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpb1xcbkBAIC0xMDIzNSw5ICsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRcXHRmcmFtZSA/IHN0YXRlLVxcdTAwM2VmcmFtZVtmcmFtZSAtIDFdIDogTlVMTCk7XFxuIH1cXG4gXFxuLS8qIEFyZSB3ZSBjdXJyZW50bHkgdmVyaWZ5aW5nIHRoZSBjYWxsYmFjayBmb3IgYSByYnRyZWUgaGVscGVyIHRoYXQgbXVzdFxcbi0gKiBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQ/IElmIHNvLCBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IHVucmVsZWFzZWRcXG4tICogbG9ja1xcbisvKlxcbisgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3RcXG4rICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJ3Mgc3VicHJvZ3M/IElmIHNvLFxcbisgKiBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IGFuIHVucmVsZWFzZWQgbG9jay5cXG4gICovXFxuIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG5AQCAtMTAyNDUsMTcgKzEwMjU1LDE5IEBAIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZTtcXG4gXFx0aW50IGtmdW5jX2J0Zl9pZDtcXG4rXFx0dTMyIGZyYW1lO1xcbiBcXG4tXFx0aWYgKCFzdGF0ZS1cXHUwMDNlY3VyZnJhbWUpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdGNhbGxlZSA9IHN0YXRlLVxcdTAwM2VmcmFtZVtzdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbitcXHRmb3IgKGZyYW1lID0gc3RhdGUtXFx1MDAzZWN1cmZyYW1lOyBmcmFtZTsgZnJhbWUtLSkge1xcbitcXHRcXHRjYWxsZWUgPSBzdGF0ZS1cXHUwMDNlZnJhbWVbZnJhbWVdO1xcbitcXHRcXHRpZiAoIWNhbGxlZS1cXHUwMDNlaW5fY2FsbGJhY2tfZm4pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0aWYgKCFjYWxsZWUtXFx1MDAzZWluX2NhbGxiYWNrX2ZuKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZV0uaW1tO1xcbitcXHRcXHRpZiAoaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4gXFxuLVxcdGtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZV0uaW1tO1xcbi1cXHRyZXR1cm4gaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbkBAIC0xNzE3OSw2ICsxNzE5MSw3IEBAIHN0YXRpYyBib29sIG1heV9hY2Nlc3Nfc2tiKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbiAgKi9cXG4gc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuIFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcXG4gXFx0c3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182O1xcbiBcXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSk7XFxuQEAgLTE3MTg5LDYgKzE3MjAyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGZvciAoaSA9IHN0YXRlLVxcdTAwM2VjdXJmcmFtZTsgaTsgaS0tKSB7XFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZnJhbWVbaV0tXFx1MDAzZWluX2NhbGxiYWNrX2ZuKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghZW52LVxcdTAwM2VvcHMtXFx1MDAzZWdlbl9sZF9hYnMpIHtcXG4gXFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcImdlbl9sZF9hYnMgaXMgbnVsbFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXFxuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODFjNDU5NDM1NjgwZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG5AQCAtMTE1LDYgKzExNSw1OCBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfaGVscGVyKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3Vwcm9iZS5zXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJzbGVlcGFibGUgaGVscGVyIGJwZl9nZXRfc3RhY2sjXFxcIilcXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XFxuK1xcbitcXHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XFxuK1xcdGJwZl9nZXRfc3RhY2soY3R4LCBcXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXFxuK1xcdFxcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcXG4rXFx0YnBmX3ByZWVtcHRfZW5hYmxlKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj91cHJvYmUuc1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwic2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjXFxcIilcXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuK1xcbitcXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdGJwZl9wcmVlbXB0X2Rpc2FibGUoKTtcXG4rXFx0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFxcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcXG4rXFx0XFx0XFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xcbitcXHRicGZfcHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3Vwcm9iZS5zXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcXG4rXFxuK1xcdGJwZl9nZXRfc3RhY2soY3R4LCBcXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXFxuK1xcdFxcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3Vwcm9iZS5zXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzbGVlcGFibGVfZ2V0X3Rhc2tfc3RhY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4rXFxuK1xcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFxcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcXG4rXFx0XFx0XFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/ZmVudHJ5LnMvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwia2VybmVsIGZ1bmMgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciBpcyBzbGVlcGFibGUgd2l0aGluIG5vbi1wcmVlbXB0aWJsZSByZWdpb25cXFwiKVxcbiBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXFxuaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXFxuQEAgLTI3Miw2ICsyNzIsNDcgQEAgc3RhdGljIGJvb2wgbGVzc19fYmFkX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKHZvaWQpXFxuK3tcXG4rXFx0YnBmX3NwaW5fdW5sb2NrKFxcdTAwMjZnbG9jayk7XFxuK1xcdGJwZl9zcGluX2xvY2soXFx1MDAyNmdsb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfbmVzdGVkX3VubG9jayh2b2lkKVxcbit7XFxuK1xcdHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKCk7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBsZXNzX19iYWRfc3VicHJvZ191bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuK3tcXG4rXFx0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9hO1xcbitcXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2I7XFxuK1xcbitcXHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XFxuK1xcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcXG4rXFx0cmJ0cmVlX2NiX25lc3RlZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBub2RlX2EtXFx1MDAzZWtleSBcXHUwMDNjIG5vZGVfYi1cXHUwMDNla2V5O1xcbit9XFxuK1xcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9ub29wKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGxlc3NfX3N1YnByb2dfYWxsb3dlZChzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7XFxuK1xcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcXG4rXFxuK1xcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcXG4rXFx0bm9kZV9iID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xcbitcXHRyYnRyZWVfY2Jfbm9vcCgpO1xcbitcXG4rXFx0cmV0dXJuIG5vZGVfYS1cXHUwMDNla2V5IFxcdTAwM2Mgbm9kZV9iLVxcdTAwM2VrZXk7XFxuK31cXG4rXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG4gbG9uZyBhZGRfd2l0aF9jYihib29sIChjYikoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpKVxcbiB7XFxuQEAgLTMzMCw0ICszNzEsMTggQEAgbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2JfcmVzX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW4ndCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxcIilcXG4rbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBhZGRfd2l0aF9jYihsZXNzX19iYWRfc3VicHJvZ191bmxvY2spO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX3N1YnByb2dfYWxsb3dlZCk7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbmluZGV4IGE3Yzg0ZDNmYTRjNzMuLmUwOTI2NzY3YmJkM2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcXG5AQCAtMTA4LDYgKzEwOCwzMCBAQCBpbnQgdGltZXJfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB0aW1lcl9idGZfZmluZF9jYih2b2lkICptYXAsIGludCAqa2V5LCBzdHJ1Y3QgYnBmX3RpbWVyICp0aW1lcilcXG4re1xcbitcXHRjaGFyIG5hbWVbXSA9IFxcXCJ0YXNrX3N0cnVjdFxcXCI7XFxuK1xcbitcXHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwic2xlZXBhYmxlIGhlbHBlciBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kI3t7WzAtOV0rfX0gaW4gbm9uLXNsZWVwYWJsZSBwcm9nXFxcIilcXG4raW50IHRpbWVyX2J0Zl9maW5kX3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0aW1lcl9lbGVtICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGltZXJfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3RpbWVyX2luaXQoXFx1MDAyNnZhbC1cXHUwMDNldCwgXFx1MDAyNnRpbWVyX21hcCwgMCk7XFxuK1xcdGJwZl90aW1lcl9zZXRfY2FsbGJhY2soXFx1MDAyNnZhbC1cXHUwMDNldCwgdGltZXJfYnRmX2ZpbmRfY2IpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBzeXNjYWxsX3N5c19icGZfcHJvZyh2b2lkICpjdHgpXFxuQEAgLTEyNiw2ICsxNTAsMTYgQEAgaW50IHN5c2NhbGxfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzeXNjYWxsX2J0Zl9maW5kX3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdGNoYXIgbmFtZVtdID0gXFxcInRhc2tfc3RydWN0XFxcIjtcXG4rXFxuK1xcdGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogV29ya3F1ZXVlIHRlc3RzICovXFxuIFxcbiBzdHJ1Y3Qgd3FfZWxlbSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuY1xcbmluZGV4IDA5ZTgxYjk5ZWVjYjQuLjMyOTg5Zjk4MWZiNjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXFxuQEAgLTE5NCw2ICsxOTQsMTAyIEBAIF9fbmFrZWQgdm9pZCBsZF9pbmRfc3VicHJvZ19ib3RoX3BhdGhzX3NhZmUodm9pZClcXG4gXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXFxuK3N0YXRpYyBpbnQgbGRfYWJzX2NhbGxiYWNrKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInI2ID0gKih1NjQgKikocjIgKyAwKTtcXFwiXFxuK1xcdFxcXCIuOGJ5dGUgJVtsZF9hYnNdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJsZF9hYnM6IHJlamVjdCBpbiBjYWxsYmFja1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcXCIpXFxuK2ludCBsZF9hYnNfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRicGZfbG9vcCgxLCBsZF9hYnNfY2FsbGJhY2ssIFxcdTAwMjZza2IsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxcbitzdGF0aWMgaW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInI2ID0gcjE7XFxcIlxcbitcXHRcXFwicjcgPSAwO1xcXCJcXG4rXFx0XFxcIi44Ynl0ZSAlW2xkX2luZF07XFxcIlxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6XFxuK1xcdDogX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcXG4rc3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2sodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjEgPSAqKHU2NCAqKShyMiArIDApO1xcXCJcXG4rXFx0XFxcImNhbGwgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2c7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBzdWJwcm9nXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxcIilcXG4raW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0YnBmX2xvb3AoMSwgbGRfaW5kX2NhbGxiYWNrLCBcXHUwMDI2c2tiLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInI2ID0gJVtza2JdO1xcXCJcXG4rXFx0XFxcInI3ID0gMDtcXFwiXFxuK1xcdFxcXCIuOGJ5dGUgJVtsZF9pbmRdO1xcXCJcXG4rXFx0OlxcbitcXHQ6IFtza2JdIFxcXCJyXFxcIihza2IpLFxcbitcXHQgIF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKVxcbitcXHQ6IF9fY2xvYmJlcl9jb21tb24sIFxcXCJyNlxcXCIsIFxcXCJyN1xcXCIpO1xcbitcXHRyZXR1cm4gc2tiLVxcdTAwM2VtYXJrO1xcbit9XFxuK1xcbitfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gbGRfaW5kX2dsb2JhbF9zdGF0aWMoc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrKF9fdTMyIGluZGV4LCBzdHJ1Y3QgX19za19idWZmICoqY3R4KVxcbit7XFxuK1xcdGxkX2luZF9nbG9iYWwoKmN0eCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImxkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxcIilcXG4raW50IGxkX2luZF9nbG9iYWxfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRicGZfbG9vcCgxLCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrLCBcXHUwMDI2c2tiLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwibGRfaW5kOiBhbGxvdyBpbiBub24tY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2dcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGxkX2luZF9nbG9iYWxfc3VicHJvZ19vayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0cmV0dXJuIGxkX2luZF9nbG9iYWwoc2tiKTtcXG4rfVxcbitcXG4gLypcXG4gICogbGRfe2FicyxpbmR9IGluIHN1YnByb2dzIHJlcXVpcmUgc2NhbGFyIChpbnQpIHJldHVybiB0eXBlIGluIEJURi5cXG4gICogQSB0ZXN0IHdpdGggdm9pZCByZXR1cm4gbXVzdCBiZSByZWplY3RlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6MjEuNTIzNzc2MjgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTUyNDQ3ODE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9hYnNcIixcbiAgICBcImNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nXCIsXG4gICAgXCJpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYlwiLFxuICAgIFwiYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4NjUwYzVlMDMyYzRjMTE4NmE4YWU0Y2U5OGE4MzNlYmRkZDQ4ZjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjMxOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDVkOTNmZDgyZTc2NDUuLjlmMzNlOTVkNTc0MTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtODc0OSw2ICs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnRcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbitcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbmluZGV4IGE4MzkwNDFlMGQwMDguLmQwOWQ0YzNmZTU0N2MgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTg3NSw2ICs4NzUsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaVxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2dldF9zdGFja19zbGVlcGFibGUsXG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbitcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuQEAgLTkyOCw2ICs5MjksNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZlxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuK1x0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMzJkMzFmYTY3MDM2Yi4uMmNiOGZiYTY4Y2QxNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNTMwMiw2ICs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbiBcdGlmICghcHJpdl9zdGFja19zdXBwb3J0ZWQpXG4gXHRcdHN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLO1xuIHByb2Nlc3NfZnVuYzpcbitcdGlmIChzdWJwcm9nW2lkeF0uaGFzX2xkX2Ficykge1xuK1x0XHRmb3IgKHRtcCA9IGlkeDsgdG1wIFx1MDAzZT0gMDsgdG1wID0gZGluZm9bdG1wXS5jYWxsZXIpIHtcbitcdFx0XHRpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4gXHQvKiBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHRoYXQgbWlnaHQgaGFwcGVuIHdoZW5cbiBcdCAqIGJwZjJicGYgY2FsbHMgZ2V0IGNvbWJpbmVkIHdpdGggdGFpbGNhbGxzLiBMaW1pdCB0aGUgY2FsbGVyJ3Mgc3RhY2tcbiBcdCAqIGRlcHRoIGZvciBzdWNoIGNhc2UgZG93biB0byAyNTYgc28gdGhhdCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpb1xuQEAgLTEwMjM1LDkgKzEwMjQ0LDEwIEBAIHN0YXRpYyB2b2lkIGFjY291bnRfY3VycmVudF9wYXRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdGZyYW1lID8gc3RhdGUtXHUwMDNlZnJhbWVbZnJhbWUgLSAxXSA6IE5VTEwpO1xuIH1cbiBcbi0vKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGEgcmJ0cmVlIGhlbHBlciB0aGF0IG11c3Rcbi0gKiBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQ/IElmIHNvLCBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IHVucmVsZWFzZWRcbi0gKiBsb2NrXG4rLypcbisgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3RcbisgKiBiZSBjYWxsZWQgd2l0aCBhIGxvY2sgaGVsZCwgb3Igb25lIG9mIHRoYXQgY2FsbGJhY2sncyBzdWJwcm9ncz8gSWYgc28sXG4rICogbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCBhbiB1bnJlbGVhc2VkIGxvY2suXG4gICovXG4gc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG5AQCAtMTAyNDUsMTcgKzEwMjU1LDE5IEBAIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZTtcbiBcdGludCBrZnVuY19idGZfaWQ7XG4rXHR1MzIgZnJhbWU7XG4gXG4tXHRpZiAoIXN0YXRlLVx1MDAzZWN1cmZyYW1lKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRjYWxsZWUgPSBzdGF0ZS1cdTAwM2VmcmFtZVtzdGF0ZS1cdTAwM2VjdXJmcmFtZV07XG4rXHRmb3IgKGZyYW1lID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGZyYW1lOyBmcmFtZS0tKSB7XG4rXHRcdGNhbGxlZSA9IHN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lXTtcbitcdFx0aWYgKCFjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm4pXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoIWNhbGxlZS1cdTAwM2Vpbl9jYWxsYmFja19mbilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS1cdTAwM2VjYWxsc2l0ZV0uaW1tO1xuK1x0XHRpZiAoaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbiBcbi1cdGtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLVx1MDAzZWNhbGxzaXRlXS5pbW07XG4tXHRyZXR1cm4gaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgcmV0dmFsX3JhbmdlX3dpdGhpbihzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByYW5nZSwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbkBAIC0xNzE3OSw2ICsxNzE5MSw3IEBAIHN0YXRpYyBib29sIG1heV9hY2Nlc3Nfc2tiKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuICAqL1xuIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XG4gXHRzdGF0aWMgY29uc3QgaW50IGN0eF9yZWcgPSBCUEZfUkVHXzY7XG4gXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbkBAIC0xNzE4OSw2ICsxNzIwMiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0Zm9yIChpID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGk7IGktLSkge1xuK1x0XHRpZiAoc3RhdGUtXHUwMDNlZnJhbWVbaV0tXHUwMDNlaW5fY2FsbGJhY2tfZm4pIHtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoIWVudi1cdTAwM2VvcHMtXHUwMDNlZ2VuX2xkX2Ficykge1xuIFx0XHR2ZXJpZmllcl9idWcoZW52LCBcImdlbl9sZF9hYnMgaXMgbnVsbFwiKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5pbmRleCA2ZDVmY2U3ZTZmZmM5Li44MWM0NTk0MzU2ODBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcbkBAIC0xMTUsNiArMTE1LDU4IEBAIGludCBwcmVlbXB0X3NsZWVwYWJsZV9oZWxwZXIodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcInNsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF9zdGFjayNcIilcbitpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbitcbitcdGJwZl9wcmVlbXB0X2Rpc2FibGUoKTtcbitcdGJwZl9nZXRfc3RhY2soY3R4LCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbitcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuK1x0YnBmX3ByZWVtcHRfZW5hYmxlKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3Vwcm9iZS5zXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwic2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjXCIpXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1xuK1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0YnBmX3ByZWVtcHRfZGlzYWJsZSgpO1xuK1x0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuK1x0XHRcdCAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdGJwZl9wcmVlbXB0X2VuYWJsZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fc3VjY2Vzc1xuK2ludCBzbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbitcbitcdGJwZl9nZXRfc3RhY2soY3R4LCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbitcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fc3VjY2Vzc1xuK2ludCBzbGVlcGFibGVfZ2V0X3Rhc2tfc3RhY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4rXG4rXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRicGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXG4rXHRcdFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJrZXJuZWwgZnVuYyBicGZfY29weV9mcm9tX3VzZXJfc3RyIGlzIHNsZWVwYWJsZSB3aXRoaW4gbm9uLXByZWVtcHRpYmxlIHJlZ2lvblwiKVxuIGludCBwcmVlbXB0X3NsZWVwYWJsZV9rZnVuYyh2b2lkICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuQEAgLTI3Miw2ICsyNzIsNDcgQEAgc3RhdGljIGJvb2wgbGVzc19fYmFkX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfdW5sb2NrX3JlbG9jayh2b2lkKVxuK3tcbitcdGJwZl9zcGluX3VubG9jayhcdTAwMjZnbG9jayk7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdsb2NrKTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfbmVzdGVkX3VubG9jayh2b2lkKVxuK3tcbitcdHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKCk7XG4rXHRhc20gdm9sYXRpbGUgKFwiXCIpO1xuK31cbitcbitzdGF0aWMgYm9vbCBsZXNzX19iYWRfc3VicHJvZ191bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4re1xuK1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9hO1xuK1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iO1xuK1xuK1x0bm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuK1x0bm9kZV9iID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuK1x0cmJ0cmVlX2NiX25lc3RlZF91bmxvY2soKTtcbitcbitcdHJldHVybiBub2RlX2EtXHUwMDNla2V5IFx1MDAzYyBub2RlX2ItXHUwMDNla2V5O1xuK31cbitcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9ub29wKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbGVzc19fc3VicHJvZ19hbGxvd2VkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuK3tcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTtcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcbitcbitcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdHJidHJlZV9jYl9ub29wKCk7XG4rXG4rXHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxuIGxvbmcgYWRkX3dpdGhfY2IoYm9vbCAoY2IpKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKSlcbiB7XG5AQCAtMzMwLDQgKzM3MSwxOCBAQCBsb25nIHJidHJlZV9hcGlfYWRkX2JhZF9jYl9yZXNfc3Bpbl91bmxvY2sodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbid0IHNwaW5fe2xvY2ssdW5sb2NrfSBpbiByYnRyZWUgY2JcIilcbitsb25nIHJidHJlZV9hcGlfYWRkX2JhZF9jYl9zdWJwcm9nX3VubG9jayh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayk7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fc3VjY2Vzc1xuK2xvbmcgcmJ0cmVlX2FwaV9hZGRfY2Jfc3VicHJvZ19hbGxvd2VkKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gYWRkX3dpdGhfY2IobGVzc19fc3VicHJvZ19hbGxvd2VkKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5pbmRleCBhN2M4NGQzZmE0YzczLi5lMDkyNjc2N2JiZDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuQEAgLTEwOCw2ICsxMDgsMzAgQEAgaW50IHRpbWVyX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHRpbWVyX2J0Zl9maW5kX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHN0cnVjdCBicGZfdGltZXIgKnRpbWVyKVxuK3tcbitcdGNoYXIgbmFtZVtdID0gXCJ0YXNrX3N0cnVjdFwiO1xuK1xuK1x0YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZChuYW1lLCBzaXplb2YobmFtZSksIEJURl9LSU5EX1NUUlVDVCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcInNsZWVwYWJsZSBoZWxwZXIgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCN7e1swLTldK319IGluIG5vbi1zbGVlcGFibGUgcHJvZ1wiKVxuK2ludCB0aW1lcl9idGZfZmluZF9wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGltZXJfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl90aW1lcl9pbml0KFx1MDAyNnZhbC1cdTAwM2V0LCBcdTAwMjZ0aW1lcl9tYXAsIDApO1xuK1x0YnBmX3RpbWVyX3NldF9jYWxsYmFjayhcdTAwMjZ2YWwtXHUwMDNldCwgdGltZXJfYnRmX2ZpbmRfY2IpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgc3lzY2FsbF9zeXNfYnBmX3Byb2codm9pZCAqY3R4KVxuQEAgLTEyNiw2ICsxNTAsMTYgQEAgaW50IHN5c2NhbGxfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInN5c2NhbGxcIilcbitfX3N1Y2Nlc3NcbitpbnQgc3lzY2FsbF9idGZfZmluZF9wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRjaGFyIG5hbWVbXSA9IFwidGFza19zdHJ1Y3RcIjtcbitcbitcdGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIFdvcmtxdWV1ZSB0ZXN0cyAqL1xuIFxuIHN0cnVjdCB3cV9lbGVtIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbmluZGV4IDA5ZTgxYjk5ZWVjYjQuLjMyOTg5Zjk4MWZiNjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuY1xuQEAgLTE5NCw2ICsxOTQsMTAyIEBAIF9fbmFrZWQgdm9pZCBsZF9pbmRfc3VicHJvZ19ib3RoX3BhdGhzX3NhZmUodm9pZClcbiBcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfYWJzX2NhbGxiYWNrKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjYgPSAqKHU2NCAqKShyMiArIDApO1wiXG4rXHRcIi44Ynl0ZSAlW2xkX2Fic107XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2FiczogcmVqZWN0IGluIGNhbGxiYWNrXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1wiKVxuK2ludCBsZF9hYnNfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRicGZfbG9vcCgxLCBsZF9hYnNfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2codm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyNiA9IHIxO1wiXG4rXHRcInI3ID0gMDtcIlxuK1x0XCIuOGJ5dGUgJVtsZF9pbmRdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjEgPSAqKHU2NCAqKShyMiArIDApO1wiXG4rXHRcImNhbGwgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2c7XCJcbitcdFwiZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwibGRfaW5kOiByZWplY3QgaW4gY2FsbGJhY2sgc3VicHJvZ1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcIilcbitpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2dfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRicGZfbG9vcCgxLCBsZF9pbmRfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgaW50IGxkX2luZF9nbG9iYWxfc3RhdGljKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyNiA9ICVbc2tiXTtcIlxuK1x0XCJyNyA9IDA7XCJcbitcdFwiLjhieXRlICVbbGRfaW5kXTtcIlxuK1x0OlxuK1x0OiBbc2tiXSBcInJcIihza2IpLFxuK1x0ICBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSlcbitcdDogX19jbG9iYmVyX2NvbW1vbiwgXCJyNlwiLCBcInI3XCIpO1xuK1x0cmV0dXJuIHNrYi1cdTAwM2VtYXJrO1xuK31cbitcbitfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gbGRfaW5kX2dsb2JhbF9zdGF0aWMoc2tiKTtcbit9XG4rXG4rc3RhdGljIGludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrKF9fdTMyIGluZGV4LCBzdHJ1Y3QgX19za19idWZmICoqY3R4KVxuK3tcbitcdGxkX2luZF9nbG9iYWwoKmN0eCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1wiKVxuK2ludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX2xvb3AoMSwgbGRfaW5kX2dsb2JhbF9jYWxsYmFjaywgXHUwMDI2c2tiLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwibGRfaW5kOiBhbGxvdyBpbiBub24tY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2dcIilcbitfX3N1Y2Nlc3NcbitpbnQgbGRfaW5kX2dsb2JhbF9zdWJwcm9nX29rKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gbGRfaW5kX2dsb2JhbChza2IpO1xuK31cbitcbiAvKlxuICAqIGxkX3thYnMsaW5kfSBpbiBzdWJwcm9ncyByZXF1aXJlIHNjYWxhciAoaW50KSByZXR1cm4gdHlwZSBpbiBCVEYuXG4gICogQSB0ZXN0IHdpdGggdm9pZCByZXR1cm4gbXVzdCBiZSByZWplY3RlZC5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjIxLjUyMzc3NzczMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTQyNzk2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEJQRiBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIGRpZmYgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBTbywgSSBzZWUgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBhIHNldCBvZiBzZWxmdGVzdHMuXG5cbkltbWVkaWF0ZWx5LCBJIG5vdGljZSB0aGUgYWRkaXRpb24gb2YgYC5taWdodF9zbGVlcCA9IHRydWVgIGluIHRoZSBgLnByb3RvYCBzdHJ1Y3R1cmVzIGZvciBzZXZlcmFsIGZ1bmN0aW9uczogYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IG5vdyBiZSBhYmxlIHRvIHNsZWVwLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbG9ja2luZyBhbmQgcHJlZW1wdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzLCBob3dldmVyLCBzZWVtcyB0byBiZSBpbiB0aGUgdmVyaWZpZXIuIFNwZWNpZmljYWxseSwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgc2VlIG5ldyBjaGVja3MgaW4gYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCwgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCwgYW5kIGBjaGVja19sZF9hYnNgLiBUaGUgdmVyaWZpZXIgaXMgY2xlYXJseSBhZGRpbmcgb3IgcmVmaW5pbmcgcmVzdHJpY3Rpb25zIGFyb3VuZCB0aGUgdXNlIG9mIGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zLiBJIHNlZSBpdCByZWplY3RpbmcgY29kZSB3aXRoIGBcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXG5cImAgaWYgaXQgZmluZHMgY2FsbHMgdGhhdCB1c2UgdGhlc2UuIEkgYWxzbyBzZWUgY29kZSB0aGF0IHdhbGtzIHRocm91Z2ggdGhlIGNhbGxlciBjaGFpbiAodGhlIHN0YWNrIGZyYW1lKSwgY2hlY2tpbmcgdG8gc2VlIGlmIGNvZGUgbWlnaHQgYmUgaW4gYSBjYWxsYmFjay4gVGhpcyBzaWduYWxzIHRoYXQgdGhlc2UgY2FsbHMgd2l0aGluIGNhbGxiYWNrcyBhcmUgdGhlIHRoaW5nIHdlJ3JlIHRyeWluZyB0byBwcmV2ZW50LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGVzZSBjaGVja3MgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2h5IHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgYmVpbmcgcHV0IGluIHBsYWNlIG5vdy4gQXJlIHRoZXJlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgaXMgdGhpcyByZWxhdGVkIHRvIHN0YWJpbGl0eSBhbmQgcHJldmVudGluZyBoYW5ncyBvciBkZWFkbG9ja3M/IEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBoYXNfbGRfYWJzYCwgYGlzX2NiYCwgYGluX2NhbGxiYWNrX2ZuYCwgYW5kIGBpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuY2AgYW5kIGhvdyB0aGV5IGludGVycmVsYXRlLlxuXG5GaW5hbGx5LCB0aGUgc2VsZnRlc3RzIGFyZSBhIGdvb2Qgc2lnbi4gVGhleSdyZSBwcm9iYWJseSBkZXNpZ25lZCB0byB2YWxpZGF0ZSB0aGVzZSBuZXcgcmVzdHJpY3Rpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGluZ3MgYXJlIHdvcmtpbmcgYXMgaW50ZW5kZWQsIGFuZCBkb24ndCByZWdyZXNzIG9sZCBmdW5jdGlvbmFsaXR5LiBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aG9zZSB0byBzZWUgaG93IHRoaXMgaXMgYmVpbmcgdGVzdGVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZ3JlcCBhcm91bmQgdGhvc2UgZmlsZXMgdG8gY29ubmVjdCB0aGUgZG90cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkwNCwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjQyLjA2NjU3NzEyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg3MDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvfGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NifGNoZWNrX2xkX2Fic3xjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTg3MjM9QlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnQsIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NzQ4LVxcbmtlcm5lbC9icGYvYnRmLmM6ODc0OTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3NTAtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjYzNi1cXHRjYXNlIEJQRl9GVU5DX2J0Zl9maW5kX2J5X25hbWVfa2luZDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjM3OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90bztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjM4LVxcdGNhc2UgQlBGX0ZVTkNfc3lzX2Nsb3NlOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMj1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEzOnN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTQtc3RhdGljIGJvb2wgaXNfdHJhY2luZ19wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyNzc9c3RydWN0IGJwZl9zdWJwcm9nX2NhbGxfZGVwdGhfaW5mbyB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI4Ni0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTI4NzpzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyODgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8gKmRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU0ODk9c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTIxLVxcdFxcdFxcdHByaXZfc3RhY2tfc3VwcG9ydGVkID0gIWkgXFx1MDAyNlxcdTAwMjYgcHJpdl9zdGFja19tb2RlID09IFBSSVZfU1RBQ0tfQURBUFRJVkU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU1MjI6XFx0XFx0XFx0cmV0ID0gY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coZW52LCBpLCBkaW5mbyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTUyMy1cXHRcXHRcXHRcXHRcXHRwcml2X3N0YWNrX3N1cHBvcnRlZCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODY4OT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgzNi1cXHRjYXNlIEFSR19QVFJfVE9fU1BJTl9MT0NLOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODM3OlxcdFxcdGlmIChpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihlbnYpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4MzgtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW4ndCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIzNz1zdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjUxLSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDI1MjpzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI1My17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI1ODk9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk2OC1cXHRcXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTY5OlxcdFxcdFxcdFxcdGlmIChpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihlbnYpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTcwLVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgbm90IGFsbG93ZWQgaW4gcmJ0cmVlIGNiXFxcXG5cXFwiLCBmdW5jX25hbWUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjU1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzI1NjpcXHRcXHRcXHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI1Ny1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbid0IHJlc19zcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY4MT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODc2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg3NzpcXHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSBcXHUwMDI2XFx1MDAyNiAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4NzgtXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJDYWxsaW5nIGJwZl9yY3VfcmVhZF97bG9jayx1bmxvY2t9IGluIHVubmVjZXNzYXJ5IHJidHJlZSBjYWxsYmFja1xcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcxNjU9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19za2IoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcxOTEtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MTkyOnN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcxOTMte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTIzPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODIxNS1cXHRcXHRpZiAobW9kZSA9PSBCUEZfQUJTIHx8IG1vZGUgPT0gQlBGX0lORClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyMTY6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2xkX2FicyhlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODIxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDIuMTE2NDUxMDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxOTIyMDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgVmVyaWZpZXIgYW5kIEhlbHBlciBGdW5jdGlvbnM6IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIEJQRiB2ZXJpZmllciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBqdW1wIG91dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBga2VybmVsL2JwZi9idGYuY2AsIGFuZCBga2VybmVsL2JwZi9zdGFja21hcC5jYCDigJMgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoMilgIHN5c2NhbGwuIEdpdmVuIG91ciBmdXp6aW5nIHRyaWFnZSBndWlkZWxpbmVzLCB0aGlzIGlzIGEgY2xlYXIgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHNpdHVhdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAsIGBjaGVja19sZF9hYnNgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuXG5cblRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVzZSBzdGF0aWMsIGV4cG9ydGVkLCBvciBpbmxpbmVkPyAgTGV0J3Mgc2VlOiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBhbmQgYGNoZWNrX2xkX2Fic2AgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGB2ZXJpZmllci5jYC4gIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBhcmUgKm5vdCogc3RhdGljOyB0aGV5J3JlIEJQRl9DQUxMcyBpbiBgYnRmLmNgIGFuZCBgc3RhY2ttYXAuY2AgcmVzcGVjdGl2ZWx5LCB3aGljaCBpcyBnb29kIGZvciBvdXIgcHVycG9zZXMuICBBbmQgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gdmVyaWZpZXIgZW50cnlwb2ludC4gTm93LCBsZXQncyBkZWx2ZSBpbnRvIHRoZSBzdHJ1Y3R1cmUgYW5kIGNhbGwtZmxvdyBvZiB0aGUgc3RhdGljIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIHVzZWQgd2l0aGluIGB2ZXJpZmllci5jYC4gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBzdGF0aWMgdmVyaWZpZXIgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBhIGJldHRlciBhdHRhY2sgc3VyZmFjZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDYuNjM1Njc1MDIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjgwOlxcdFxcdGludCBmcmFtZTsgLyogIyBvZiBjb25zZWN1dGl2ZSBzdGF0aWMgY2FsbCBzdGFjayBmcmFtZXMgb24gdG9wIG9mIHN0YWNrICovXFxuNTI4MTpcXHR9O1xcbjUyODI6XFx0XFxuNTI4MzpcXHQvKiBzdGFydGluZyBmcm9tIG1haW4gYnBmIGZ1bmN0aW9uIHdhbGsgYWxsIGluc3RydWN0aW9ucyBvZiB0aGUgZnVuY3Rpb25cXG41Mjg0OlxcdCAqIGFuZCByZWN1cnNpdmVseSB3YWxrIGFsbCBjYWxsZWVzIHRoYXQgZ2l2ZW4gZnVuY3Rpb24gY2FuIGNhbGwuXFxuNTI4NTpcXHQgKiBJZ25vcmUganVtcCBhbmQgZXhpdCBpbnNucy5cXG41Mjg2OlxcdCAqL1xcbjUyODc6XFx0c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LFxcbjUyODg6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8gKmRpbmZvLFxcbjUyODk6XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgcHJpdl9zdGFja19zdXBwb3J0ZWQpXFxuNTI5MDpcXHR7XFxuNTI5MTpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbjUyOTI6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2k7XFxuNTI5MzpcXHRcXHRpbnQgZGVwdGggPSAwLCBmcmFtZSA9IDAsIGksIHN1YnByb2dfZW5kLCBzdWJwcm9nX2RlcHRoO1xcbjUyOTQ6XFx0XFx0Ym9vbCB0YWlsX2NhbGxfcmVhY2hhYmxlID0gZmFsc2U7XFxuNTI5NTpcXHRcXHRpbnQgdG90YWw7XFxuNTI5NjpcXHRcXHRpbnQgdG1wO1xcbjUyOTc6XFx0XFxuNTI5ODpcXHRcXHQvKiBubyBjYWxsZXIgaWR4ICovXFxuNTI5OTpcXHRcXHRkaW5mb1tpZHhdLmNhbGxlciA9IC0xO1xcbjUzMDA6XFx0XFxuNTMwMTpcXHRcXHRpID0gc3VicHJvZ1tpZHhdLnN0YXJ0O1xcbjUzMDI6XFx0XFx0aWYgKCFwcml2X3N0YWNrX3N1cHBvcnRlZClcXG41MzAzOlxcdFxcdFxcdHN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLO1xcbjUzMDQ6XFx0cHJvY2Vzc19mdW5jOlxcbjUzMDU6XFx0XFx0aWYgKHN1YnByb2dbaWR4XS5oYXNfbGRfYWJzKSB7XFxuNTMwNjpcXHRcXHRcXHRmb3IgKHRtcCA9IGlkeDsgdG1wIFxcdTAwM2U9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7XFxuNTMwNzpcXHRcXHRcXHRcXHRpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7XFxuNTMwODpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXFxcblxcXCIpO1xcbjUzMDk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTMxMDpcXHRcXHRcXHRcXHR9XFxuNTMxMTpcXHRcXHRcXHR9XFxuNTMxMjpcXHRcXHR9XFxuNTMxMzpcXHRcXG41MzE0OlxcdFxcdC8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlblxcbjUzMTU6XFx0XFx0ICogYnBmMmJwZiBjYWxscyBnZXQgY29tYmluZWQgd2l0aCB0YWlsY2FsbHMuIExpbWl0IHRoZSBjYWxsZXIncyBzdGFja1xcbjUzMTY6XFx0XFx0ICogZGVwdGggZm9yIHN1Y2ggY2FzZSBkb3duIHRvIDI1NiBzbyB0aGF0IHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvXFxuNTMxNzpcXHRcXHQgKiB3b3VsZCByZXN1bHQgaW4gOGsgc3RhY2sgc2l6ZSAoMzIgd2hpY2ggaXMgdGFpbGNhbGwgbGltaXQgKiAyNTYgPVxcbjUzMTg6XFx0XFx0ICogOGspLlxcbjUzMTk6XFx0XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDYuNjM2NjY0NTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2ODAxODA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlRGIGFuZCBTdGFja21hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCVEYgYW5kIHN0YWNrIG1hcHMgYXJlIHdvcmtpbmcsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgZmluZGluZyBCVEYgZGF0YSBieSBuYW1lIGFuZCBjaGVja2luZyBmb3Igc2xlZXBhYmlsaXR5IG9uIHRoZSBzdGFjay4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGUgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCBhbmQgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCBmdW5jdGlvbnMuIEdpdmVuIHRoYXQgdGhleSdyZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXRpZXMsIHRoZXkncmUgcHJvYmFibHkgcmVzaWRpbmcgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgbW9zdCBsb2dpY2FsIGxvY2F0aW9ucyB0byBzdGFydCBhcmUgYGtlcm5lbC9icGYvYnRmLmNgIGFuZCBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgdGhlIGxvZ2ljIGZsb3cgb2YgdGhlc2Uga2V5IGZ1bmN0aW9ucywgd2hpY2ggd2lsbCBob3BlZnVsbHkgaWxsdW1pbmF0ZSB0aGUgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDguNzA0Njg1NzM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYnRmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODc0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODc0MDpcXHRcXHRcXHRcXHRyZXR1cm4gYnRmX29ial9mZDtcXG44NzQxOlxcdFxcdFxcdH1cXG44NzQyOlxcdFxcdFxcdHJldHVybiByZXQgfCAoKCh1NjQpYnRmX29ial9mZCkgXFx1MDAzY1xcdTAwM2MgMzIpO1xcbjg3NDM6XFx0XFx0fVxcbjg3NDQ6XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuODc0NTpcXHRcXHRcXHRidGZfcHV0KGJ0Zik7XFxuODc0NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjg3NDc6XFx0fVxcbjg3NDg6XFx0XFxuODc0OTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG44NzUwOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLFxcbjg3NTE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG44NzUyOlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG44NzUzOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuODc1NDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuODc1NTpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuODc1NjpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1NzpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1ODpcXHR9O1xcbjg3NTk6XFx0XFxuODc2MDpcXHRCVEZfSURfTElTVF9HTE9CQUwoYnRmX3RyYWNpbmdfaWRzLCBNQVhfQlRGX1RSQUNJTkdfVFlQRSlcXG44NzYxOlxcdCNkZWZpbmUgQlRGX1RSQUNJTkdfVFlQRShuYW1lLCB0eXBlKSBCVEZfSUQoc3RydWN0LCB0eXBlKVxcbjg3NjI6XFx0QlRGX1RSQUNJTkdfVFlQRV94eHhcXG44NzYzOlxcdCN1bmRlZiBCVEZfVFJBQ0lOR19UWVBFXFxuODc2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDguNzA1MTAwMDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MDAzNjY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFN0YWNrIE1hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzdGFjayBtYXBzIHdvcmsgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLiBUaGlzIGZpbGUgc2hvdWxkIGhvbGQgdGhlIGtleSBsb2dpYyBmb3IgYWxsb2NhdGluZywgbWFuYWdpbmcsIGFuZCBpbnRlcmFjdGluZyB3aXRoIEJQRiBzdGFjayBtYXBzLiBJJ20gaG9waW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgc3RhY2sgc3BhY2UgaXMgcmVzZXJ2ZWQsIGhvdyBkYXRhIGlzIHdyaXR0ZW4gYW5kIHJlYWQsIGFuZCBob3cgdGhlc2UgbWFwcyBpbnRlZ3JhdGUgd2l0aCB0aGUgYnJvYWRlciBCUEYgdmVyaWZpZXIgYW5kIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGV5IGVtcGxveSwgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHVzZWQgdG8gbWFrZSBzdGFjayBtYXBzIGVmZmljaWVudCBpbiB0aGUgY29udGV4dCBvZiBCUEYgcHJvZ3JhbXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjUwLjg3NTE0Njk1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHQgICB1NjQsIGZsYWdzKVxcbiA4NzE6XFx0e1xcbiA4NzI6XFx0XFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XFxuIDg3MzpcXHR9XFxuIDg3NDpcXHRcXG4gODc1OlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcXG4gODc2OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSxcXG4gODc3OlxcdFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gODc4OlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG4gODc5OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIDg4MDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gODgxOlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4gODgyOlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiA4ODM6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiA4ODQ6XFx0fTtcXG4gODg1OlxcdFxcbiA4ODY6XFx0c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbiA4ODc6XFx0XFx0XFx0XFx0XFx0IHU2NCBmbGFncywgYm9vbCBtYXlfZmF1bHQpXFxuIDg4ODpcXHR7XFxuIDg4OTpcXHRcXHRzdHJ1Y3QgcHRfcmVncyAqcmVncztcXG4gODkwOlxcdFxcdGxvbmcgcmVzID0gLUVJTlZBTDtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0aWYgKCF0cnlfZ2V0X3Rhc2tfc3RhY2sodGFzaykpIHtcXG4gODkzOlxcdFxcdFxcdG1lbXNldChidWYsIDAsIHNpemUpO1xcbiA4OTQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDg5NTpcXHRcXHR9XFxuIDg5NjpcXHRcXG4gODk3OlxcdFxcdHJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7XFxuIDg5ODpcXHRcXHRpZiAocmVncylcXG4gODk5OlxcdFxcdFxcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xcbiA5MDA6XFx0XFx0ZWxzZVxcbiA5MDE6XFx0XFx0XFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XFxuIDkwMjpcXHRcXHRwdXRfdGFza19zdGFjayh0YXNrKTtcXG4gOTAzOlxcdFxcdHJldHVybiByZXM7XFxuIDkwNDpcXHR9XFxuIDkwNTpcXHRcXG4gOTA2OlxcdEJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWYsXFxuIDkwNzpcXHRcXHQgICB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXFxuIDkwODpcXHR7XFxuIDkwOTpcXHRcXHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuIDkxMDpcXHR9XFxuIDkxMTpcXHRcXG4gOTEyOlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfcHJvdG8gPSB7XFxuIDkxMzpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX2dldF90YXNrX3N0YWNrLFxcbiA5MTQ6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gOTE1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIDkxNjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gOTE3OlxcdFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxcbiA5MTg6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbiA5MTk6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIDkyMDpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIDkyMTpcXHR9O1xcbiA5MjI6XFx0XFxuIDkyMzpcXHRCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZixcXG4gOTI0OlxcdFxcdCAgIHUzMiwgc2l6ZSwgdTY0LCBmbGFncylcXG4gOTI1OlxcdHtcXG4gOTI2OlxcdFxcdHJldHVybiBfX2JwZl9nZXRfdGFza19zdGFjayh0YXNrLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qICFtYXlfZmF1bHQgKi8pO1xcbiA5Mjc6XFx0fVxcbiA5Mjg6XFx0XFxuIDkyOTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcXG4gOTMwOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxcbiA5MzE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gOTMyOlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG4gOTMzOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIDkzNDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gOTM1OlxcdFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxcbiA5MzY6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbiA5Mzc6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIDkzODpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIDkzOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMTo1MC44NzU0Mzk2NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MjU3NjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBCUEYgVmVyaWZpZXIgYW5kIEhlbHBlcnMgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEJQRiBoZWxwZXJzIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoZXJlJ3MgdGhlIGZpcnN0IHBsYWNlIEknZCBleHBlY3QgdG8gZmluZCB0aGVzZSBzZXR0aW5ncz8gTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgbG9va2luZyBpbiB0aGUgcGxhY2VzIHRoYXQgZGVmaW5lIHRoZSBjb3JlIEJQRiBmZWF0dXJlcy4gTGlrZWx5IGNhbmRpZGF0ZXMgZm9yIEtjb25maWcgZmlsZXMgd291bGQgYmUgYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGdsb2JhbCBvcHRpb25zIG9yIGluaXRpYWxpemF0aW9uIHJlbGF0ZWQgc2V0dGluZ3MgdGhhdCB3b3VsZCBhZmZlY3QgdGhpcy4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRob3NlIGZpbGVzIGFuZCB0cmFjZSBvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW5zIHRvIGVuc3VyZSBub3RoaW5n4oCZcyBicm9rZW4gb3IgdW5pbnRlbnRpb25hbGx5IGRpc2FibGVkLiBJdCdzIGEgcXVpY2sgYW5kIGVmZmljaWVudCB3YXkgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMTo1Mi45NjgwMTk4MjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjUxNTc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjUzLjAxMjY3OTAyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ5NzYzNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBCUEYgd2lsbCByZXNpZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IGl0IGJ1aWxkcywgYW5kIEknbGwgYWxzbyBjaGVjayBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgaXQgbWlnaHQgY29udGFpbi4gVGhlbiwgdG8gZ2V0IHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGBpbml0L0tjb25maWdgIGlzIHRoZSBwbGFjZSB0byBsb29rIGZvciB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuZCB1cCBpbiBgLmNvbmZpZ2AuIEl0J3MgcHJldHR5IHN0YW5kYXJkLCBidXQgSSB3YW50IHRvIHZlcmlmeSBpZiB0aGVyZSdzIGFueXRoaW5nIG5ldyBvciBhbnkgY2hhbmdlcyB0byB3aGF0IEkgYWxyZWFkeSBrbm93IGFib3V0IEJQRiBjb25maWdzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIGlzIGVuYWJsZWQgYW5kIGNvbnRyb2xsZWQgaW4gdGhpcyBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODYyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NTQuODYyNDQ1MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTIzPWlmZXEgKCQoQ09ORklHX05FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGV2bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzdGFja21hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJldXNlcG9ydF9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc3RydWN0X29wcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfcmVsb2NhdGUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrbWVtX2NhY2hlX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRtYWJ1Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjU0LjkwNzIxOTE1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDg2NDI0MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgQlBGIGFuZCBQZXJmIEV2ZW50IENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBob3cgYEJQRl9TWVNDQUxMYCBhbmQgYFBFUkZfRVZFTlRTYCBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBjYW4ndCBhZmZvcmQgdG8gbWFrZSBhc3N1bXB0aW9ucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZlYXR1cmVzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhlaXIgZW5hYmxlbWVudCBvciBkaXNhYmxlbWVudC4gVGhpcyBtZWFucyBsb29raW5nIGJleW9uZCBqdXN0IHRoZSBpbW1lZGlhdGUgZGVmaW5pdGlvbnMsIHRyYWNpbmcgdGhyb3VnaCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBzZWVpbmcgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8ga25vdyBldmVyeXRoaW5nIGFib3V0IHRoZWlyIGNvbmZpZ3VyYXRpb24sIGhvdyB0aGV5IHRpZSBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gdGhlaXIgYmVoYXZpb3IgYmFzZWQgb24gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IHNlcmlvdXMgYW5hbHlzaXMgb3IgZGV2ZWxvcG1lbnQgaW52b2x2aW5nIEJQRiBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gTXkgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NTcuMzkzNjQ3MjczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1Mjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKEJQRl9TWVNDQUxMfEJQRilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnLTMtIyBCUEYgaW50ZXJwcmV0ZXIgdGhhdCwgZm9yIGV4YW1wbGUsIGNsYXNzaWMgc29ja2V0IGZpbHRlcnMgZGVwZW5kIG9uLlxcbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcXG5rZXJuZWwvYnBmL0tjb25maWctNS1cXHRib29sXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzoyOm1lbnVjb25maWcgQlBGX1BSRUxPQURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlByZWxvYWQgQlBGIGZpbGUgc3lzdGVtIHdpdGgga2VybmVsIHNwZWNpZmljIHByb2dyYW0gYW5kIG1hcCBpdGVyYXRvcnNcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0xND1pZiBCUEZfUFJFTE9BRFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjE1OmNvbmZpZyBCUEZfUFJFTE9BRF9VTURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiYnBmX3ByZWxvYWQga2VybmVsIG1vZHVsZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NTcuNDM5ODA3ODkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzQxMjgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gYnJlYWsgZG93biBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gRmlyc3QsIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjogYHZlcmlmaWVyLmNgIGFuZCBgYnRmLmNgIGFyZSBjb21waWxlZCB1bmRlciBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIGBzdGFja21hcC5jYCByZXF1aXJlcyBib3RoIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYC4gTmF0dXJhbGx5LCBgQ09ORklHX0JQRmAgaXMgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJJ20gZm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9sczogYGNoZWNrX2xkX2Fic2AsIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAsIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYC4gUXVpY2sgY2hlY2ssIGFuZCBJIHNlZSB0aGF0IHRoZSBmaXJzdCB0aHJlZSAoYGNoZWNrX2xkX2Fic2AsIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmApIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIHRoZW0gcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGluIHRoZSBjb250ZXh0IG9mIHZlcmlmaWNhdGlvbi4gVGhlIGxhc3QgdGhyZWUgKGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgKSBhcmUgZnVuY3Rpb25zIGluIGBidGYuY2AgYW5kIGBzdGFja21hcC5jYCwgcmVzcGVjdGl2ZWx5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgYGJwZl9jaGVja2AsIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBzZW5zZSB0byBtZSB0byBjb25zaWRlciB0aG9zZSBzeW1ib2xzIEkgbm90ZWQgZWFybGllci4gVGhlIHBhdGNoIGluZGljYXRlcyB0aGF0IGBjaGVja19sZF9hYnNgLCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBzaG91bGQgYWxsIGJlIGNvbnNpZGVyZWQuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB2ZXJpZmllciBsb2dpYyBjaGFuZ2VzIGluIGB2ZXJpZmllci5jYCAoZGlzYWJsaW5nIGBCUEZfTERfQUJTL0lORGAgaW5zaWRlIHN1YnByb2dyYW0gY2FsbGJhY2tzLCB1cGRhdGluZyByYnRyZWUgbG9jayB2ZXJpZmllciBjaGVja3MpIGFuZCBhZGRpbmcgYC5taWdodF9zbGVlcCA9IHRydWVgIGZsYWdzIHRvIHNldmVyYWwgQlBGIGhlbHBlciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gVGhlc2UgYXJlIGRlZmluaXRlbHkgY29yZSBjaGFuZ2VzLCBhbmQgZGlyZWN0bHkgdG91Y2hhYmxlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCB2ZXJpZmljYXRpb24uIFRoYXQgbWFrZXMgdGhpcyBwYXRjaCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBCUEZfU1lTQ0FMTGAgYW5kIGBQRVJGX0VWRU5UU2AuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIG9uZXMgbWVudGlvbmVkIGVhcmxpZXI6IGBjaGVja19sZF9hYnNgLCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIExldCdzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0NCwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzI6MDIuOTczOTM4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MzExNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9hYnNcIixcbiAgICBcImNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nXCIsXG4gICAgXCJpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYlwiLFxuICAgIFwiYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX2xkX2Fic1wiLFxuICAgIFwiY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dcIixcbiAgICBcImluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiXCIsXG4gICAgXCJicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMyOjAzLjA0ODI1ODIyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTA5NzY1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjowMy4wNDg4ODg0NjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzIxMDM0MTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcXG4xLiBJdCBmbGFncyBoZWxwZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gKSB3aXRoIGAubWlnaHRfc2xlZXAgPSB0cnVlYCB0byBwcmV2ZW50IHRoZWlyIGludm9jYXRpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHRzLlxcbjIuIEl0IGFkZHMgQlBGIHZlcmlmaWVyIGNoZWNrcyAoYGNoZWNrX2xkX2Fic2AgYW5kIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2ApIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0aGVpciBzdWJwcm9ncmFtcy5cXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxcbjQuIEl0IGFkZHMgc2VsZnRlc3RzIGZvciB0aGVzZSB2ZXJpZmllciBzY2VuYXJpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ODY1MGM1ZTAzMmM0YzExODZhOGFlNGNlOThhODMzZWJkZGQ0OGYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTozMToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA1ZDkzZmQ4MmU3NjQ1Li45ZjMzZTk1ZDU3NDEwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTg3NDksNiArODc0OSw3IEBAIEJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50XG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG4gXHQuZnVuY1x0XHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4rXHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCBhODM5MDQxZTBkMDA4Li5kMDlkNGMzZmU1NDdjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC04NzUsNiArODc1LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2lcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XG4gXHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLFxuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4rXHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbkBAIC05MjgsNiArOTI5LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWZcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbitcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDMyZDMxZmE2NzAzNmIuLjJjYjhmYmE2OGNkMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTUzMDIsNiArNTMwMiwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsXG4gXHRpZiAoIXByaXZfc3RhY2tfc3VwcG9ydGVkKVxuIFx0XHRzdWJwcm9nW2lkeF0ucHJpdl9zdGFja19tb2RlID0gTk9fUFJJVl9TVEFDSztcbiBwcm9jZXNzX2Z1bmM6XG4rXHRpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHtcbitcdFx0Zm9yICh0bXAgPSBpZHg7IHRtcCBcdTAwM2U9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7XG4rXHRcdFx0aWYgKHN1YnByb2dbdG1wXS5pc19jYikge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcblwiKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuIFx0LyogcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBzdGFjayBvdmVyZmxvdyB0aGF0IG1pZ2h0IGhhcHBlbiB3aGVuXG4gXHQgKiBicGYyYnBmIGNhbGxzIGdldCBjb21iaW5lZCB3aXRoIHRhaWxjYWxscy4gTGltaXQgdGhlIGNhbGxlcidzIHN0YWNrXG4gXHQgKiBkZXB0aCBmb3Igc3VjaCBjYXNlIGRvd24gdG8gMjU2IHNvIHRoYXQgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW9cbkBAIC0xMDIzNSw5ICsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRmcmFtZSA/IHN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lIC0gMV0gOiBOVUxMKTtcbiB9XG4gXG4tLyogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhIHJidHJlZSBoZWxwZXIgdGhhdCBtdXN0XG4tICogYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkPyBJZiBzbywgbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCB1bnJlbGVhc2VkXG4tICogbG9ja1xuKy8qXG4rICogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhbiByYnRyZWUga2Z1bmMgdGhhdCBtdXN0XG4rICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJ3Mgc3VicHJvZ3M/IElmIHNvLFxuKyAqIG5vIG5lZWQgdG8gY29tcGxhaW4gYWJvdXQgYW4gdW5yZWxlYXNlZCBsb2NrLlxuICAqL1xuIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuQEAgLTEwMjQ1LDE3ICsxMDI1NSwxOSBAQCBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWU7XG4gXHRpbnQga2Z1bmNfYnRmX2lkO1xuK1x0dTMyIGZyYW1lO1xuIFxuLVx0aWYgKCFzdGF0ZS1cdTAwM2VjdXJmcmFtZSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0Y2FsbGVlID0gc3RhdGUtXHUwMDNlZnJhbWVbc3RhdGUtXHUwMDNlY3VyZnJhbWVdO1xuK1x0Zm9yIChmcmFtZSA9IHN0YXRlLVx1MDAzZWN1cmZyYW1lOyBmcmFtZTsgZnJhbWUtLSkge1xuK1x0XHRjYWxsZWUgPSBzdGF0ZS1cdTAwM2VmcmFtZVtmcmFtZV07XG4rXHRcdGlmICghY2FsbGVlLVx1MDAzZWluX2NhbGxiYWNrX2ZuKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuLVx0aWYgKCFjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm4pXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0a2Z1bmNfYnRmX2lkID0gaW5zbltjYWxsZWUtXHUwMDNlY2FsbHNpdGVdLmltbTtcbitcdFx0aWYgKGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4gXG4tXHRrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS1cdTAwM2VjYWxsc2l0ZV0uaW1tO1xuLVx0cmV0dXJuIGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5AQCAtMTcxNzksNiArMTcxOTEsNyBAQCBzdGF0aWMgYm9vbCBtYXlfYWNjZXNzX3NrYihlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbiAgKi9cbiBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuK1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuIFx0c3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182O1xuIFx0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG5AQCAtMTcxODksNiArMTcyMDIsMTMgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGZvciAoaSA9IHN0YXRlLVx1MDAzZWN1cmZyYW1lOyBpOyBpLS0pIHtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWZyYW1lW2ldLVx1MDAzZWluX2NhbGxiYWNrX2ZuKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKCFlbnYtXHUwMDNlb3BzLVx1MDAzZWdlbl9sZF9hYnMpIHtcbiBcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJnZW5fbGRfYWJzIGlzIG51bGxcIik7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODFjNDU5NDM1NjgwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5AQCAtMTE1LDYgKzExNSw1OCBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfaGVscGVyKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/dXByb2JlLnNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJzbGVlcGFibGUgaGVscGVyIGJwZl9nZXRfc3RhY2sjXCIpXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XG4rXG4rXHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XG4rXHRicGZfZ2V0X3N0YWNrKGN0eCwgXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXG4rXHRcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdGJwZl9wcmVlbXB0X2VuYWJsZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcInNsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF90YXNrX3N0YWNrI1wiKVxuK2ludCBwcmVlbXB0X3NsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbitcbitcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGJwZl9wcmVlbXB0X2Rpc2FibGUoKTtcbitcdGJwZl9nZXRfdGFza19zdGFjayh0YXNrLCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbitcdFx0XHQgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7XG4rXHRicGZfcHJlZW1wdF9lbmFibGUoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dXByb2JlLnNcIilcbitfX3N1Y2Nlc3NcbitpbnQgc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XG4rXG4rXHRicGZfZ2V0X3N0YWNrKGN0eCwgXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXG4rXHRcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dXByb2JlLnNcIilcbitfX3N1Y2Nlc3NcbitpbnQgc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1xuK1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuK1x0XHRcdCAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwia2VybmVsIGZ1bmMgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciBpcyBzbGVlcGFibGUgd2l0aGluIG5vbi1wcmVlbXB0aWJsZSByZWdpb25cIilcbiBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmNcbmluZGV4IDgwMzQxOWE0N2M2MjYuLjQ1MDQ2MDgxOTZhYmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmNcbkBAIC0yNzIsNiArMjcyLDQ3IEBAIHN0YXRpYyBib29sIGxlc3NfX2JhZF9yZXNfc3Bpbl91bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX3VubG9ja19yZWxvY2sodm9pZClcbit7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z2xvY2spO1xuK1x0YnBmX3NwaW5fbG9jayhcdTAwMjZnbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX25lc3RlZF91bmxvY2sodm9pZClcbit7XG4rXHRyYnRyZWVfY2JfdW5sb2NrX3JlbG9jaygpO1xuK1x0YXNtIHZvbGF0aWxlIChcIlwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbGVzc19fYmFkX3N1YnByb2dfdW5sb2NrKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuK3tcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTtcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcbitcbitcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdHJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2Jfbm9vcCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcIik7XG4rfVxuK1xuK3N0YXRpYyBib29sIGxlc3NfX3N1YnByb2dfYWxsb3dlZChzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2I7XG4rXG4rXHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XG4rXHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XG4rXHRyYnRyZWVfY2Jfbm9vcCgpO1xuK1xuK1x0cmV0dXJuIG5vZGVfYS1cdTAwM2VrZXkgXHUwMDNjIG5vZGVfYi1cdTAwM2VrZXk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiBsb25nIGFkZF93aXRoX2NiKGJvb2wgKGNiKShzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikpXG4ge1xuQEAgLTMzMCw0ICszNzEsMTggQEAgbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2JfcmVzX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW4ndCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXCIpXG4rbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBhZGRfd2l0aF9jYihsZXNzX19iYWRfc3VicHJvZ191bmxvY2spO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX3N1YnByb2dfYWxsb3dlZCk7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuaW5kZXggYTdjODRkM2ZhNGM3My4uZTA5MjY3NjdiYmQzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbkBAIC0xMDgsNiArMTA4LDMwIEBAIGludCB0aW1lcl9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB0aW1lcl9idGZfZmluZF9jYih2b2lkICptYXAsIGludCAqa2V5LCBzdHJ1Y3QgYnBmX3RpbWVyICp0aW1lcilcbit7XG4rXHRjaGFyIG5hbWVbXSA9IFwidGFza19zdHJ1Y3RcIjtcbitcbitcdGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2ZhaWx1cmUgX19tc2coXCJzbGVlcGFibGUgaGVscGVyIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQje3tbMC05XSt9fSBpbiBub24tc2xlZXBhYmxlIHByb2dcIilcbitpbnQgdGltZXJfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRpbWVyX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0aW1lcl9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfdGltZXJfaW5pdChcdTAwMjZ2YWwtXHUwMDNldCwgXHUwMDI2dGltZXJfbWFwLCAwKTtcbitcdGJwZl90aW1lcl9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXQsIHRpbWVyX2J0Zl9maW5kX2NiKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19zdWNjZXNzXG4gaW50IHN5c2NhbGxfc3lzX2JwZl9wcm9nKHZvaWQgKmN0eClcbkBAIC0xMjYsNiArMTUwLDE2IEBAIGludCBzeXNjYWxsX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19zdWNjZXNzXG4raW50IHN5c2NhbGxfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0Y2hhciBuYW1lW10gPSBcInRhc2tfc3RydWN0XCI7XG4rXG4rXHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBXb3JrcXVldWUgdGVzdHMgKi9cbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG5pbmRleCAwOWU4MWI5OWVlY2I0Li4zMjk4OWY5ODFmYjY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbkBAIC0xOTQsNiArMTk0LDEwMiBAQCBfX25ha2VkIHZvaWQgbGRfaW5kX3N1YnByb2dfYm90aF9wYXRoc19zYWZlKHZvaWQpXG4gXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbitzdGF0aWMgaW50IGxkX2Fic19jYWxsYmFjayh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInI2ID0gKih1NjQgKikocjIgKyAwKTtcIlxuK1x0XCIuOGJ5dGUgJVtsZF9hYnNdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJsZF9hYnM6IHJlamVjdCBpbiBjYWxsYmFja1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcIilcbitpbnQgbGRfYWJzX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX2xvb3AoMSwgbGRfYWJzX2NhbGxiYWNrLCBcdTAwMjZza2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbitzdGF0aWMgaW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjYgPSByMTtcIlxuK1x0XCJyNyA9IDA7XCJcbitcdFwiLjhieXRlICVbbGRfaW5kXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbitzdGF0aWMgaW50IGxkX2luZF9jYWxsYmFjayh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIxID0gKih1NjQgKikocjIgKyAwKTtcIlxuK1x0XCJjYWxsIGxkX2luZF9jYWxsYmFja19zdWJwcm9nO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIHN1YnByb2dcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXCIpXG4raW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX2xvb3AoMSwgbGRfaW5kX2NhbGxiYWNrLCBcdTAwMjZza2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjYgPSAlW3NrYl07XCJcbitcdFwicjcgPSAwO1wiXG4rXHRcIi44Ynl0ZSAlW2xkX2luZF07XCJcbitcdDpcbitcdDogW3NrYl0gXCJyXCIoc2tiKSxcbitcdCAgX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpXG4rXHQ6IF9fY2xvYmJlcl9jb21tb24sIFwicjZcIiwgXCJyN1wiKTtcbitcdHJldHVybiBza2ItXHUwMDNlbWFyaztcbit9XG4rXG4rX19ub2lubGluZSBpbnQgbGRfaW5kX2dsb2JhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIGxkX2luZF9nbG9iYWxfc3RhdGljKHNrYik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbGRfaW5kX2dsb2JhbF9jYWxsYmFjayhfX3UzMiBpbmRleCwgc3RydWN0IF9fc2tfYnVmZiAqKmN0eClcbit7XG4rXHRsZF9pbmRfZ2xvYmFsKCpjdHgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBnbG9iYWwgc3VicHJvZ1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcIilcbitpbnQgbGRfaW5kX2dsb2JhbF9jYWxsYmFja19yZWplY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdGJwZl9sb29wKDEsIGxkX2luZF9nbG9iYWxfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2luZDogYWxsb3cgaW4gbm9uLWNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXCIpXG4rX19zdWNjZXNzXG4raW50IGxkX2luZF9nbG9iYWxfc3VicHJvZ19vayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIGxkX2luZF9nbG9iYWwoc2tiKTtcbit9XG4rXG4gLypcbiAgKiBsZF97YWJzLGluZH0gaW4gc3VicHJvZ3MgcmVxdWlyZSBzY2FsYXIgKGludCkgcmV0dXJuIHR5cGUgaW4gQlRGLlxuICAqIEEgdGVzdCB3aXRoIHZvaWQgcmV0dXJuIG11c3QgYmUgcmVqZWN0ZWQuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjowMy4wNDg4ODk4MjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE4MjUyOTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQSBCUEYgUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IFRpbWUgdG8gdGhpbmsgbGlrZSBhbiBleHBlcnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcywgcHJvYmFibHkgbm90LiBMZXQncyBkZWx2ZSBpbi5cblxuRmlyc3QsIEkgc2VlIGNoYW5nZXMgcHJpbWFyaWx5IGZvY3VzZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtOiBzcGVjaWZpY2FsbHksIGluIHRoZSB2ZXJpZmllciBhbmQgaGVscGVyIGZ1bmN0aW9uIGF0dHJpYnV0ZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBga2VybmVsL2JwZi9idGYuY2AsIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFsb25nIHdpdGggYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRocmVlIGtleSBhcmVhcy5cblxuMS4gIFdlJ3ZlIGdvdCBgbWlnaHRfc2xlZXAgPSB0cnVlYCBiZWluZyBhZGRlZCB0byBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgaXMgYWJvdXQgdGhlIHZlcmlmaWVyIGVuZm9yY2luZyB0aGF0IHNsZWVwYWJsZSBoZWxwZXJzIGFyZSB1c2VkIGNvcnJlY3RseSDigJMgaS5lLiwgb25seSBpbiBzbGVlcGFibGUgY29udGV4dHMsIG5vdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQgb3IgaW4gUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBTdGFuZGFyZCBzdHVmZi5cblxuMi4gIFRoZSB2ZXJpZmllciBub3cgZXhwbGljaXRseSBkaXNhbGxvd3MgYEJQRl9MRF9BQlNgIGFuZCBgQlBGX0xEX0lORGAgd2l0aGluIEJQRiBjYWxsYmFja3MgYW5kIHN1YnByb2dyYW1zIHRoYXQgdGhvc2UgY2FsbGJhY2tzIGNhbGwuIFRoaXMgaXMgZXhwZWN0ZWQgc2luY2UgdGhlc2UgaW5zdHJ1Y3Rpb25zIGludm9sdmUgc3BlY2lhbCBKSVQgdHJhbnNmb3JtYXRpb25zIG9yIHJlLWVudHJ5IHRoYXQgZG9lc24ndCBnZWwgd2l0aCBjYWxsYmFjayBleGVjdXRpb24uIEl0IG1ha2VzIHNlbnNlIHRvIGZvcmJpZCB0aGVtLlxuXG4zLiAgVGhlIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdmVyaWZpZXIgY2hlY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgc3VicHJvZ3JhbXMgY2FsbGVkIGZyb20gcmJ0cmVlIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgdGhlIHZlcmlmaWVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZXJlYnkgYXZvaWRpbmcgZmFsc2UgcG9zaXRpdmVzIGFib3V0IHVucmVsZWFzZWQgbG9ja3MgaWYgdGhlIHN1YnByb2dyYW0gaXMgY29ycmVjdGx5IGhhbmRsaW5nIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBpbnNpZGUgdGhlIHJidHJlZSBjYWxsYmFjay5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGFwcHJvYWNoIHRoaXMgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBXaGF0IGtpbmQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG1pZ2h0IHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZT8gSSBoYXZlIHRvIGJlIHN5c3RlbWF0aWMuXG5cbjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlIEluZm9ybWF0aW9uIExlYWs6KiogVGhpcyBwYXRjaCBzZXJpZXMgZG9lc24ndCB0b3VjaCBhbnkgb2YgdGhlIHR5cGljYWwgY3VscHJpdHMgLSAgbm8gYGNvcHlfdG9fdXNlcmAsIG5vIG5ldGxpbmsgbWVzc2FnZXMsIG5vIGlvY3Rscy4gTm8gZGF0YSBleHBvc3VyZSBpcyBhZGRlZCBvciBhbHRlcmVkLiBJIGRvbid0IHNlZSBhbnkgcmlzayBoZXJlLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBVc2FnZSBpbiBDb25kaXRpb25hbCBMb2dpYzoqKiBUaGUgdmVyaWZpZXIncyBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXMgbG9vayB0byBiZSB3ZWxsLWRlZmluZWQuIE5vIHdlaXJkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gIEkgc2VlIG5vIGNvbmNlcm5zLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBJc3N1ZXM6KiogTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBhZGRlZCBieSB0aGVzZSBjaGFuZ2VzLlxuNC4gICoqQm91bmRzIENoZWNrcy9VbmluaXRpYWxpemVkIEJ5dGVzOioqIFRoZSBjaGFuZ2VzIHJlc3RyaWN0IGluc3RydWN0aW9ucyBpbiBjYWxsYmFja3MsIG1vZGlmeSBzbGVlcGFibGUgaGVscGVyIGF0dHJpYnV0ZXMsIGFuZCBpbXByb3ZlIHZlcmlmaWVyIGxvZ2ljIHJlbGF0ZWQgdG8gcmJ0cmVlIGNhbGxiYWNrcy4gIE5vIGNoYW5jZSBoZXJlLlxuXG5Tbywgd2hlcmUncyB0aGUgS01TQU4gaG9vaz8gSG9uZXN0bHksIEkgZG9uJ3Qgc2VlIGFueS4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mbyBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbCBhYm91dCBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBhdHRyaWJ1dGVzLiBBbnkgc2xlZXBhYmxlIG9yIGxvY2tpbmcgYnVncyBvciB2ZXJpZmllciBpc3N1ZXMgdGhhdCBjcmVlcCB1cCBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSB2ZXJpZmllciBpdHNlbGYsIExPQ0tERVAsIG9yIHRob3NlIHN0YW5kYXJkIGtlcm5lbCBydW50aW1lIGNoZWNrcy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBtaWdodCB3YW50IHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AgYXJvdW5kIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCBidXQgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIGEgZnVsbCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjoxMC4yMzE0MjE4NjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njc0ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzRcXFxcKGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9idGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTg3MTI9c3RhdGljIGludCBjaGVja19idGZfa2NvbmZpZ3MoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCBjaGFyICpmZWF0dXJlKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NzIyLVxcbmtlcm5lbC9icGYvYnRmLmM6ODcyMzpCUEZfQ0FMTF80KGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsIGNoYXIgKiwgbmFtZSwgaW50LCBuYW1lX3N6LCB1MzIsIGtpbmQsIGludCwgZmxhZ3MpXFxua2VybmVsL2JwZi9idGYuYy04NzI0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzI6MTAuMjc3MTAxMDc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTYzODcyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQlRGIEludGVybmFscyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgQlBGIHR5cGUgZm9ybWF0IChCVEYpIGNvZGUsIHNwZWNpZmljYWxseSwgd2hlcmUgdGhlIGFjdGlvbiBpcyB0YWtpbmcgcGxhY2UuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvYnRmLmNgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIEJURiBpbXBsZW1lbnRhdGlvbiBsaWtlbHkgcmVzaWRlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXJvdW5kIGxpbmUgODcyMy4gSXQncyBub3QgYSByYW5kb20gbnVtYmVyOyBpdCdzIGEgc3RyYXRlZ2ljIHN0YXJ0aW5nIHBvaW50IGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgY29kZWJhc2VzLiBIb3BlZnVsbHksIHRoaXMgYXJlYSB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYmVoYXZpb3IgSSdtIHRyeWluZyB0byBkaWFnbm9zZSBvciB1bmRlcnN0YW5kIGJldHRlci4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgYW5kIHRoZW4gdXNlIHRoYXQgYXMgYSBqdW1waW5nLW9mZiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMyOjEyLjI5MzQ5MTQ5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4NzIwOlxcdFxcdHJldHVybiAwO1xcbjg3MjE6XFx0fVxcbjg3MjI6XFx0XFxuODcyMzpcXHRCUEZfQ0FMTF80KGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsIGNoYXIgKiwgbmFtZSwgaW50LCBuYW1lX3N6LCB1MzIsIGtpbmQsIGludCwgZmxhZ3MpXFxuODcyNDpcXHR7XFxuODcyNTpcXHRcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbjg3MjY6XFx0XFx0aW50IGJ0Zl9vYmpfZmQgPSAwO1xcbjg3Mjc6XFx0XFx0bG9uZyByZXQ7XFxuODcyODpcXHRcXG44NzI5OlxcdFxcdGlmIChmbGFncylcXG44NzMwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjg3MzE6XFx0XFxuODczMjpcXHRcXHRpZiAobmFtZV9zeiBcXHUwMDNjPSAxIHx8IG5hbWVbbmFtZV9zeiAtIDFdKVxcbjg3MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODczNDpcXHRcXG44NzM1OlxcdFxcdHJldCA9IGJwZl9maW5kX2J0Zl9pZChuYW1lLCBraW5kLCBcXHUwMDI2YnRmKTtcXG44NzM2OlxcdFxcdGlmIChyZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbjg3Mzc6XFx0XFx0XFx0YnRmX29ial9mZCA9IF9fYnRmX25ld19mZChidGYpO1xcbjg3Mzg6XFx0XFx0XFx0aWYgKGJ0Zl9vYmpfZmQgXFx1MDAzYyAwKSB7XFxuODczOTpcXHRcXHRcXHRcXHRidGZfcHV0KGJ0Zik7XFxuODc0MDpcXHRcXHRcXHRcXHRyZXR1cm4gYnRmX29ial9mZDtcXG44NzQxOlxcdFxcdFxcdH1cXG44NzQyOlxcdFxcdFxcdHJldHVybiByZXQgfCAoKCh1NjQpYnRmX29ial9mZCkgXFx1MDAzY1xcdTAwM2MgMzIpO1xcbjg3NDM6XFx0XFx0fVxcbjg3NDQ6XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuODc0NTpcXHRcXHRcXHRidGZfcHV0KGJ0Zik7XFxuODc0NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjg3NDc6XFx0fVxcbjg3NDg6XFx0XFxuODc0OTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG44NzUwOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLFxcbjg3NTE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG44NzUyOlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG44NzUzOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuODc1NDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuODc1NTpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuODc1NjpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1NzpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1ODpcXHR9O1xcbjg3NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMyOjEyLjI5MzkwOTA0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTY1MzAwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJldHR5IGNsZWFuLWN1dC4gSSd2ZSByZXZpZXdlZCB0aGUgcHJvcG9zZWQgY2hhbmdlcywgYW5kIGl0J3MgYWxsIHJhdGhlciBkaXJlY3QuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIGEgYC5taWdodF9zbGVlcCA9IHRydWVgIGZsYWcgdG8gc29tZSBCUEYgaGVscGVyIGZ1bmN0aW9uIGRlZmluaXRpb25zOiBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgc2lnbmlmaWVzIHRoYXQgdGhlc2UgZnVuY3Rpb25zICpjYW4qIHBvdGVudGlhbGx5IHNsZWVwLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSB2ZXJpZmllciB0byB1bmRlcnN0YW5kLlxuXG5CZXlvbmQgdGhhdCwgd2UgaGF2ZSB2ZXJpZmllciB2YWxpZGF0aW9uIGFkZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gZGlzYWxsb3cgYEJQRl9MRF9bQUJTfElORF1gIGluIGNhbGxiYWNrcyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuIFRoaXMgbWVhbnMgd2UncmUgdGlnaHRlbmluZyB0aGUgdmVyaWZpY2F0aW9uIHJ1bGVzIHJlZ2FyZGluZyBkaXJlY3QgbWVtb3J5IGFjY2VzcyB3aXRoaW4gdGhlc2UgY29udGV4dHMsIHVzaW5nIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AgYW5kIGBjaGVja19sZF9hYnNgLiBXZSBhbHNvIGhhdmUgYSBmaXggZm9yIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gY29ycmVjdGx5IGFuYWx5emUgdGhlIGNhbGxlciBmcmFtZXMgZm9yIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxuXG5GaW5hbGx5LCBzb21lIG5ldyBzZWxmdGVzdHMgYXJlIGluY2x1ZGVkIHRvIGNvdmVyIHRoZXNlIG5ldyB2ZXJpZmllciBydWxlcyBhbmQgc2xlZXBhYmxlIGhlbHBlcnMsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciBvbmdvaW5nIHJlbGlhYmlsaXR5LlxuXG5JbXBvcnRhbnRseSwgYmFzZWQgb24gbXkgYW5hbHlzaXMsICpub25lKiBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbWVtb3J5IGFsbG9jYXRpb24sIGNvcHlpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgY2hhbmdlIG1lbW9yeSBzYWZldHkgc2VtYW50aWNzIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgS01TQU4uIEknbSBub3Qgc2VlaW5nIGFueXRoaW5nIGhlcmUgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiB0byBjYXRjaCBwb3RlbnRpYWwgaXNzdWVzLiBUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBjYW4gYmUgc2V0IHRvIGBmYWxzZWAuXG5cbk5vdywgSSdsbCBnbyBhaGVhZCBhbmQgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgYXNzZXNzbWVudC4gV2hlbiBzZXR0aW5nIHRoZSByZXN1bHRzIEknbGwgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOL0xPQ0tERVAgd2l0aCBLTVNBTi4gSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoYXQgZWFjaCB0b29sIGlzIGludGVuZGVkIGZvciwgYW5kIHdoaWxlIEtBU0FOL0xPQ0tERVAgYXJlIGNyaXRpY2FsIGZvciBkZXRlY3RpbmcgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBLTVNBTiBpcyB0YWlsb3JlZCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIG5vdCBwZXJ0aW5lbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyOSwiT3V0cHV0VG9rZW5zIjoyNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjoxNi4yNTkyMTMwOThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBoZWxwZXIgbWV0YWRhdGE6XFxuMS4gSXQgZmxhZ3MgaGVscGVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCkgd2l0aCBgLm1pZ2h0X3NsZWVwID0gdHJ1ZWAgdG8gcHJldmVudCB0aGVpciBpbnZvY2F0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0cy5cXG4yLiBJdCBhZGRzIEJQRiB2ZXJpZmllciBjaGVja3MgKGBjaGVja19sZF9hYnNgIGFuZCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgKSB0byBkaXNhbGxvdyBgQlBGX0xEX1tBQlN8SU5EXWAgd2l0aGluIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuXFxuMy4gSXQgdXBkYXRlcyBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgIHRvIGl0ZXJhdGUgYWNyb3NzIHN0YWNrIGZyYW1lcyB0byBwcm9wZXJseSB0cmFjayByYnRyZWUgY2FsbGJhY2sgY29udGV4dC5cXG40LiBJdCBhZGRzIHNlbGZ0ZXN0cyBmb3IgdGhlc2UgdmVyaWZpZXIgc2NlbmFyaW9zLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSwgaW5pdGlhbGl6ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRhcmllcyB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGFuZCBzbGVlcC1pbi1hdG9taWMgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcXG4xLiBJdCBmbGFncyBoZWxwZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gKSB3aXRoIGAubWlnaHRfc2xlZXAgPSB0cnVlYCB0byBwcmV2ZW50IHRoZWlyIGludm9jYXRpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHRzLlxcbjIuIEl0IGFkZHMgQlBGIHZlcmlmaWVyIGNoZWNrcyAoYGNoZWNrX2xkX2Fic2AgYW5kIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2ApIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0aGVpciBzdWJwcm9ncmFtcy5cXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxcbjQuIEl0IGFkZHMgc2VsZnRlc3RzIGZvciB0aGVzZSB2ZXJpZmllciBzY2VuYXJpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 05:29:58 +0000 UTC FinishedAt: 2026-09-05 05:32:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e044668419b9c444282bd09521f7ea07edbc10b1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e044668419b9c444282bd09521f7ea07edbc10b1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS" ], "series_id": "5a8425bf-fb29-49c2-9238-5aa490ba37da" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_ld_abs", "check_max_stack_depth_subprog", "in_rbtree_lock_required_cb", "bpf_btf_find_by_name_kind", "bpf_get_stack_sleepable", "bpf_get_task_stack_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfYWJzJiMzNDssCiAgICAmIzM0O2NoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgICAmIzM0O2luX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiJiMzNDssCiAgICAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBoZWxwZXIgbWV0YWRhdGE6XG4xLiBJdCBmbGFncyBoZWxwZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gKSB3aXRoIGAubWlnaHRfc2xlZXAgPSB0cnVlYCB0byBwcmV2ZW50IHRoZWlyIGludm9jYXRpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHRzLlxuMi4gSXQgYWRkcyBCUEYgdmVyaWZpZXIgY2hlY2tzIChgY2hlY2tfbGRfYWJzYCBhbmQgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCkgdG8gZGlzYWxsb3cgYEJQRl9MRF9bQUJTfElORF1gIHdpdGhpbiBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHRoZWlyIHN1YnByb2dyYW1zLlxuMy4gSXQgdXBkYXRlcyBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgIHRvIGl0ZXJhdGUgYWNyb3NzIHN0YWNrIGZyYW1lcyB0byBwcm9wZXJseSB0cmFjayByYnRyZWUgY2FsbGJhY2sgY29udGV4dC5cbjQuIEl0IGFkZHMgc2VsZnRlc3RzIGZvciB0aGVzZSB2ZXJpZmllciBzY2VuYXJpb3MuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSwgaW5pdGlhbGl6ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRhcmllcyB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGFuZCBzbGVlcC1pbi1hdG9taWMgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ODY1MGM1ZTAzMmM0YzExODZhOGFlNGNlOThhODMzZWJkZGQ0OGYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTozMToxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNWQ5M2ZkODJlNzY0NS4uOWYzM2U5NWQ1NzQxMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC04NzQ5LDYgJiM0Mzs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnRcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiYjNDM7XHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCBhODM5MDQxZTBkMDA4Li5kMDlkNGMzZmU1NDdjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC04NzUsNiAmIzQzOzg3NSw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19zbGVlcGFibGUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHZvaWQgKiwgYnVmLCB1MzIsIHNpXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSxcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuJiM0MztcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuQEAgLTkyOCw2ICYjNDM7OTI5LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWZcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiYjNDM7XHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAzMmQzMWZhNjcwMzZiLi4yY2I4ZmJhNjhjZDE1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC01MzAyLDYgJiM0Mzs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbiBcdGlmICghcHJpdl9zdGFja19zdXBwb3J0ZWQpXG4gXHRcdHN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLO1xuIHByb2Nlc3NfZnVuYzpcbiYjNDM7XHRpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHtcbiYjNDM7XHRcdGZvciAodG1wID0gaWR4OyB0bXAgXHUwMDNlPSAwOyB0bXAgPSBkaW5mb1t0bXBdLmNhbGxlcikge1xuJiM0MztcdFx0XHRpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlblxuIFx0ICogYnBmMmJwZiBjYWxscyBnZXQgY29tYmluZWQgd2l0aCB0YWlsY2FsbHMuIExpbWl0IHRoZSBjYWxsZXImIzM5O3Mgc3RhY2tcbiBcdCAqIGRlcHRoIGZvciBzdWNoIGNhc2UgZG93biB0byAyNTYgc28gdGhhdCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpb1xuQEAgLTEwMjM1LDkgJiM0MzsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRmcmFtZSA/IHN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lIC0gMV0gOiBOVUxMKTtcbiB9XG4gXG4tLyogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhIHJidHJlZSBoZWxwZXIgdGhhdCBtdXN0XG4tICogYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkPyBJZiBzbywgbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCB1bnJlbGVhc2VkXG4tICogbG9ja1xuJiM0MzsvKlxuJiM0MzsgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3RcbiYjNDM7ICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJiMzOTtzIHN1YnByb2dzPyBJZiBzbyxcbiYjNDM7ICogbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCBhbiB1bnJlbGVhc2VkIGxvY2suXG4gICovXG4gc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG5AQCAtMTAyNDUsMTcgJiM0MzsxMDI1NSwxOSBAQCBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWU7XG4gXHRpbnQga2Z1bmNfYnRmX2lkO1xuJiM0MztcdHUzMiBmcmFtZTtcbiBcbi1cdGlmICghc3RhdGUtXHUwMDNlY3VyZnJhbWUpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGNhbGxlZSA9IHN0YXRlLVx1MDAzZWZyYW1lW3N0YXRlLVx1MDAzZWN1cmZyYW1lXTtcbiYjNDM7XHRmb3IgKGZyYW1lID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGZyYW1lOyBmcmFtZS0tKSB7XG4mIzQzO1x0XHRjYWxsZWUgPSBzdGF0ZS1cdTAwM2VmcmFtZVtmcmFtZV07XG4mIzQzO1x0XHRpZiAoIWNhbGxlZS1cdTAwM2Vpbl9jYWxsYmFja19mbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoIWNhbGxlZS1cdTAwM2Vpbl9jYWxsYmFja19mbilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0a2Z1bmNfYnRmX2lkID0gaW5zbltjYWxsZWUtXHUwMDNlY2FsbHNpdGVdLmltbTtcbiYjNDM7XHRcdGlmIChpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuYyhrZnVuY19idGZfaWQpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4tXHRrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS1cdTAwM2VjYWxsc2l0ZV0uaW1tO1xuLVx0cmV0dXJuIGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuQEAgLTE3MTc5LDYgJiM0MzsxNzE5MSw3IEBAIHN0YXRpYyBib29sIG1heV9hY2Nlc3Nfc2tiKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuICAqL1xuIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuIFx0c3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182O1xuIFx0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG5AQCAtMTcxODksNiAmIzQzOzE3MjAyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0Zm9yIChpID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGk7IGktLSkge1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWZyYW1lW2ldLVx1MDAzZWluX2NhbGxiYWNrX2ZuKSB7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghZW52LVx1MDAzZW9wcy1cdTAwM2VnZW5fbGRfYWJzKSB7XG4gXHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2dlbl9sZF9hYnMgaXMgbnVsbFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODFjNDU5NDM1NjgwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5AQCAtMTE1LDYgJiM0MzsxMTUsNTggQEAgaW50IHByZWVtcHRfc2xlZXBhYmxlX2hlbHBlcih2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dXByb2JlLnNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtzbGVlcGFibGUgaGVscGVyIGJwZl9nZXRfc3RhY2sjXCYjMzQ7KVxuJiM0MztpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuJiM0MztcbiYjNDM7XHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1x0YnBmX2dldF9zdGFjayhjdHgsIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuJiM0MztcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuJiM0MztcdGJwZl9wcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3Vwcm9iZS5zXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjXCYjMzQ7KVxuJiM0MztpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3Rhc2tfc3RhY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4mIzQzO1xuJiM0MztcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1x0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuJiM0MztcdFx0XHQgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7XG4mIzQzO1x0YnBmX3ByZWVtcHRfZW5hYmxlKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dXByb2JlLnNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbiYjNDM7XG4mIzQzO1x0YnBmX2dldF9zdGFjayhjdHgsIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuJiM0MztcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3Vwcm9iZS5zXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IHNsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiYjNDM7XG4mIzQzO1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuJiM0MztcdGJwZl9nZXRfdGFza19zdGFjayh0YXNrLCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbiYjNDM7XHRcdFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/ZmVudHJ5LnMvXCYjMzQ7IFNZU19QUkVGSVggXCYjMzQ7c3lzX2dldHBnaWRcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2tlcm5lbCBmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIgaXMgc2xlZXBhYmxlIHdpdGhpbiBub24tcHJlZW1wdGlibGUgcmVnaW9uXCYjMzQ7KVxuIGludCBwcmVlbXB0X3NsZWVwYWJsZV9rZnVuYyh2b2lkICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuQEAgLTI3Miw2ICYjNDM7MjcyLDQ3IEBAIHN0YXRpYyBib29sIGxlc3NfX2JhZF9yZXNfc3Bpbl91bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z2xvY2spO1xuJiM0MztcdGJwZl9zcGluX2xvY2soXHUwMDI2Z2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyYnRyZWVfY2JfdW5sb2NrX3JlbG9jaygpO1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbGVzc19fYmFkX3N1YnByb2dfdW5sb2NrKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9hO1xuJiM0MztcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcbiYjNDM7XG4mIzQzO1x0bm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuJiM0MztcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbiYjNDM7XHRyYnRyZWVfY2JfbmVzdGVkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2Jfbm9vcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBsZXNzX19zdWJwcm9nX2FsbG93ZWQoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7XG4mIzQzO1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iO1xuJiM0MztcbiYjNDM7XHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XG4mIzQzO1x0bm9kZV9iID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuJiM0MztcdHJidHJlZV9jYl9ub29wKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBub2RlX2EtXHUwMDNla2V5IFx1MDAzYyBub2RlX2ItXHUwMDNla2V5O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiBsb25nIGFkZF93aXRoX2NiKGJvb2wgKGNiKShzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikpXG4ge1xuQEAgLTMzMCw0ICYjNDM7MzcxLDE4IEBAIGxvbmcgcmJ0cmVlX2FwaV9hZGRfYmFkX2NiX3Jlc19zcGluX3VubG9jayh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW4mIzM5O3Qgc3Bpbl97bG9jayx1bmxvY2t9IGluIHJidHJlZSBjYlwmIzM0OylcbiYjNDM7bG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0Mztsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWRkX3dpdGhfY2IobGVzc19fc3VicHJvZ19hbGxvd2VkKTtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5pbmRleCBhN2M4NGQzZmE0YzczLi5lMDkyNjc2N2JiZDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuQEAgLTEwOCw2ICYjNDM7MTA4LDMwIEBAIGludCB0aW1lcl9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdGltZXJfYnRmX2ZpbmRfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgc3RydWN0IGJwZl90aW1lciAqdGltZXIpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5hbWVbXSA9IFwmIzM0O3Rhc2tfc3RydWN0XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtzbGVlcGFibGUgaGVscGVyIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQje3tbMC05XSYjNDM7fX0gaW4gbm9uLXNsZWVwYWJsZSBwcm9nXCYjMzQ7KVxuJiM0MztpbnQgdGltZXJfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGltZXJfZWxlbSAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfdGltZXJfaW5pdChcdTAwMjZ2YWwtXHUwMDNldCwgXHUwMDI2dGltZXJfbWFwLCAwKTtcbiYjNDM7XHRicGZfdGltZXJfc2V0X2NhbGxiYWNrKFx1MDAyNnZhbC1cdTAwM2V0LCB0aW1lcl9idGZfZmluZF9jYik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19zdWNjZXNzXG4gaW50IHN5c2NhbGxfc3lzX2JwZl9wcm9nKHZvaWQgKmN0eClcbkBAIC0xMjYsNiAmIzQzOzE1MCwxNiBAQCBpbnQgc3lzY2FsbF9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IHN5c2NhbGxfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG5hbWVbXSA9IFwmIzM0O3Rhc2tfc3RydWN0XCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBXb3JrcXVldWUgdGVzdHMgKi9cbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG5pbmRleCAwOWU4MWI5OWVlY2I0Li4zMjk4OWY5ODFmYjY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbkBAIC0xOTQsNiAmIzQzOzE5NCwxMDIgQEAgX19uYWtlZCB2b2lkIGxkX2luZF9zdWJwcm9nX2JvdGhfcGF0aHNfc2FmZSh2b2lkKVxuIFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuJiM0MztzdGF0aWMgaW50IGxkX2Fic19jYWxsYmFjayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyNiA9ICoodTY0ICopKHIyICYjNDM7IDApO1wmIzM0O1xuJiM0MztcdFwmIzM0Oy44Ynl0ZSAlW2xkX2Fic107XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0OlxuJiM0MztcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7bGRfYWJzOiByZWplY3QgaW4gY2FsbGJhY2tcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXCYjMzQ7KVxuJiM0MztpbnQgbGRfYWJzX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRicGZfbG9vcCgxLCBsZF9hYnNfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2tfc3VicHJvZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyNiA9IHIxO1wmIzM0O1xuJiM0MztcdFwmIzM0O3I3ID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuOGJ5dGUgJVtsZF9pbmRdO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDpcbiYjNDM7XHQ6IF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjEgPSAqKHU2NCAqKShyMiAmIzQzOyAwKTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtjYWxsIGxkX2luZF9jYWxsYmFja19zdWJwcm9nO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2xkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIHN1YnByb2dcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXCYjMzQ7KVxuJiM0MztpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2dfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGJwZl9sb29wKDEsIGxkX2luZF9jYWxsYmFjaywgXHUwMDI2c2tiLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgaW50IGxkX2luZF9nbG9iYWxfc3RhdGljKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjYgPSAlW3NrYl07XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjcgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0Oy44Ynl0ZSAlW2xkX2luZF07XCYjMzQ7XG4mIzQzO1x0OlxuJiM0MztcdDogW3NrYl0gXCYjMzQ7clwmIzM0Oyhza2IpLFxuJiM0MztcdCAgX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfY29tbW9uLCBcJiMzNDtyNlwmIzM0OywgXCYjMzQ7cjdcJiMzNDspO1xuJiM0MztcdHJldHVybiBza2ItXHUwMDNlbWFyaztcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19ub2lubGluZSBpbnQgbGRfaW5kX2dsb2JhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbGRfaW5kX2dsb2JhbF9zdGF0aWMoc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrKF9fdTMyIGluZGV4LCBzdHJ1Y3QgX19za19idWZmICoqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0bGRfaW5kX2dsb2JhbCgqY3R4KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBnbG9iYWwgc3VicHJvZ1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcJiMzNDspXG4mIzQzO2ludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRicGZfbG9vcCgxLCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrLCBcdTAwMjZza2IsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2xkX2luZDogYWxsb3cgaW4gbm9uLWNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGxkX2luZF9nbG9iYWxfc3VicHJvZ19vayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbGRfaW5kX2dsb2JhbChza2IpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbGRfe2FicyxpbmR9IGluIHN1YnByb2dzIHJlcXVpcmUgc2NhbGFyIChpbnQpIHJldHVybiB0eXBlIGluIEJURi5cbiAgKiBBIHRlc3Qgd2l0aCB2b2lkIHJldHVybiBtdXN0IGJlIHJlamVjdGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfYWJzJiMzNDssCiAgICAmIzM0O2NoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgICAmIzM0O2luX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiJiMzNDssCiAgICAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzg2NTBjNWUwMzJjNGMxMTg2YThhZTRjZTk4YTgzM2ViZGRkNDhmMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDU6MzE6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA1ZDkzZmQ4MmU3NjQ1Li45ZjMzZTk1ZDU3NDEwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTg3NDksNiAmIzQzOzg3NDksNyBAQCBCUEZfQ0FMTF80KGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsIGNoYXIgKiwgbmFtZSwgaW50LCBuYW1lX3N6LCB1MzIsIGtpbmQsIGludAogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7CiAJLmZ1bmMJCT0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwKIAkuZ3BsX29ubHkJPSBmYWxzZSwKJiM0MzsJLm1pZ2h0X3NsZWVwCT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAogCS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggYTgzOTA0MWUwZDAwOC4uZDA5ZDRjM2ZlNTQ3YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwpAQCAtODc1LDYgJiM0Mzs4NzUsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaQogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0gewogCS5mdW5jCQk9IGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLAogCS5ncGxfb25seQk9IHRydWUsCiYjNDM7CS5taWdodF9zbGVlcAk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCkBAIC05MjgsNiAmIzQzOzkyOSw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHsKIAkuZnVuYwkJPSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLAogCS5ncGxfb25seQk9IGZhbHNlLAomIzQzOwkubWlnaHRfc2xlZXAJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2J0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDMyZDMxZmE2NzAzNmIuLjJjYjhmYmE2OGNkMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTUzMDIsNiAmIzQzOzUzMDIsMTUgQEAgc3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LAogCWlmICghcHJpdl9zdGFja19zdXBwb3J0ZWQpCiAJCXN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLOwogcHJvY2Vzc19mdW5jOgomIzQzOwlpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHsKJiM0MzsJCWZvciAodG1wID0gaWR4OyB0bXAgJmd0Oz0gMDsgdG1wID0gZGluZm9bdG1wXS5jYWxsZXIpIHsKJiM0MzsJCQlpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyogcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBzdGFjayBvdmVyZmxvdyB0aGF0IG1pZ2h0IGhhcHBlbiB3aGVuCiAJICogYnBmMmJwZiBjYWxscyBnZXQgY29tYmluZWQgd2l0aCB0YWlsY2FsbHMuIExpbWl0IHRoZSBjYWxsZXImIzM5O3Mgc3RhY2sKIAkgKiBkZXB0aCBmb3Igc3VjaCBjYXNlIGRvd24gdG8gMjU2IHNvIHRoYXQgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8KQEAgLTEwMjM1LDkgJiM0MzsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQlmcmFtZSA/IHN0YXRlLSZndDtmcmFtZVtmcmFtZSAtIDFdIDogTlVMTCk7CiB9CiAKLS8qIEFyZSB3ZSBjdXJyZW50bHkgdmVyaWZ5aW5nIHRoZSBjYWxsYmFjayBmb3IgYSByYnRyZWUgaGVscGVyIHRoYXQgbXVzdAotICogYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkPyBJZiBzbywgbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCB1bnJlbGVhc2VkCi0gKiBsb2NrCiYjNDM7LyoKJiM0MzsgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3QKJiM0MzsgKiBiZSBjYWxsZWQgd2l0aCBhIGxvY2sgaGVsZCwgb3Igb25lIG9mIHRoYXQgY2FsbGJhY2smIzM5O3Mgc3VicHJvZ3M/IElmIHNvLAomIzQzOyAqIG5vIG5lZWQgdG8gY29tcGxhaW4gYWJvdXQgYW4gdW5yZWxlYXNlZCBsb2NrLgogICovCiBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewpAQCAtMTAyNDUsMTcgJiM0MzsxMDI1NSwxOSBAQCBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpOwogCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlOwogCWludCBrZnVuY19idGZfaWQ7CiYjNDM7CXUzMiBmcmFtZTsKIAotCWlmICghc3RhdGUtJmd0O2N1cmZyYW1lKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQljYWxsZWUgPSBzdGF0ZS0mZ3Q7ZnJhbWVbc3RhdGUtJmd0O2N1cmZyYW1lXTsKJiM0MzsJZm9yIChmcmFtZSA9IHN0YXRlLSZndDtjdXJmcmFtZTsgZnJhbWU7IGZyYW1lLS0pIHsKJiM0MzsJCWNhbGxlZSA9IHN0YXRlLSZndDtmcmFtZVtmcmFtZV07CiYjNDM7CQlpZiAoIWNhbGxlZS0mZ3Q7aW5fY2FsbGJhY2tfZm4pCiYjNDM7CQkJY29udGludWU7CiAKLQlpZiAoIWNhbGxlZS0mZ3Q7aW5fY2FsbGJhY2tfZm4pCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLSZndDtjYWxsc2l0ZV0uaW1tOwomIzQzOwkJaWYgKGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KIAotCWtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLSZndDtjYWxsc2l0ZV0uaW1tOwotCXJldHVybiBpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuYyhrZnVuY19idGZfaWQpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCkBAIC0xNzE3OSw2ICYjNDM7MTcxOTEsNyBAQCBzdGF0aWMgYm9vbCBtYXlfYWNjZXNzX3NrYihlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSkKICAqLwogc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKQogewomIzQzOwlzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwogCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTsKIAlzdGF0aWMgY29uc3QgaW50IGN0eF9yZWcgPSBCUEZfUkVHXzY7CiAJdTggbW9kZSA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpOwpAQCAtMTcxODksNiAmIzQzOzE3MjAyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWZvciAoaSA9IHN0YXRlLSZndDtjdXJmcmFtZTsgaTsgaS0tKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2ZyYW1lW2ldLSZndDtpbl9jYWxsYmFja19mbikgewomIzQzOwkJCXZlcmJvc2UoZW52LCAmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmICghZW52LSZndDtvcHMtJmd0O2dlbl9sZF9hYnMpIHsKIAkJdmVyaWZpZXJfYnVnKGVudiwgJiMzNDtnZW5fbGRfYWJzIGlzIG51bGwmIzM0Oyk7CiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jCmluZGV4IDZkNWZjZTdlNmZmYzkuLjgxYzQ1OTQzNTY4MGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmMKQEAgLTExNSw2ICYjNDM7MTE1LDU4IEBAIGludCBwcmVlbXB0X3NsZWVwYWJsZV9oZWxwZXIodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3N0YWNrIyYjMzQ7KQomIzQzO2ludCBwcmVlbXB0X3NsZWVwYWJsZV9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CiYjNDM7CWJwZl9wcmVlbXB0X2Rpc2FibGUoKTsKJiM0MzsJYnBmX2dldF9zdGFjayhjdHgsICZhbXA7c3RhY2ssIHNpemVvZihzdGFjayksCiYjNDM7CQkgICAgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CWJwZl9wcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjJiMzNDspCiYjNDM7aW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKJiM0MzsKJiM0MzsJdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlicGZfcHJlZW1wdF9kaXNhYmxlKCk7CiYjNDM7CWJwZl9nZXRfdGFza19zdGFjayh0YXNrLCAmYW1wO3N0YWNrLCBzaXplb2Yoc3RhY2spLAomIzQzOwkJCSAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTsKJiM0MzsJYnBmX3ByZWVtcHRfZW5hYmxlKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dXByb2JlLnMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjazsKJiM0MzsKJiM0MzsJYnBmX2dldF9zdGFjayhjdHgsICZhbXA7c3RhY2ssIHNpemVvZihzdGFjayksCiYjNDM7CQkgICAgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dXByb2JlLnMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKJiM0MzsKJiM0MzsJdGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlicGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgJmFtcDtzdGFjaywgc2l6ZW9mKHN0YWNrKSwKJiM0MzsJCQkgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O2tlcm5lbCBmdW5jIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIgaXMgc2xlZXBhYmxlIHdpdGhpbiBub24tcHJlZW1wdGlibGUgcmVnaW9uJiMzNDspCiBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYwppbmRleCA4MDM0MTlhNDdjNjI2Li40NTA0NjA4MTk2YWJkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYwpAQCAtMjcyLDYgJiM0MzsyNzIsNDcgQEAgc3RhdGljIGJvb2wgbGVzc19fYmFkX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmIKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtnbG9jayk7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtnbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX25lc3RlZF91bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXJidHJlZV9jYl91bmxvY2tfcmVsb2NrKCk7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTsKJiM0MzsJc3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iOwomIzQzOwomIzQzOwlub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CW5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTsKJiM0MzsJcmJ0cmVlX2NiX25lc3RlZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5vZGVfYS0mZ3Q7a2V5ICZsdDsgbm9kZV9iLSZndDtrZXk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX25vb3Aodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGxlc3NfX3N1YnByb2dfYWxsb3dlZChzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTsKJiM0MzsJc3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iOwomIzQzOwomIzQzOwlub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CW5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTsKJiM0MzsJcmJ0cmVlX2NiX25vb3AoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5vZGVfYS0mZ3Q7a2V5ICZsdDsgbm9kZV9iLSZndDtrZXk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZQogbG9uZyBhZGRfd2l0aF9jYihib29sIChjYikoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpKQogewpAQCAtMzMwLDQgJiM0MzszNzEsMTggQEAgbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2JfcmVzX3NwaW5fdW5sb2NrKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2NhbiYjMzk7dCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiJiMzNDspCiYjNDM7bG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmJ0cmVlX2FwaV9hZGRfY2Jfc3VicHJvZ19hbGxvd2VkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhZGRfd2l0aF9jYihsZXNzX19zdWJwcm9nX2FsbG93ZWQpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCmluZGV4IGE3Yzg0ZDNmYTRjNzMuLmUwOTI2NzY3YmJkM2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwpAQCAtMTA4LDYgJiM0MzsxMDgsMzAgQEAgaW50IHRpbWVyX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdGltZXJfYnRmX2ZpbmRfY2Iodm9pZCAqbWFwLCBpbnQgKmtleSwgc3RydWN0IGJwZl90aW1lciAqdGltZXIpCiYjNDM7ewomIzQzOwljaGFyIG5hbWVbXSA9ICYjMzQ7dGFza19zdHJ1Y3QmIzM0OzsKJiM0MzsKJiM0MzsJYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZChuYW1lLCBzaXplb2YobmFtZSksIEJURl9LSU5EX1NUUlVDVCwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2xlZXBhYmxlIGhlbHBlciBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kI3t7WzAtOV0mIzQzO319IGluIG5vbi1zbGVlcGFibGUgcHJvZyYjMzQ7KQomIzQzO2ludCB0aW1lcl9idGZfZmluZF9wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aW1lcl9lbGVtICp2YWw7CiYjNDM7CWludCBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGltZXJfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl90aW1lcl9pbml0KCZhbXA7dmFsLSZndDt0LCAmYW1wO3RpbWVyX21hcCwgMCk7CiYjNDM7CWJwZl90aW1lcl9zZXRfY2FsbGJhY2soJmFtcDt2YWwtJmd0O3QsIHRpbWVyX2J0Zl9maW5kX2NiKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19zdWNjZXNzCiBpbnQgc3lzY2FsbF9zeXNfYnBmX3Byb2codm9pZCAqY3R4KQpAQCAtMTI2LDYgJiM0MzsxNTAsMTYgQEAgaW50IHN5c2NhbGxfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBzeXNjYWxsX2J0Zl9maW5kX3Byb2codm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJY2hhciBuYW1lW10gPSAmIzM0O3Rhc2tfc3RydWN0JiMzNDs7CiYjNDM7CiYjNDM7CWJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBXb3JrcXVldWUgdGVzdHMgKi8KIAogc3RydWN0IHdxX2VsZW0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jCmluZGV4IDA5ZTgxYjk5ZWVjYjQuLjMyOTg5Zjk4MWZiNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmMKQEAgLTE5NCw2ICYjNDM7MTk0LDEwMiBAQCBfX25ha2VkIHZvaWQgbGRfaW5kX3N1YnByb2dfYm90aF9wYXRoc19zYWZlKHZvaWQpCiAJOjo6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfYWJzX2NhbGxiYWNrKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3I2ID0gKih1NjQgKikocjIgJiM0MzsgMCk7JiMzNDsKJiM0MzsJJiMzNDsuOGJ5dGUgJVtsZF9hYnNdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7bGRfYWJzOiByZWplY3QgaW4gY2FsbGJhY2smIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrJiMzNDspCiYjNDM7aW50IGxkX2Fic19jYWxsYmFja19yZWplY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJYnBmX2xvb3AoMSwgbGRfYWJzX2NhbGxiYWNrLCAmYW1wO3NrYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2tfc3VicHJvZyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9IHIxOyYjMzQ7CiYjNDM7CSYjMzQ7cjcgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7LjhieXRlICVbbGRfaW5kXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkCiYjNDM7c3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2sodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CSYjMzQ7cjEgPSAqKHU2NCAqKShyMiAmIzQzOyAwKTsmIzM0OwomIzQzOwkmIzM0O2NhbGwgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2c7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CTo6OiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIHN1YnByb2cmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrJiMzNDspCiYjNDM7aW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxLCBsZF9pbmRfY2FsbGJhY2ssICZhbXA7c2tiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3I2ID0gJVtza2JdOyYjMzQ7CiYjNDM7CSYjMzQ7cjcgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7LjhieXRlICVbbGRfaW5kXTsmIzM0OwomIzQzOwk6CiYjNDM7CTogW3NrYl0gJiMzNDtyJiMzNDsoc2tiKSwKJiM0MzsJICBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfY29tbW9uLCAmIzM0O3I2JiMzNDssICYjMzQ7cjcmIzM0Oyk7CiYjNDM7CXJldHVybiBza2ItJmd0O21hcms7CiYjNDM7fQomIzQzOwomIzQzO19fbm9pbmxpbmUgaW50IGxkX2luZF9nbG9iYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxkX2luZF9nbG9iYWxfc3RhdGljKHNrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbGRfaW5kX2dsb2JhbF9jYWxsYmFjayhfX3UzMiBpbmRleCwgc3RydWN0IF9fc2tfYnVmZiAqKmN0eCkKJiM0Mzt7CiYjNDM7CWxkX2luZF9nbG9iYWwoKmN0eCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7bGRfaW5kOiByZWplY3QgaW4gY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2cmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrJiMzNDspCiYjNDM7aW50IGxkX2luZF9nbG9iYWxfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWJwZl9sb29wKDEsIGxkX2luZF9nbG9iYWxfY2FsbGJhY2ssICZhbXA7c2tiLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtsZF9pbmQ6IGFsbG93IGluIG5vbi1jYWxsYmFjayBnbG9iYWwgc3VicHJvZyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBsZF9pbmRfZ2xvYmFsX3N1YnByb2dfb2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxkX2luZF9nbG9iYWwoc2tiKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbGRfe2FicyxpbmR9IGluIHN1YnByb2dzIHJlcXVpcmUgc2NhbGFyIChpbnQpIHJldHVybiB0eXBlIGluIEJURi4KICAqIEEgdGVzdCB3aXRoIHZvaWQgcmV0dXJuIG11c3QgYmUgcmVqZWN0ZWQuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MDQKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgQlBGIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBsb29rIGF0IHRoZSBkaWZmIGFuZCB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gU28sIEkgc2VlIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW06IGBrZXJuZWwvYnBmL2J0Zi5jYCwgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AsIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgYSBzZXQgb2Ygc2VsZnRlc3RzLgoKSW1tZWRpYXRlbHksIEkgbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgLm1pZ2h0X3NsZWVwID0gdHJ1ZWAgaW4gdGhlIGAucHJvdG9gIHN0cnVjdHVyZXMgZm9yIHNldmVyYWwgZnVuY3Rpb25zOiBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IG5vdyBiZSBhYmxlIHRvIHNsZWVwLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbG9ja2luZyBhbmQgcHJlZW1wdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMsIGhvd2V2ZXIsIHNlZW1zIHRvIGJlIGluIHRoZSB2ZXJpZmllci4gU3BlY2lmaWNhbGx5LCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBzZWUgbmV3IGNoZWNrcyBpbiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBhbmQgYGNoZWNrX2xkX2Fic2AuIFRoZSB2ZXJpZmllciBpcyBjbGVhcmx5IGFkZGluZyBvciByZWZpbmluZyByZXN0cmljdGlvbnMgYXJvdW5kIHRoZSB1c2Ugb2YgYEJQRl9MRF9bQUJTfElORF1gIHdpdGhpbiBjYWxsYmFjayBmdW5jdGlvbnMuIEkgc2VlIGl0IHJlamVjdGluZyBjb2RlIHdpdGggYCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xuJiMzNDtgIGlmIGl0IGZpbmRzIGNhbGxzIHRoYXQgdXNlIHRoZXNlLiBJIGFsc28gc2VlIGNvZGUgdGhhdCB3YWxrcyB0aHJvdWdoIHRoZSBjYWxsZXIgY2hhaW4gKHRoZSBzdGFjayBmcmFtZSksIGNoZWNraW5nIHRvIHNlZSBpZiBjb2RlIG1pZ2h0IGJlIGluIGEgY2FsbGJhY2suIFRoaXMgc2lnbmFscyB0aGF0IHRoZXNlIGNhbGxzIHdpdGhpbiBjYWxsYmFja3MgYXJlIHRoZSB0aGluZyB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlc2UgY2hlY2tzIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoeSB0aGVzZSByZXN0cmljdGlvbnMgYXJlIGJlaW5nIHB1dCBpbiBwbGFjZSBub3cuIEFyZSB0aGVyZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIGlzIHRoaXMgcmVsYXRlZCB0byBzdGFiaWxpdHkgYW5kIHByZXZlbnRpbmcgaGFuZ3Mgb3IgZGVhZGxvY2tzPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaGFzX2xkX2Fic2AsIGBpc19jYmAsIGBpbl9jYWxsYmFja19mbmAsIGFuZCBgaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmNgIGFuZCBob3cgdGhleSBpbnRlcnJlbGF0ZS4KCkZpbmFsbHksIHRoZSBzZWxmdGVzdHMgYXJlIGEgZ29vZCBzaWduLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBkZXNpZ25lZCB0byB2YWxpZGF0ZSB0aGVzZSBuZXcgcmVzdHJpY3Rpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGluZ3MgYXJlIHdvcmtpbmcgYXMgaW50ZW5kZWQsIGFuZCBkb24mIzM5O3QgcmVncmVzcyBvbGQgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRob3NlIHRvIHNlZSBob3cgdGhpcyBpcyBiZWluZyB0ZXN0ZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBncmVwIGFyb3VuZCB0aG9zZSBmaWxlcyB0byBjb25uZWN0IHRoZSBkb3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG98aW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2J8Y2hlY2tfbGRfYWJzfGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYz04NzIzPUJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50LCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3NDgtXG5rZXJuZWwvYnBmL2J0Zi5jOjg3NDk6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG5rZXJuZWwvYnBmL2J0Zi5jLTg3NTAtXHQuZnVuY1x0XHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjYzMD1zeXNjYWxsX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjM2LVx0Y2FzZSBCUEZfRlVOQ19idGZfZmluZF9ieV9uYW1lX2tpbmQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjM3Olx0XHRyZXR1cm4gXHUwMDI2YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90bztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2MzgtXHRjYXNlIEJQRl9GVU5DX3N5c19jbG9zZTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEyPXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMzpzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTQtc3RhdGljIGJvb2wgaXNfdHJhY2luZ19wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01Mjc3PXN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mjg2LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUyODc6c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyODgtXHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3N1YnByb2dfY2FsbF9kZXB0aF9pbmZvICpkaW5mbyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ4OT1zdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTIxLVx0XHRcdHByaXZfc3RhY2tfc3VwcG9ydGVkID0gIWkgXHUwMDI2XHUwMDI2IHByaXZfc3RhY2tfbW9kZSA9PSBQUklWX1NUQUNLX0FEQVBUSVZFO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjU1MjI6XHRcdFx0cmV0ID0gY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coZW52LCBpLCBkaW5mbyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTIzLVx0XHRcdFx0XHRwcml2X3N0YWNrX3N1cHBvcnRlZCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg2ODk9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODM2LVx0Y2FzZSBBUkdfUFRSX1RPX1NQSU5fTE9DSzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODM3Olx0XHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTg4MzgtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbiYjMzk7dCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAyMzc9c3RhdGljIHZvaWQgYWNjb3VudF9jdXJyZW50X3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyNTEtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAyNTI6c3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI1My17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNTg5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTY4LVx0XHRcdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTY5Olx0XHRcdFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk3MC1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG5vdCBhbGxvd2VkIGluIHJidHJlZSBjYlxcblwmIzM0OywgZnVuY19uYW1lKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyNTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyNTY6XHRcdFx0aWYgKGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKGVudikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI1Ny1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtjYW4mIzM5O3QgcmVzX3NwaW5fe2xvY2ssdW5sb2NrfSBpbiByYnRyZWUgY2JcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY4MT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg3Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg3NzpcdGlmIChpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihlbnYpIFx1MDAyNlx1MDAyNiAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg3OC1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O0NhbGxpbmcgYnBmX3JjdV9yZWFkX3tsb2NrLHVubG9ja30gaW4gdW5uZWNlc3NhcnkgcmJ0cmVlIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcxNjU9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19za2IoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MTkxLSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MTkyOnN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzE5My17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTIzPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyMTUtXHRcdGlmIChtb2RlID09IEJQRl9BQlMgfHwgbW9kZSA9PSBCUEZfSU5EKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MjE2Olx0XHRcdHJldHVybiBjaGVja19sZF9hYnMoZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODIxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgYW5kIEhlbHBlciBGdW5jdGlvbnM6IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUgQlBGIHZlcmlmaWVyIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGp1bXAgb3V0LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGBrZXJuZWwvYnBmL2J0Zi5jYCwgYW5kIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgIOKAkyBhbGwgY29yZSBjb21wb25lbnRzIG9mIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcywgb2YgY291cnNlLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigyKWAgc3lzY2FsbC4gR2l2ZW4gb3VyIGZ1enppbmcgdHJpYWdlIGd1aWRlbGluZXMsIHRoaXMgaXMgYSBjbGVhciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBUaGUgY2hhbmdlcyBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBhIGNvcmUgc3Vic3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biB0byBpZGVudGlmeSBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgY2hlY2tfbGRfYWJzYCwgYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLgoKVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXNlIHN0YXRpYywgZXhwb3J0ZWQsIG9yIGlubGluZWQ/ICBMZXQmIzM5O3Mgc2VlOiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBhbmQgYGNoZWNrX2xkX2Fic2AgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGB2ZXJpZmllci5jYC4gIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBhcmUgKm5vdCogc3RhdGljOyB0aGV5JiMzOTtyZSBCUEZfQ0FMTHMgaW4gYGJ0Zi5jYCBhbmQgYHN0YWNrbWFwLmNgIHJlc3BlY3RpdmVseSwgd2hpY2ggaXMgZ29vZCBmb3Igb3VyIHB1cnBvc2VzLiAgQW5kIGBicGZfY2hlY2tgIGlzIHRoZSBtYWluIHZlcmlmaWVyIGVudHJ5cG9pbnQuIE5vdywgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHN0cnVjdHVyZSBhbmQgY2FsbC1mbG93IG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgd2l0aGluIGB2ZXJpZmllci5jYC4gV2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2Ugc3RhdGljIHZlcmlmaWVyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBnZXQgYSBiZXR0ZXIgYXR0YWNrIHN1cmZhY2UgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyODA6XHRcdGludCBmcmFtZTsgLyogIyBvZiBjb25zZWN1dGl2ZSBzdGF0aWMgY2FsbCBzdGFjayBmcmFtZXMgb24gdG9wIG9mIHN0YWNrICovXG41MjgxOlx0fTtcbjUyODI6XHRcbjUyODM6XHQvKiBzdGFydGluZyBmcm9tIG1haW4gYnBmIGZ1bmN0aW9uIHdhbGsgYWxsIGluc3RydWN0aW9ucyBvZiB0aGUgZnVuY3Rpb25cbjUyODQ6XHQgKiBhbmQgcmVjdXJzaXZlbHkgd2FsayBhbGwgY2FsbGVlcyB0aGF0IGdpdmVuIGZ1bmN0aW9uIGNhbiBjYWxsLlxuNTI4NTpcdCAqIElnbm9yZSBqdW1wIGFuZCBleGl0IGluc25zLlxuNTI4NjpcdCAqL1xuNTI4NzpcdHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbjUyODg6XHRcdFx0XHRcdFx0IHN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8gKmRpbmZvLFxuNTI4OTpcdFx0XHRcdFx0XHQgYm9vbCBwcml2X3N0YWNrX3N1cHBvcnRlZClcbjUyOTA6XHR7XG41MjkxOlx0XHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG41MjkyOlx0XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG41MjkzOlx0XHRpbnQgZGVwdGggPSAwLCBmcmFtZSA9IDAsIGksIHN1YnByb2dfZW5kLCBzdWJwcm9nX2RlcHRoO1xuNTI5NDpcdFx0Ym9vbCB0YWlsX2NhbGxfcmVhY2hhYmxlID0gZmFsc2U7XG41Mjk1Olx0XHRpbnQgdG90YWw7XG41Mjk2Olx0XHRpbnQgdG1wO1xuNTI5NzpcdFxuNTI5ODpcdFx0Lyogbm8gY2FsbGVyIGlkeCAqL1xuNTI5OTpcdFx0ZGluZm9baWR4XS5jYWxsZXIgPSAtMTtcbjUzMDA6XHRcbjUzMDE6XHRcdGkgPSBzdWJwcm9nW2lkeF0uc3RhcnQ7XG41MzAyOlx0XHRpZiAoIXByaXZfc3RhY2tfc3VwcG9ydGVkKVxuNTMwMzpcdFx0XHRzdWJwcm9nW2lkeF0ucHJpdl9zdGFja19tb2RlID0gTk9fUFJJVl9TVEFDSztcbjUzMDQ6XHRwcm9jZXNzX2Z1bmM6XG41MzA1Olx0XHRpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHtcbjUzMDY6XHRcdFx0Zm9yICh0bXAgPSBpZHg7IHRtcCBcdTAwM2U9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7XG41MzA3Olx0XHRcdFx0aWYgKHN1YnByb2dbdG1wXS5pc19jYikge1xuNTMwODpcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2Nhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXG5cJiMzNDspO1xuNTMwOTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41MzEwOlx0XHRcdFx0fVxuNTMxMTpcdFx0XHR9XG41MzEyOlx0XHR9XG41MzEzOlx0XG41MzE0Olx0XHQvKiBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHRoYXQgbWlnaHQgaGFwcGVuIHdoZW5cbjUzMTU6XHRcdCAqIGJwZjJicGYgY2FsbHMgZ2V0IGNvbWJpbmVkIHdpdGggdGFpbGNhbGxzLiBMaW1pdCB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrXG41MzE2Olx0XHQgKiBkZXB0aCBmb3Igc3VjaCBjYXNlIGRvd24gdG8gMjU2IHNvIHRoYXQgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW9cbjUzMTc6XHRcdCAqIHdvdWxkIHJlc3VsdCBpbiA4ayBzdGFjayBzaXplICgzMiB3aGljaCBpcyB0YWlsY2FsbCBsaW1pdCAqIDI1NiA9XG41MzE4Olx0XHQgKiA4aykuXG41MzE5Olx0XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQlRGIGFuZCBTdGFja21hcCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQlRGIGFuZCBzdGFjayBtYXBzIGFyZSB3b3JraW5nLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGZpbmRpbmcgQlRGIGRhdGEgYnkgbmFtZSBhbmQgY2hlY2tpbmcgZm9yIHNsZWVwYWJpbGl0eSBvbiB0aGUgc3RhY2suIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBleGFtaW5lIHRoZSBjb2RlIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgIGFuZCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgIGZ1bmN0aW9ucy4gR2l2ZW4gdGhhdCB0aGV5JiMzOTtyZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXRpZXMsIHRoZXkmIzM5O3JlIHByb2JhYmx5IHJlc2lkaW5nIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbnMgdG8gc3RhcnQgYXJlIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBsb2dpYyBmbG93IG9mIHRoZXNlIGtleSBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgdGhlIGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozg3NDA6XHRcdFx0XHRyZXR1cm4gYnRmX29ial9mZDtcbjg3NDE6XHRcdFx0fVxuODc0MjpcdFx0XHRyZXR1cm4gcmV0IHwgKCgodTY0KWJ0Zl9vYmpfZmQpIFx1MDAzY1x1MDAzYyAzMik7XG44NzQzOlx0XHR9XG44NzQ0Olx0XHRpZiAocmV0IFx1MDAzZSAwKVxuODc0NTpcdFx0XHRidGZfcHV0KGJ0Zik7XG44NzQ2Olx0XHRyZXR1cm4gcmV0O1xuODc0NzpcdH1cbjg3NDg6XHRcbjg3NDk6XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbjg3NTA6XHRcdC5mdW5jXHRcdD0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCxcbjg3NTE6XHRcdC5ncGxfb25seVx0PSBmYWxzZSxcbjg3NTI6XHRcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuODc1MzpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuODc1NDpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG44NzU1Olx0XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbjg3NTY6XHRcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuODc1NzpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG44NzU4Olx0fTtcbjg3NTk6XHRcbjg3NjA6XHRCVEZfSURfTElTVF9HTE9CQUwoYnRmX3RyYWNpbmdfaWRzLCBNQVhfQlRGX1RSQUNJTkdfVFlQRSlcbjg3NjE6XHQjZGVmaW5lIEJURl9UUkFDSU5HX1RZUEUobmFtZSwgdHlwZSkgQlRGX0lEKHN0cnVjdCwgdHlwZSlcbjg3NjI6XHRCVEZfVFJBQ0lOR19UWVBFX3h4eFxuODc2MzpcdCN1bmRlZiBCVEZfVFJBQ0lOR19UWVBFXG44NzY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgU3RhY2sgTWFwIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzdGFjayBtYXBzIHdvcmsgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyBuYXZpZ2F0ZSBkaXJlY3RseSB0byBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gVGhpcyBmaWxlIHNob3VsZCBob2xkIHRoZSBrZXkgbG9naWMgZm9yIGFsbG9jYXRpbmcsIG1hbmFnaW5nLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBCUEYgc3RhY2sgbWFwcy4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyBzdGFjayBzcGFjZSBpcyByZXNlcnZlZCwgaG93IGRhdGEgaXMgd3JpdHRlbiBhbmQgcmVhZCwgYW5kIGhvdyB0aGVzZSBtYXBzIGludGVncmF0ZSB3aXRoIHRoZSBicm9hZGVyIEJQRiB2ZXJpZmllciBhbmQgZXhlY3V0aW9uIGVudmlyb25tZW50LiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGV5IGVtcGxveSwgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHVzZWQgdG8gbWFrZSBzdGFjayBtYXBzIGVmZmljaWVudCBpbiB0aGUgY29udGV4dCBvZiBCUEYgcHJvZ3JhbXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg3MDpcdFx0ICAgdTY0LCBmbGFncylcbiA4NzE6XHR7XG4gODcyOlx0XHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcbiA4NzM6XHR9XG4gODc0Olx0XG4gODc1Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIDg3NjpcdFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSxcbiA4Nzc6XHRcdC5ncGxfb25seVx0PSB0cnVlLFxuIDg3ODpcdFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gODc5Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gODgwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIDg4MTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4gODgyOlx0XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIDg4MzpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gODg0Olx0fTtcbiA4ODU6XHRcbiA4ODY6XHRzdGF0aWMgbG9uZyBfX2JwZl9nZXRfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4gODg3Olx0XHRcdFx0XHQgdTY0IGZsYWdzLCBib29sIG1heV9mYXVsdClcbiA4ODg6XHR7XG4gODg5Olx0XHRzdHJ1Y3QgcHRfcmVncyAqcmVncztcbiA4OTA6XHRcdGxvbmcgcmVzID0gLUVJTlZBTDtcbiA4OTE6XHRcbiA4OTI6XHRcdGlmICghdHJ5X2dldF90YXNrX3N0YWNrKHRhc2spKSB7XG4gODkzOlx0XHRcdG1lbXNldChidWYsIDAsIHNpemUpO1xuIDg5NDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4OTU6XHRcdH1cbiA4OTY6XHRcbiA4OTc6XHRcdHJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7XG4gODk4Olx0XHRpZiAocmVncylcbiA4OTk6XHRcdFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XG4gOTAwOlx0XHRlbHNlXG4gOTAxOlx0XHRcdG1lbXNldChidWYsIDAsIHNpemUpO1xuIDkwMjpcdFx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XG4gOTAzOlx0XHRyZXR1cm4gcmVzO1xuIDkwNDpcdH1cbiA5MDU6XHRcbiA5MDY6XHRCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFjaywgc3RydWN0IHRhc2tfc3RydWN0ICosIHRhc2ssIHZvaWQgKiwgYnVmLFxuIDkwNzpcdFx0ICAgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxuIDkwODpcdHtcbiA5MDk6XHRcdHJldHVybiBfX2JwZl9nZXRfdGFza19zdGFjayh0YXNrLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiA5MTA6XHR9XG4gOTExOlx0XG4gOTEyOlx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHtcbiA5MTM6XHRcdC5mdW5jXHRcdD0gYnBmX2dldF90YXNrX3N0YWNrLFxuIDkxNDpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIDkxNTpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIDkxNjpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiA5MTc6XHRcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbiA5MTg6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuIDkxOTpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiA5MjA6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIDkyMTpcdH07XG4gOTIyOlx0XG4gOTIzOlx0QlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWYsXG4gOTI0Olx0XHQgICB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXG4gOTI1Olx0e1xuIDkyNjpcdFx0cmV0dXJuIF9fYnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogIW1heV9mYXVsdCAqLyk7XG4gOTI3Olx0fVxuIDkyODpcdFxuIDkyOTpcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIDkzMDpcdFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxuIDkzMTpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIDkzMjpcdFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gOTMzOlx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gOTM0Olx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIDkzNTpcdFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuIDkzNjpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4gOTM3Olx0XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIDkzODpcdFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gOTM5Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEJQRiBWZXJpZmllciBhbmQgSGVscGVycyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEJQRiBoZWxwZXJzIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoZXJlJiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZXNlIHNldHRpbmdzPyBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBsb29raW5nIGluIHRoZSBwbGFjZXMgdGhhdCBkZWZpbmUgdGhlIGNvcmUgQlBGIGZlYXR1cmVzLiBMaWtlbHkgY2FuZGlkYXRlcyBmb3IgS2NvbmZpZyBmaWxlcyB3b3VsZCBiZSBga2VybmVsL2JwZi9LY29uZmlnYCBvciBwb3NzaWJseSBldmVuIGBpbml0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgZ2xvYmFsIG9wdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCBzZXR0aW5ncyB0aGF0IHdvdWxkIGFmZmVjdCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRob3NlIGZpbGVzIGFuZCB0cmFjZSBvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW5zIHRvIGVuc3VyZSBub3RoaW5n4oCZcyBicm9rZW4gb3IgdW5pbnRlbnRpb25hbGx5IGRpc2FibGVkLiBJdCYjMzk7cyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHZlcmlmeSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjoKCioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEJQRiBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gQlBGIHdpbGwgcmVzaWRlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNlZSBob3cgaXQgYnVpbGRzLCBhbmQgSSYjMzk7bGwgYWxzbyBjaGVjayBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgaXQgbWlnaHQgY29udGFpbi4gVGhlbiwgdG8gZ2V0IHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGBpbml0L0tjb25maWdgIGlzIHRoZSBwbGFjZSB0byBsb29rIGZvciB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuZCB1cCBpbiBgLmNvbmZpZ2AuIEl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgbmV3IG9yIGFueSBjaGFuZ2VzIHRvIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgQlBGIGNvbmZpZ3MuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgaXMgZW5hYmxlZCBhbmQgY29udHJvbGxlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0yMz1pZmVxICgkKENPTkZJR19ORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN0YWNrbWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzItZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJldXNlcG9ydF9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc3RydWN0X29wcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2sub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9NjE9b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjItXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJlbG9fY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX3JlbG9jYXRlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0ga21lbV9jYWNoZV9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRtYWJ1Zl9pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgQlBGIGFuZCBQZXJmIEV2ZW50IENvbmZpZ3VyYXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGRlZmluaXRpb25zLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGhvdyBgQlBGX1NZU0NBTExgIGFuZCBgUEVSRl9FVkVOVFNgIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWFrZSBhc3N1bXB0aW9ucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZlYXR1cmVzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhlaXIgZW5hYmxlbWVudCBvciBkaXNhYmxlbWVudC4gVGhpcyBtZWFucyBsb29raW5nIGJleW9uZCBqdXN0IHRoZSBpbW1lZGlhdGUgZGVmaW5pdGlvbnMsIHRyYWNpbmcgdGhyb3VnaCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBzZWVpbmcgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8ga25vdyBldmVyeXRoaW5nIGFib3V0IHRoZWlyIGNvbmZpZ3VyYXRpb24sIGhvdyB0aGV5IHRpZSBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gdGhlaXIgYmVoYXZpb3IgYmFzZWQgb24gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IHNlcmlvdXMgYW5hbHlzaXMgb3IgZGV2ZWxvcG1lbnQgaW52b2x2aW5nIEJQRiBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gTXkgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoQlBGX1NZU0NBTEx8QlBGKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZy0zLSMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcbmtlcm5lbC9icGYvS2NvbmZpZy01LVx0Ym9vbFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXHRib29sIFwmIzM0O0Rpc2FibGUgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0XCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzoyOm1lbnVjb25maWcgQlBGX1BSRUxPQURcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1ByZWxvYWQgQlBGIGZpbGUgc3lzdGVtIHdpdGgga2VybmVsIHNwZWNpZmljIHByb2dyYW0gYW5kIG1hcCBpdGVyYXRvcnNcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0xND1pZiBCUEZfUFJFTE9BRFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6MTU6Y29uZmlnIEJQRl9QUkVMT0FEX1VNRFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDticGZfcHJlbG9hZCBrZXJuZWwgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ0CgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDc3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGJyZWFrIGRvd24gaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEZpcnN0LCBJIHNlZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb246IGB2ZXJpZmllci5jYCBhbmQgYGJ0Zi5jYCBhcmUgY29tcGlsZWQgdW5kZXIgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgc3RhY2ttYXAuY2AgcmVxdWlyZXMgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QRVJGX0VWRU5UU2AuIE5hdHVyYWxseSwgYENPTkZJR19CUEZgIGlzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgY2hlY2tfbGRfYWJzYCwgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCwgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCwgYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLiBRdWljayBjaGVjaywgYW5kIEkgc2VlIHRoYXQgdGhlIGZpcnN0IHRocmVlIChgY2hlY2tfbGRfYWJzYCwgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCwgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCkgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGB2ZXJpZmllci5jYCwgd2hpY2ggbWFrZXMgdGhlbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgaW4gdGhlIGNvbnRleHQgb2YgdmVyaWZpY2F0aW9uLiBUaGUgbGFzdCB0aHJlZSAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWApIGFyZSBmdW5jdGlvbnMgaW4gYGJ0Zi5jYCBhbmQgYHN0YWNrbWFwLmNgLCByZXNwZWN0aXZlbHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgYGJwZl9jaGVja2AsIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBzZW5zZSB0byBtZSB0byBjb25zaWRlciB0aG9zZSBzeW1ib2xzIEkgbm90ZWQgZWFybGllci4gVGhlIHBhdGNoIGluZGljYXRlcyB0aGF0IGBjaGVja19sZF9hYnNgLCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBzaG91bGQgYWxsIGJlIGNvbnNpZGVyZWQuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgdmVyaWZpZXIgbG9naWMgY2hhbmdlcyBpbiBgdmVyaWZpZXIuY2AgKGRpc2FibGluZyBgQlBGX0xEX0FCUy9JTkRgIGluc2lkZSBzdWJwcm9ncmFtIGNhbGxiYWNrcywgdXBkYXRpbmcgcmJ0cmVlIGxvY2sgdmVyaWZpZXIgY2hlY2tzKSBhbmQgYWRkaW5nIGAubWlnaHRfc2xlZXAgPSB0cnVlYCBmbGFncyB0byBzZXZlcmFsIEJQRiBoZWxwZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGNvcmUgY2hhbmdlcywgYW5kIGRpcmVjdGx5IHRvdWNoYWJsZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggYSBoaWdoIHByaW9yaXR5IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYEJQRl9TWVNDQUxMYCBhbmQgYFBFUkZfRVZFTlRTYC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGUgb25lcyBtZW50aW9uZWQgZWFybGllcjogYGNoZWNrX2xkX2Fic2AsIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAsIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYC4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19sZF9hYnMmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2cmIzM0OywKICAgICYjMzQ7aW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2ImIzM0OywKICAgICYjMzQ7YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfbGRfYWJzJiMzNDssCiAgICAmIzM0O2NoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nJiMzNDssCiAgICAmIzM0O2luX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiJiMzNDssCiAgICAmIzM0O2JwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcbjEuIEl0IGZsYWdzIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzIChgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2ApIHdpdGggYC5taWdodF9zbGVlcCA9IHRydWVgIHRvIHByZXZlbnQgdGhlaXIgaW52b2NhdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXG4yLiBJdCBhZGRzIEJQRiB2ZXJpZmllciBjaGVja3MgKGBjaGVja19sZF9hYnNgIGFuZCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgKSB0byBkaXNhbGxvdyBgQlBGX0xEX1tBQlN8SU5EXWAgd2l0aGluIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxuNC4gSXQgYWRkcyBzZWxmdGVzdHMgZm9yIHRoZXNlIHZlcmlmaWVyIHNjZW5hcmlvcy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4NjUwYzVlMDMyYzRjMTE4NmE4YWU0Y2U5OGE4MzNlYmRkZDQ4ZjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjMxOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmMKaW5kZXggNWQ5M2ZkODJlNzY0NS4uOWYzM2U5NWQ1NzQxMCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2J0Zi5jCkBAIC04NzQ5LDYgJiM0Mzs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnQKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvID0gewogCS5mdW5jCQk9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsCiAJLmdwbF9vbmx5CT0gZmFsc2UsCiYjNDM7CS5taWdodF9zbGVlcAk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKIAkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jCmluZGV4IGE4MzkwNDFlMGQwMDguLmQwOWQ0YzNmZTU0N2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKQEAgLTg3NSw2ICYjNDM7ODc1LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2kKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHsKIAkuZnVuYwkJPSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwKIAkuZ3BsX29ubHkJPSB0cnVlLAomIzQzOwkubWlnaHRfc2xlZXAJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLApAQCAtOTI4LDYgJiM0Mzs5MjksNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZgogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CiAJLmZ1bmMJCT0gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSwKIAkuZ3BsX29ubHkJPSBmYWxzZSwKJiM0MzsJLm1pZ2h0X3NsZWVwCT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAzMmQzMWZhNjcwMzZiLi4yY2I4ZmJhNjhjZDE1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01MzAyLDYgJiM0Mzs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwKIAlpZiAoIXByaXZfc3RhY2tfc3VwcG9ydGVkKQogCQlzdWJwcm9nW2lkeF0ucHJpdl9zdGFja19tb2RlID0gTk9fUFJJVl9TVEFDSzsKIHByb2Nlc3NfZnVuYzoKJiM0MzsJaWYgKHN1YnByb2dbaWR4XS5oYXNfbGRfYWJzKSB7CiYjNDM7CQlmb3IgKHRtcCA9IGlkeDsgdG1wICZndDs9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7CiYjNDM7CQkJaWYgKHN1YnByb2dbdG1wXS5pc19jYikgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlbgogCSAqIGJwZjJicGYgY2FsbHMgZ2V0IGNvbWJpbmVkIHdpdGggdGFpbGNhbGxzLiBMaW1pdCB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrCiAJICogZGVwdGggZm9yIHN1Y2ggY2FzZSBkb3duIHRvIDI1NiBzbyB0aGF0IHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvCkBAIC0xMDIzNSw5ICYjNDM7MTAyNDQsMTAgQEAgc3RhdGljIHZvaWQgYWNjb3VudF9jdXJyZW50X3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkJZnJhbWUgPyBzdGF0ZS0mZ3Q7ZnJhbWVbZnJhbWUgLSAxXSA6IE5VTEwpOwogfQogCi0vKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGEgcmJ0cmVlIGhlbHBlciB0aGF0IG11c3QKLSAqIGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZD8gSWYgc28sIG5vIG5lZWQgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWxlYXNlZAotICogbG9jawomIzQzOy8qCiYjNDM7ICogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhbiByYnRyZWUga2Z1bmMgdGhhdCBtdXN0CiYjNDM7ICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJiMzOTtzIHN1YnByb2dzPyBJZiBzbywKJiM0MzsgKiBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IGFuIHVucmVsZWFzZWQgbG9jay4KICAqLwogc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKQEAgLTEwMjQ1LDE3ICYjNDM7MTAyNTUsMTkgQEAgc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKIAlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZTsKIAlpbnQga2Z1bmNfYnRmX2lkOwomIzQzOwl1MzIgZnJhbWU7CiAKLQlpZiAoIXN0YXRlLSZndDtjdXJmcmFtZSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JY2FsbGVlID0gc3RhdGUtJmd0O2ZyYW1lW3N0YXRlLSZndDtjdXJmcmFtZV07CiYjNDM7CWZvciAoZnJhbWUgPSBzdGF0ZS0mZ3Q7Y3VyZnJhbWU7IGZyYW1lOyBmcmFtZS0tKSB7CiYjNDM7CQljYWxsZWUgPSBzdGF0ZS0mZ3Q7ZnJhbWVbZnJhbWVdOwomIzQzOwkJaWYgKCFjYWxsZWUtJmd0O2luX2NhbGxiYWNrX2ZuKQomIzQzOwkJCWNvbnRpbnVlOwogCi0JaWYgKCFjYWxsZWUtJmd0O2luX2NhbGxiYWNrX2ZuKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS0mZ3Q7Y2FsbHNpdGVdLmltbTsKJiM0MzsJCWlmIChpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuYyhrZnVuY19idGZfaWQpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiAKLQlrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS0mZ3Q7Y2FsbHNpdGVdLmltbTsKLQlyZXR1cm4gaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQpAQCAtMTcxNzksNiAmIzQzOzE3MTkxLDcgQEAgc3RhdGljIGJvb2wgbWF5X2FjY2Vzc19za2IoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpCiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIHsKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUgPSBlbnYtJmd0O2N1cl9zdGF0ZTsKIAlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7CiAJc3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182OwogCXU4IG1vZGUgPSBCUEZfTU9ERShpbnNuLSZndDtjb2RlKTsKQEAgLTE3MTg5LDYgJiM0MzsxNzIwMiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlmb3IgKGkgPSBzdGF0ZS0mZ3Q7Y3VyZnJhbWU7IGk7IGktLSkgewomIzQzOwkJaWYgKHN0YXRlLSZndDtmcmFtZVtpXS0mZ3Q7aW5fY2FsbGJhY2tfZm4pIHsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDtjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWVudi0mZ3Q7b3BzLSZndDtnZW5fbGRfYWJzKSB7CiAJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7Z2VuX2xkX2FicyBpcyBudWxsJiMzNDspOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYwppbmRleCA2ZDVmY2U3ZTZmZmM5Li44MWM0NTk0MzU2ODBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jCkBAIC0xMTUsNiAmIzQzOzExNSw1OCBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfaGVscGVyKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz91cHJvYmUucyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF9zdGFjayMmIzM0OykKJiM0MztpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrOwomIzQzOwomIzQzOwlicGZfcHJlZW1wdF9kaXNhYmxlKCk7CiYjNDM7CWJwZl9nZXRfc3RhY2soY3R4LCAmYW1wO3N0YWNrLCBzaXplb2Yoc3RhY2spLAomIzQzOwkJICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpOwomIzQzOwlicGZfcHJlZW1wdF9lbmFibGUoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz91cHJvYmUucyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF90YXNrX3N0YWNrIyYjMzQ7KQomIzQzO2ludCBwcmVlbXB0X3NsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CiYjNDM7CXRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJYnBmX3ByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwlicGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgJmFtcDtzdGFjaywgc2l6ZW9mKHN0YWNrKSwKJiM0MzsJCQkgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7CiYjNDM7CWJwZl9wcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHNsZWVwYWJsZV9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7CiYjNDM7CiYjNDM7CWJwZl9nZXRfc3RhY2soY3R4LCAmYW1wO3N0YWNrLCBzaXplb2Yoc3RhY2spLAomIzQzOwkJICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3Vwcm9iZS5zJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHNsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CiYjNDM7CXRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTsKJiM0MzsJYnBmX2dldF90YXNrX3N0YWNrKHRhc2ssICZhbXA7c3RhY2ssIHNpemVvZihzdGFjayksCiYjNDM7CQkJICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/ZmVudHJ5LnMvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtrZXJuZWwgZnVuYyBicGZfY29weV9mcm9tX3VzZXJfc3RyIGlzIHNsZWVwYWJsZSB3aXRoaW4gbm9uLXByZWVtcHRpYmxlIHJlZ2lvbiYjMzQ7KQogaW50IHByZWVtcHRfc2xlZXBhYmxlX2tmdW5jKHZvaWQgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMKaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMKQEAgLTI3Miw2ICYjNDM7MjcyLDQ3IEBAIHN0YXRpYyBib29sIGxlc3NfX2JhZF9yZXNfc3Bpbl91bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfdW5sb2NrX3JlbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7Z2xvY2spOwomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7Z2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlyYnRyZWVfY2JfdW5sb2NrX3JlbG9jaygpOwomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBsZXNzX19iYWRfc3VicHJvZ191bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjsKJiM0MzsKJiM0MzsJbm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpOwomIzQzOwlub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CXJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9ub29wKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBsZXNzX19zdWJwcm9nX2FsbG93ZWQoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7CiYjNDM7CXN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjsKJiM0MzsKJiM0MzsJbm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpOwomIzQzOwlub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7CiYjNDM7CXJidHJlZV9jYl9ub29wKCk7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUKIGxvbmcgYWRkX3dpdGhfY2IoYm9vbCAoY2IpKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKSkKIHsKQEAgLTMzMCw0ICYjNDM7MzcxLDE4IEBAIGxvbmcgcmJ0cmVlX2FwaV9hZGRfYmFkX2NiX3Jlc19zcGluX3VubG9jayh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW4mIzM5O3Qgc3Bpbl97bG9jayx1bmxvY2t9IGluIHJidHJlZSBjYiYjMzQ7KQomIzQzO2xvbmcgcmJ0cmVlX2FwaV9hZGRfYmFkX2NiX3N1YnByb2dfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhZGRfd2l0aF9jYihsZXNzX19iYWRfc3VicHJvZ191bmxvY2spOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0Mztsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWRkX3dpdGhfY2IobGVzc19fc3VicHJvZ19hbGxvd2VkKTsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYwppbmRleCBhN2M4NGQzZmE0YzczLi5lMDkyNjc2N2JiZDNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMKQEAgLTEwOCw2ICYjNDM7MTA4LDMwIEBAIGludCB0aW1lcl9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRpbWVyX2J0Zl9maW5kX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHN0cnVjdCBicGZfdGltZXIgKnRpbWVyKQomIzQzO3sKJiM0MzsJY2hhciBuYW1lW10gPSAmIzM0O3Rhc2tfc3RydWN0JiMzNDs7CiYjNDM7CiYjNDM7CWJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NsZWVwYWJsZSBoZWxwZXIgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCN7e1swLTldJiM0Mzt9fSBpbiBub24tc2xlZXBhYmxlIHByb2cmIzM0OykKJiM0MztpbnQgdGltZXJfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXJfZWxlbSAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RpbWVyX21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfdGltZXJfaW5pdCgmYW1wO3ZhbC0mZ3Q7dCwgJmFtcDt0aW1lcl9tYXAsIDApOwomIzQzOwlicGZfdGltZXJfc2V0X2NhbGxiYWNrKCZhbXA7dmFsLSZndDt0LCB0aW1lcl9idGZfZmluZF9jYik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fc3VjY2VzcwogaW50IHN5c2NhbGxfc3lzX2JwZl9wcm9nKHZvaWQgKmN0eCkKQEAgLTEyNiw2ICYjNDM7MTUwLDE2IEBAIGludCBzeXNjYWxsX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgc3lzY2FsbF9idGZfZmluZF9wcm9nKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWNoYXIgbmFtZVtdID0gJiMzNDt0YXNrX3N0cnVjdCYjMzQ7OwomIzQzOwomIzQzOwlicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogV29ya3F1ZXVlIHRlc3RzICovCiAKIHN0cnVjdCB3cV9lbGVtIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYwppbmRleCAwOWU4MWI5OWVlY2I0Li4zMjk4OWY5ODFmYjY5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jCkBAIC0xOTQsNiAmIzQzOzE5NCwxMDIgQEAgX19uYWtlZCB2b2lkIGxkX2luZF9zdWJwcm9nX2JvdGhfcGF0aHNfc2FmZSh2b2lkKQogCTo6OiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWQKJiM0MztzdGF0aWMgaW50IGxkX2Fic19jYWxsYmFjayh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9ICoodTY0ICopKHIyICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7LjhieXRlICVbbGRfYWJzXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xkX2FiczogcmVqZWN0IGluIGNhbGxiYWNrJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayYjMzQ7KQomIzQzO2ludCBsZF9hYnNfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWJwZl9sb29wKDEsIGxkX2Fic19jYWxsYmFjaywgJmFtcDtza2IsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CSYjMzQ7cjYgPSByMTsmIzM0OwomIzQzOwkmIzM0O3I3ID0gMDsmIzM0OwomIzQzOwkmIzM0Oy44Ynl0ZSAlW2xkX2luZF07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IxID0gKih1NjQgKikocjIgJiM0MzsgMCk7JiMzNDsKJiM0MzsJJiMzNDtjYWxsIGxkX2luZF9jYWxsYmFja19zdWJwcm9nOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6OjogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBzdWJwcm9nJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayYjMzQ7KQomIzQzO2ludCBsZF9pbmRfY2FsbGJhY2tfc3VicHJvZ19yZWplY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJYnBmX2xvb3AoMSwgbGRfaW5kX2NhbGxiYWNrLCAmYW1wO3NrYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSBpbnQgbGRfaW5kX2dsb2JhbF9zdGF0aWMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9ICVbc2tiXTsmIzM0OwomIzQzOwkmIzM0O3I3ID0gMDsmIzM0OwomIzQzOwkmIzM0Oy44Ynl0ZSAlW2xkX2luZF07JiMzNDsKJiM0MzsJOgomIzQzOwk6IFtza2JdICYjMzQ7ciYjMzQ7KHNrYiksCiYjNDM7CSAgX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpCiYjNDM7CTogX19jbG9iYmVyX2NvbW1vbiwgJiMzNDtyNiYjMzQ7LCAmIzM0O3I3JiMzNDspOwomIzQzOwlyZXR1cm4gc2tiLSZndDttYXJrOwomIzQzO30KJiM0MzsKJiM0MztfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGxkX2luZF9nbG9iYWxfY2FsbGJhY2soX191MzIgaW5kZXgsIHN0cnVjdCBfX3NrX2J1ZmYgKipjdHgpCiYjNDM7ewomIzQzOwlsZF9pbmRfZ2xvYmFsKCpjdHgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayYjMzQ7KQomIzQzO2ludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxLCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrLCAmYW1wO3NrYiwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7bGRfaW5kOiBhbGxvdyBpbiBub24tY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2cmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgbGRfaW5kX2dsb2JhbF9zdWJwcm9nX29rKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiBsZF9pbmRfZ2xvYmFsKHNrYik7CiYjNDM7fQomIzQzOwogLyoKICAqIGxkX3thYnMsaW5kfSBpbiBzdWJwcm9ncyByZXF1aXJlIHNjYWxhciAoaW50KSByZXR1cm4gdHlwZSBpbiBCVEYuCiAgKiBBIHRlc3Qgd2l0aCB2b2lkIHJldHVybiBtdXN0IGJlIHJlamVjdGVkLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNgoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDk1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQSBCUEYgUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gVGltZSB0byB0aGluayBsaWtlIGFuIGV4cGVydC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBwcm9iYWJseSBub3QuIExldCYjMzk7cyBkZWx2ZSBpbi4KCkZpcnN0LCBJIHNlZSBjaGFuZ2VzIHByaW1hcmlseSBmb2N1c2VkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogc3BlY2lmaWNhbGx5LCBpbiB0aGUgdmVyaWZpZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBhdHRyaWJ1dGVzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgc2VsZi10ZXN0cy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byB0aHJlZSBrZXkgYXJlYXMuCgoxLiAgV2UmIzM5O3ZlIGdvdCBgbWlnaHRfc2xlZXAgPSB0cnVlYCBiZWluZyBhZGRlZCB0byBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgaXMgYWJvdXQgdGhlIHZlcmlmaWVyIGVuZm9yY2luZyB0aGF0IHNsZWVwYWJsZSBoZWxwZXJzIGFyZSB1c2VkIGNvcnJlY3RseSDigJMgaS5lLiwgb25seSBpbiBzbGVlcGFibGUgY29udGV4dHMsIG5vdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQgb3IgaW4gUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBTdGFuZGFyZCBzdHVmZi4KCjIuICBUaGUgdmVyaWZpZXIgbm93IGV4cGxpY2l0bHkgZGlzYWxsb3dzIGBCUEZfTERfQUJTYCBhbmQgYEJQRl9MRF9JTkRgIHdpdGhpbiBCUEYgY2FsbGJhY2tzIGFuZCBzdWJwcm9ncmFtcyB0aGF0IHRob3NlIGNhbGxiYWNrcyBjYWxsLiBUaGlzIGlzIGV4cGVjdGVkIHNpbmNlIHRoZXNlIGluc3RydWN0aW9ucyBpbnZvbHZlIHNwZWNpYWwgSklUIHRyYW5zZm9ybWF0aW9ucyBvciByZS1lbnRyeSB0aGF0IGRvZXNuJiMzOTt0IGdlbCB3aXRoIGNhbGxiYWNrIGV4ZWN1dGlvbi4gSXQgbWFrZXMgc2Vuc2UgdG8gZm9yYmlkIHRoZW0uCgozLiAgVGhlIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdmVyaWZpZXIgY2hlY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgc3VicHJvZ3JhbXMgY2FsbGVkIGZyb20gcmJ0cmVlIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgdGhlIHZlcmlmaWVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZXJlYnkgYXZvaWRpbmcgZmFsc2UgcG9zaXRpdmVzIGFib3V0IHVucmVsZWFzZWQgbG9ja3MgaWYgdGhlIHN1YnByb2dyYW0gaXMgY29ycmVjdGx5IGhhbmRsaW5nIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBpbnNpZGUgdGhlIHJidHJlZSBjYWxsYmFjay4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgYXBwcm9hY2ggdGhpcyBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIFdoYXQga2luZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgbWlnaHQgdGhpcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlPyBJIGhhdmUgdG8gYmUgc3lzdGVtYXRpYy4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlIEluZm9ybWF0aW9uIExlYWs6KiogVGhpcyBwYXRjaCBzZXJpZXMgZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoZSB0eXBpY2FsIGN1bHByaXRzIC0gIG5vIGBjb3B5X3RvX3VzZXJgLCBubyBuZXRsaW5rIG1lc3NhZ2VzLCBubyBpb2N0bHMuIE5vIGRhdGEgZXhwb3N1cmUgaXMgYWRkZWQgb3IgYWx0ZXJlZC4gSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIGhlcmUuCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgVXNhZ2UgaW4gQ29uZGl0aW9uYWwgTG9naWM6KiogVGhlIHZlcmlmaWVyJiMzOTtzIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyBsb29rIHRvIGJlIHdlbGwtZGVmaW5lZC4gTm8gd2VpcmQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgSSBzZWUgbm8gY29uY2VybnMuCjMuICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gSXNzdWVzOioqIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgYnkgdGhlc2UgY2hhbmdlcy4KNC4gICoqQm91bmRzIENoZWNrcy9VbmluaXRpYWxpemVkIEJ5dGVzOioqIFRoZSBjaGFuZ2VzIHJlc3RyaWN0IGluc3RydWN0aW9ucyBpbiBjYWxsYmFja3MsIG1vZGlmeSBzbGVlcGFibGUgaGVscGVyIGF0dHJpYnV0ZXMsIGFuZCBpbXByb3ZlIHZlcmlmaWVyIGxvZ2ljIHJlbGF0ZWQgdG8gcmJ0cmVlIGNhbGxiYWNrcy4gIE5vIGNoYW5jZSBoZXJlLgoKU28sIHdoZXJlJiMzOTtzIHRoZSBLTVNBTiBob29rPyBIb25lc3RseSwgSSBkb24mIzM5O3Qgc2VlIGFueS4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mbyBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbCBhYm91dCBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBhdHRyaWJ1dGVzLiBBbnkgc2xlZXBhYmxlIG9yIGxvY2tpbmcgYnVncyBvciB2ZXJpZmllciBpc3N1ZXMgdGhhdCBjcmVlcCB1cCBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSB2ZXJpZmllciBpdHNlbGYsIExPQ0tERVAsIG9yIHRob3NlIHN0YW5kYXJkIGtlcm5lbCBydW50aW1lIGNoZWNrcy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgbWlnaHQgd2FudCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgIGFyb3VuZCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAgYnV0IG15IGNvbmNsdXNpb24gaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd29ydGggYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0NBTExfNFxcKGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9ODcxMj1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG4tLVxua2VybmVsL2JwZi9idGYuYy04NzIyLVxua2VybmVsL2JwZi9idGYuYzo4NzIzOkJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50LCBmbGFncylcbmtlcm5lbC9icGYvYnRmLmMtODcyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEJURiBJbnRlcm5hbHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgQlBGIHR5cGUgZm9ybWF0IChCVEYpIGNvZGUsIHNwZWNpZmljYWxseSwgd2hlcmUgdGhlIGFjdGlvbiBpcyB0YWtpbmcgcGxhY2UuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvYnRmLmNgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBCVEYgaW1wbGVtZW50YXRpb24gbGlrZWx5IHJlc2lkZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhcm91bmQgbGluZSA4NzIzLiBJdCYjMzk7cyBub3QgYSByYW5kb20gbnVtYmVyOyBpdCYjMzk7cyBhIHN0cmF0ZWdpYyBzdGFydGluZyBwb2ludCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIGNvZGViYXNlcy4gSG9wZWZ1bGx5LCB0aGlzIGFyZWEgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJlaGF2aW9yIEkmIzM5O20gdHJ5aW5nIHRvIGRpYWdub3NlIG9yIHVuZGVyc3RhbmQgYmV0dGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIGFuZCB0aGVuIHVzZSB0aGF0IGFzIGEganVtcGluZy1vZmYgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODcyMDpcdFx0cmV0dXJuIDA7XG44NzIxOlx0fVxuODcyMjpcdFxuODcyMzpcdEJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50LCBmbGFncylcbjg3MjQ6XHR7XG44NzI1Olx0XHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xuODcyNjpcdFx0aW50IGJ0Zl9vYmpfZmQgPSAwO1xuODcyNzpcdFx0bG9uZyByZXQ7XG44NzI4Olx0XG44NzI5Olx0XHRpZiAoZmxhZ3MpXG44NzMwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuODczMTpcdFxuODczMjpcdFx0aWYgKG5hbWVfc3ogXHUwMDNjPSAxIHx8IG5hbWVbbmFtZV9zeiAtIDFdKVxuODczMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjg3MzQ6XHRcbjg3MzU6XHRcdHJldCA9IGJwZl9maW5kX2J0Zl9pZChuYW1lLCBraW5kLCBcdTAwMjZidGYpO1xuODczNjpcdFx0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYnRmX2lzX21vZHVsZShidGYpKSB7XG44NzM3Olx0XHRcdGJ0Zl9vYmpfZmQgPSBfX2J0Zl9uZXdfZmQoYnRmKTtcbjg3Mzg6XHRcdFx0aWYgKGJ0Zl9vYmpfZmQgXHUwMDNjIDApIHtcbjg3Mzk6XHRcdFx0XHRidGZfcHV0KGJ0Zik7XG44NzQwOlx0XHRcdFx0cmV0dXJuIGJ0Zl9vYmpfZmQ7XG44NzQxOlx0XHRcdH1cbjg3NDI6XHRcdFx0cmV0dXJuIHJldCB8ICgoKHU2NClidGZfb2JqX2ZkKSBcdTAwM2NcdTAwM2MgMzIpO1xuODc0MzpcdFx0fVxuODc0NDpcdFx0aWYgKHJldCBcdTAwM2UgMClcbjg3NDU6XHRcdFx0YnRmX3B1dChidGYpO1xuODc0NjpcdFx0cmV0dXJuIHJldDtcbjg3NDc6XHR9XG44NzQ4Olx0XG44NzQ5Olx0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG44NzUwOlx0XHQuZnVuY1x0XHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXG44NzUxOlx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG44NzUyOlx0XHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbjg3NTM6XHRcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbjg3NTQ6XHRcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuODc1NTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG44NzU2Olx0XHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbjg3NTc6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuODc1ODpcdH07XG44NzU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MjkKCQkJCQkJCW91dHB1dDogMjc3CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCB0aGlzIGxvb2tzIHByZXR0eSBjbGVhbi1jdXQuIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwcm9wb3NlZCBjaGFuZ2VzLCBhbmQgaXQmIzM5O3MgYWxsIHJhdGhlciBkaXJlY3QuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIGEgYC5taWdodF9zbGVlcCA9IHRydWVgIGZsYWcgdG8gc29tZSBCUEYgaGVscGVyIGZ1bmN0aW9uIGRlZmluaXRpb25zOiBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgc2lnbmlmaWVzIHRoYXQgdGhlc2UgZnVuY3Rpb25zICpjYW4qIHBvdGVudGlhbGx5IHNsZWVwLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSB2ZXJpZmllciB0byB1bmRlcnN0YW5kLgoKQmV5b25kIHRoYXQsIHdlIGhhdmUgdmVyaWZpZXIgdmFsaWRhdGlvbiBhZGRpdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHMgY2hlY2tzIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCBpbiBjYWxsYmFja3MgYW5kIHRoZWlyIHN1YnByb2dyYW1zLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSB0aWdodGVuaW5nIHRoZSB2ZXJpZmljYXRpb24gcnVsZXMgcmVnYXJkaW5nIGRpcmVjdCBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGVzZSBjb250ZXh0cywgdXNpbmcgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCBhbmQgYGNoZWNrX2xkX2Fic2AuIFdlIGFsc28gaGF2ZSBhIGZpeCBmb3IgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCB0byBjb3JyZWN0bHkgYW5hbHl6ZSB0aGUgY2FsbGVyIGZyYW1lcyBmb3IgcmJ0cmVlIGNhbGxiYWNrIGNvbnRleHQuCgpGaW5hbGx5LCBzb21lIG5ldyBzZWxmdGVzdHMgYXJlIGluY2x1ZGVkIHRvIGNvdmVyIHRoZXNlIG5ldyB2ZXJpZmllciBydWxlcyBhbmQgc2xlZXBhYmxlIGhlbHBlcnMsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciBvbmdvaW5nIHJlbGlhYmlsaXR5LgoKSW1wb3J0YW50bHksIGJhc2VkIG9uIG15IGFuYWx5c2lzLCAqbm9uZSogb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGNoYW5nZSBtZW1vcnkgc2FmZXR5IHNlbWFudGljcyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIEtNU0FOLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55dGhpbmcgaGVyZSB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIHRvIGNhdGNoIHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGNhbiBiZSBzZXQgdG8gYGZhbHNlYC4KCk5vdywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzIGFzc2Vzc21lbnQuIFdoZW4gc2V0dGluZyB0aGUgcmVzdWx0cyBJJiMzOTtsbCBwcm92aWRlIGEgY2xlYXIgZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4vTE9DS0RFUCB3aXRoIEtNU0FOLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hhdCBlYWNoIHRvb2wgaXMgaW50ZW5kZWQgZm9yLCBhbmQgd2hpbGUgS0FTQU4vTE9DS0RFUCBhcmUgY3JpdGljYWwgZm9yIGRldGVjdGluZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIEtNU0FOIGlzIHRhaWxvcmVkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgbm90IHBlcnRpbmVudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgaGVscGVyIG1ldGFkYXRhOlxuMS4gSXQgZmxhZ3MgaGVscGVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCkgd2l0aCBgLm1pZ2h0X3NsZWVwID0gdHJ1ZWAgdG8gcHJldmVudCB0aGVpciBpbnZvY2F0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0cy5cbjIuIEl0IGFkZHMgQlBGIHZlcmlmaWVyIGNoZWNrcyAoYGNoZWNrX2xkX2Fic2AgYW5kIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2ApIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0aGVpciBzdWJwcm9ncmFtcy5cbjMuIEl0IHVwZGF0ZXMgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCB0byBpdGVyYXRlIGFjcm9zcyBzdGFjayBmcmFtZXMgdG8gcHJvcGVybHkgdHJhY2sgcmJ0cmVlIGNhbGxiYWNrIGNvbnRleHQuXG40LiBJdCBhZGRzIHNlbGZ0ZXN0cyBmb3IgdGhlc2UgdmVyaWZpZXIgc2NlbmFyaW9zLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUsIGluaXRpYWxpemUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzL2JvdW5kYXJpZXMgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBhbmQgc2xlZXAtaW4tYXRvbWljIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCB0b29scyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcbjEuIEl0IGZsYWdzIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzIChgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2ApIHdpdGggYC5taWdodF9zbGVlcCA9IHRydWVgIHRvIHByZXZlbnQgdGhlaXIgaW52b2NhdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXG4yLiBJdCBhZGRzIEJQRiB2ZXJpZmllciBjaGVja3MgKGBjaGVja19sZF9hYnNgIGFuZCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgKSB0byBkaXNhbGxvdyBgQlBGX0xEX1tBQlN8SU5EXWAgd2l0aGluIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxuNC4gSXQgYWRkcyBzZWxmdGVzdHMgZm9yIHRoZXNlIHZlcmlmaWVyIHNjZW5hcmlvcy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6MjAuMDI5NTE2NTA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjk3MjY4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfbGRfYWJzXCIsXG4gICAgXCJjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ1wiLFxuICAgIFwiaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JcIixcbiAgICBcImJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIEJQRiB2ZXJpZmllciBsb2dpYyBhbmQgaGVscGVyIG1ldGFkYXRhOlxcbjEuIEl0IGZsYWdzIGhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzIChgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2ApIHdpdGggYC5taWdodF9zbGVlcCA9IHRydWVgIHRvIHByZXZlbnQgdGhlaXIgaW52b2NhdGlvbiBmcm9tIG5vbi1zbGVlcGFibGUgY29udGV4dHMuXFxuMi4gSXQgYWRkcyBCUEYgdmVyaWZpZXIgY2hlY2tzIChgY2hlY2tfbGRfYWJzYCBhbmQgYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCkgdG8gZGlzYWxsb3cgYEJQRl9MRF9bQUJTfElORF1gIHdpdGhpbiBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHRoZWlyIHN1YnByb2dyYW1zLlxcbjMuIEl0IHVwZGF0ZXMgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCB0byBpdGVyYXRlIGFjcm9zcyBzdGFjayBmcmFtZXMgdG8gcHJvcGVybHkgdHJhY2sgcmJ0cmVlIGNhbGxiYWNrIGNvbnRleHQuXFxuNC4gSXQgYWRkcyBzZWxmdGVzdHMgZm9yIHRoZXNlIHZlcmlmaWVyIHNjZW5hcmlvcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUsIGluaXRpYWxpemUsIHJlYWQsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIG9yIGFsdGVyIGJ1ZmZlciBsZW5ndGhzL2JvdW5kYXJpZXMgdG8gdXNlciBzcGFjZS4gTG9ja2luZyBhbmQgc2xlZXAtaW4tYXRvbWljIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCB0b29scyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjIwLjAyOTUyMDk5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MzUzMjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4NjUwYzVlMDMyYzRjMTE4NmE4YWU0Y2U5OGE4MzNlYmRkZDQ4ZjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTozMToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IDVkOTNmZDgyZTc2NDUuLjlmMzNlOTVkNTc0MTAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtODc0OSw2ICs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnRcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XFxuIFxcdC5mdW5jXFx0XFx0PSBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLFxcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbitcXHQubWlnaHRfc2xlZXBcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG5pbmRleCBhODM5MDQxZTBkMDA4Li5kMDlkNGMzZmU1NDdjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbkBAIC04NzUsNiArODc1LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2lcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbiBcXHQuZnVuY1xcdFxcdD0gYnBmX2dldF9zdGFja19zbGVlcGFibGUsXFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4rXFx0Lm1pZ2h0X3NsZWVwXFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbkBAIC05MjgsNiArOTI5LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWZcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XFxuIFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbitcXHQubWlnaHRfc2xlZXBcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMzJkMzFmYTY3MDM2Yi4uMmNiOGZiYTY4Y2QxNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNTMwMiw2ICs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcXG4gXFx0aWYgKCFwcml2X3N0YWNrX3N1cHBvcnRlZClcXG4gXFx0XFx0c3VicHJvZ1tpZHhdLnByaXZfc3RhY2tfbW9kZSA9IE5PX1BSSVZfU1RBQ0s7XFxuIHByb2Nlc3NfZnVuYzpcXG4rXFx0aWYgKHN1YnByb2dbaWR4XS5oYXNfbGRfYWJzKSB7XFxuK1xcdFxcdGZvciAodG1wID0gaWR4OyB0bXAgXFx1MDAzZT0gMDsgdG1wID0gZGluZm9bdG1wXS5jYWxsZXIpIHtcXG4rXFx0XFx0XFx0aWYgKHN1YnByb2dbdG1wXS5pc19jYikge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlblxcbiBcXHQgKiBicGYyYnBmIGNhbGxzIGdldCBjb21iaW5lZCB3aXRoIHRhaWxjYWxscy4gTGltaXQgdGhlIGNhbGxlcidzIHN0YWNrXFxuIFxcdCAqIGRlcHRoIGZvciBzdWNoIGNhc2UgZG93biB0byAyNTYgc28gdGhhdCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpb1xcbkBAIC0xMDIzNSw5ICsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRcXHRmcmFtZSA/IHN0YXRlLVxcdTAwM2VmcmFtZVtmcmFtZSAtIDFdIDogTlVMTCk7XFxuIH1cXG4gXFxuLS8qIEFyZSB3ZSBjdXJyZW50bHkgdmVyaWZ5aW5nIHRoZSBjYWxsYmFjayBmb3IgYSByYnRyZWUgaGVscGVyIHRoYXQgbXVzdFxcbi0gKiBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQ/IElmIHNvLCBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IHVucmVsZWFzZWRcXG4tICogbG9ja1xcbisvKlxcbisgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3RcXG4rICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJ3Mgc3VicHJvZ3M/IElmIHNvLFxcbisgKiBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IGFuIHVucmVsZWFzZWQgbG9jay5cXG4gICovXFxuIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG5AQCAtMTAyNDUsMTcgKzEwMjU1LDE5IEBAIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZTtcXG4gXFx0aW50IGtmdW5jX2J0Zl9pZDtcXG4rXFx0dTMyIGZyYW1lO1xcbiBcXG4tXFx0aWYgKCFzdGF0ZS1cXHUwMDNlY3VyZnJhbWUpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdGNhbGxlZSA9IHN0YXRlLVxcdTAwM2VmcmFtZVtzdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbitcXHRmb3IgKGZyYW1lID0gc3RhdGUtXFx1MDAzZWN1cmZyYW1lOyBmcmFtZTsgZnJhbWUtLSkge1xcbitcXHRcXHRjYWxsZWUgPSBzdGF0ZS1cXHUwMDNlZnJhbWVbZnJhbWVdO1xcbitcXHRcXHRpZiAoIWNhbGxlZS1cXHUwMDNlaW5fY2FsbGJhY2tfZm4pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0aWYgKCFjYWxsZWUtXFx1MDAzZWluX2NhbGxiYWNrX2ZuKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZV0uaW1tO1xcbitcXHRcXHRpZiAoaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4gXFxuLVxcdGtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZV0uaW1tO1xcbi1cXHRyZXR1cm4gaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbkBAIC0xNzE3OSw2ICsxNzE5MSw3IEBAIHN0YXRpYyBib29sIG1heV9hY2Nlc3Nfc2tiKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbiAgKi9cXG4gc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuIFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcXG4gXFx0c3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182O1xcbiBcXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSk7XFxuQEAgLTE3MTg5LDYgKzE3MjAyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGZvciAoaSA9IHN0YXRlLVxcdTAwM2VjdXJmcmFtZTsgaTsgaS0tKSB7XFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZnJhbWVbaV0tXFx1MDAzZWluX2NhbGxiYWNrX2ZuKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghZW52LVxcdTAwM2VvcHMtXFx1MDAzZWdlbl9sZF9hYnMpIHtcXG4gXFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcImdlbl9sZF9hYnMgaXMgbnVsbFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXFxuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODFjNDU5NDM1NjgwZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcXG5AQCAtMTE1LDYgKzExNSw1OCBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfaGVscGVyKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3Vwcm9iZS5zXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJzbGVlcGFibGUgaGVscGVyIGJwZl9nZXRfc3RhY2sjXFxcIilcXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XFxuK1xcbitcXHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XFxuK1xcdGJwZl9nZXRfc3RhY2soY3R4LCBcXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXFxuK1xcdFxcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcXG4rXFx0YnBmX3ByZWVtcHRfZW5hYmxlKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj91cHJvYmUuc1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwic2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjXFxcIilcXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuK1xcbitcXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxuK1xcdGJwZl9wcmVlbXB0X2Rpc2FibGUoKTtcXG4rXFx0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFxcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcXG4rXFx0XFx0XFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xcbitcXHRicGZfcHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3Vwcm9iZS5zXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcXG4rXFxuK1xcdGJwZl9nZXRfc3RhY2soY3R4LCBcXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXFxuK1xcdFxcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3Vwcm9iZS5zXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzbGVlcGFibGVfZ2V0X3Rhc2tfc3RhY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4rXFxuK1xcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFxcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcXG4rXFx0XFx0XFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/ZmVudHJ5LnMvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwia2VybmVsIGZ1bmMgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciBpcyBzbGVlcGFibGUgd2l0aGluIG5vbi1wcmVlbXB0aWJsZSByZWdpb25cXFwiKVxcbiBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXFxuaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXFxuQEAgLTI3Miw2ICsyNzIsNDcgQEAgc3RhdGljIGJvb2wgbGVzc19fYmFkX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKHZvaWQpXFxuK3tcXG4rXFx0YnBmX3NwaW5fdW5sb2NrKFxcdTAwMjZnbG9jayk7XFxuK1xcdGJwZl9zcGluX2xvY2soXFx1MDAyNmdsb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfbmVzdGVkX3VubG9jayh2b2lkKVxcbit7XFxuK1xcdHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKCk7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBsZXNzX19iYWRfc3VicHJvZ191bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuK3tcXG4rXFx0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9hO1xcbitcXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2I7XFxuK1xcbitcXHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XFxuK1xcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcXG4rXFx0cmJ0cmVlX2NiX25lc3RlZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBub2RlX2EtXFx1MDAzZWtleSBcXHUwMDNjIG5vZGVfYi1cXHUwMDNla2V5O1xcbit9XFxuK1xcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9ub29wKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGxlc3NfX3N1YnByb2dfYWxsb3dlZChzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7XFxuK1xcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcXG4rXFxuK1xcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcXG4rXFx0bm9kZV9iID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xcbitcXHRyYnRyZWVfY2Jfbm9vcCgpO1xcbitcXG4rXFx0cmV0dXJuIG5vZGVfYS1cXHUwMDNla2V5IFxcdTAwM2Mgbm9kZV9iLVxcdTAwM2VrZXk7XFxuK31cXG4rXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG4gbG9uZyBhZGRfd2l0aF9jYihib29sIChjYikoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpKVxcbiB7XFxuQEAgLTMzMCw0ICszNzEsMTggQEAgbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2JfcmVzX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW4ndCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxcIilcXG4rbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBhZGRfd2l0aF9jYihsZXNzX19iYWRfc3VicHJvZ191bmxvY2spO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX3N1YnByb2dfYWxsb3dlZCk7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbmluZGV4IGE3Yzg0ZDNmYTRjNzMuLmUwOTI2NzY3YmJkM2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcXG5AQCAtMTA4LDYgKzEwOCwzMCBAQCBpbnQgdGltZXJfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB0aW1lcl9idGZfZmluZF9jYih2b2lkICptYXAsIGludCAqa2V5LCBzdHJ1Y3QgYnBmX3RpbWVyICp0aW1lcilcXG4re1xcbitcXHRjaGFyIG5hbWVbXSA9IFxcXCJ0YXNrX3N0cnVjdFxcXCI7XFxuK1xcbitcXHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwic2xlZXBhYmxlIGhlbHBlciBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kI3t7WzAtOV0rfX0gaW4gbm9uLXNsZWVwYWJsZSBwcm9nXFxcIilcXG4raW50IHRpbWVyX2J0Zl9maW5kX3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0aW1lcl9lbGVtICp2YWw7XFxuK1xcdGludCBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGltZXJfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3RpbWVyX2luaXQoXFx1MDAyNnZhbC1cXHUwMDNldCwgXFx1MDAyNnRpbWVyX21hcCwgMCk7XFxuK1xcdGJwZl90aW1lcl9zZXRfY2FsbGJhY2soXFx1MDAyNnZhbC1cXHUwMDNldCwgdGltZXJfYnRmX2ZpbmRfY2IpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBzeXNjYWxsX3N5c19icGZfcHJvZyh2b2lkICpjdHgpXFxuQEAgLTEyNiw2ICsxNTAsMTYgQEAgaW50IHN5c2NhbGxfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzeXNjYWxsX2J0Zl9maW5kX3Byb2codm9pZCAqY3R4KVxcbit7XFxuK1xcdGNoYXIgbmFtZVtdID0gXFxcInRhc2tfc3RydWN0XFxcIjtcXG4rXFxuK1xcdGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogV29ya3F1ZXVlIHRlc3RzICovXFxuIFxcbiBzdHJ1Y3Qgd3FfZWxlbSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuY1xcbmluZGV4IDA5ZTgxYjk5ZWVjYjQuLjMyOTg5Zjk4MWZiNjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXFxuQEAgLTE5NCw2ICsxOTQsMTAyIEBAIF9fbmFrZWQgdm9pZCBsZF9pbmRfc3VicHJvZ19ib3RoX3BhdGhzX3NhZmUodm9pZClcXG4gXFx0Ojo6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXFxuK3N0YXRpYyBpbnQgbGRfYWJzX2NhbGxiYWNrKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInI2ID0gKih1NjQgKikocjIgKyAwKTtcXFwiXFxuK1xcdFxcXCIuOGJ5dGUgJVtsZF9hYnNdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJsZF9hYnM6IHJlamVjdCBpbiBjYWxsYmFja1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcXCIpXFxuK2ludCBsZF9hYnNfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRicGZfbG9vcCgxLCBsZF9hYnNfY2FsbGJhY2ssIFxcdTAwMjZza2IsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxcbitzdGF0aWMgaW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInI2ID0gcjE7XFxcIlxcbitcXHRcXFwicjcgPSAwO1xcXCJcXG4rXFx0XFxcIi44Ynl0ZSAlW2xkX2luZF07XFxcIlxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6XFxuK1xcdDogX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcXG4rc3RhdGljIGludCBsZF9pbmRfY2FsbGJhY2sodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjEgPSAqKHU2NCAqKShyMiArIDApO1xcXCJcXG4rXFx0XFxcImNhbGwgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2c7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBzdWJwcm9nXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxcIilcXG4raW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0YnBmX2xvb3AoMSwgbGRfaW5kX2NhbGxiYWNrLCBcXHUwMDI2c2tiLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInI2ID0gJVtza2JdO1xcXCJcXG4rXFx0XFxcInI3ID0gMDtcXFwiXFxuK1xcdFxcXCIuOGJ5dGUgJVtsZF9pbmRdO1xcXCJcXG4rXFx0OlxcbitcXHQ6IFtza2JdIFxcXCJyXFxcIihza2IpLFxcbitcXHQgIF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKVxcbitcXHQ6IF9fY2xvYmJlcl9jb21tb24sIFxcXCJyNlxcXCIsIFxcXCJyN1xcXCIpO1xcbitcXHRyZXR1cm4gc2tiLVxcdTAwM2VtYXJrO1xcbit9XFxuK1xcbitfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gbGRfaW5kX2dsb2JhbF9zdGF0aWMoc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrKF9fdTMyIGluZGV4LCBzdHJ1Y3QgX19za19idWZmICoqY3R4KVxcbit7XFxuK1xcdGxkX2luZF9nbG9iYWwoKmN0eCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImxkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxcIilcXG4raW50IGxkX2luZF9nbG9iYWxfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRicGZfbG9vcCgxLCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrLCBcXHUwMDI2c2tiLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwibGRfaW5kOiBhbGxvdyBpbiBub24tY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2dcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGxkX2luZF9nbG9iYWxfc3VicHJvZ19vayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0cmV0dXJuIGxkX2luZF9nbG9iYWwoc2tiKTtcXG4rfVxcbitcXG4gLypcXG4gICogbGRfe2FicyxpbmR9IGluIHN1YnByb2dzIHJlcXVpcmUgc2NhbGFyIChpbnQpIHJldHVybiB0eXBlIGluIEJURi5cXG4gICogQSB0ZXN0IHdpdGggdm9pZCByZXR1cm4gbXVzdCBiZSByZWplY3RlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6MjEuNTIzNzc2MjgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTUyNDQ3ODE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9hYnNcIixcbiAgICBcImNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nXCIsXG4gICAgXCJpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYlwiLFxuICAgIFwiYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4NjUwYzVlMDMyYzRjMTE4NmE4YWU0Y2U5OGE4MzNlYmRkZDQ4ZjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjMxOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDVkOTNmZDgyZTc2NDUuLjlmMzNlOTVkNTc0MTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtODc0OSw2ICs4NzQ5LDcgQEAgQlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnRcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbitcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbmluZGV4IGE4MzkwNDFlMGQwMDguLmQwOWQ0YzNmZTU0N2MgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTg3NSw2ICs4NzUsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaVxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2dldF9zdGFja19zbGVlcGFibGUsXG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbitcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuQEAgLTkyOCw2ICs5MjksNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZlxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmZ1bmNcdFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuK1x0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMzJkMzFmYTY3MDM2Yi4uMmNiOGZiYTY4Y2QxNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNTMwMiw2ICs1MzAyLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbiBcdGlmICghcHJpdl9zdGFja19zdXBwb3J0ZWQpXG4gXHRcdHN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLO1xuIHByb2Nlc3NfZnVuYzpcbitcdGlmIChzdWJwcm9nW2lkeF0uaGFzX2xkX2Ficykge1xuK1x0XHRmb3IgKHRtcCA9IGlkeDsgdG1wIFx1MDAzZT0gMDsgdG1wID0gZGluZm9bdG1wXS5jYWxsZXIpIHtcbitcdFx0XHRpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4gXHQvKiBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHRoYXQgbWlnaHQgaGFwcGVuIHdoZW5cbiBcdCAqIGJwZjJicGYgY2FsbHMgZ2V0IGNvbWJpbmVkIHdpdGggdGFpbGNhbGxzLiBMaW1pdCB0aGUgY2FsbGVyJ3Mgc3RhY2tcbiBcdCAqIGRlcHRoIGZvciBzdWNoIGNhc2UgZG93biB0byAyNTYgc28gdGhhdCB0aGUgd29yc3QgY2FzZSBzY2VuYXJpb1xuQEAgLTEwMjM1LDkgKzEwMjQ0LDEwIEBAIHN0YXRpYyB2b2lkIGFjY291bnRfY3VycmVudF9wYXRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdGZyYW1lID8gc3RhdGUtXHUwMDNlZnJhbWVbZnJhbWUgLSAxXSA6IE5VTEwpO1xuIH1cbiBcbi0vKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGEgcmJ0cmVlIGhlbHBlciB0aGF0IG11c3Rcbi0gKiBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQ/IElmIHNvLCBubyBuZWVkIHRvIGNvbXBsYWluIGFib3V0IHVucmVsZWFzZWRcbi0gKiBsb2NrXG4rLypcbisgKiBBcmUgd2UgY3VycmVudGx5IHZlcmlmeWluZyB0aGUgY2FsbGJhY2sgZm9yIGFuIHJidHJlZSBrZnVuYyB0aGF0IG11c3RcbisgKiBiZSBjYWxsZWQgd2l0aCBhIGxvY2sgaGVsZCwgb3Igb25lIG9mIHRoYXQgY2FsbGJhY2sncyBzdWJwcm9ncz8gSWYgc28sXG4rICogbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCBhbiB1bnJlbGVhc2VkIGxvY2suXG4gICovXG4gc3RhdGljIGJvb2wgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2Ioc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG5AQCAtMTAyNDUsMTcgKzEwMjU1LDE5IEBAIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZTtcbiBcdGludCBrZnVuY19idGZfaWQ7XG4rXHR1MzIgZnJhbWU7XG4gXG4tXHRpZiAoIXN0YXRlLVx1MDAzZWN1cmZyYW1lKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRjYWxsZWUgPSBzdGF0ZS1cdTAwM2VmcmFtZVtzdGF0ZS1cdTAwM2VjdXJmcmFtZV07XG4rXHRmb3IgKGZyYW1lID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGZyYW1lOyBmcmFtZS0tKSB7XG4rXHRcdGNhbGxlZSA9IHN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lXTtcbitcdFx0aWYgKCFjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm4pXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoIWNhbGxlZS1cdTAwM2Vpbl9jYWxsYmFja19mbilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS1cdTAwM2VjYWxsc2l0ZV0uaW1tO1xuK1x0XHRpZiAoaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbiBcbi1cdGtmdW5jX2J0Zl9pZCA9IGluc25bY2FsbGVlLVx1MDAzZWNhbGxzaXRlXS5pbW07XG4tXHRyZXR1cm4gaXNfcmJ0cmVlX2xvY2tfcmVxdWlyZWRfa2Z1bmMoa2Z1bmNfYnRmX2lkKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgcmV0dmFsX3JhbmdlX3dpdGhpbihzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSByYW5nZSwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbkBAIC0xNzE3OSw2ICsxNzE5MSw3IEBAIHN0YXRpYyBib29sIG1heV9hY2Nlc3Nfc2tiKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuICAqL1xuIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiB7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XG4gXHRzdGF0aWMgY29uc3QgaW50IGN0eF9yZWcgPSBCUEZfUkVHXzY7XG4gXHR1OCBtb2RlID0gQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKTtcbkBAIC0xNzE4OSw2ICsxNzIwMiwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0Zm9yIChpID0gc3RhdGUtXHUwMDNlY3VyZnJhbWU7IGk7IGktLSkge1xuK1x0XHRpZiAoc3RhdGUtXHUwMDNlZnJhbWVbaV0tXHUwMDNlaW5fY2FsbGJhY2tfZm4pIHtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoIWVudi1cdTAwM2VvcHMtXHUwMDNlZ2VuX2xkX2Ficykge1xuIFx0XHR2ZXJpZmllcl9idWcoZW52LCBcImdlbl9sZF9hYnMgaXMgbnVsbFwiKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5pbmRleCA2ZDVmY2U3ZTZmZmM5Li44MWM0NTk0MzU2ODBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcHJlZW1wdF9sb2NrLmNcbkBAIC0xMTUsNiArMTE1LDU4IEBAIGludCBwcmVlbXB0X3NsZWVwYWJsZV9oZWxwZXIodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcInNsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF9zdGFjayNcIilcbitpbnQgcHJlZW1wdF9zbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbitcbitcdGJwZl9wcmVlbXB0X2Rpc2FibGUoKTtcbitcdGJwZl9nZXRfc3RhY2soY3R4LCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbitcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuK1x0YnBmX3ByZWVtcHRfZW5hYmxlKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3Vwcm9iZS5zXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwic2xlZXBhYmxlIGhlbHBlciBicGZfZ2V0X3Rhc2tfc3RhY2sjXCIpXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1xuK1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0YnBmX3ByZWVtcHRfZGlzYWJsZSgpO1xuK1x0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuK1x0XHRcdCAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdGJwZl9wcmVlbXB0X2VuYWJsZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fc3VjY2Vzc1xuK2ludCBzbGVlcGFibGVfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbitcbitcdGJwZl9nZXRfc3RhY2soY3R4LCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbitcdFx0ICAgICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fc3VjY2Vzc1xuK2ludCBzbGVlcGFibGVfZ2V0X3Rhc2tfc3RhY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4rXG4rXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRicGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXG4rXHRcdFx0ICAgQlBGX0ZfVVNFUl9TVEFDSyB8IEJQRl9GX1VTRVJfQlVJTERfSUQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJrZXJuZWwgZnVuYyBicGZfY29weV9mcm9tX3VzZXJfc3RyIGlzIHNsZWVwYWJsZSB3aXRoaW4gbm9uLXByZWVtcHRpYmxlIHJlZ2lvblwiKVxuIGludCBwcmVlbXB0X3NsZWVwYWJsZV9rZnVuYyh2b2lkICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuaW5kZXggODAzNDE5YTQ3YzYyNi4uNDUwNDYwODE5NmFiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuQEAgLTI3Miw2ICsyNzIsNDcgQEAgc3RhdGljIGJvb2wgbGVzc19fYmFkX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfdW5sb2NrX3JlbG9jayh2b2lkKVxuK3tcbitcdGJwZl9zcGluX3VubG9jayhcdTAwMjZnbG9jayk7XG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmdsb2NrKTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2JfbmVzdGVkX3VubG9jayh2b2lkKVxuK3tcbitcdHJidHJlZV9jYl91bmxvY2tfcmVsb2NrKCk7XG4rXHRhc20gdm9sYXRpbGUgKFwiXCIpO1xuK31cbitcbitzdGF0aWMgYm9vbCBsZXNzX19iYWRfc3VicHJvZ191bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4re1xuK1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9hO1xuK1x0c3RydWN0IG5vZGVfZGF0YSAqbm9kZV9iO1xuK1xuK1x0bm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuK1x0bm9kZV9iID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBub2RlX2RhdGEsIG5vZGUpO1xuK1x0cmJ0cmVlX2NiX25lc3RlZF91bmxvY2soKTtcbitcbitcdHJldHVybiBub2RlX2EtXHUwMDNla2V5IFx1MDAzYyBub2RlX2ItXHUwMDNla2V5O1xuK31cbitcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJidHJlZV9jYl9ub29wKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbGVzc19fc3VicHJvZ19hbGxvd2VkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuK3tcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTtcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcbitcbitcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdHJidHJlZV9jYl9ub29wKCk7XG4rXG4rXHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxuIGxvbmcgYWRkX3dpdGhfY2IoYm9vbCAoY2IpKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKSlcbiB7XG5AQCAtMzMwLDQgKzM3MSwxOCBAQCBsb25nIHJidHJlZV9hcGlfYWRkX2JhZF9jYl9yZXNfc3Bpbl91bmxvY2sodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbid0IHNwaW5fe2xvY2ssdW5sb2NrfSBpbiByYnRyZWUgY2JcIilcbitsb25nIHJidHJlZV9hcGlfYWRkX2JhZF9jYl9zdWJwcm9nX3VubG9jayh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX2JhZF9zdWJwcm9nX3VubG9jayk7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fc3VjY2Vzc1xuK2xvbmcgcmJ0cmVlX2FwaV9hZGRfY2Jfc3VicHJvZ19hbGxvd2VkKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gYWRkX3dpdGhfY2IobGVzc19fc3VicHJvZ19hbGxvd2VkKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jXG5pbmRleCBhN2M4NGQzZmE0YzczLi5lMDkyNjc2N2JiZDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuQEAgLTEwOCw2ICsxMDgsMzAgQEAgaW50IHRpbWVyX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHRpbWVyX2J0Zl9maW5kX2NiKHZvaWQgKm1hcCwgaW50ICprZXksIHN0cnVjdCBicGZfdGltZXIgKnRpbWVyKVxuK3tcbitcdGNoYXIgbmFtZVtdID0gXCJ0YXNrX3N0cnVjdFwiO1xuK1xuK1x0YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZChuYW1lLCBzaXplb2YobmFtZSksIEJURl9LSU5EX1NUUlVDVCwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmFpbHVyZSBfX21zZyhcInNsZWVwYWJsZSBoZWxwZXIgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCN7e1swLTldK319IGluIG5vbi1zbGVlcGFibGUgcHJvZ1wiKVxuK2ludCB0aW1lcl9idGZfZmluZF9wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGltZXJfZWxlbSAqdmFsO1xuK1x0aW50IGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRpbWVyX21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl90aW1lcl9pbml0KFx1MDAyNnZhbC1cdTAwM2V0LCBcdTAwMjZ0aW1lcl9tYXAsIDApO1xuK1x0YnBmX3RpbWVyX3NldF9jYWxsYmFjayhcdTAwMjZ2YWwtXHUwMDNldCwgdGltZXJfYnRmX2ZpbmRfY2IpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgc3lzY2FsbF9zeXNfYnBmX3Byb2codm9pZCAqY3R4KVxuQEAgLTEyNiw2ICsxNTAsMTYgQEAgaW50IHN5c2NhbGxfc3lzX2Nsb3NlX3Byb2codm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInN5c2NhbGxcIilcbitfX3N1Y2Nlc3NcbitpbnQgc3lzY2FsbF9idGZfZmluZF9wcm9nKHZvaWQgKmN0eClcbit7XG4rXHRjaGFyIG5hbWVbXSA9IFwidGFza19zdHJ1Y3RcIjtcbitcbitcdGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIFdvcmtxdWV1ZSB0ZXN0cyAqL1xuIFxuIHN0cnVjdCB3cV9lbGVtIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbmluZGV4IDA5ZTgxYjk5ZWVjYjQuLjMyOTg5Zjk4MWZiNjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sZF9pbmQuY1xuQEAgLTE5NCw2ICsxOTQsMTAyIEBAIF9fbmFrZWQgdm9pZCBsZF9pbmRfc3VicHJvZ19ib3RoX3BhdGhzX3NhZmUodm9pZClcbiBcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfYWJzX2NhbGxiYWNrKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjYgPSAqKHU2NCAqKShyMiArIDApO1wiXG4rXHRcIi44Ynl0ZSAlW2xkX2Fic107XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2FiczogcmVqZWN0IGluIGNhbGxiYWNrXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1wiKVxuK2ludCBsZF9hYnNfY2FsbGJhY2tfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRicGZfbG9vcCgxLCBsZF9hYnNfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2codm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyNiA9IHIxO1wiXG4rXHRcInI3ID0gMDtcIlxuK1x0XCIuOGJ5dGUgJVtsZF9pbmRdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tX2luc24obGRfaW5kLCBCUEZfTERfSU5EKEJQRl9XLCBCUEZfUkVHXzcsIDApKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfaW5kX2NhbGxiYWNrKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjEgPSAqKHU2NCAqKShyMiArIDApO1wiXG4rXHRcImNhbGwgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2c7XCJcbitcdFwiZXhpdDtcIlxuK1x0Ojo6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwibGRfaW5kOiByZWplY3QgaW4gY2FsbGJhY2sgc3VicHJvZ1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcIilcbitpbnQgbGRfaW5kX2NhbGxiYWNrX3N1YnByb2dfcmVqZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRicGZfbG9vcCgxLCBsZF9pbmRfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgaW50IGxkX2luZF9nbG9iYWxfc3RhdGljKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyNiA9ICVbc2tiXTtcIlxuK1x0XCJyNyA9IDA7XCJcbitcdFwiLjhieXRlICVbbGRfaW5kXTtcIlxuK1x0OlxuK1x0OiBbc2tiXSBcInJcIihza2IpLFxuK1x0ICBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSlcbitcdDogX19jbG9iYmVyX2NvbW1vbiwgXCJyNlwiLCBcInI3XCIpO1xuK1x0cmV0dXJuIHNrYi1cdTAwM2VtYXJrO1xuK31cbitcbitfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gbGRfaW5kX2dsb2JhbF9zdGF0aWMoc2tiKTtcbit9XG4rXG4rc3RhdGljIGludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrKF9fdTMyIGluZGV4LCBzdHJ1Y3QgX19za19idWZmICoqY3R4KVxuK3tcbitcdGxkX2luZF9nbG9iYWwoKmN0eCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1wiKVxuK2ludCBsZF9pbmRfZ2xvYmFsX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX2xvb3AoMSwgbGRfaW5kX2dsb2JhbF9jYWxsYmFjaywgXHUwMDI2c2tiLCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzb2NrZXRcIilcbitfX2Rlc2NyaXB0aW9uKFwibGRfaW5kOiBhbGxvdyBpbiBub24tY2FsbGJhY2sgZ2xvYmFsIHN1YnByb2dcIilcbitfX3N1Y2Nlc3NcbitpbnQgbGRfaW5kX2dsb2JhbF9zdWJwcm9nX29rKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gbGRfaW5kX2dsb2JhbChza2IpO1xuK31cbitcbiAvKlxuICAqIGxkX3thYnMsaW5kfSBpbiBzdWJwcm9ncyByZXF1aXJlIHNjYWxhciAoaW50KSByZXR1cm4gdHlwZSBpbiBCVEYuXG4gICogQSB0ZXN0IHdpdGggdm9pZCByZXR1cm4gbXVzdCBiZSByZWplY3RlZC5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjIxLjUyMzc3NzczMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTQyNzk2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEJQRiBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIGRpZmYgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBTbywgSSBzZWUgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCBhIHNldCBvZiBzZWxmdGVzdHMuXG5cbkltbWVkaWF0ZWx5LCBJIG5vdGljZSB0aGUgYWRkaXRpb24gb2YgYC5taWdodF9zbGVlcCA9IHRydWVgIGluIHRoZSBgLnByb3RvYCBzdHJ1Y3R1cmVzIGZvciBzZXZlcmFsIGZ1bmN0aW9uczogYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IG5vdyBiZSBhYmxlIHRvIHNsZWVwLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbG9ja2luZyBhbmQgcHJlZW1wdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzLCBob3dldmVyLCBzZWVtcyB0byBiZSBpbiB0aGUgdmVyaWZpZXIuIFNwZWNpZmljYWxseSwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgc2VlIG5ldyBjaGVja3MgaW4gYGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nYCwgYGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiYCwgYW5kIGBjaGVja19sZF9hYnNgLiBUaGUgdmVyaWZpZXIgaXMgY2xlYXJseSBhZGRpbmcgb3IgcmVmaW5pbmcgcmVzdHJpY3Rpb25zIGFyb3VuZCB0aGUgdXNlIG9mIGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zLiBJIHNlZSBpdCByZWplY3RpbmcgY29kZSB3aXRoIGBcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXG5cImAgaWYgaXQgZmluZHMgY2FsbHMgdGhhdCB1c2UgdGhlc2UuIEkgYWxzbyBzZWUgY29kZSB0aGF0IHdhbGtzIHRocm91Z2ggdGhlIGNhbGxlciBjaGFpbiAodGhlIHN0YWNrIGZyYW1lKSwgY2hlY2tpbmcgdG8gc2VlIGlmIGNvZGUgbWlnaHQgYmUgaW4gYSBjYWxsYmFjay4gVGhpcyBzaWduYWxzIHRoYXQgdGhlc2UgY2FsbHMgd2l0aGluIGNhbGxiYWNrcyBhcmUgdGhlIHRoaW5nIHdlJ3JlIHRyeWluZyB0byBwcmV2ZW50LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGVzZSBjaGVja3MgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2h5IHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgYmVpbmcgcHV0IGluIHBsYWNlIG5vdy4gQXJlIHRoZXJlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgaXMgdGhpcyByZWxhdGVkIHRvIHN0YWJpbGl0eSBhbmQgcHJldmVudGluZyBoYW5ncyBvciBkZWFkbG9ja3M/IEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBoYXNfbGRfYWJzYCwgYGlzX2NiYCwgYGluX2NhbGxiYWNrX2ZuYCwgYW5kIGBpc19yYnRyZWVfbG9ja19yZXF1aXJlZF9rZnVuY2AgYW5kIGhvdyB0aGV5IGludGVycmVsYXRlLlxuXG5GaW5hbGx5LCB0aGUgc2VsZnRlc3RzIGFyZSBhIGdvb2Qgc2lnbi4gVGhleSdyZSBwcm9iYWJseSBkZXNpZ25lZCB0byB2YWxpZGF0ZSB0aGVzZSBuZXcgcmVzdHJpY3Rpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGluZ3MgYXJlIHdvcmtpbmcgYXMgaW50ZW5kZWQsIGFuZCBkb24ndCByZWdyZXNzIG9sZCBmdW5jdGlvbmFsaXR5LiBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aG9zZSB0byBzZWUgaG93IHRoaXMgaXMgYmVpbmcgdGVzdGVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZ3JlcCBhcm91bmQgdGhvc2UgZmlsZXMgdG8gY29ubmVjdCB0aGUgZG90cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkwNCwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjQyLjA2NjU3NzEyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg3MDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvfGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NifGNoZWNrX2xkX2Fic3xjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTg3MjM9QlBGX0NBTExfNChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBjaGFyICosIG5hbWUsIGludCwgbmFtZV9zeiwgdTMyLCBraW5kLCBpbnQsIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NzQ4LVxcbmtlcm5lbC9icGYvYnRmLmM6ODc0OTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3NTAtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjMwPXN5c2NhbGxfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjYzNi1cXHRjYXNlIEJQRl9GVU5DX2J0Zl9maW5kX2J5X25hbWVfa2luZDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjM3OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90bztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NjM4LVxcdGNhc2UgQlBGX0ZVTkNfc3lzX2Nsb3NlOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIxMj1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEzOnN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTQtc3RhdGljIGJvb2wgaXNfdHJhY2luZ19wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyNzc9c3RydWN0IGJwZl9zdWJwcm9nX2NhbGxfZGVwdGhfaW5mbyB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI4Ni0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTI4NzpzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyODgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8gKmRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU0ODk9c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NTIxLVxcdFxcdFxcdHByaXZfc3RhY2tfc3VwcG9ydGVkID0gIWkgXFx1MDAyNlxcdTAwMjYgcHJpdl9zdGFja19tb2RlID09IFBSSVZfU1RBQ0tfQURBUFRJVkU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU1MjI6XFx0XFx0XFx0cmV0ID0gY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coZW52LCBpLCBkaW5mbyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTUyMy1cXHRcXHRcXHRcXHRcXHRwcml2X3N0YWNrX3N1cHBvcnRlZCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODY4OT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgzNi1cXHRjYXNlIEFSR19QVFJfVE9fU1BJTl9MT0NLOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODM3OlxcdFxcdGlmIChpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihlbnYpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4MzgtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW4ndCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDIzNz1zdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjUxLSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDI1MjpzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI1My17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI1ODk9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk2OC1cXHRcXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTY5OlxcdFxcdFxcdFxcdGlmIChpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihlbnYpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTcwLVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgbm90IGFsbG93ZWQgaW4gcmJ0cmVlIGNiXFxcXG5cXFwiLCBmdW5jX25hbWUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjU1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzI1NjpcXHRcXHRcXHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI1Ny1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbid0IHJlc19zcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY4MT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzODc2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg3NzpcXHRpZiAoaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2IoZW52KSBcXHUwMDI2XFx1MDAyNiAocmN1X2xvY2sgfHwgcmN1X3VubG9jaykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4NzgtXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJDYWxsaW5nIGJwZl9yY3VfcmVhZF97bG9jayx1bmxvY2t9IGluIHVubmVjZXNzYXJ5IHJidHJlZSBjYWxsYmFja1xcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcxNjU9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19za2IoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcxOTEtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MTkyOnN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcxOTMte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTIzPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODIxNS1cXHRcXHRpZiAobW9kZSA9PSBCUEZfQUJTIHx8IG1vZGUgPT0gQlBGX0lORClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyMTY6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2xkX2FicyhlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODIxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDIuMTE2NDUxMDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxOTIyMDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgVmVyaWZpZXIgYW5kIEhlbHBlciBGdW5jdGlvbnM6IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIEJQRiB2ZXJpZmllciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBqdW1wIG91dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBga2VybmVsL2JwZi9idGYuY2AsIGFuZCBga2VybmVsL2JwZi9zdGFja21hcC5jYCDigJMgYWxsIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoMilgIHN5c2NhbGwuIEdpdmVuIG91ciBmdXp6aW5nIHRyaWFnZSBndWlkZWxpbmVzLCB0aGlzIGlzIGEgY2xlYXIgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHNpdHVhdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAsIGBjaGVja19sZF9hYnNgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuXG5cblRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVzZSBzdGF0aWMsIGV4cG9ydGVkLCBvciBpbmxpbmVkPyAgTGV0J3Mgc2VlOiBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBhbmQgYGNoZWNrX2xkX2Fic2AgYXJlIGFsbCBzdGF0aWMgd2l0aGluIGB2ZXJpZmllci5jYC4gIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBhcmUgKm5vdCogc3RhdGljOyB0aGV5J3JlIEJQRl9DQUxMcyBpbiBgYnRmLmNgIGFuZCBgc3RhY2ttYXAuY2AgcmVzcGVjdGl2ZWx5LCB3aGljaCBpcyBnb29kIGZvciBvdXIgcHVycG9zZXMuICBBbmQgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gdmVyaWZpZXIgZW50cnlwb2ludC4gTm93LCBsZXQncyBkZWx2ZSBpbnRvIHRoZSBzdHJ1Y3R1cmUgYW5kIGNhbGwtZmxvdyBvZiB0aGUgc3RhdGljIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIHVzZWQgd2l0aGluIGB2ZXJpZmllci5jYC4gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBzdGF0aWMgdmVyaWZpZXIgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBhIGJldHRlciBhdHRhY2sgc3VyZmFjZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDYuNjM1Njc1MDIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjgwOlxcdFxcdGludCBmcmFtZTsgLyogIyBvZiBjb25zZWN1dGl2ZSBzdGF0aWMgY2FsbCBzdGFjayBmcmFtZXMgb24gdG9wIG9mIHN0YWNrICovXFxuNTI4MTpcXHR9O1xcbjUyODI6XFx0XFxuNTI4MzpcXHQvKiBzdGFydGluZyBmcm9tIG1haW4gYnBmIGZ1bmN0aW9uIHdhbGsgYWxsIGluc3RydWN0aW9ucyBvZiB0aGUgZnVuY3Rpb25cXG41Mjg0OlxcdCAqIGFuZCByZWN1cnNpdmVseSB3YWxrIGFsbCBjYWxsZWVzIHRoYXQgZ2l2ZW4gZnVuY3Rpb24gY2FuIGNhbGwuXFxuNTI4NTpcXHQgKiBJZ25vcmUganVtcCBhbmQgZXhpdCBpbnNucy5cXG41Mjg2OlxcdCAqL1xcbjUyODc6XFx0c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LFxcbjUyODg6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfc3VicHJvZ19jYWxsX2RlcHRoX2luZm8gKmRpbmZvLFxcbjUyODk6XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgcHJpdl9zdGFja19zdXBwb3J0ZWQpXFxuNTI5MDpcXHR7XFxuNTI5MTpcXHRcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbjUyOTI6XFx0XFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2k7XFxuNTI5MzpcXHRcXHRpbnQgZGVwdGggPSAwLCBmcmFtZSA9IDAsIGksIHN1YnByb2dfZW5kLCBzdWJwcm9nX2RlcHRoO1xcbjUyOTQ6XFx0XFx0Ym9vbCB0YWlsX2NhbGxfcmVhY2hhYmxlID0gZmFsc2U7XFxuNTI5NTpcXHRcXHRpbnQgdG90YWw7XFxuNTI5NjpcXHRcXHRpbnQgdG1wO1xcbjUyOTc6XFx0XFxuNTI5ODpcXHRcXHQvKiBubyBjYWxsZXIgaWR4ICovXFxuNTI5OTpcXHRcXHRkaW5mb1tpZHhdLmNhbGxlciA9IC0xO1xcbjUzMDA6XFx0XFxuNTMwMTpcXHRcXHRpID0gc3VicHJvZ1tpZHhdLnN0YXJ0O1xcbjUzMDI6XFx0XFx0aWYgKCFwcml2X3N0YWNrX3N1cHBvcnRlZClcXG41MzAzOlxcdFxcdFxcdHN1YnByb2dbaWR4XS5wcml2X3N0YWNrX21vZGUgPSBOT19QUklWX1NUQUNLO1xcbjUzMDQ6XFx0cHJvY2Vzc19mdW5jOlxcbjUzMDU6XFx0XFx0aWYgKHN1YnByb2dbaWR4XS5oYXNfbGRfYWJzKSB7XFxuNTMwNjpcXHRcXHRcXHRmb3IgKHRtcCA9IGlkeDsgdG1wIFxcdTAwM2U9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7XFxuNTMwNzpcXHRcXHRcXHRcXHRpZiAoc3VicHJvZ1t0bXBdLmlzX2NiKSB7XFxuNTMwODpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcXFxcblxcXCIpO1xcbjUzMDk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTMxMDpcXHRcXHRcXHRcXHR9XFxuNTMxMTpcXHRcXHRcXHR9XFxuNTMxMjpcXHRcXHR9XFxuNTMxMzpcXHRcXG41MzE0OlxcdFxcdC8qIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgdGhhdCBtaWdodCBoYXBwZW4gd2hlblxcbjUzMTU6XFx0XFx0ICogYnBmMmJwZiBjYWxscyBnZXQgY29tYmluZWQgd2l0aCB0YWlsY2FsbHMuIExpbWl0IHRoZSBjYWxsZXIncyBzdGFja1xcbjUzMTY6XFx0XFx0ICogZGVwdGggZm9yIHN1Y2ggY2FzZSBkb3duIHRvIDI1NiBzbyB0aGF0IHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvXFxuNTMxNzpcXHRcXHQgKiB3b3VsZCByZXN1bHQgaW4gOGsgc3RhY2sgc2l6ZSAoMzIgd2hpY2ggaXMgdGFpbGNhbGwgbGltaXQgKiAyNTYgPVxcbjUzMTg6XFx0XFx0ICogOGspLlxcbjUzMTk6XFx0XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDYuNjM2NjY0NTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2ODAxODA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlRGIGFuZCBTdGFja21hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCVEYgYW5kIHN0YWNrIG1hcHMgYXJlIHdvcmtpbmcsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgZmluZGluZyBCVEYgZGF0YSBieSBuYW1lIGFuZCBjaGVja2luZyBmb3Igc2xlZXBhYmlsaXR5IG9uIHRoZSBzdGFjay4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGUgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCBhbmQgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCBmdW5jdGlvbnMuIEdpdmVuIHRoYXQgdGhleSdyZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXRpZXMsIHRoZXkncmUgcHJvYmFibHkgcmVzaWRpbmcgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgbW9zdCBsb2dpY2FsIGxvY2F0aW9ucyB0byBzdGFydCBhcmUgYGtlcm5lbC9icGYvYnRmLmNgIGFuZCBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgdGhlIGxvZ2ljIGZsb3cgb2YgdGhlc2Uga2V5IGZ1bmN0aW9ucywgd2hpY2ggd2lsbCBob3BlZnVsbHkgaWxsdW1pbmF0ZSB0aGUgYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDguNzA0Njg1NzM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYnRmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODc0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODc0MDpcXHRcXHRcXHRcXHRyZXR1cm4gYnRmX29ial9mZDtcXG44NzQxOlxcdFxcdFxcdH1cXG44NzQyOlxcdFxcdFxcdHJldHVybiByZXQgfCAoKCh1NjQpYnRmX29ial9mZCkgXFx1MDAzY1xcdTAwM2MgMzIpO1xcbjg3NDM6XFx0XFx0fVxcbjg3NDQ6XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuODc0NTpcXHRcXHRcXHRidGZfcHV0KGJ0Zik7XFxuODc0NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjg3NDc6XFx0fVxcbjg3NDg6XFx0XFxuODc0OTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG44NzUwOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLFxcbjg3NTE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG44NzUyOlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG44NzUzOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuODc1NDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuODc1NTpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuODc1NjpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1NzpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1ODpcXHR9O1xcbjg3NTk6XFx0XFxuODc2MDpcXHRCVEZfSURfTElTVF9HTE9CQUwoYnRmX3RyYWNpbmdfaWRzLCBNQVhfQlRGX1RSQUNJTkdfVFlQRSlcXG44NzYxOlxcdCNkZWZpbmUgQlRGX1RSQUNJTkdfVFlQRShuYW1lLCB0eXBlKSBCVEZfSUQoc3RydWN0LCB0eXBlKVxcbjg3NjI6XFx0QlRGX1RSQUNJTkdfVFlQRV94eHhcXG44NzYzOlxcdCN1bmRlZiBCVEZfVFJBQ0lOR19UWVBFXFxuODc2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NDguNzA1MTAwMDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MDAzNjY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFN0YWNrIE1hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzdGFjayBtYXBzIHdvcmsgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLiBUaGlzIGZpbGUgc2hvdWxkIGhvbGQgdGhlIGtleSBsb2dpYyBmb3IgYWxsb2NhdGluZywgbWFuYWdpbmcsIGFuZCBpbnRlcmFjdGluZyB3aXRoIEJQRiBzdGFjayBtYXBzLiBJJ20gaG9waW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgc3RhY2sgc3BhY2UgaXMgcmVzZXJ2ZWQsIGhvdyBkYXRhIGlzIHdyaXR0ZW4gYW5kIHJlYWQsIGFuZCBob3cgdGhlc2UgbWFwcyBpbnRlZ3JhdGUgd2l0aCB0aGUgYnJvYWRlciBCUEYgdmVyaWZpZXIgYW5kIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGV5IGVtcGxveSwgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHVzZWQgdG8gbWFrZSBzdGFjayBtYXBzIGVmZmljaWVudCBpbiB0aGUgY29udGV4dCBvZiBCUEYgcHJvZ3JhbXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjUwLjg3NTE0Njk1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHQgICB1NjQsIGZsYWdzKVxcbiA4NzE6XFx0e1xcbiA4NzI6XFx0XFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XFxuIDg3MzpcXHR9XFxuIDg3NDpcXHRcXG4gODc1OlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcXG4gODc2OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSxcXG4gODc3OlxcdFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gODc4OlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG4gODc5OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIDg4MDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gODgxOlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4gODgyOlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiA4ODM6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiA4ODQ6XFx0fTtcXG4gODg1OlxcdFxcbiA4ODY6XFx0c3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbiA4ODc6XFx0XFx0XFx0XFx0XFx0IHU2NCBmbGFncywgYm9vbCBtYXlfZmF1bHQpXFxuIDg4ODpcXHR7XFxuIDg4OTpcXHRcXHRzdHJ1Y3QgcHRfcmVncyAqcmVncztcXG4gODkwOlxcdFxcdGxvbmcgcmVzID0gLUVJTlZBTDtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0aWYgKCF0cnlfZ2V0X3Rhc2tfc3RhY2sodGFzaykpIHtcXG4gODkzOlxcdFxcdFxcdG1lbXNldChidWYsIDAsIHNpemUpO1xcbiA4OTQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDg5NTpcXHRcXHR9XFxuIDg5NjpcXHRcXG4gODk3OlxcdFxcdHJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7XFxuIDg5ODpcXHRcXHRpZiAocmVncylcXG4gODk5OlxcdFxcdFxcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xcbiA5MDA6XFx0XFx0ZWxzZVxcbiA5MDE6XFx0XFx0XFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XFxuIDkwMjpcXHRcXHRwdXRfdGFza19zdGFjayh0YXNrKTtcXG4gOTAzOlxcdFxcdHJldHVybiByZXM7XFxuIDkwNDpcXHR9XFxuIDkwNTpcXHRcXG4gOTA2OlxcdEJQRl9DQUxMXzQoYnBmX2dldF90YXNrX3N0YWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWYsXFxuIDkwNzpcXHRcXHQgICB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXFxuIDkwODpcXHR7XFxuIDkwOTpcXHRcXHRyZXR1cm4gX19icGZfZ2V0X3Rhc2tfc3RhY2sodGFzaywgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuIDkxMDpcXHR9XFxuIDkxMTpcXHRcXG4gOTEyOlxcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfcHJvdG8gPSB7XFxuIDkxMzpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX2dldF90YXNrX3N0YWNrLFxcbiA5MTQ6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gOTE1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIDkxNjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gOTE3OlxcdFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxcbiA5MTg6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbiA5MTk6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIDkyMDpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIDkyMTpcXHR9O1xcbiA5MjI6XFx0XFxuIDkyMzpcXHRCUEZfQ0FMTF80KGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0YXNrLCB2b2lkICosIGJ1ZixcXG4gOTI0OlxcdFxcdCAgIHUzMiwgc2l6ZSwgdTY0LCBmbGFncylcXG4gOTI1OlxcdHtcXG4gOTI2OlxcdFxcdHJldHVybiBfX2JwZl9nZXRfdGFza19zdGFjayh0YXNrLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qICFtYXlfZmF1bHQgKi8pO1xcbiA5Mjc6XFx0fVxcbiA5Mjg6XFx0XFxuIDkyOTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcXG4gOTMwOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLFxcbiA5MzE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gOTMyOlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG4gOTMzOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIDkzNDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gOTM1OlxcdFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxcbiA5MzY6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbiA5Mzc6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIDkzODpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIDkzOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMTo1MC44NzU0Mzk2NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MjU3NjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBCUEYgVmVyaWZpZXIgYW5kIEhlbHBlcnMgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEJQRiBoZWxwZXJzIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFdoZXJlJ3MgdGhlIGZpcnN0IHBsYWNlIEknZCBleHBlY3QgdG8gZmluZCB0aGVzZSBzZXR0aW5ncz8gTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgbG9va2luZyBpbiB0aGUgcGxhY2VzIHRoYXQgZGVmaW5lIHRoZSBjb3JlIEJQRiBmZWF0dXJlcy4gTGlrZWx5IGNhbmRpZGF0ZXMgZm9yIEtjb25maWcgZmlsZXMgd291bGQgYmUgYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGdsb2JhbCBvcHRpb25zIG9yIGluaXRpYWxpemF0aW9uIHJlbGF0ZWQgc2V0dGluZ3MgdGhhdCB3b3VsZCBhZmZlY3QgdGhpcy4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRob3NlIGZpbGVzIGFuZCB0cmFjZSBvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW5zIHRvIGVuc3VyZSBub3RoaW5n4oCZcyBicm9rZW4gb3IgdW5pbnRlbnRpb25hbGx5IGRpc2FibGVkLiBJdCdzIGEgcXVpY2sgYW5kIGVmZmljaWVudCB3YXkgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMTo1Mi45NjgwMTk4MjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjUxNTc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjUzLjAxMjY3OTAyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ5NzYzNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBCUEYgd2lsbCByZXNpZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IGl0IGJ1aWxkcywgYW5kIEknbGwgYWxzbyBjaGVjayBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgaXQgbWlnaHQgY29udGFpbi4gVGhlbiwgdG8gZ2V0IHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGBpbml0L0tjb25maWdgIGlzIHRoZSBwbGFjZSB0byBsb29rIGZvciB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuZCB1cCBpbiBgLmNvbmZpZ2AuIEl0J3MgcHJldHR5IHN0YW5kYXJkLCBidXQgSSB3YW50IHRvIHZlcmlmeSBpZiB0aGVyZSdzIGFueXRoaW5nIG5ldyBvciBhbnkgY2hhbmdlcyB0byB3aGF0IEkgYWxyZWFkeSBrbm93IGFib3V0IEJQRiBjb25maWdzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIGlzIGVuYWJsZWQgYW5kIGNvbnRyb2xsZWQgaW4gdGhpcyBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODYyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NTQuODYyNDQ1MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTIzPWlmZXEgKCQoQ09ORklHX05FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGV2bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjktZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzdGFja21hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTM3PWlmZXEgKCQoQ09ORklHX0lORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJldXNlcG9ydF9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT00Mz1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc3RydWN0X29wcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU4PWlmbmVxICgkKENPTkZJR19DUllQVE8pLClcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfcmVsb2NhdGUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrbWVtX2NhY2hlX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjctaWZlcSAoJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRtYWJ1Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMxOjU0LjkwNzIxOTE1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDg2NDI0MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgQlBGIGFuZCBQZXJmIEV2ZW50IENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBob3cgYEJQRl9TWVNDQUxMYCBhbmQgYFBFUkZfRVZFTlRTYCBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBjYW4ndCBhZmZvcmQgdG8gbWFrZSBhc3N1bXB0aW9ucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZlYXR1cmVzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhlaXIgZW5hYmxlbWVudCBvciBkaXNhYmxlbWVudC4gVGhpcyBtZWFucyBsb29raW5nIGJleW9uZCBqdXN0IHRoZSBpbW1lZGlhdGUgZGVmaW5pdGlvbnMsIHRyYWNpbmcgdGhyb3VnaCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBzZWVpbmcgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8ga25vdyBldmVyeXRoaW5nIGFib3V0IHRoZWlyIGNvbmZpZ3VyYXRpb24sIGhvdyB0aGV5IHRpZSBpbnRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gdGhlaXIgYmVoYXZpb3IgYmFzZWQgb24gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IHNlcmlvdXMgYW5hbHlzaXMgb3IgZGV2ZWxvcG1lbnQgaW52b2x2aW5nIEJQRiBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gTXkgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NTcuMzkzNjQ3MjczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1Mjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKEJQRl9TWVNDQUxMfEJQRilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnLTMtIyBCUEYgaW50ZXJwcmV0ZXIgdGhhdCwgZm9yIGV4YW1wbGUsIGNsYXNzaWMgc29ja2V0IGZpbHRlcnMgZGVwZW5kIG9uLlxcbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcXG5rZXJuZWwvYnBmL0tjb25maWctNS1cXHRib29sXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzoyOm1lbnVjb25maWcgQlBGX1BSRUxPQURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlByZWxvYWQgQlBGIGZpbGUgc3lzdGVtIHdpdGgga2VybmVsIHNwZWNpZmljIHByb2dyYW0gYW5kIG1hcCBpdGVyYXRvcnNcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0xND1pZiBCUEZfUFJFTE9BRFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjE1OmNvbmZpZyBCUEZfUFJFTE9BRF9VTURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiYnBmX3ByZWxvYWQga2VybmVsIG1vZHVsZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzE6NTcuNDM5ODA3ODkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzQxMjgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gYnJlYWsgZG93biBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gRmlyc3QsIEkgc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjogYHZlcmlmaWVyLmNgIGFuZCBgYnRmLmNgIGFyZSBjb21waWxlZCB1bmRlciBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIGBzdGFja21hcC5jYCByZXF1aXJlcyBib3RoIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYC4gTmF0dXJhbGx5LCBgQ09ORklHX0JQRmAgaXMgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJJ20gZm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9sczogYGNoZWNrX2xkX2Fic2AsIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAsIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYC4gUXVpY2sgY2hlY2ssIGFuZCBJIHNlZSB0aGF0IHRoZSBmaXJzdCB0aHJlZSAoYGNoZWNrX2xkX2Fic2AsIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AsIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmApIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIHRoZW0gcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGluIHRoZSBjb250ZXh0IG9mIHZlcmlmaWNhdGlvbi4gVGhlIGxhc3QgdGhyZWUgKGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgKSBhcmUgZnVuY3Rpb25zIGluIGBidGYuY2AgYW5kIGBzdGFja21hcC5jYCwgcmVzcGVjdGl2ZWx5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgYGJwZl9jaGVja2AsIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBzZW5zZSB0byBtZSB0byBjb25zaWRlciB0aG9zZSBzeW1ib2xzIEkgbm90ZWQgZWFybGllci4gVGhlIHBhdGNoIGluZGljYXRlcyB0aGF0IGBjaGVja19sZF9hYnNgLCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCBzaG91bGQgYWxsIGJlIGNvbnNpZGVyZWQuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB2ZXJpZmllciBsb2dpYyBjaGFuZ2VzIGluIGB2ZXJpZmllci5jYCAoZGlzYWJsaW5nIGBCUEZfTERfQUJTL0lORGAgaW5zaWRlIHN1YnByb2dyYW0gY2FsbGJhY2tzLCB1cGRhdGluZyByYnRyZWUgbG9jayB2ZXJpZmllciBjaGVja3MpIGFuZCBhZGRpbmcgYC5taWdodF9zbGVlcCA9IHRydWVgIGZsYWdzIHRvIHNldmVyYWwgQlBGIGhlbHBlciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gVGhlc2UgYXJlIGRlZmluaXRlbHkgY29yZSBjaGFuZ2VzLCBhbmQgZGlyZWN0bHkgdG91Y2hhYmxlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCB2ZXJpZmljYXRpb24uIFRoYXQgbWFrZXMgdGhpcyBwYXRjaCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBCUEZfU1lTQ0FMTGAgYW5kIGBQRVJGX0VWRU5UU2AuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIG9uZXMgbWVudGlvbmVkIGVhcmxpZXI6IGBjaGVja19sZF9hYnNgLCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgLCBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgLCBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZGAsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIExldCdzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0NCwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzI6MDIuOTczOTM4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MzExNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19sZF9hYnNcIixcbiAgICBcImNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nXCIsXG4gICAgXCJpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYlwiLFxuICAgIFwiYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciB2YWxpZGF0aW9uIGxvZ2ljIChyZWplY3RpbmcgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2sgZXhlY3V0aW9uIGNvbnRleHRzIGFuZCBwcm9wZXJseSB3YWxraW5nIGNhbGxiYWNrIGZyYW1lcyB3aGVuIGNoZWNraW5nIHJidHJlZSBsb2NrIHJlcXVpcmVtZW50cykgYW5kIG1hcmtzIEJQRiBoZWxwZXIgcHJvdG90eXBlcyAoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgYnBmX2dldF9zdGFja19zbGVlcGFibGUsIGFuZCBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlKSBhcyBzbGVlcGFibGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHJ1bGVzIGFuZCBzbGVlcGFibGUgaGVscGVyIGNoZWNrcyByZWFjaGFibGUgdmlhIGJwZigpIHN5c2NhbGwgcHJvZ3JhbSBsb2FkaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX2xkX2Fic1wiLFxuICAgIFwiY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dcIixcbiAgICBcImluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiXCIsXG4gICAgXCJicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIHZhbGlkYXRpb24gbG9naWMgKHJlamVjdGluZyBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFjayBleGVjdXRpb24gY29udGV4dHMgYW5kIHByb3Blcmx5IHdhbGtpbmcgY2FsbGJhY2sgZnJhbWVzIHdoZW4gY2hlY2tpbmcgcmJ0cmVlIGxvY2sgcmVxdWlyZW1lbnRzKSBhbmQgbWFya3MgQlBGIGhlbHBlciBwcm90b3R5cGVzIChicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLCBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgYW5kIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUpIGFzIHNsZWVwYWJsZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24gcnVsZXMgYW5kIHNsZWVwYWJsZSBoZWxwZXIgY2hlY2tzIHJlYWNoYWJsZSB2aWEgYnBmKCkgc3lzY2FsbCBwcm9ncmFtIGxvYWRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMyOjAzLjA0ODI1ODIyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTA5NzY1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjowMy4wNDg4ODg0NjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzIxMDM0MTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcXG4xLiBJdCBmbGFncyBoZWxwZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gKSB3aXRoIGAubWlnaHRfc2xlZXAgPSB0cnVlYCB0byBwcmV2ZW50IHRoZWlyIGludm9jYXRpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHRzLlxcbjIuIEl0IGFkZHMgQlBGIHZlcmlmaWVyIGNoZWNrcyAoYGNoZWNrX2xkX2Fic2AgYW5kIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2ApIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0aGVpciBzdWJwcm9ncmFtcy5cXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxcbjQuIEl0IGFkZHMgc2VsZnRlc3RzIGZvciB0aGVzZSB2ZXJpZmllciBzY2VuYXJpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ODY1MGM1ZTAzMmM0YzExODZhOGFlNGNlOThhODMzZWJkZGQ0OGYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTozMToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA1ZDkzZmQ4MmU3NjQ1Li45ZjMzZTk1ZDU3NDEwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTg3NDksNiArODc0OSw3IEBAIEJQRl9DQUxMXzQoYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZCwgY2hhciAqLCBuYW1lLCBpbnQsIG5hbWVfc3osIHUzMiwga2luZCwgaW50XG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG4gXHQuZnVuY1x0XHQ9IGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsXG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4rXHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCBhODM5MDQxZTBkMDA4Li5kMDlkNGMzZmU1NDdjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC04NzUsNiArODc1LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2lcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XG4gXHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLFxuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4rXHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbkBAIC05MjgsNiArOTI5LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdGFzaywgdm9pZCAqLCBidWZcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5mdW5jXHRcdD0gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSxcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbitcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDMyZDMxZmE2NzAzNmIuLjJjYjhmYmE2OGNkMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTUzMDIsNiArNTMwMiwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsXG4gXHRpZiAoIXByaXZfc3RhY2tfc3VwcG9ydGVkKVxuIFx0XHRzdWJwcm9nW2lkeF0ucHJpdl9zdGFja19tb2RlID0gTk9fUFJJVl9TVEFDSztcbiBwcm9jZXNzX2Z1bmM6XG4rXHRpZiAoc3VicHJvZ1tpZHhdLmhhc19sZF9hYnMpIHtcbitcdFx0Zm9yICh0bXAgPSBpZHg7IHRtcCBcdTAwM2U9IDA7IHRtcCA9IGRpbmZvW3RtcF0uY2FsbGVyKSB7XG4rXHRcdFx0aWYgKHN1YnByb2dbdG1wXS5pc19jYikge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcblwiKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuIFx0LyogcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCBzdGFjayBvdmVyZmxvdyB0aGF0IG1pZ2h0IGhhcHBlbiB3aGVuXG4gXHQgKiBicGYyYnBmIGNhbGxzIGdldCBjb21iaW5lZCB3aXRoIHRhaWxjYWxscy4gTGltaXQgdGhlIGNhbGxlcidzIHN0YWNrXG4gXHQgKiBkZXB0aCBmb3Igc3VjaCBjYXNlIGRvd24gdG8gMjU2IHNvIHRoYXQgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW9cbkBAIC0xMDIzNSw5ICsxMDI0NCwxMCBAQCBzdGF0aWMgdm9pZCBhY2NvdW50X2N1cnJlbnRfcGF0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRmcmFtZSA/IHN0YXRlLVx1MDAzZWZyYW1lW2ZyYW1lIC0gMV0gOiBOVUxMKTtcbiB9XG4gXG4tLyogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhIHJidHJlZSBoZWxwZXIgdGhhdCBtdXN0XG4tICogYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkPyBJZiBzbywgbm8gbmVlZCB0byBjb21wbGFpbiBhYm91dCB1bnJlbGVhc2VkXG4tICogbG9ja1xuKy8qXG4rICogQXJlIHdlIGN1cnJlbnRseSB2ZXJpZnlpbmcgdGhlIGNhbGxiYWNrIGZvciBhbiByYnRyZWUga2Z1bmMgdGhhdCBtdXN0XG4rICogYmUgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQsIG9yIG9uZSBvZiB0aGF0IGNhbGxiYWNrJ3Mgc3VicHJvZ3M/IElmIHNvLFxuKyAqIG5vIG5lZWQgdG8gY29tcGxhaW4gYWJvdXQgYW4gdW5yZWxlYXNlZCBsb2NrLlxuICAqL1xuIHN0YXRpYyBib29sIGluX3JidHJlZV9sb2NrX3JlcXVpcmVkX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuQEAgLTEwMjQ1LDE3ICsxMDI1NSwxOSBAQCBzdGF0aWMgYm9vbCBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWU7XG4gXHRpbnQga2Z1bmNfYnRmX2lkO1xuK1x0dTMyIGZyYW1lO1xuIFxuLVx0aWYgKCFzdGF0ZS1cdTAwM2VjdXJmcmFtZSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0Y2FsbGVlID0gc3RhdGUtXHUwMDNlZnJhbWVbc3RhdGUtXHUwMDNlY3VyZnJhbWVdO1xuK1x0Zm9yIChmcmFtZSA9IHN0YXRlLVx1MDAzZWN1cmZyYW1lOyBmcmFtZTsgZnJhbWUtLSkge1xuK1x0XHRjYWxsZWUgPSBzdGF0ZS1cdTAwM2VmcmFtZVtmcmFtZV07XG4rXHRcdGlmICghY2FsbGVlLVx1MDAzZWluX2NhbGxiYWNrX2ZuKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuLVx0aWYgKCFjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm4pXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0a2Z1bmNfYnRmX2lkID0gaW5zbltjYWxsZWUtXHUwMDNlY2FsbHNpdGVdLmltbTtcbitcdFx0aWYgKGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4gXG4tXHRrZnVuY19idGZfaWQgPSBpbnNuW2NhbGxlZS1cdTAwM2VjYWxsc2l0ZV0uaW1tO1xuLVx0cmV0dXJuIGlzX3JidHJlZV9sb2NrX3JlcXVpcmVkX2tmdW5jKGtmdW5jX2J0Zl9pZCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5AQCAtMTcxNzksNiArMTcxOTEsNyBAQCBzdGF0aWMgYm9vbCBtYXlfYWNjZXNzX3NrYihlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbiAgKi9cbiBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4ge1xuK1x0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuIFx0c3RhdGljIGNvbnN0IGludCBjdHhfcmVnID0gQlBGX1JFR182O1xuIFx0dTggbW9kZSA9IEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSk7XG5AQCAtMTcxODksNiArMTcyMDIsMTMgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGZvciAoaSA9IHN0YXRlLVx1MDAzZWN1cmZyYW1lOyBpOyBpLS0pIHtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWZyYW1lW2ldLVx1MDAzZWluX2NhbGxiYWNrX2ZuKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiY2Fubm90IHVzZSBCUEZfTERfW0FCU3xJTkRdIHdpdGhpbiBjYWxsYmFja1xcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKCFlbnYtXHUwMDNlb3BzLVx1MDAzZWdlbl9sZF9hYnMpIHtcbiBcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJnZW5fbGRfYWJzIGlzIG51bGxcIik7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuaW5kZXggNmQ1ZmNlN2U2ZmZjOS4uODFjNDU5NDM1NjgwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9wcmVlbXB0X2xvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ByZWVtcHRfbG9jay5jXG5AQCAtMTE1LDYgKzExNSw1OCBAQCBpbnQgcHJlZW1wdF9zbGVlcGFibGVfaGVscGVyKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/dXByb2JlLnNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJzbGVlcGFibGUgaGVscGVyIGJwZl9nZXRfc3RhY2sjXCIpXG4raW50IHByZWVtcHRfc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XG4rXG4rXHRicGZfcHJlZW1wdF9kaXNhYmxlKCk7XG4rXHRicGZfZ2V0X3N0YWNrKGN0eCwgXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXG4rXHRcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdGJwZl9wcmVlbXB0X2VuYWJsZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj91cHJvYmUuc1wiKVxuK19fZmFpbHVyZSBfX21zZyhcInNsZWVwYWJsZSBoZWxwZXIgYnBmX2dldF90YXNrX3N0YWNrI1wiKVxuK2ludCBwcmVlbXB0X3NsZWVwYWJsZV9nZXRfdGFza19zdGFjayh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCBzdGFjaztcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbitcbitcdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGJwZl9wcmVlbXB0X2Rpc2FibGUoKTtcbitcdGJwZl9nZXRfdGFza19zdGFjayh0YXNrLCBcdTAwMjZzdGFjaywgc2l6ZW9mKHN0YWNrKSxcbitcdFx0XHQgICBCUEZfRl9VU0VSX1NUQUNLIHwgQlBGX0ZfVVNFUl9CVUlMRF9JRCk7XG4rXHRicGZfcHJlZW1wdF9lbmFibGUoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dXByb2JlLnNcIilcbitfX3N1Y2Nlc3NcbitpbnQgc2xlZXBhYmxlX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgc3RhY2s7XG4rXG4rXHRicGZfZ2V0X3N0YWNrKGN0eCwgXHUwMDI2c3RhY2ssIHNpemVvZihzdGFjayksXG4rXHRcdCAgICAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dXByb2JlLnNcIilcbitfX3N1Y2Nlc3NcbitpbnQgc2xlZXBhYmxlX2dldF90YXNrX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkIHN0YWNrO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1xuK1x0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xuK1x0YnBmX2dldF90YXNrX3N0YWNrKHRhc2ssIFx1MDAyNnN0YWNrLCBzaXplb2Yoc3RhY2spLFxuK1x0XHRcdCAgIEJQRl9GX1VTRVJfU1RBQ0sgfCBCUEZfRl9VU0VSX0JVSUxEX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/ZmVudHJ5LnMvXCIgU1lTX1BSRUZJWCBcInN5c19nZXRwZ2lkXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwia2VybmVsIGZ1bmMgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciBpcyBzbGVlcGFibGUgd2l0aGluIG5vbi1wcmVlbXB0aWJsZSByZWdpb25cIilcbiBpbnQgcHJlZW1wdF9zbGVlcGFibGVfa2Z1bmModm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYnRyZWVfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmNcbmluZGV4IDgwMzQxOWE0N2M2MjYuLjQ1MDQ2MDgxOTZhYmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmJ0cmVlX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JidHJlZV9mYWlsLmNcbkBAIC0yNzIsNiArMjcyLDQ3IEBAIHN0YXRpYyBib29sIGxlc3NfX2JhZF9yZXNfc3Bpbl91bmxvY2soc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX3VubG9ja19yZWxvY2sodm9pZClcbit7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2Z2xvY2spO1xuK1x0YnBmX3NwaW5fbG9jayhcdTAwMjZnbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgcmJ0cmVlX2NiX25lc3RlZF91bmxvY2sodm9pZClcbit7XG4rXHRyYnRyZWVfY2JfdW5sb2NrX3JlbG9jaygpO1xuK1x0YXNtIHZvbGF0aWxlIChcIlwiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbGVzc19fYmFkX3N1YnByb2dfdW5sb2NrKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuK3tcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYTtcbitcdHN0cnVjdCBub2RlX2RhdGEgKm5vZGVfYjtcbitcbitcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdG5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9kYXRhLCBub2RlKTtcbitcdHJidHJlZV9jYl9uZXN0ZWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByYnRyZWVfY2Jfbm9vcCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcIik7XG4rfVxuK1xuK3N0YXRpYyBib29sIGxlc3NfX3N1YnByb2dfYWxsb3dlZChzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2E7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpub2RlX2I7XG4rXG4rXHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XG4rXHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfZGF0YSwgbm9kZSk7XG4rXHRyYnRyZWVfY2Jfbm9vcCgpO1xuK1xuK1x0cmV0dXJuIG5vZGVfYS1cdTAwM2VrZXkgXHUwMDNjIG5vZGVfYi1cdTAwM2VrZXk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiBsb25nIGFkZF93aXRoX2NiKGJvb2wgKGNiKShzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikpXG4ge1xuQEAgLTMzMCw0ICszNzEsMTggQEAgbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2JfcmVzX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW4ndCBzcGluX3tsb2NrLHVubG9ja30gaW4gcmJ0cmVlIGNiXCIpXG4rbG9uZyByYnRyZWVfYXBpX2FkZF9iYWRfY2Jfc3VicHJvZ191bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBhZGRfd2l0aF9jYihsZXNzX19iYWRfc3VicHJvZ191bmxvY2spO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJidHJlZV9hcGlfYWRkX2NiX3N1YnByb2dfYWxsb3dlZCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIGFkZF93aXRoX2NiKGxlc3NfX3N1YnByb2dfYWxsb3dlZCk7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuY1xuaW5kZXggYTdjODRkM2ZhNGM3My4uZTA5MjY3NjdiYmQzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmNcbkBAIC0xMDgsNiArMTA4LDMwIEBAIGludCB0aW1lcl9zeXNfY2xvc2VfcHJvZyh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB0aW1lcl9idGZfZmluZF9jYih2b2lkICptYXAsIGludCAqa2V5LCBzdHJ1Y3QgYnBmX3RpbWVyICp0aW1lcilcbit7XG4rXHRjaGFyIG5hbWVbXSA9IFwidGFza19zdHJ1Y3RcIjtcbitcbitcdGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQobmFtZSwgc2l6ZW9mKG5hbWUpLCBCVEZfS0lORF9TVFJVQ1QsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2ZhaWx1cmUgX19tc2coXCJzbGVlcGFibGUgaGVscGVyIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQje3tbMC05XSt9fSBpbiBub24tc2xlZXBhYmxlIHByb2dcIilcbitpbnQgdGltZXJfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRpbWVyX2VsZW0gKnZhbDtcbitcdGludCBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0aW1lcl9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfdGltZXJfaW5pdChcdTAwMjZ2YWwtXHUwMDNldCwgXHUwMDI2dGltZXJfbWFwLCAwKTtcbitcdGJwZl90aW1lcl9zZXRfY2FsbGJhY2soXHUwMDI2dmFsLVx1MDAzZXQsIHRpbWVyX2J0Zl9maW5kX2NiKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19zdWNjZXNzXG4gaW50IHN5c2NhbGxfc3lzX2JwZl9wcm9nKHZvaWQgKmN0eClcbkBAIC0xMjYsNiArMTUwLDE2IEBAIGludCBzeXNjYWxsX3N5c19jbG9zZV9wcm9nKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19zdWNjZXNzXG4raW50IHN5c2NhbGxfYnRmX2ZpbmRfcHJvZyh2b2lkICpjdHgpXG4re1xuK1x0Y2hhciBuYW1lW10gPSBcInRhc2tfc3RydWN0XCI7XG4rXG4rXHRicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kKG5hbWUsIHNpemVvZihuYW1lKSwgQlRGX0tJTkRfU1RSVUNULCAwKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBXb3JrcXVldWUgdGVzdHMgKi9cbiBcbiBzdHJ1Y3Qgd3FfZWxlbSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG5pbmRleCAwOWU4MWI5OWVlY2I0Li4zMjk4OWY5ODFmYjY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xkX2luZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbGRfaW5kLmNcbkBAIC0xOTQsNiArMTk0LDEwMiBAQCBfX25ha2VkIHZvaWQgbGRfaW5kX3N1YnByb2dfYm90aF9wYXRoc19zYWZlKHZvaWQpXG4gXHQ6OjogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbitzdGF0aWMgaW50IGxkX2Fic19jYWxsYmFjayh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInI2ID0gKih1NjQgKikocjIgKyAwKTtcIlxuK1x0XCIuOGJ5dGUgJVtsZF9hYnNdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJsZF9hYnM6IHJlamVjdCBpbiBjYWxsYmFja1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcIilcbitpbnQgbGRfYWJzX2NhbGxiYWNrX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX2xvb3AoMSwgbGRfYWJzX2NhbGxiYWNrLCBcdTAwMjZza2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbitzdGF0aWMgaW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjYgPSByMTtcIlxuK1x0XCJyNyA9IDA7XCJcbitcdFwiLjhieXRlICVbbGRfaW5kXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbV9pbnNuKGxkX2luZCwgQlBGX0xEX0lORChCUEZfVywgQlBGX1JFR183LCAwKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbitzdGF0aWMgaW50IGxkX2luZF9jYWxsYmFjayh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIxID0gKih1NjQgKikocjIgKyAwKTtcIlxuK1x0XCJjYWxsIGxkX2luZF9jYWxsYmFja19zdWJwcm9nO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2luZDogcmVqZWN0IGluIGNhbGxiYWNrIHN1YnByb2dcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXNlIEJQRl9MRF9bQUJTfElORF0gd2l0aGluIGNhbGxiYWNrXCIpXG4raW50IGxkX2luZF9jYWxsYmFja19zdWJwcm9nX3JlamVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YnBmX2xvb3AoMSwgbGRfaW5kX2NhbGxiYWNrLCBcdTAwMjZza2IsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBfX25vaW5saW5lIGludCBsZF9pbmRfZ2xvYmFsX3N0YXRpYyhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjYgPSAlW3NrYl07XCJcbitcdFwicjcgPSAwO1wiXG4rXHRcIi44Ynl0ZSAlW2xkX2luZF07XCJcbitcdDpcbitcdDogW3NrYl0gXCJyXCIoc2tiKSxcbitcdCAgX19pbW1faW5zbihsZF9pbmQsIEJQRl9MRF9JTkQoQlBGX1csIEJQRl9SRUdfNywgMCkpXG4rXHQ6IF9fY2xvYmJlcl9jb21tb24sIFwicjZcIiwgXCJyN1wiKTtcbitcdHJldHVybiBza2ItXHUwMDNlbWFyaztcbit9XG4rXG4rX19ub2lubGluZSBpbnQgbGRfaW5kX2dsb2JhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIGxkX2luZF9nbG9iYWxfc3RhdGljKHNrYik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbGRfaW5kX2dsb2JhbF9jYWxsYmFjayhfX3UzMiBpbmRleCwgc3RydWN0IF9fc2tfYnVmZiAqKmN0eClcbit7XG4rXHRsZF9pbmRfZ2xvYmFsKCpjdHgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJsZF9pbmQ6IHJlamVjdCBpbiBjYWxsYmFjayBnbG9iYWwgc3VicHJvZ1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImNhbm5vdCB1c2UgQlBGX0xEX1tBQlN8SU5EXSB3aXRoaW4gY2FsbGJhY2tcIilcbitpbnQgbGRfaW5kX2dsb2JhbF9jYWxsYmFja19yZWplY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdGJwZl9sb29wKDEsIGxkX2luZF9nbG9iYWxfY2FsbGJhY2ssIFx1MDAyNnNrYiwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImxkX2luZDogYWxsb3cgaW4gbm9uLWNhbGxiYWNrIGdsb2JhbCBzdWJwcm9nXCIpXG4rX19zdWNjZXNzXG4raW50IGxkX2luZF9nbG9iYWxfc3VicHJvZ19vayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIGxkX2luZF9nbG9iYWwoc2tiKTtcbit9XG4rXG4gLypcbiAgKiBsZF97YWJzLGluZH0gaW4gc3VicHJvZ3MgcmVxdWlyZSBzY2FsYXIgKGludCkgcmV0dXJuIHR5cGUgaW4gQlRGLlxuICAqIEEgdGVzdCB3aXRoIHZvaWQgcmV0dXJuIG11c3QgYmUgcmVqZWN0ZWQuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjowMy4wNDg4ODk4MjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE4MjUyOTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbjogQSBCUEYgUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IFRpbWUgdG8gdGhpbmsgbGlrZSBhbiBleHBlcnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcywgcHJvYmFibHkgbm90LiBMZXQncyBkZWx2ZSBpbi5cblxuRmlyc3QsIEkgc2VlIGNoYW5nZXMgcHJpbWFyaWx5IGZvY3VzZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtOiBzcGVjaWZpY2FsbHksIGluIHRoZSB2ZXJpZmllciBhbmQgaGVscGVyIGZ1bmN0aW9uIGF0dHJpYnV0ZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBga2VybmVsL2JwZi9idGYuY2AsIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFsb25nIHdpdGggYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIHRocmVlIGtleSBhcmVhcy5cblxuMS4gIFdlJ3ZlIGdvdCBgbWlnaHRfc2xlZXAgPSB0cnVlYCBiZWluZyBhZGRlZCB0byBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgaXMgYWJvdXQgdGhlIHZlcmlmaWVyIGVuZm9yY2luZyB0aGF0IHNsZWVwYWJsZSBoZWxwZXJzIGFyZSB1c2VkIGNvcnJlY3RseSDigJMgaS5lLiwgb25seSBpbiBzbGVlcGFibGUgY29udGV4dHMsIG5vdCB3aGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQgb3IgaW4gUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBTdGFuZGFyZCBzdHVmZi5cblxuMi4gIFRoZSB2ZXJpZmllciBub3cgZXhwbGljaXRseSBkaXNhbGxvd3MgYEJQRl9MRF9BQlNgIGFuZCBgQlBGX0xEX0lORGAgd2l0aGluIEJQRiBjYWxsYmFja3MgYW5kIHN1YnByb2dyYW1zIHRoYXQgdGhvc2UgY2FsbGJhY2tzIGNhbGwuIFRoaXMgaXMgZXhwZWN0ZWQgc2luY2UgdGhlc2UgaW5zdHJ1Y3Rpb25zIGludm9sdmUgc3BlY2lhbCBKSVQgdHJhbnNmb3JtYXRpb25zIG9yIHJlLWVudHJ5IHRoYXQgZG9lc24ndCBnZWwgd2l0aCBjYWxsYmFjayBleGVjdXRpb24uIEl0IG1ha2VzIHNlbnNlIHRvIGZvcmJpZCB0aGVtLlxuXG4zLiAgVGhlIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdmVyaWZpZXIgY2hlY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgc3VicHJvZ3JhbXMgY2FsbGVkIGZyb20gcmJ0cmVlIGNhbGxiYWNrcy4gSXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgdGhlIHZlcmlmaWVyIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHRoZXJlYnkgYXZvaWRpbmcgZmFsc2UgcG9zaXRpdmVzIGFib3V0IHVucmVsZWFzZWQgbG9ja3MgaWYgdGhlIHN1YnByb2dyYW0gaXMgY29ycmVjdGx5IGhhbmRsaW5nIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBpbnNpZGUgdGhlIHJidHJlZSBjYWxsYmFjay5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGFwcHJvYWNoIHRoaXMgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBXaGF0IGtpbmQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG1pZ2h0IHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZT8gSSBoYXZlIHRvIGJlIHN5c3RlbWF0aWMuXG5cbjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlIEluZm9ybWF0aW9uIExlYWs6KiogVGhpcyBwYXRjaCBzZXJpZXMgZG9lc24ndCB0b3VjaCBhbnkgb2YgdGhlIHR5cGljYWwgY3VscHJpdHMgLSAgbm8gYGNvcHlfdG9fdXNlcmAsIG5vIG5ldGxpbmsgbWVzc2FnZXMsIG5vIGlvY3Rscy4gTm8gZGF0YSBleHBvc3VyZSBpcyBhZGRlZCBvciBhbHRlcmVkLiBJIGRvbid0IHNlZSBhbnkgcmlzayBoZXJlLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBVc2FnZSBpbiBDb25kaXRpb25hbCBMb2dpYzoqKiBUaGUgdmVyaWZpZXIncyBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXMgbG9vayB0byBiZSB3ZWxsLWRlZmluZWQuIE5vIHdlaXJkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gIEkgc2VlIG5vIGNvbmNlcm5zLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBJc3N1ZXM6KiogTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBhZGRlZCBieSB0aGVzZSBjaGFuZ2VzLlxuNC4gICoqQm91bmRzIENoZWNrcy9VbmluaXRpYWxpemVkIEJ5dGVzOioqIFRoZSBjaGFuZ2VzIHJlc3RyaWN0IGluc3RydWN0aW9ucyBpbiBjYWxsYmFja3MsIG1vZGlmeSBzbGVlcGFibGUgaGVscGVyIGF0dHJpYnV0ZXMsIGFuZCBpbXByb3ZlIHZlcmlmaWVyIGxvZ2ljIHJlbGF0ZWQgdG8gcmJ0cmVlIGNhbGxiYWNrcy4gIE5vIGNoYW5jZSBoZXJlLlxuXG5Tbywgd2hlcmUncyB0aGUgS01TQU4gaG9vaz8gSG9uZXN0bHksIEkgZG9uJ3Qgc2VlIGFueS4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mbyBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbCBhYm91dCBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBhdHRyaWJ1dGVzLiBBbnkgc2xlZXBhYmxlIG9yIGxvY2tpbmcgYnVncyBvciB2ZXJpZmllciBpc3N1ZXMgdGhhdCBjcmVlcCB1cCBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSB2ZXJpZmllciBpdHNlbGYsIExPQ0tERVAsIG9yIHRob3NlIHN0YW5kYXJkIGtlcm5lbCBydW50aW1lIGNoZWNrcy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBtaWdodCB3YW50IHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AgYXJvdW5kIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kYCBidXQgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIGEgZnVsbCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjoxMC4yMzE0MjE4NjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njc0ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzRcXFxcKGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9idGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTg3MTI9c3RhdGljIGludCBjaGVja19idGZfa2NvbmZpZ3MoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCBjaGFyICpmZWF0dXJlKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NzIyLVxcbmtlcm5lbC9icGYvYnRmLmM6ODcyMzpCUEZfQ0FMTF80KGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsIGNoYXIgKiwgbmFtZSwgaW50LCBuYW1lX3N6LCB1MzIsIGtpbmQsIGludCwgZmxhZ3MpXFxua2VybmVsL2JwZi9idGYuYy04NzI0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6MzI6MTAuMjc3MTAxMDc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTYzODcyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQlRGIEludGVybmFscyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgQlBGIHR5cGUgZm9ybWF0IChCVEYpIGNvZGUsIHNwZWNpZmljYWxseSwgd2hlcmUgdGhlIGFjdGlvbiBpcyB0YWtpbmcgcGxhY2UuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvYnRmLmNgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIEJURiBpbXBsZW1lbnRhdGlvbiBsaWtlbHkgcmVzaWRlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXJvdW5kIGxpbmUgODcyMy4gSXQncyBub3QgYSByYW5kb20gbnVtYmVyOyBpdCdzIGEgc3RyYXRlZ2ljIHN0YXJ0aW5nIHBvaW50IGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgY29kZWJhc2VzLiBIb3BlZnVsbHksIHRoaXMgYXJlYSB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYmVoYXZpb3IgSSdtIHRyeWluZyB0byBkaWFnbm9zZSBvciB1bmRlcnN0YW5kIGJldHRlci4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgYW5kIHRoZW4gdXNlIHRoYXQgYXMgYSBqdW1waW5nLW9mZiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMyOjEyLjI5MzQ5MTQ5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4NzIwOlxcdFxcdHJldHVybiAwO1xcbjg3MjE6XFx0fVxcbjg3MjI6XFx0XFxuODcyMzpcXHRCUEZfQ0FMTF80KGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmQsIGNoYXIgKiwgbmFtZSwgaW50LCBuYW1lX3N6LCB1MzIsIGtpbmQsIGludCwgZmxhZ3MpXFxuODcyNDpcXHR7XFxuODcyNTpcXHRcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbjg3MjY6XFx0XFx0aW50IGJ0Zl9vYmpfZmQgPSAwO1xcbjg3Mjc6XFx0XFx0bG9uZyByZXQ7XFxuODcyODpcXHRcXG44NzI5OlxcdFxcdGlmIChmbGFncylcXG44NzMwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjg3MzE6XFx0XFxuODczMjpcXHRcXHRpZiAobmFtZV9zeiBcXHUwMDNjPSAxIHx8IG5hbWVbbmFtZV9zeiAtIDFdKVxcbjg3MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODczNDpcXHRcXG44NzM1OlxcdFxcdHJldCA9IGJwZl9maW5kX2J0Zl9pZChuYW1lLCBraW5kLCBcXHUwMDI2YnRmKTtcXG44NzM2OlxcdFxcdGlmIChyZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbjg3Mzc6XFx0XFx0XFx0YnRmX29ial9mZCA9IF9fYnRmX25ld19mZChidGYpO1xcbjg3Mzg6XFx0XFx0XFx0aWYgKGJ0Zl9vYmpfZmQgXFx1MDAzYyAwKSB7XFxuODczOTpcXHRcXHRcXHRcXHRidGZfcHV0KGJ0Zik7XFxuODc0MDpcXHRcXHRcXHRcXHRyZXR1cm4gYnRmX29ial9mZDtcXG44NzQxOlxcdFxcdFxcdH1cXG44NzQyOlxcdFxcdFxcdHJldHVybiByZXQgfCAoKCh1NjQpYnRmX29ial9mZCkgXFx1MDAzY1xcdTAwM2MgMzIpO1xcbjg3NDM6XFx0XFx0fVxcbjg3NDQ6XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuODc0NTpcXHRcXHRcXHRidGZfcHV0KGJ0Zik7XFxuODc0NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjg3NDc6XFx0fVxcbjg3NDg6XFx0XFxuODc0OTpcXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG44NzUwOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kLFxcbjg3NTE6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG44NzUyOlxcdFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG44NzUzOlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuODc1NDpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuODc1NTpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuODc1NjpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1NzpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuODc1ODpcXHR9O1xcbjg3NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjMyOjEyLjI5MzkwOTA0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTY1MzAwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJldHR5IGNsZWFuLWN1dC4gSSd2ZSByZXZpZXdlZCB0aGUgcHJvcG9zZWQgY2hhbmdlcywgYW5kIGl0J3MgYWxsIHJhdGhlciBkaXJlY3QuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIGEgYC5taWdodF9zbGVlcCA9IHRydWVgIGZsYWcgdG8gc29tZSBCUEYgaGVscGVyIGZ1bmN0aW9uIGRlZmluaXRpb25zOiBgYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90b2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90b2AsIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90b2AuIFRoaXMgc2lnbmlmaWVzIHRoYXQgdGhlc2UgZnVuY3Rpb25zICpjYW4qIHBvdGVudGlhbGx5IHNsZWVwLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSB2ZXJpZmllciB0byB1bmRlcnN0YW5kLlxuXG5CZXlvbmQgdGhhdCwgd2UgaGF2ZSB2ZXJpZmllciB2YWxpZGF0aW9uIGFkZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gZGlzYWxsb3cgYEJQRl9MRF9bQUJTfElORF1gIGluIGNhbGxiYWNrcyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuIFRoaXMgbWVhbnMgd2UncmUgdGlnaHRlbmluZyB0aGUgdmVyaWZpY2F0aW9uIHJ1bGVzIHJlZ2FyZGluZyBkaXJlY3QgbWVtb3J5IGFjY2VzcyB3aXRoaW4gdGhlc2UgY29udGV4dHMsIHVzaW5nIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2AgYW5kIGBjaGVja19sZF9hYnNgLiBXZSBhbHNvIGhhdmUgYSBmaXggZm9yIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gY29ycmVjdGx5IGFuYWx5emUgdGhlIGNhbGxlciBmcmFtZXMgZm9yIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxuXG5GaW5hbGx5LCBzb21lIG5ldyBzZWxmdGVzdHMgYXJlIGluY2x1ZGVkIHRvIGNvdmVyIHRoZXNlIG5ldyB2ZXJpZmllciBydWxlcyBhbmQgc2xlZXBhYmxlIGhlbHBlcnMsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciBvbmdvaW5nIHJlbGlhYmlsaXR5LlxuXG5JbXBvcnRhbnRseSwgYmFzZWQgb24gbXkgYW5hbHlzaXMsICpub25lKiBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbWVtb3J5IGFsbG9jYXRpb24sIGNvcHlpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgY2hhbmdlIG1lbW9yeSBzYWZldHkgc2VtYW50aWNzIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgS01TQU4uIEknbSBub3Qgc2VlaW5nIGFueXRoaW5nIGhlcmUgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiB0byBjYXRjaCBwb3RlbnRpYWwgaXNzdWVzLiBUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBjYW4gYmUgc2V0IHRvIGBmYWxzZWAuXG5cbk5vdywgSSdsbCBnbyBhaGVhZCBhbmQgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgYXNzZXNzbWVudC4gV2hlbiBzZXR0aW5nIHRoZSByZXN1bHRzIEknbGwgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOL0xPQ0tERVAgd2l0aCBLTVNBTi4gSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoYXQgZWFjaCB0b29sIGlzIGludGVuZGVkIGZvciwgYW5kIHdoaWxlIEtBU0FOL0xPQ0tERVAgYXJlIGNyaXRpY2FsIGZvciBkZXRlY3RpbmcgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBLTVNBTiBpcyB0YWlsb3JlZCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIG5vdCBwZXJ0aW5lbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyOSwiT3V0cHV0VG9rZW5zIjoyNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTozMjoxNi4yNTkyMTMwOThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGFuZCBoZWxwZXIgbWV0YWRhdGE6XFxuMS4gSXQgZmxhZ3MgaGVscGVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCwgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvYCkgd2l0aCBgLm1pZ2h0X3NsZWVwID0gdHJ1ZWAgdG8gcHJldmVudCB0aGVpciBpbnZvY2F0aW9uIGZyb20gbm9uLXNsZWVwYWJsZSBjb250ZXh0cy5cXG4yLiBJdCBhZGRzIEJQRiB2ZXJpZmllciBjaGVja3MgKGBjaGVja19sZF9hYnNgIGFuZCBgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2dgKSB0byBkaXNhbGxvdyBgQlBGX0xEX1tBQlN8SU5EXWAgd2l0aGluIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3VicHJvZ3JhbXMuXFxuMy4gSXQgdXBkYXRlcyBgaW5fcmJ0cmVlX2xvY2tfcmVxdWlyZWRfY2JgIHRvIGl0ZXJhdGUgYWNyb3NzIHN0YWNrIGZyYW1lcyB0byBwcm9wZXJseSB0cmFjayByYnRyZWUgY2FsbGJhY2sgY29udGV4dC5cXG40LiBJdCBhZGRzIHNlbGZ0ZXN0cyBmb3IgdGhlc2UgdmVyaWZpZXIgc2NlbmFyaW9zLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSwgaW5pdGlhbGl6ZSwgcmVhZCwgb3IgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMvYm91bmRhcmllcyB0byB1c2VyIHNwYWNlLiBMb2NraW5nIGFuZCBzbGVlcC1pbi1hdG9taWMgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBCUEYgdmVyaWZpZXIgbG9naWMgYW5kIGhlbHBlciBtZXRhZGF0YTpcXG4xLiBJdCBmbGFncyBoZWxwZXIgZnVuY3Rpb24gcHJvdG90eXBlcyAoYGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG9gLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG9gLCBhbmQgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG9gKSB3aXRoIGAubWlnaHRfc2xlZXAgPSB0cnVlYCB0byBwcmV2ZW50IHRoZWlyIGludm9jYXRpb24gZnJvbSBub24tc2xlZXBhYmxlIGNvbnRleHRzLlxcbjIuIEl0IGFkZHMgQlBGIHZlcmlmaWVyIGNoZWNrcyAoYGNoZWNrX2xkX2Fic2AgYW5kIGBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZ2ApIHRvIGRpc2FsbG93IGBCUEZfTERfW0FCU3xJTkRdYCB3aXRoaW4gY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0aGVpciBzdWJwcm9ncmFtcy5cXG4zLiBJdCB1cGRhdGVzIGBpbl9yYnRyZWVfbG9ja19yZXF1aXJlZF9jYmAgdG8gaXRlcmF0ZSBhY3Jvc3Mgc3RhY2sgZnJhbWVzIHRvIHByb3Blcmx5IHRyYWNrIHJidHJlZSBjYWxsYmFjayBjb250ZXh0LlxcbjQuIEl0IGFkZHMgc2VsZnRlc3RzIGZvciB0aGVzZSB2ZXJpZmllciBzY2VuYXJpb3MuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlLCBpbml0aWFsaXplLCByZWFkLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBhbHRlciBidWZmZXIgbGVuZ3Rocy9ib3VuZGFyaWVzIHRvIHVzZXIgc3BhY2UuIExvY2tpbmcgYW5kIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[1] Phase: Succeeded StartedAt: 2026-09-05 05:32:27 +0000 UTC FinishedAt: 2026-09-05 05:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 05:32:27 +0000 UTC FinishedAt: 2026-09-05 05:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2] Phase: Succeeded StartedAt: 2026-09-05 05:32:27 +0000 UTC FinishedAt: 2026-09-05 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 05:32:27 +0000 UTC FinishedAt: 2026-09-05 09:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 05:32:27 +0000 UTC FinishedAt: 2026-09-05 05:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 05:32:27 +0000 UTC FinishedAt: 2026-09-05 05:32:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpn429/series-workflowpn429-convert-artifact-4094344297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 05:32:49 +0000 UTC FinishedAt: 2026-09-05 05:48:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 05:32:49 +0000 UTC FinishedAt: 2026-09-05 05:48:35 +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:*6e8097ff-3c9e-400b-8536-7bfbbdf33387,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-workflowpn429/series-workflowpn429-convert-artifact-4094344297/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": "62462159-d0d7-462a-878b-376e3258c612", "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-workflowpn429/series-workflowpn429-build-action-2498662343/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:32:49 +0000 UTC FinishedAt: 2026-09-05 05:48:25 +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:*6e8097ff-3c9e-400b-8536-7bfbbdf33387,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-workflowpn429/series-workflowpn429-convert-artifact-4094344297/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": "62462159-d0d7-462a-878b-376e3258c612", "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-workflowpn429/series-workflowpn429-build-action-2498662343/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 05:48:35 +0000 UTC FinishedAt: 2026-09-05 05:48:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 05:48:35 +0000 UTC FinishedAt: 2026-09-05 05:48:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 05:48:35 +0000 UTC FinishedAt: 2026-09-05 05:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 05:48:35 +0000 UTC FinishedAt: 2026-09-05 05:48:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpn429/series-workflowpn429-convert-artifact-848157180/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 05:48:45 +0000 UTC FinishedAt: 2026-09-05 05:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 05:48:45 +0000 UTC FinishedAt: 2026-09-05 05:50:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62462159-d0d7-462a-878b-376e3258c612,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-workflowpn429/series-workflowpn429-build-action-2498662343/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-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 05:50:58 +0000 UTC FinishedAt: 2026-09-05 05:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 05:50:58 +0000 UTC FinishedAt: 2026-09-05 05:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 05:50:58 +0000 UTC FinishedAt: 2026-09-05 06:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 05:50:58 +0000 UTC FinishedAt: 2026-09-05 06:06:55 +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:*6e8097ff-3c9e-400b-8536-7bfbbdf33387,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-workflowpn429/series-workflowpn429-convert-artifact-848157180/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": "01672d90-1b38-47a3-90ad-12f83a83ed70", "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-workflowpn429/series-workflowpn429-build-action-2157205080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:50:58 +0000 UTC FinishedAt: 2026-09-05 06:06:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6e8097ff-3c9e-400b-8536-7bfbbdf33387,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-workflowpn429/series-workflowpn429-convert-artifact-848157180/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": "01672d90-1b38-47a3-90ad-12f83a83ed70", "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-workflowpn429/series-workflowpn429-build-action-2157205080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 06:06:55 +0000 UTC FinishedAt: 2026-09-05 06:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 06:06:55 +0000 UTC FinishedAt: 2026-09-05 06:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 06:06:55 +0000 UTC FinishedAt: 2026-09-05 06:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 06:06:55 +0000 UTC FinishedAt: 2026-09-05 06:08:37 +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:*01672d90-1b38-47a3-90ad-12f83a83ed70,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-workflowpn429/series-workflowpn429-build-action-2157205080/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-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 09:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"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:*62462159-d0d7-462a-878b-376e3258c612,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*01672d90-1b38-47a3-90ad-12f83a83ed70,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-workflowpn429/series-workflowpn429-build-action-2498662343/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-workflowpn429/series-workflowpn429-build-action-2157205080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 06:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 06:08:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"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-workflowpn429/series-workflowpn429-convert-artifact-1129449669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 06:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 06:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 06:08:47 +0000 UTC FinishedAt: 2026-09-05 06:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 06:08:57 +0000 UTC FinishedAt: 2026-09-05 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn429[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_ld_abs","check_max_stack_depth_subprog","in_rbtree_lock_required_cb","bpf_btf_find_by_name_kind","bpf_get_stack_sleepable","bpf_get_task_stack_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e044668419b9c444282bd09521f7ea07edbc10b1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS"],"series_id":"5a8425bf-fb29-49c2-9238-5aa490ba37da","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 06:08:57 +0000 UTC FinishedAt: 2026-09-05 09:10:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62462159-d0d7-462a-878b-376e3258c612,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*01672d90-1b38-47a3-90ad-12f83a83ed70,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-workflowpn429/series-workflowpn429-build-action-2498662343/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-workflowpn429/series-workflowpn429-build-action-2157205080/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-workflowpn429/series-workflowpn429-convert-artifact-1129449669/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,}