ZGlmZiAtLWdpdCBhL3J1bnRpbWUvYXV0b2xvYWQvbmV0cncudmltIGIvcnVudGltZS9hdXRvbG9hZC9uZXRydy52aW0KaW5kZXggNmQxYzM3Zi4uODQ3NjAyMiAxMDA2NDQKLS0tIGEvcnVudGltZS9hdXRvbG9hZC9uZXRydy52aW0KKysrIGIvcnVudGltZS9hdXRvbG9hZC9uZXRydy52aW0KQEAgLTEsNyArMSw3IEBACiAiIG5ldHJ3LnZpbTogSGFuZGxlcyBmaWxlIHRyYW5zZmVyIGFuZCByZW1vdGUgZGlyZWN0b3J5IGxpc3RpbmcgYWNyb3NzCiAiICAgICAgICAgICAgQVVUT0xPQUQgU0VDVElPTgotIiBEYXRlOgkJSnVsIDI3LCAyMDEwCi0iIFZlcnNpb246CTE0MAorIiBEYXRlOgkJQXByIDAxLCAyMDExCisiIFZlcnNpb246CTE0MQogIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwsIEpyIDxOZHJPY2hpcEBTY2FtcGJlbGxQZmFtaWx5LkFiaXpNLU5PU1BBTT4KICIgR2V0TGF0ZXN0VmltU2NyaXB0czogMTA3NSAxIDpBdXRvSW5zdGFsbDogbmV0cncudmltCiAiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTAgQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIHt7ezEKQEAgLTIyLDcgKzIyLDcgQEAKIGlmICZjcCB8fCBleGlzdHMoImc6bG9hZGVkX25ldHJ3IikKICAgZmluaXNoCiBlbmRpZgotbGV0IGc6bG9hZGVkX25ldHJ3ID0gInYxNDAiCitsZXQgZzpsb2FkZWRfbmV0cncgPSAidjE0MSIKIGlmIHY6dmVyc2lvbiA8IDcwMgogIGVjaG9obCBXYXJuaW5nTXNnCiAgZWNobyAiKioqd2FybmluZyoqKiB0aGlzIHZlcnNpb24gb2YgbmV0cncgbmVlZHMgdmltIDcuMiIKQEAgLTc4LDYgKzc4LDggQEAKIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgRGVmYXVsdCB2YWx1ZXMgZm9yIG5ldHJ3J3MgZ2xvYmFsIHByb3RvY29sIHZhcmlhYmxlcyB7e3syCitjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3VzZV9lcnJvcndpbmRvdyIsMSkKKwogaWYgIWV4aXN0cygiZzpuZXRyd19kYXZfY21kIikKICBpZiBleGVjdXRhYmxlKCJjYWRhdmVyIikKICAgbGV0IGc6bmV0cndfZGF2X2NtZAk9ICJjYWRhdmVyIgpAQCAtOTcsNiArOTksNyBAQAogaWYgIWV4aXN0cygiZzpuZXRyd19mdHBfY21kIikKICAgbGV0IGc6bmV0cndfZnRwX2NtZAk9ICJmdHAiCiBlbmRpZgorbGV0IHM6bmV0cndfZnRwX2NtZD0gZzpuZXRyd19mdHBfY21kCiBpZiAhZXhpc3RzKCJnOm5ldHJ3X2h0dHBfY21kIikKICBpZiBleGVjdXRhYmxlKCJlbGlua3MiKQogICBsZXQgZzpuZXRyd19odHRwX2NtZCA9ICJlbGlua3MiCkBAIC0xNTcsMTEgKzE2MCwxMyBAQAogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19jaGd3aW4iICAgICAgLCAtMSkKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfY29tcHJlc3MiICAgICwgImd6aXAiKQogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19jdGFncyIgICAgICAgLCAiY3RhZ3MiKQotaWYgIWV4aXN0cygiZzpuZXRyd19jdXJzb3JsaW5lIikKLSBsZXQgZzpuZXRyd19jdXJzb3JsaW5lPSAxCi0gbGV0IHM6bmV0cndfdXNlcmN1bCAgID0gJmN1cnNvcmxpbmUKLSBsZXQgczpuZXRyd191c2VyY3VjICAgPSAmY3Vyc29yY29sdW1uCitpZiBleGlzdHMoImc6bmV0cndfY3Vyc29ybGluZSIpICYmICFleGlzdHMoImc6bmV0cndfY3Vyc29yIikKKyBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6Tk9URSwnZzpuZXRyd19jdXJzb3JsaW5lIGlzIGRlcHJlY2F0ZWQ7IHVzZSBnOm5ldHJ3X2N1cnNvciBpbnN0ZWFkJyw3NykKKyBsZXQgZzpuZXRyd19jdXJzb3I9IGc6bmV0cndfY3Vyc29ybGluZQogZW5kaWYKK2NhbGwgczpOZXRyd0luaXQoImc6bmV0cndfY3Vyc29yIiAgICAgICwgMikKK2xldCBzOm5ldHJ3X3VzZXJjdWwgPSAmY3Vyc29ybGluZQorbGV0IHM6bmV0cndfdXNlcmN1YyA9ICZjdXJzb3Jjb2x1bW4KICIgRGVmYXVsdCB2YWx1ZXMgLSBkLWcgLS0tLS0tLS0tLSB7e3szCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X2Rpcmhpc3RfY250IiAgICAgICwgMCkKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfZGVjb21wcmVzcyIgICAgICAgLCAneyAiLmd6IiA6ICJndW56aXAiLCAiLmJ6MiIgOiAiYnVuemlwMiIsICIuemlwIiA6ICJ1bnppcCIsICIudGFyIiA6ICJ0YXIgLXhmIiwgIi54eiIgOiAidW54eiIgfScpCkBAIC0yNjcsNyArMjcyLDcgQEAKICIgRGVmYXVsdCB2YWx1ZXMgLSBzIC0tLS0tLS0tLS0ge3t7MwogIiBnOm5ldHJ3X3NlcGNocjogcGlja2luZyBhIGNoYXJhY3RlciB0aGF0IGRvZXNuJ3QgYXBwZWFyIGluIGZpbGVuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHByaW9yaXR5IGZyb20gZmlsZW5hbWUKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfc2VwY2hyIiAgICAgICAgLCAoJmVuYyA9PSAiZXVjLWpwIik/ICJcPENoYXItMHgwMT4iIDogIlw8Q2hhci0weGZmPiIpCi1jYWxsIHM6TmV0cndJbml0KCJzOm5ldHJ3X3NpbGVudHhmZXIiICAgICwgKGV4aXN0cygiZzpuZXRyd19zaWxlbnQiKSAmJiBnOm5ldHJ3X3NpbGVudCAhPSAwKT8gInNpbGVudCBrZWVwaiAiIDogImtlZXBqICIpCitjYWxsIHM6TmV0cndJbml0KCJzOm5ldHJ3X3NpbGVudHhmZXIiICAgICwgKGV4aXN0cygiZzpuZXRyd19zaWxlbnQiKSAmJiBnOm5ldHJ3X3NpbGVudCAhPSAwKT8gInNpbCBrZWVwaiAiIDogImtlZXBqICIpCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3NvcnRfYnkiICAgICAgICwgIm5hbWUiKSAiIGFsdGVybmF0aXZlczogZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzaXplCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3NvcnRfb3B0aW9ucyIgICwgIiIpCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uIiwgIm5vcm1hbCIpICIgYWx0ZXJuYXRpdmU6IHJldmVyc2UgICh6IHkgeCAuLi4pCkBAIC0yODUsNyArMjkwLDYgQEAKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfdGltZWZtdCIsIiVjIikKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfeHN0cmxlbiIsMCkKIGNhbGwgczpOZXRyd0luaXQoImc6TmV0cndUb3BMdmxNZW51IiwiTmV0cncuIikKLWNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfdXNlX2Vycm9yd2luZG93IiwxKQogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd193aW45NWZ0cCIsMSkKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfd2luc2l6ZSIsMjUpCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzA1LDEwICszMDksNDUgQEAKICIgIGZpbGVzIHJlYWQgYnkgbmV0d29yayB0cmFuc2ZlciBhcmVuJ3QgYXBwcm9wcmlhdGVseSBoaWdobGlnaHRlZC4KICJsZXQgZzpkZWNob19idWZlbnRlciA9IDEJIkRlY2hvCiAKKyIgPT09PT09PT09PT09PT09PT09PT09PQorIiAgTmV0cncgSW5pdGlhbGl6YXRpb246IHt7ezEKKyIgPT09PT09PT09PT09PT09PT09PT09PQoraWYgdjp2ZXJzaW9uID49IDcwMCAmJiBoYXMoImJhbGxvb25fZXZhbCIpICYmICZiZXZhbCA9PSAwCisgbGV0ICZsOmJleHByPSAibmV0cncjTmV0cndCYWxsb29uSGVscCgpIgorIHNldCBiZXZhbAorZW5kaWYKKwogIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICIgIE5ldHJ3IFV0aWxpdHkgRnVuY3Rpb25zOiB7e3sxCiAiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBuZXRydyNOZXRyd0JhbGxvb25IZWxwOiB7e3syCitpZiB2OnZlcnNpb24gPj0gNzAwICYmIGhhcygiYmFsbG9vbl9ldmFsIikgJiYgJmJldmFsID09IDEKKyAgZnVuISBuZXRydyNOZXRyd0JhbGxvb25IZWxwKCkKKyAgICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2Jhbm5lcmNudCIpIHx8IHY6YmV2YWxfbG51bSA+PSB3Om5ldHJ3X2Jhbm5lcmNudAorICAgICBsZXQgbWVzZz0gIiIKKyAgICBlbHNlaWYgICAgIHY6YmV2YWxfdGV4dCA9PSAiTmV0cnciIHx8IHY6YmV2YWxfdGV4dCA9PSAiRGlyZWN0b3J5IiB8fCB2OmJldmFsX3RleHQgPT0gIkxpc3RpbmciCisgICAgIGxldCBtZXNnID0gImk6IHRoaW4tbG9uZy13aWRlLXRyZWUgIGdoOiBxdWljayBoaWRlL3VuaGlkZSBvZiBkb3QtZmlsZXMgICBxZjogcXVpY2sgZmlsZSBpbmZvIgorICAgIGVsc2VpZiAgICAgZ2V0bGluZSh2OmJldmFsX2xudW0pID1+ICdeIlxzKi8nCisgICAgIGxldCBtZXNnID0gIjxjcj46IGVkaXQvZW50ZXIgICBvOiBlZGl0L2VudGVyIGluIGhvcml6IHdpbmRvdyAgIHQ6IGVkaXQvZW50ZXIgaW4gbmV3IHRhYiAgIHY6ZWRpdC9lbnRlciBpbiB2ZXJ0IHdpbmRvdyIKKyAgICBlbHNlaWYgICAgIHY6YmV2YWxfdGV4dCA9PSAiU29ydGVkIiB8fCB2OmJldmFsX3RleHQgPT0gImJ5IgorICAgICBsZXQgbWVzZyA9ICdzOiBzb3J0IGJ5IG5hbWUsIHRpbWUsIG9yIGZpbGUgc2l6ZSAgIHI6IHJldmVyc2Ugc29ydGluZyBvcmRlciAgIG10OiBtYXJrIHRhcmdldCcKKyAgICBlbHNlaWYgdjpiZXZhbF90ZXh0ID09ICJTb3J0IiAgIHx8IHY6YmV2YWxfdGV4dCA9PSAic2VxdWVuY2UiCisgICAgIGxldCBtZXNnID0gIlM6IGVkaXQgc29ydGluZyBzZXF1ZW5jZSIKKyAgICBlbHNlaWYgdjpiZXZhbF90ZXh0ID09ICJIaWRpbmciIHx8IHY6YmV2YWxfdGV4dCA9PSAiU2hvd2luZyIKKyAgICAgbGV0IG1lc2cgPSAiYTogaGlkaW5nLXNob3dpbmctYWxsICAgY3RybC1oOiBlZGl0aW5nIGhpZGluZyBsaXN0ICAgbWg6IGhpZGUvc2hvdyBieSBzdWZmaXgiCisgICAgZWxzZWlmIHY6YmV2YWxfdGV4dCA9PSAiUXVpY2siIHx8IHY6YmV2YWxfdGV4dCA9PSAiSGVscCIKKyAgICAgbGV0IG1lc2cgPSAiSGVscDogcHJlc3MgPEYxPiIKKyAgICBlbHNlaWYgdjpiZXZhbF90ZXh0ID09ICJDb3B5L01vdmUiIHx8IHY6YmV2YWxfdGV4dCA9PSAiVGd0IgorICAgICBsZXQgbWVzZyA9ICJtdDogbWFyayB0YXJnZXQgICBtYzogY29weSBtYXJrZWQgZmlsZSB0byB0YXJnZXQgICBtbTogbW92ZSBtYXJrZWQgZmlsZSB0byB0YXJnZXQiCisgICAgZWxzZQorICAgICBsZXQgbWVzZz0gIiIKKyAgICBlbmRpZgorICAgIHJldHVybiBtZXNnCisgIGVuZGZ1bgorZW5kaWYKKwogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpOZXRyd09wdGlvblNhdmU6IHNhdmUgb3B0aW9ucyBhbmQgc2V0IHRvICJzdGFuZGFyZCIgZm9ybSB7e3syCiAiICAwNi8wOC8wNyA6IHJlbW92ZWQgY2FsbCB0byBOZXRyd1NhZmVPcHRpb25zKCksIGVpdGhlciBwbGFjZWQKQEAgLTM1OCw4ICszOTcsOCBAQAogICBpZiBoYXMoIndpbjMyIikgJiYgIWhhcygid2luOTUiKQogICAgbGV0IHthOnZ0fW5ldHJ3X3N3ZmtlZXAgID0gJmw6c3dmICAgICAgICAgICIgc3dhcGZpbGUKICAgZW5kaWYKLSAgaWYgJmdvID1+ICdhJyB8IHNpbGVudCEgbGV0IHthOnZ0fW5ldHJ3X3JlZ3N0YXIgPSBAKiB8IGVuZGlmCi0gIHNpbGVudCEgbGV0IHthOnZ0fW5ldHJ3X3JlZ3NsYXNoPSBALworICBpZiAmZ28gPX4jICdhJyB8IHNpbCEgbGV0IHthOnZ0fW5ldHJ3X3JlZ3N0YXIgPSBAKiB8IGVuZGlmCisgIHNpbCEgbGV0IHthOnZ0fW5ldHJ3X3JlZ3NsYXNoPSBALwogCiAiICBjYWxsIERyZXQoInM6TmV0cndPcHRpb25TYXZlIDogd2luIyIud2lubnIoKS4iIGJ1ZiMiLmJ1Zm5yKCIlIikpCiBlbmRmdW4KQEAgLTQyMywxNyArNDYyLDE3IEBACiAgICAgIiBuZXRydyB3aWxsIHRlbXBvcmFyaWx5IHNldCB0aGUgc3dhcGZpbGUgZGlyZWN0b3J5CiAgICAgIiB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXMgcmV0dXJuZWQgYnkgZ2V0Y3dkKCkuCiAgICAgbGV0ICZsOmRpcmVjdG9yeSAgID0gZ2V0Y3dkKCkKLSAgICBzaWxlbnQhIGxldCAmbDpzd2YgPSB7YTp2dH1uZXRyd19zd2ZrZWVwCisgICAgc2lsISBsZXQgJmw6c3dmID0ge2E6dnR9bmV0cndfc3dma2VlcAogICAgIHNldGxvY2FsIGRpcmVjdG9yeT0KICAgICB1bmxldCB7YTp2dH1uZXRyd19zd2ZrZWVwCiAgICBlbHNlaWYgJmw6c3dmICE9IHthOnZ0fW5ldHJ3X3N3ZmtlZXAKICAgICAiIGZvbGxvd2luZyBsaW5lIGNhdXNlcyBhIFByZXNzIEVOVEVSIGluIHdpbmRvd3MgLS0gY2FuJ3Qgc2VlbSB0byB3b3JrIGFyb3VuZCBpdCEhIQotICAgIHNpbGVudCEgbGV0ICZsOnN3Zj0ge2E6dnR9bmV0cndfc3dma2VlcAorICAgIHNpbCEgbGV0ICZsOnN3Zj0ge2E6dnR9bmV0cndfc3dma2VlcAogICAgIHVubGV0IHthOnZ0fW5ldHJ3X3N3ZmtlZXAKICAgIGVuZGlmCiAgIGVuZGlmCi0gIGlmIGV4aXN0cygie2E6dnR9bmV0cndfcmVnc3RhciIpIHxzaWxlbnQhIGxldCBAKj0ge2E6dnR9bmV0cndfcmVnc3RhciB8dW5sZXQge2E6dnR9bmV0cndfcmVnc3RhciB8ZW5kaWYKLSAgaWYgZXhpc3RzKCJ7YTp2dH1uZXRyd19yZWdzbGFzaCIpfHNpbGVudCEgbGV0IEAvPSB7YTp2dH1uZXRyd19yZWdzbGFzaHx1bmxldCB7YTp2dH1uZXRyd19yZWdzbGFzaHxlbmRpZgorICBpZiBleGlzdHMoInthOnZ0fW5ldHJ3X3JlZ3N0YXIiKSB8c2lsISBsZXQgQCo9IHthOnZ0fW5ldHJ3X3JlZ3N0YXIgfHVubGV0IHthOnZ0fW5ldHJ3X3JlZ3N0YXIgfGVuZGlmCisgIGlmIGV4aXN0cygie2E6dnR9bmV0cndfcmVnc2xhc2giKXxzaWwhIGxldCBALz0ge2E6dnR9bmV0cndfcmVnc2xhc2h8dW5sZXQge2E6dnR9bmV0cndfcmVnc2xhc2h8ZW5kaWYKIAogIiAgY2FsbCBEZWNobygiZzpuZXRyd19rZWVwZGlyPSIuZzpuZXRyd19rZWVwZGlyLiI6IGdldGN3ZDwiLmdldGN3ZCgpLiI+IGFjZD0iLiZhY2QpCiAiICBjYWxsIERlY2hvKCJmbz0iLiZmby4oZXhpc3RzKCImYWNkIik/ICIgYWNkPSIuJmFjZCA6ICIgYWNkIGRvZXNuJ3QgZXhpc3QiKSkKQEAgLTQ2MCwxMyArNDk5LDEzIEBACiAgIGlmIGc6bmV0cndfdXNlX25vc3dmICYmIGhhcygid2luMzIiKSAmJiAhaGFzKCJ3aW45NSIpCiAgICBzZXRsb2NhbCBub3N3ZgogICBlbmRpZgotICBjYWxsIHM6TmV0cndDdXJzb3JsaW5lKCkKKyAgY2FsbCBzOk5ldHJ3Q3Vyc29yKCkKIAogICAiIGFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIHNhZmUgb3B0aW9ucwogIiAgY2FsbCBEZWNobygiZnQ8Ii4mZnQuIj4gZWk9Ii4mZWkpCiAgIGlmICZmdCA9PSAibmV0cnciCiAiICAgY2FsbCBEZWNobygiZG8gYW55IG5ldHJ3IEZpbGVUeXBlIGF1dG9jbWRzIikKLSAgIHNpbGVudCBrZWVwYWx0IGtlZXBqdW1wcyBkb2F1IEZpbGVUeXBlIG5ldHJ3CisgICBzaWwga2VlcGFsdCBrZWVwaiBkb2F1IEZpbGVUeXBlIG5ldHJ3CiAgIGVuZGlmCiAKICIgIGNhbGwgRGVjaG8oImZvPSIuJmZvLihleGlzdHMoIiZhY2QiKT8gIiBhY2Q9Ii4mYWNkIDogIiBhY2QgZG9lc24ndCBleGlzdCIpKQpAQCAtNjA0LDcgKzY0Myw3IEBACiAiICAgICBjYWxsIERlY2hvKCJyZWNvbnN0cnVjdGluZyBjaG9pY2UiKQogICAgICBpZiBtYXRjaChjaG9pY2UsJyIkJykgIT0gLTEKICAgICAgICIgY2FzZSAiLi4uIgotICAgICAgbGV0IGNob2ljZT1zdHJwYXJ0KGNob2ljZSwxLHN0cmxlbihjaG9pY2UpLTIpCisgICAgICBsZXQgY2hvaWNlPSBzdHJwYXJ0KGNob2ljZSwxLHN0cmxlbihjaG9pY2UpLTIpCiAgICAgIGVsc2UKICAgICAgICAiICBjYXNlICIuLi4gLi4uIC4uLiIKICAgICAgIGxldCBjaG9pY2UgICAgICA9IHN0cnBhcnQoY2hvaWNlLDEsc3RybGVuKGNob2ljZSktMSkKQEAgLTY4Niw3ICs3MjUsNyBAQAogICAgZWxzZWlmIGI6bmV0cndfbWV0aG9kICA9PSAyCQkiIHJlYWQgd2l0aCBmdHAgKyA8Lm5ldHJjPgogIiAgICAgY2FsbCBEZWNobygicmVhZCB2aWEgZnRwKy5uZXRyYyAobWV0aG9kICMyKSIpCiAgICAgIGxldCBuZXRyd19mbmFtZT0gYjpuZXRyd19mbmFtZQotICAgICBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxuZXd8Y2FsbCBzOlJlc3RvcmVCdWZWYXJzKCkKKyAgICAga2VlcGogY2FsbCBzOlNhdmVCdWZWYXJzKCl8bmV3fGtlZXBqIGNhbGwgczpSZXN0b3JlQnVmVmFycygpCiAgICAgIGxldCBmaWx0YnVmPSBidWZucigiJSIpCiAgICAgIHNldGxvY2FsIGZmPXVuaXgKICAgICAga2VlcGogcHV0ID1nOm5ldHJ3X2Z0cG1vZGUKQEAgLTY5OCwxNyArNzM3LDE3IEBACiAgICAgIGNhbGwgc2V0bGluZShsaW5lKCIkIikrMSwnZ2V0ICInLm5ldHJ3X2ZuYW1lLiciICcudG1wZmlsZSkKICIgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKGxpbmUoIiQiKSkpCiAgICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0iICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUuIiAiLmc6bmV0cndfcG9ydCwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZS4iICIuZzpuZXRyd19wb3J0LDEpCisiICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuczpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKSkKKyAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCiAgICAgIGVsc2UKLSIgICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQorIiAgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpKQorICAgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpCiAgICAgIGVuZGlmCiAgICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKICAgICAgaWYgZ2V0bGluZSgxKSAhfiAiXiQiICYmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKSAmJiBnZXRsaW5lKDEpICF+ICdeVHJ5aW5nICcKICAgICAgIGxldCBkZWJ1Z2tlZXAgPSAmZGVidWcKICAgICAgIHNldGxvY2FsIGRlYnVnPW1zZwotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLGdldGxpbmUoMSksNCkKKyAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUixnZXRsaW5lKDEpLDQpCiAgICAgICBsZXQgJmRlYnVnICAgID0gZGVidWdrZWVwCiAgICAgIGVuZGlmCiAgICAgIGNhbGwgczpTYXZlQnVmVmFycygpCkBAIC03MjcsNyArNzY2LDcgQEAKICAgICAiIENvbnN0cnVjdCBleGVjdXRpb24gc3RyaW5nIChmb3VyIGxpbmVzKSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIGZpbHRlcgogIiAgICBjYWxsIERlY2hvKCJyZWFkIHZpYSBmdHArbWlwZiAobWV0aG9kICMzKSIpCiAgICAgbGV0IG5ldHJ3X2ZuYW1lPSBlc2NhcGUoYjpuZXRyd19mbmFtZSxnOm5ldHJ3X2ZuYW1lX2VzY2FwZSkKLSAgICBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxuZXd8Y2FsbCBzOlJlc3RvcmVCdWZWYXJzKCkKKyAgICBrZWVwaiBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxuZXd8a2VlcGogY2FsbCBzOlJlc3RvcmVCdWZWYXJzKCkKICAgICBsZXQgZmlsdGJ1Zj0gYnVmbnIoIiUiKQogICAgIHNldGxvY2FsIGZmPXVuaXgKICAgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgpAQCAtNzUzLDcgKzc5Miw3IEBACiAiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnLicpKQogICAgIGVuZGlmCiAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Z0cGV4dHJhY21kIikKLSAgICAgcHV0ID1nOm5ldHJ3X2Z0cGV4dHJhY21kCisgICAgIGtlZXBqIHB1dCA9ZzpuZXRyd19mdHBleHRyYWNtZAogIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJy4nKSkKICAgICBlbmRpZgogICAgIGtlZXBqIHB1dCA9J2dldCBcIicubmV0cndfZm5hbWUuJ1wiICcudG1wZmlsZQpAQCAtNzYzLDkgKzgwMiw5IEBACiAgICAgIiAtaSAgICAgICA6IHR1cm5zIG9mZiBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgZnJvbSBmdHAKICAgICAiIC1uICB1bml4IDogRE9OJ1QgdXNlIDwubmV0cmM+LCBldmVuIHRob3VnaCBpdCBleGlzdHMKICAgICAiIC1uICB3aW4zMjogcXVpdCBiZWluZyBvYm5veGlvdXMgYWJvdXQgcGFzc3dvcmQKLSAgICBub3JtISAxR2RkCi0iICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pIC1uIikKLSAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgLW4iCisgICAga2VlcGogbm9ybSEgMUdkZAorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAtbiIpCisgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pIC1uIgogICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKICAgICBpZiBnZXRsaW5lKDEpICF+ICJeJCIKICIgICAgIGNhbGwgRGVjaG8oImVycm9yPCIuZ2V0bGluZSgxKS4iPiIpCkBAIC04MTcsNyArODU2LDcgQEAKIAogICAgIGVsc2UKICAgICAgIiB3Z2V0L2N1cmwvZmV0Y2ggcGx1cyBhIGp1bXAgdG8gYW4gaW4tcGFnZSBtYXJrZXIgKGllLiBodHRwOi8vYWJjL2RlZi5odG1sI2FNYXJrZXIpCi0iICAgICBjYWxsIERlY2hvKCgid2dldC9jdXJsIHBsdXMganVtcCAoIyBpbiBiOm5ldHJ3X2ZuYW1lPCIuYjpuZXRyd19mbmFtZS4iPikiKQorIiAgICAgY2FsbCBEZWNobygid2dldC9jdXJsIHBsdXMganVtcCAoIyBpbiBiOm5ldHJ3X2ZuYW1lPCIuYjpuZXRyd19mbmFtZS4iPikiKQogICAgICBsZXQgbmV0cndfaHRtbD0gc3Vic3RpdHV0ZShiOm5ldHJ3X2ZuYW1lLCIjLiokIiwiIiwiIikKICAgICAgbGV0IG5ldHJ3X3RhZyA9IHN1YnN0aXR1dGUoYjpuZXRyd19mbmFtZSwiXi4qIyIsIiIsIiIpCiAiICAgICBjYWxsIERlY2hvKCJuZXRyd19odG1sPCIubmV0cndfaHRtbC4iPiIpCkBAIC04MjYsNyArODY1LDcgQEAKICAgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iISIuZzpuZXRyd19odHRwX2NtZC4iICIuc2hlbGxlc2NhcGUodG1wZmlsZSwxKS4iICIuc2hlbGxlc2NhcGUoImh0dHA6Ly8iLmc6bmV0cndfbWFjaGluZS5uZXRyd19odG1sLDEpCiAgICAgIGxldCByZXN1bHQgPSBzOk5ldHJ3R2V0RmlsZShyZWFkY21kLCB0bXBmaWxlLCBiOm5ldHJ3X21ldGhvZCkKICIgICAgIGNhbGwgRGVjaG8oJzxccyphXHMqbmFtZT1ccyoiJy5uZXRyd190YWcuJyIvJykKLSAgICAgZXhlICdub3JtISAxRy88XHMqYVxzKm5hbWU9XHMqIicubmV0cndfdGFnLiciLycuIlw8Q1I+IgorICAgICBleGUgJ2tlZXBqIG5vcm0hIDFHLzxccyphXHMqbmFtZT1ccyoiJy5uZXRyd190YWcuJyIvJy4iXDxDUj4iCiAgICAgZW5kaWYKICAgICBsZXQgYjpuZXRyd19sYXN0ZmlsZSA9IGNob2ljZQogICAgIHNldGxvY2FsIHJvCkBAIC04ODMsNyArOTIyLDcgQEAKICIgICAgY2FsbCBEZWNobygicmVhZCB2aWEgZmV0Y2ggKG1ldGhvZCAjOCkiKQogICAgIGlmIGc6bmV0cndfZmV0Y2hfY21kID09ICIiCiAgICAgIGlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJmZXRjaCBjb21tYW5kIG5vdCBhdmFpbGFibGUiLDcpCisgICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsImZldGNoIGNvbW1hbmQgbm90IGF2YWlsYWJsZSIsNykKICAgICAgZW5kaWYKICIgICAgIGNhbGwgRHJldCgiTmV0UmVhZCIpCiAgICAgZW5kaWYKQEAgLTkzMCw5ICs5NjksOSBAQAogICBlbmRpZgogICBpZiBzOkZpbGVSZWFkYWJsZSh0bXBmaWxlKSAmJiB0bXBmaWxlICF+ICcudGFyLmJ6MiQnICYmIHRtcGZpbGUgIX4gJy50YXIuZ3okJyAmJiB0bXBmaWxlICF+ICcuemlwJyAmJiB0bXBmaWxlICF+ICcudGFyJyAmJiByZWFkY21kICE9ICd0JyAmJiB0bXBmaWxlICF+ICcudGFyLnh6JCcgJiYgdG1wZmlsZSAhfiAnLnR4eicKICIgICBjYWxsIERlY2hvKCJjbGVhbnVwIGJ5IGRlbGV0aW5nIHRtcGZpbGU8Ii50bXBmaWxlLiI+IikKLSAgIGNhbGwgczpOZXRyd0RlbGV0ZSh0bXBmaWxlKQorICAga2VlcGogY2FsbCBzOk5ldHJ3RGVsZXRlKHRtcGZpbGUpCiAgIGVuZGlmCi0gIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInc6IikKKyAga2VlcGogY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgidzoiKQogCiAiICBjYWxsIERyZXQoIm5ldHJ3I05ldFJlYWQgOjUgZ2V0Y3dkPCIuZ2V0Y3dkKCkuIj4iKQogZW5kZnVuCkBAIC05NjYsMTYgKzEwMDUsMTYgQEAKICAgICIgRm9yIGJpbmFyeSB3cml0ZXMsIGFsd2F5cyB3cml0ZSBlbnRpcmUgZmlsZS4KICAgICIgKGxpbmUgbnVtYmVycyBkb24ndCByZWFsbHkgbWFrZSBzZW5zZSBmb3IgdGhhdCkuCiAgICAiIEFsc28gc3VwcG9ydHMgdGhlIHdyaXRpbmcgb2YgdGFyIGFuZCB6aXAgZmlsZXMuCi0iICAgY2FsbCBEZWNobygiKHdyaXRlIGVudGlyZSBmaWxlKSBzaWxlbnQgZXhlIHchICIuZm5hbWVlc2NhcGUodjpjbWRhcmcpLiIgIi5mbmFtZWVzY2FwZSh0bXBmaWxlKSkKLSAgIGV4ZSAic2lsZW50IGtlZXBqIHchICIuZm5hbWVlc2NhcGUodjpjbWRhcmcpLiIgIi5mbmFtZWVzY2FwZSh0bXBmaWxlKQorIiAgIGNhbGwgRGVjaG8oIih3cml0ZSBlbnRpcmUgZmlsZSkgc2lsIGV4ZSB3ISAiLmZuYW1lZXNjYXBlKHY6Y21kYXJnKS4iICIuZm5hbWVlc2NhcGUodG1wZmlsZSkpCisgICBleGUgInNpbCBrZWVwaiB3ISAiLmZuYW1lZXNjYXBlKHY6Y21kYXJnKS4iICIuZm5hbWVlc2NhcGUodG1wZmlsZSkKICAgZWxzZWlmIGc6bmV0cndfY3lnd2luCiAgICAiIHdyaXRlIChzZWxlY3RlZCBwb3J0aW9uIG9mKSBmaWxlIHRvIHRlbXBvcmFyeQogICAgbGV0IGN5Z3RtcGZpbGU9IHN1YnN0aXR1dGUodG1wZmlsZSwnL2N5Z2RyaXZlL1woLlwpJywnXDE6JywnJykKLSIgICBjYWxsIERlY2hvKCIod3JpdGUgc2VsZWN0ZWQgcG9ydGlvbikgc2lsZW50IGV4ZSAiLmE6Zmlyc3RsaW5lLiIsIiAuIGE6bGFzdGxpbmUgLiAidyEgIi5mbmFtZWVzY2FwZSh2OmNtZGFyZykuIiAiLmZuYW1lZXNjYXBlKGN5Z3RtcGZpbGUpKQorIiAgIGNhbGwgRGVjaG8oIih3cml0ZSBzZWxlY3RlZCBwb3J0aW9uKSBzaWwgZXhlICIuYTpmaXJzdGxpbmUuIiwiIC4gYTpsYXN0bGluZSAuICJ3ISAiLmZuYW1lZXNjYXBlKHY6Y21kYXJnKS4iICIuZm5hbWVlc2NhcGUoY3lndG1wZmlsZSkpCiAgICBleGUgInNpbCBrZWVwaiAiLmE6Zmlyc3RsaW5lLiIsIiAuIGE6bGFzdGxpbmUgLiAidyEgIi5mbmFtZWVzY2FwZSh2OmNtZGFyZykuIiAiLmZuYW1lZXNjYXBlKGN5Z3RtcGZpbGUpCiAgIGVsc2UKICAgICIgd3JpdGUgKHNlbGVjdGVkIHBvcnRpb24gb2YpIGZpbGUgdG8gdGVtcG9yYXJ5Ci0iICAgY2FsbCBEZWNobygiKHdyaXRlIHNlbGVjdGVkIHBvcnRpb24pIHNpbGVudCBleGUgIi5hOmZpcnN0bGluZS4iLCIgLiBhOmxhc3RsaW5lIC4gInchICIuZm5hbWVlc2NhcGUodjpjbWRhcmcpLiIgIi5mbmFtZWVzY2FwZSh0bXBmaWxlKSkKKyIgICBjYWxsIERlY2hvKCIod3JpdGUgc2VsZWN0ZWQgcG9ydGlvbikgc2lsIGV4ZSAiLmE6Zmlyc3RsaW5lLiIsIiAuIGE6bGFzdGxpbmUgLiAidyEgIi5mbmFtZWVzY2FwZSh2OmNtZGFyZykuIiAiLmZuYW1lZXNjYXBlKHRtcGZpbGUpKQogICAgZXhlICJzaWwga2VlcGogIi5hOmZpcnN0bGluZS4iLCIgLiBhOmxhc3RsaW5lIC4gInchICIuZm5hbWVlc2NhcGUodjpjbWRhcmcpLiIgIi5mbmFtZWVzY2FwZSh0bXBmaWxlKQogICBlbmRpZgogCkBAIC0xMDQzLDcgKzEwODIsNyBAQAogIiAgIGNhbGwgRGVjaG8oImNob2ljZTwiIC4gY2hvaWNlIC4gIj4gaWNob2ljZT0iLmljaG9pY2UpCiAKICAgICIgRGV0ZXJtaW5lIG1ldGhvZCBvZiB3cml0ZSAoZnRwLCByY3AsIGV0Yykge3t7NAotICAgY2FsbCBzOk5ldHJ3TWV0aG9kKGNob2ljZSkKKyAgIGtlZXBqIGNhbGwgczpOZXRyd01ldGhvZChjaG9pY2UpCiAgICBpZiAhZXhpc3RzKCJiOm5ldHJ3X21ldGhvZCIpIHx8IGI6bmV0cndfbWV0aG9kIDwgMAogIiAgICBjYWxsIERmdW5jKCJuZXRydyNOZXRXcml0ZSA6IHVuc3VwcG9ydGVkIG1ldGhvZCIpCiAgICAgcmV0dXJuCkBAIC0xMDk4LDIwICsxMTM3LDIwIEBACiAgICAgIGtlZXBqIHB1dCA9ZzpuZXRyd19mdHBleHRyYWNtZAogIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoIiQiKSkKICAgICBlbmRpZgotICAgIGNhbGwgc2V0bGluZShsaW5lKCIkIikrMSwncHV0ICInLnRtcGZpbGUuJyIgIicubmV0cndfZm5hbWUuJyInKQorICAgIGtlZXBqIGNhbGwgc2V0bGluZShsaW5lKCIkIikrMSwncHV0ICInLnRtcGZpbGUuJyIgIicubmV0cndfZm5hbWUuJyInKQogIiAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgiJCIpKQogICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0iICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpKQotICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKQorIiAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuczpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKSkKKyAgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpLiIgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X3BvcnQsMSkKICAgICBlbHNlCiAiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQgd2luZG93IyIud2lubnIoKSkKLSIgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpKQotICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkKKyIgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpKQorICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuczpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkKICAgICBlbmRpZgogICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKICAgICBpZiBnZXRsaW5lKDEpICF+ICJeJCIKICAgICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCi0gICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsZ2V0bGluZSgxKSwxNCkKKyAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUixnZXRsaW5lKDEpLDE0KQogICAgICBlbmRpZgogICAgICBsZXQgbW9kPTEKICAgICBlbmRpZgpAQCAtMTE3MCw4ICsxMjA5LDggQEAKICAgICAiIC1uICB1bml4IDogRE9OJ1QgdXNlIDwubmV0cmM+LCBldmVuIHRob3VnaCBpdCBleGlzdHMKICAgICAiIC1uICB3aW4zMjogcXVpdCBiZWluZyBvYm5veGlvdXMgYWJvdXQgcGFzc3dvcmQKICAgICBrZWVwaiBub3JtISAxR2RkCi0iICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pIC1uIikKLSAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgLW4iCisiICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pIC1uIikKKyAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuczpuZXRyd19mdHBfY21kLiIgLWkgLW4iCiAgICAgIiBJZiB0aGUgcmVzdWx0IG9mIHRoZSBmdHAgb3BlcmF0aW9uIGlzbid0IGJsYW5rLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgKHRueCB0byBEb3VnIENsYWFyKQogICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIgogICAgICBpZiAgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCkBAIC0xMjg1LDYgKzEzMjQsNyBAQAogICAgIiBOZXRXcml0ZTogQ29tcGxhaW4ge3t7MwogICAgZWxzZQogICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ1bmFibGUgdG8gY29tcGx5IHdpdGggeW91ciByZXF1ZXN0PCIgLiBjaG9pY2UgLiAiPiIsMTcpCisgICAgbGV0IGxlYXZlbW9kPSAxCiAgICBlbmRpZgogICBlbmR3aGlsZQogCkBAIC0xMjk5LDkgKzEzMzksMTEgQEAKICAgaWYgYTpmaXJzdGxpbmUgPT0gMSAmJiBhOmxhc3RsaW5lID09IGxpbmUoIiQiKQogICAgIiByZXN0b3JlIG1vZGlmaWFiaWxpdHk7IHVzdWFsbHkgZXF1aXZhbGVudCB0byBzZXQgbm9tb2QKICAgIGxldCAmbW9kPSBtb2QKKyAgZWxzZWlmICFleGlzdHMoImxlYXZlbW9kIikKKyAgICIgaW5kaWNhdGUgdGhhdCB0aGUgYnVmZmVyIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSBsYXN0IHdyaXR0ZW4KKyAgIHNldCBub21vZAogICBlbmRpZgogCi0gICIgcmVzdG9yZSBlcXVhbGFsd2F5cwogIiAgY2FsbCBEcmV0KCJuZXRydyNOZXRXcml0ZSIpCiBlbmRmdW4KIApAQCAtMTQwOCw3ICsxNDUwLDcgQEAKIAogICAgIiByZW5hbWUgYnVmZmVyIGJhY2sgdG8gcmVtb3RlIGZpbGVuYW1lCiAiICAgY2FsbCBEZWNobygiZXhlIHNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUocmZpbGUpKQotICAgZXhlICJzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKHJmaWxlKQorICAgZXhlICJzaWwhIGtlZXBqIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKHJmaWxlKQogICAgZmlsZXR5cGUgZGV0ZWN0CiAiICAgY2FsbCBEcmVkaXIoInJlbmFtZWQgYnVmZmVyIGJhY2sgdG8gcmVtb3RlIGZpbGVuYW1lPCIucmZpbGUuIj4gOiBleHBhbmQoJSk8Ii5leHBhbmQoIiUiKS4iPiIsImxzISIpCiAgICBsZXQgbGluZTEgPSAxCkBAIC0xNDIwLDcgKzE0NjIsNyBAQAogICAgbGV0IGN1cmxpbmUgPSBsaW5lKCIuIikKICAgIGxldCBsYXN0bGluZT0gbGluZSgiJCIpCiAiICAgY2FsbCBEZWNobygiZXhlPCIuYTpyZWFkY21kLiIgIi5mbmFtZWVzY2FwZSh2OmNtZGFyZykuIiAiLmZuYW1lZXNjYXBlKGE6dGZpbGUpLiI+ICBsaW5lIyIuY3VybGluZSkKLSAgIGV4ZSBhOnJlYWRjbWQuIiAiLmZuYW1lZXNjYXBlKHY6Y21kYXJnKS4iICIuZm5hbWVlc2NhcGUoYTp0ZmlsZSkKKyAgIGV4ZSAia2VlcGogIi5hOnJlYWRjbWQuIiAiLmZuYW1lZXNjYXBlKHY6Y21kYXJnKS4iICIuZm5hbWVlc2NhcGUoYTp0ZmlsZSkKICAgIGxldCBsaW5lMT0gY3VybGluZSArIDEKICAgIGxldCBsaW5lMj0gbGluZSgiJCIpIC0gbGFzdGxpbmUgKyAxCiAKQEAgLTE0MjgsNyArMTQ3MCw3IEBACiAgICAiIG5vdCByZWFkYWJsZQogIiAgIGNhbGwgRGVjaG8oInJvPSIuJmw6cm8uIiBtYT0iLiZsOm1hLiIgbW9kPSIuJmw6bW9kLiIgd3JhcD0iLiZsOndyYXApCiAiICAgY2FsbCBEZWNobygidGZpbGU8Ii5hOnRmaWxlLiI+IG5vdCByZWFkYWJsZSIpCi0gICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiZmlsZSA8Ii5hOnRmaWxlLiI+IG5vdCByZWFkYWJsZSIsOSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJmaWxlIDwiLmE6dGZpbGUuIj4gbm90IHJlYWRhYmxlIiw5KQogIiAgIGNhbGwgRHJldCgiTmV0cndHZXRGaWxlIDogdGZpbGU8Ii5hOnRmaWxlLiI+IG5vdCByZWFkYWJsZSIpCiAgICByZXR1cm4KICAgZW5kaWYKQEAgLTE0MzYsMTQgKzE0NzgsMTQgQEAKICAgIiBVc2VyLXByb3ZpZGVkIChpZS4gb3B0aW9uYWwpIGZpeC1pdC11cCBjb21tYW5kCiAgIGlmIGV4aXN0cygiKk5ldFJlYWRGaXh1cCIpCiAiICAgY2FsbCBEZWNobygiY2FsbGluZyBOZXRSZWFkRml4dXAobWV0aG9kPCIuYTptZXRob2QuIj4gbGluZTE9Ii5saW5lMS4iIGxpbmUyPSIubGluZTIuIikiKQotICAgY2FsbCBOZXRSZWFkRml4dXAoYTptZXRob2QsIGxpbmUxLCBsaW5lMikKKyAgIGtlZXBqIGNhbGwgTmV0UmVhZEZpeHVwKGE6bWV0aG9kLCBsaW5lMSwgbGluZTIpCiAiICBlbHNlICIgRGVjaG8KICIgICBjYWxsIERlY2hvKCJOZXRSZWFkRml4dXAoKSBub3QgY2FsbGVkLCBkb2Vzbid0IGV4aXN0ICAobGluZTE9Ii5saW5lMS4iIGxpbmUyPSIubGluZTIuIikiKQogICBlbmRpZgogCi0gIGlmIGhhcygiZ3VpIikgJiYgaGFzKCJtZW51IikgJiYgaGFzKCJndWlfcnVubmluZyIpICYmICZnbyA9fiAnbScgJiYgZzpuZXRyd19tZW51CisgIGlmIGhhcygiZ3VpIikgJiYgaGFzKCJtZW51IikgJiYgaGFzKCJndWlfcnVubmluZyIpICYmICZnbyA9fiMgJ20nICYmIGc6bmV0cndfbWVudQogICAgIiB1cGRhdGUgdGhlIEJ1ZmZlcnMgbWVudQotICAgY2FsbCBzOlVwZGF0ZUJ1ZmZlcnNNZW51KCkKKyAgIGtlZXBqIGNhbGwgczpVcGRhdGVCdWZmZXJzTWVudSgpCiAgIGVuZGlmCiAKICIgIGNhbGwgRGVjaG8oInJlYWRjbWQ8Ii5hOnJlYWRjbWQuIj4gY21kYXJnPCIudjpjbWRhcmcuIj4gdGZpbGU8Ii5hOnRmaWxlLiI+IHJlYWRhYmxlPSIuczpGaWxlUmVhZGFibGUoYTp0ZmlsZSkpCkBAIC0xNDg0LDYgKzE1MjYsMTMgQEAKICAgIGVsc2UKICAgICBsZXQgY3VybWFjaGluZT0gIk4gTyBUIEEgSE9TVCIKICAgIGVuZGlmCisgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpCisgICAgbGV0IG5ldHJ3X3BvcnQ9IGc6bmV0cndfcG9ydAorICAgZW5kaWYKKworICAgIiBpbnN1cmUgdGhhdCBuZXRyd19mdHBfY21kIHN0YXJ0cyBvZmYgZXZlcnkgbWV0aG9kIGRldGVybWluYXRpb24KKyAgICIgd2l0aCB0aGUgY3VycmVudCBnOm5ldHJ3X2Z0cF9jbWQKKyAgIGxldCBzOm5ldHJ3X2Z0cF9jbWQ9IGc6bmV0cndfZnRwX2NtZAogCiAgICIgaW5pdGlhbGl6YXRpb24KICAgbGV0IGI6bmV0cndfbWV0aG9kICA9IDAKQEAgLTE1MTgsNyArMTU2Nyw3IEBACiAKICIgIGNhbGwgRGVjaG8oImRldGVybWluZSBtZXRob2Q6IikKICAgIiBEZXRlcm1pbmUgTWV0aG9kCi0gICIgcmNwOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUKKyAgIiBNZXRob2QjMTogcmNwOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUge3t7MwogICBpZiBtYXRjaChhOmNob2ljZSxyY3B1cm0pID09IDAKICIgICBjYWxsIERlY2hvKCJyY3A6Ly8uLi4iKQogICAgbGV0IGI6bmV0cndfbWV0aG9kICA9IDEKQEAgLTE1MjksNyArMTU3OCw3IEBACiAgICAgbGV0IGc6bmV0cndfdWlkPSB1c2VyaWQKICAgIGVuZGlmCiAKLSAgIiBzY3A6Ly91c2VyQGhvc3RuYW1lLy4uLnBhdGgtdG8tZmlsZQorICAiIE1ldGhvZCM0OiBzY3A6Ly91c2VyQGhvc3RuYW1lLy4uLnBhdGgtdG8tZmlsZSB7e3szCiAgIGVsc2VpZiBtYXRjaChhOmNob2ljZSxzY3B1cm0pID09IDAKICIgICBjYWxsIERlY2hvKCJzY3A6Ly8uLi4iKQogICAgbGV0IGI6bmV0cndfbWV0aG9kICA9IDQKQEAgLTE1MzcsMTQgKzE1ODYsMTQgQEAKICAgIGxldCBnOm5ldHJ3X3BvcnQgICAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLHNjcHVybSwnXDInLCIiKQogICAgbGV0IGI6bmV0cndfZm5hbWUgICA9IHN1YnN0aXR1dGUoYTpjaG9pY2Usc2NwdXJtLCdcMycsIiIpCiAKLSAgIiBodHRwOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUKKyAgIiBNZXRob2QjNTogaHR0cDovL3VzZXJAaG9zdG5hbWUvLi4ucGF0aC10by1maWxlIHt7ezMKICAgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLGh0dHB1cm0pID09IDAKICIgICBjYWxsIERlY2hvKCJodHRwOi8vLi4uIikKICAgIGxldCBiOm5ldHJ3X21ldGhvZCA9IDUKICAgIGxldCBnOm5ldHJ3X21hY2hpbmU9IHN1YnN0aXR1dGUoYTpjaG9pY2UsaHR0cHVybSwnXDEnLCIiKQogICAgbGV0IGI6bmV0cndfZm5hbWUgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxodHRwdXJtLCdcMicsIiIpCiAKLSAgIiBkYXY6Ly9ob3N0bmFtZVs6cG9ydF0vLi5wYXRoLXRvLWZpbGUuLgorICAiIE1ldGhvZCM2OiBkYXY6Ly9ob3N0bmFtZVs6cG9ydF0vLi5wYXRoLXRvLWZpbGUuLiB7e3szCiAgIGVsc2VpZiBtYXRjaChhOmNob2ljZSxkYXZ1cm0pID09IDAKICIgICBjYWxsIERlY2hvKCJkYXY6Ly8uLi4iKQogICAgbGV0IGI6bmV0cndfbWV0aG9kPSA2CkBAIC0xNTU1LDE0ICsxNjA0LDE0IEBACiAgICBlbmRpZgogICAgbGV0IGI6bmV0cndfZm5hbWUgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxkYXZ1cm0sJ1wzJywiIikKIAotICAiIHJzeW5jOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUKKyAgICIgTWV0aG9kIzc6IHJzeW5jOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUge3t7MwogICBlbHNlaWYgbWF0Y2goYTpjaG9pY2UscnN5bmN1cm0pID09IDAKICIgICBjYWxsIERlY2hvKCJyc3luYzovLy4uLiIpCiAgICBsZXQgYjpuZXRyd19tZXRob2QgPSA3CiAgICBsZXQgZzpuZXRyd19tYWNoaW5lPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLHJzeW5jdXJtLCdcMScsIiIpCiAgICBsZXQgYjpuZXRyd19mbmFtZSAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLHJzeW5jdXJtLCdcMicsIiIpCiAKLSAgIiBmdHA6Ly9bdXNlckBdaG9zdG5hbWVbWzojXXBvcnRdLy4uLnBhdGgtdG8tZmlsZQorICAgIiBNZXRob2RzIDIsMzogZnRwOi8vW3VzZXJAXWhvc3RuYW1lW1s6I11wb3J0XS8uLi5wYXRoLXRvLWZpbGUge3t7MwogICBlbHNlaWYgbWF0Y2goYTpjaG9pY2UsZnRwdXJtKSA9PSAwCiAiICAgY2FsbCBEZWNobygiZnRwOi8vLi4uIikKICAgIGxldCB1c2VyaWQJICAgICAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLGZ0cHVybSwnXDInLCIiKQpAQCAtMTU3MywxNCArMTYyMiwyOSBAQAogICAgaWYgdXNlcmlkICE9ICIiCiAgICAgbGV0IGc6bmV0cndfdWlkPSB1c2VyaWQKICAgIGVuZGlmCi0gICBpZiBleGlzdHMoInM6bmV0cndfcGFzc3dkIikgJiYgY3VybWFjaGluZSAhPSBnOm5ldHJ3X21hY2hpbmUKLSAgICAiIGlmIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gaG9zdG5hbWUsIHJlcXVpcmUgcGFzc3dvcmQgcmUtZW50cnkKLSAgICB1bmxldCBzOm5ldHJ3X3Bhc3N3ZAorICAgaWYgY3VybWFjaGluZSAhPSBnOm5ldHJ3X21hY2hpbmUKKyAgICBpZiBleGlzdHMoInM6bmV0cndfcGFzc3dkIikKKyAgICAgIiBpZiB0aGVyZSdzIGEgY2hhbmdlIGluIGhvc3RuYW1lLCByZXF1aXJlIHBhc3N3b3JkIHJlLWVudHJ5CisgICAgIHVubGV0IHM6bmV0cndfcGFzc3dkCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoIm5ldHJ3X3BvcnQiKQorICAgICB1bmxldCBuZXRyd19wb3J0CisgICAgZW5kaWYKICAgIGVuZGlmCiAgICBpZiBleGlzdHMoImc6bmV0cndfdWlkIikgJiYgZXhpc3RzKCJzOm5ldHJ3X3Bhc3N3ZCIpCiAgICAgbGV0IGI6bmV0cndfbWV0aG9kID0gMwogICAgZWxzZQotICAgIGlmIHM6RmlsZVJlYWRhYmxlKGV4cGFuZCgiJEhPTUUvLm5ldHJjIikpICYmICFnOm5ldHJ3X2lnbm9yZW5ldHJjCisgICAgaWYgKGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKSkgJiYgczpuZXRyd19mdHBfY21kID1+ICctW3NTXTonCisiICAgICBjYWxsIERlY2hvKCJoYXMgLXM6IDogczpuZXRyd19mdHBfY21kPCIuczpuZXRyd19mdHBfY21kLiI+IikKKyIgICAgIGNhbGwgRGVjaG8oIiAgICAgICAgICBnOm5ldHJ3X2Z0cF9jbWQ8Ii5nOm5ldHJ3X2Z0cF9jbWQuIj4iKQorICAgICBpZiBnOm5ldHJ3X2Z0cF9jbWQgPX4gJy1bc1NdOlxTKk1BQ0hJTkVcPicKKyAgICAgIGxldCBtYWNoaW5lICAgICAgICA9IHN1YnN0aXR1dGUoZzpuZXRyd19tYWNoaW5lLCdcKFteLl1cK1wpXC5cUyonLCdcMScsJycpCisgICAgICBsZXQgczpuZXRyd19mdHBfY21kPSBzdWJzdGl0dXRlKGc6bmV0cndfZnRwX2NtZCwnXDxNQUNISU5FXD4nLG1hY2hpbmUuIi5mdHAiLCcnKQorIiAgICAgIGNhbGwgRGVjaG8oInM6bmV0cndfZnRwX2NtZDwiLnM6bmV0cndfZnRwX2NtZC4iPiIpCisgICAgIGVuZGlmCisgICAgIGxldCBiOm5ldHJ3X21ldGhvZD0gMgorICAgIGVsc2VpZiBzOkZpbGVSZWFkYWJsZShleHBhbmQoIiRIT01FLy5uZXRyYyIpKSAmJiAhZzpuZXRyd19pZ25vcmVuZXRyYworIiAgICAgY2FsbCBEZWNobygidXNpbmcgPCIuZXhwYW5kKCIkSE9NRS8ubmV0cmMiKS4iPiAocmVhZGFibGUpIikKICAgICAgbGV0IGI6bmV0cndfbWV0aG9kPSAyCiAgICAgZWxzZQogICAgICBpZiAhZXhpc3RzKCJnOm5ldHJ3X3VpZCIpIHx8IGc6bmV0cndfdWlkID09ICIiCkBAIC0xNTkzLDYgKzE2NTcsNyBAQAogICAgIGVuZGlmCiAgICBlbmRpZgogCisgICIgTWV0aG9kIzg6IGZldGNoIHt7ezMKICAgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLGZldGNodXJtKSA9PSAwCiAiICAgY2FsbCBEZWNobygiZmV0Y2g6Ly8uLi4iKQogICAgbGV0IGI6bmV0cndfbWV0aG9kID0gOApAQCAtMTYwMSw3ICsxNjY2LDcgQEAKICAgIGxldCBiOm5ldHJ3X29wdGlvbiA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsZmV0Y2h1cm0sJ1w0JywiIikKICAgIGxldCBiOm5ldHJ3X2ZuYW1lICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsZmV0Y2h1cm0sJ1w1JywiIikKIAotICAiIElzc3VlIGFuIGZ0cCA6ICJtYWNoaW5lIGlkIHBhc3N3b3JkIFtwYXRoL11maWxlbmFtZSIKKyAgICIgTWV0aG9kIzM6IElzc3VlIGFuIGZ0cCA6ICJtYWNoaW5lIGlkIHBhc3N3b3JkIFtwYXRoL11maWxlbmFtZSIge3t7MwogICBlbHNlaWYgbWF0Y2goYTpjaG9pY2UsbWlwZikgPT0gMAogIiAgIGNhbGwgRGVjaG8oIihmdHApIGhvc3QgaWQgcGFzcyBmaWxlIikKICAgIGxldCBiOm5ldHJ3X21ldGhvZCAgPSAzCkBAIC0xNjEwLDcgKzE2NzUsNyBAQAogICAgbGV0IHM6bmV0cndfcGFzc3dkICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsbWlwZiwnXDMnLCIiKQogICAgbGV0IGI6bmV0cndfZm5hbWUgICA9IHN1YnN0aXR1dGUoYTpjaG9pY2UsbWlwZiwnXDQnLCIiKQogCi0gICIgSXNzdWUgYW4gZnRwOiAiaG9zdG5hbWUgW3BhdGgvXWZpbGVuYW1lIgorICAiIE1ldGhvZCMzOiBJc3N1ZSBhbiBmdHA6ICJob3N0bmFtZSBbcGF0aC9dZmlsZW5hbWUiIHt7ezMKICAgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLG1mKSA9PSAwCiAiICAgY2FsbCBEZWNobygiKGZ0cCkgaG9zdCBmaWxlIikKICAgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJiBleGlzdHMoInM6bmV0cndfcGFzc3dkIikKQEAgLTE2MjQsMTQgKzE2ODksMTQgQEAKICAgICBsZXQgYjpuZXRyd19mbmFtZSAgID0gc3Vic3RpdHV0ZShhOmNob2ljZSxtZiwnXDInLCIiKQogICAgZW5kaWYKIAotICAiIHNmdHA6Ly91c2VyQGhvc3RuYW1lLy4uLnBhdGgtdG8tZmlsZQorICAiIE1ldGhvZCM5OiBzZnRwOi8vdXNlckBob3N0bmFtZS8uLi5wYXRoLXRvLWZpbGUge3t7MwogICBlbHNlaWYgbWF0Y2goYTpjaG9pY2Usc2Z0cHVybSkgPT0gMAogIiAgIGNhbGwgRGVjaG8oInNmdHA6Ly8uLi4iKQogICAgbGV0IGI6bmV0cndfbWV0aG9kID0gOQogICAgbGV0IGc6bmV0cndfbWFjaGluZT0gc3Vic3RpdHV0ZShhOmNob2ljZSxzZnRwdXJtLCdcMScsIiIpCiAgICBsZXQgYjpuZXRyd19mbmFtZSAgPSBzdWJzdGl0dXRlKGE6Y2hvaWNlLHNmdHB1cm0sJ1wyJywiIikKIAotICAiIElzc3VlIGFuIHJjcDogaG9zdG5hbWU6ZmlsZW5hbWUiICAodGhpcyBvbmUgc2hvdWxkIGJlIGxhc3QpCisgICIgTWV0aG9kIzE6IElzc3VlIGFuIHJjcDogaG9zdG5hbWU6ZmlsZW5hbWUiICAodGhpcyBvbmUgc2hvdWxkIGJlIGxhc3QpIHt7ezMKICAgZWxzZWlmIG1hdGNoKGE6Y2hvaWNlLHJjcGhmKSA9PSAwCiAiICAgY2FsbCBEZWNobygiKHJjcCkgW3VzZXJAXWhvc3Q6ZmlsZSkgcmNwaGY8Ii5yY3BoZi4iPiIpCiAgICBsZXQgYjpuZXRyd19tZXRob2QgID0gMQpAQCAtMTY0NiwxNiArMTcxMSwyMSBAQAogICAgIGxldCBnOm5ldHJ3X3VpZD0gdXNlcmlkCiAgICBlbmRpZgogCisgICIgQ2Fubm90IERldGVybWluZSBNZXRob2Qge3t7MwogICBlbHNlCiAgICBpZiAhZXhpc3RzKCJnOm5ldHJ3X3F1aWV0IikKICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiY2Fubm90IGRldGVybWluZSBtZXRob2QgKGZvcm1hdDogcHJvdG9jb2w6Ly9bdXNlckBdaG9zdG5hbWVbOnBvcnRdL1twYXRoXSkiLDQ1KQogICAgZW5kaWYKICAgIGxldCBiOm5ldHJ3X21ldGhvZCAgPSAtMQogICBlbmRpZgorICAifX19MwogCi0gICIgcmVtb3ZlIGFueSBsZWFkaW5nIFs6I10gZnJvbSBwb3J0IG51bWJlcgogICBpZiBnOm5ldHJ3X3BvcnQgIT0gIiIKLSAgICBsZXQgZzpuZXRyd19wb3J0ID0gc3Vic3RpdHV0ZShnOm5ldHJ3X3BvcnQsJ1sjOl1cKycsJycsJycpCisgICAiIHJlbW92ZSBhbnkgbGVhZGluZyBbOiNdIGZyb20gcG9ydCBudW1iZXIKKyAgIGxldCBnOm5ldHJ3X3BvcnQgPSBzdWJzdGl0dXRlKGc6bmV0cndfcG9ydCwnWyM6XVwrJywnJywnJykKKyAgZWxzZWlmIGV4aXN0cygibmV0cndfcG9ydCIpCisgICAiIHJldGFpbiBwb3J0IG51bWJlciBhcyBpbXBsaWNpdCBmb3Igc3Vic2VxdWVudCBmdHAgb3BlcmF0aW9ucworICAgbGV0IGc6bmV0cndfcG9ydD0gbmV0cndfcG9ydAogICBlbmRpZgogCiAiICBjYWxsIERlY2hvKCJhOmNob2ljZSAgICAgICA8Ii5hOmNob2ljZS4iPiIpCkBAIC0xNjY5LDcgKzE3MzksNyBAQAogIiAgIGNhbGwgRGVjaG8oInM6bmV0cndfcGFzc3dkIDwiLnM6bmV0cndfcGFzc3dkLiI+IikKICIgIGVuZGlmCQkJCQkiRGVjaG8KICIgIGNhbGwgRGVjaG8oImI6bmV0cndfZm5hbWUgIDwiLmI6bmV0cndfZm5hbWUuIj4iKQotIiAgY2FsbCBEcmV0KCJOZXRyd01ldGhvZCA6IGI6bmV0cndfbWV0aG9kPSIuYjpuZXRyd19tZXRob2QpCisiICBjYWxsIERyZXQoIk5ldHJ3TWV0aG9kIDogYjpuZXRyd19tZXRob2Q9Ii5iOm5ldHJ3X21ldGhvZC4iIGc6bmV0cndfcG9ydD0iLmc6bmV0cndfcG9ydCkKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc0MCw1OSArMTgxMCwyNSBAQAogIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIHM6QnJvd3Nlck1hcHM6IHt7ezIKLWZ1biEgczpCcm93c2VyTWFwcyhpc2xvY2FsKQotIiAgY2FsbCBEZnVuYygiczpCcm93c2VyTWFwcyhpc2xvY2FsPSIuYTppc2xvY2FsLiIpIGI6bmV0cndfY3VyZGlyPCIuYjpuZXRyd19jdXJkaXIuIj4iKQorIiBzOk5ldHJ3TWFwczoge3t7MgorZnVuISBzOk5ldHJ3TWFwcyhpc2xvY2FsKQorIiAgY2FsbCBEZnVuYygiczpOZXRyd01hcHMoaXNsb2NhbD0iLmE6aXNsb2NhbC4iKSBiOm5ldHJ3X2N1cmRpcjwiLmI6bmV0cndfY3VyZGlyLiI+IikKICAgaWYgYTppc2xvY2FsCiAiICAgY2FsbCBEZWNobygibWFrZSBsb2NhbCBtYXBzIikKLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxjcj4JOmNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayg8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsPFNJRD5OZXRyd0dldFdvcmQoKSkpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gLQkJOmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayg8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsJy4uLycpKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGEJCTpjYWxsIDxTSUQ+TmV0cndIaWRlKDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbWIJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDAsYjpuZXRyd19jdXJkaXIpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbWMJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVDb3B5KDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbWQJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVEaWZmKDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbWUJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVFZGl0KDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbWYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGUoMSw8U0lEPk5ldHJ3R2V0V29yZCgpKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1nCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlR3JlcCgxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1oCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtIaWRlU2Z4KDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbW0JOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVNb3ZlKDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXAJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVQcmludCgxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1yCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlUmVnZXhwKDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXMJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVTb3VyY2UoMSk8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtVAk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZVRhZygxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG10CTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlVGd0KDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXUJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3VW5NYXJrRmlsZSgxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG14CTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlRXhlKDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXoJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVDb21wcmVzcygxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdiCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcigxLGI6bmV0cndfY3VyZGlyKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdoCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0hpZGRlbigxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdwCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0NoZ1Blcm0oMSxiOm5ldHJ3X2N1cmRpcik8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBjCQk6ZXhlICJrZWVwanVtcHMgbGNkICIuZm5hbWVlc2NhcGUoYjpuZXRyd19jdXJkaXIpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gQwkJOmxldCBnOm5ldHJ3X2NoZ3dpbj0gd2lubnIoKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGQJCTpjYWxsIDxTSUQ+TmV0cndNYWtlRGlyKCIiKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGkJCTpjYWxsIDxTSUQ+TmV0cndMaXN0U3R5bGUoMSk8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBJCQk6Y2FsbCA8U0lEPk5ldHJ3QmFubmVyQ3RybCgxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG8JCTpjYWxsIDxTSUQ+TmV0cndTcGxpdCgzKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IE8JCTpjYWxsIDxTSUQ+TmV0cndPYnRhaW4oMSk8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBwCQk6Y2FsbCA8U0lEPk5ldHJ3UHJldmlldyg8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsPFNJRD5OZXRyd0dldFdvcmQoKSwxKSk8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBQCQk6Y2FsbCA8U0lEPk5ldHJ3UHJldldpbk9wZW4oMSk8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBxYgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoMixiOm5ldHJ3X2N1cmRpcik8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtQgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNixiOm5ldHJ3X2N1cmRpcik8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBxZgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndGaWxlSW5mbygxLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcgkJOmxldCBnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uPSAoZzpuZXRyd19zb3J0X2RpcmVjdGlvbiA9fiAnbicpPyAncicgOiAnbic8YmFyPmV4ZSAibm9ybSEgMCI8YmFyPmNhbGwgPFNJRD5OZXRyd1JlZnJlc2goMSw8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsJy4vJykpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcwkJOmNhbGwgPFNJRD5OZXRyd1NvcnRTdHlsZSgxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFMJCTpjYWxsIDxTSUQ+TmV0U29ydFNlcXVlbmNlKDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gdAkJOmNhbGwgPFNJRD5OZXRyd1NwbGl0KDQpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVAkJOmNhbGwgPFNJRD5OZXRyd1NwbGl0KDQpPGJhcj5ub3JtISBnVDxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHUJCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig0LGV4cGFuZCgiJSIpKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFUJCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig1LGV4cGFuZCgiJSIpKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHYJCTpjYWxsIDxTSUQ+TmV0cndTcGxpdCg1KTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHgJCTpjYWxsIG5ldHJ3I05ldHJ3QnJvd3NlWCg8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsPFNJRD5OZXRyd0dldFdvcmQoKSwwKSwwKSI8Y3I+Ci0gICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiAlCQk6Y2FsbCA8U0lEPk5ldHJ3T3BlbkZpbGUoMSk8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8Y3I+CTxjLW8+OmNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayg8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsPFNJRD5OZXRyd0dldFdvcmQoKSkpPGNyPgotICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gLQkJPGMtbz46ZXhlICJub3JtISAwIjxiYXI+Y2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKDxTSUQ+TmV0cndCcm93c2VDaGdEaXIoMSwnLi4vJykpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gYQkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3SGlkZSgxKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGMJCTxjLW8+OmV4ZSAia2VlcGp1bXBzIGxjZCAiLmZuYW1lZXNjYXBlKGI6bmV0cndfY3VyZGlyKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IEMJCTxjLW8+OmxldCBnOm5ldHJ3X2NoZ3dpbj0gd2lubnIoKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+ICUJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd09wZW5GaWxlKDEpPGNyPgorICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gLQkJPGMtbz46ZXhlICJub3JtISAwIjxiYXI+Y2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKDxTSUQ+TmV0cndCcm93c2VDaGdEaXIoMSwnLi4vJykpPGNyPgorICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPGNyPgk8Yy1vPjpjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLDxTSUQ+TmV0cndHZXRXb3JkKCkpKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGQJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd01ha2VEaXIoIiIpPGNyPgorICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2IJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoMSxiOm5ldHJ3X2N1cmRpcik8Y3I+CisgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBnaAk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0hpZGRlbigxKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdwCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Q2hnUGVybSgxLGI6bmV0cndfY3VyZGlyKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IEkJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd0Jhbm5lckN0cmwoMSk8Y3I+CisgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBpCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndMaXN0U3R5bGUoMSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtYgk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcigwLGI6bmV0cndfY3VyZGlyKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1CCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDYsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbWMJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUNvcHkoMSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZAk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlRGlmZigxKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1lCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVFZGl0KDEpPGNyPgpAQCAtMTgwOCwzMSArMTg0NCw2NyBAQAogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXUJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndVbk1hcmtGaWxlKDEpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXgJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUV4ZSgxKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG16CTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVDb21wcmVzcygxKTxjcj4KLSAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdiCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDEsYjpuZXRyd19jdXJkaXIpPGNyPgotICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2gJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndIaWRkZW4oMSk8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBncAk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0NoZ1Blcm0oMSxiOm5ldHJ3X2N1cmRpcik8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBjCQk8Yy1vPjpleGUgImtlZXBqdW1wcyBsY2QgIi5mbmFtZWVzY2FwZShiOm5ldHJ3X2N1cmRpcik8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBDCQk8Yy1vPjpsZXQgZzpuZXRyd19jaGd3aW49IHdpbm5yKCk8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBkCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndNYWtlRGlyKCIiKTxjcj4KLSAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGkJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd0xpc3RTdHlsZSgxKTxjcj4KLSAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IEkJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd0Jhbm5lckN0cmwoMSk8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBvCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndTcGxpdCgzKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IE8JCTxjLW8+OmNhbGwgPFNJRD5OZXRyd09idGFpbigxKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG8JCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NwbGl0KDMpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcAkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3UHJldmlldyg8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDEsPFNJRD5OZXRyd0dldFdvcmQoKSwxKSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBQCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndQcmV2V2luT3BlbigxKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHFiCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDIsYjpuZXRyd19jdXJkaXIpPGNyPgotICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbUIJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNixiOm5ldHJ3X2N1cmRpcik8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBxZgk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0ZpbGVJbmZvKDEsPFNJRD5OZXRyd0dldFdvcmQoKSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiByCQk8Yy1vPjpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0cndSZWZyZXNoKDEsPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLCcuLycpKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHMJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NvcnRTdHlsZSgxKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFMJCTxjLW8+OmNhbGwgPFNJRD5OZXRTb3J0U2VxdWVuY2UoMSk8Y3I+Ci0gICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB0CQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndTcGxpdCg0KTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFQJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NwbGl0KDQpPGJhcj5ub3JtISBnVDxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHQJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NwbGl0KDQpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gdQkJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNCxleHBhbmQoIiUiKSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBVCQk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig1LGV4cGFuZCgiJSIpKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHYJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NwbGl0KDUpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4geAkJPGMtbz46Y2FsbCBuZXRydyNOZXRyd0Jyb3dzZVgoPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLDxTSUQ+TmV0cndHZXRXb3JkKCksMCksMCkiPGNyPgotICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gJQkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3T3BlbkZpbGUoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBhCQk6Y2FsbCA8U0lEPk5ldHJ3SGlkZSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+ICUJCTpjYWxsIDxTSUQ+TmV0cndPcGVuRmlsZSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGMJCTpleGUgImtlZXBqdW1wcyBsY2QgIi5mbmFtZWVzY2FwZShiOm5ldHJ3X2N1cmRpcik8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBDCQk6bGV0IGc6bmV0cndfY2hnd2luPSB3aW5ucigpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPGNyPgk6Y2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKDxTSUQ+TmV0cndCcm93c2VDaGdEaXIoMSw8U0lEPk5ldHJ3R2V0V29yZCgpKSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBkCQk6Y2FsbCA8U0lEPk5ldHJ3TWFrZURpcigiIik8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiAtCQk6ZXhlICJub3JtISAwIjxiYXI+Y2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKDxTSUQ+TmV0cndCcm93c2VDaGdEaXIoMSwnLi4vJykpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2IJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDEsYjpuZXRyd19jdXJkaXIpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2QJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Rm9yY2VDaGdEaXIoMSw8U0lEPk5ldHJ3R2V0V29yZCgpKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdmCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0ZvcmNlRmlsZSgxLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2gJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3SGlkZGVuKDEpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ3AJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Q2hnUGVybSgxLGI6bmV0cndfY3VyZGlyKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IEkJCTpjYWxsIDxTSUQ+TmV0cndCYW5uZXJDdHJsKDEpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gaQkJOmNhbGwgPFNJRD5OZXRyd0xpc3RTdHlsZSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1iCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcigwLGI6bmV0cndfY3VyZGlyKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1CCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig2LGI6bmV0cndfY3VyZGlyKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1jCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlQ29weSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1kCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlRGlmZigxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1lCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlRWRpdCgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1mCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlKDEsPFNJRD5OZXRyd0dldFdvcmQoKSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZwk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUdyZXAoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtaAk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrSGlkZVNmeCgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1tCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlTW92ZSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1wCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlUHJpbnQoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtcgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZVJlZ2V4cCgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1zCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlU291cmNlKDEpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbVQJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVUYWcoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtdAk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZVRndCgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG11CTo8Yy11PmNhbGwgPFNJRD5OZXRyd1VuTWFya0ZpbGUoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBteAk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUV4ZSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG16CTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlQ29tcHJlc3MoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBPCQk6Y2FsbCA8U0lEPk5ldHJ3T2J0YWluKDEpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbwkJOmNhbGwgPFNJRD5OZXRyd1NwbGl0KDMpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcAkJOmNhbGwgPFNJRD5OZXRyd1ByZXZpZXcoPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLDxTSUQ+TmV0cndHZXRXb3JkKCksMSkpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gUAkJOmNhbGwgPFNJRD5OZXRyd1ByZXZXaW5PcGVuKDEpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWIJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDIsYjpuZXRyd19jdXJkaXIpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3RmlsZUluZm8oMSw8U0lEPk5ldHJ3R2V0V29yZCgpKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHIJCTpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0cndSZWZyZXNoKDEsPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLCcuLycpKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHMJCTpjYWxsIDxTSUQ+TmV0cndTb3J0U3R5bGUoMSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBTCQk6Y2FsbCA8U0lEPk5ldFNvcnRTZXF1ZW5jZSgxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFQJCTpjYWxsIDxTSUQ+TmV0cndTcGxpdCg0KTxiYXI+bm9ybSEgZ1Q8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB0CQk6Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoNCk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB1CQk6PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNCxleHBhbmQoIiUiKSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBVCQk6PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNSxleHBhbmQoIiUiKSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB2CQk6Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoNSk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB4CQk6Y2FsbCBuZXRydyNOZXRyd0Jyb3dzZVgoPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLDxTSUQ+TmV0cndHZXRXb3JkKCksMCksMCkiPGNyPgogICAgaWYgIWhhc21hcHRvKCc8UGx1Zz5OZXRyd0hpZGVFZGl0JykKICAgICBubWFwIDxidWZmZXI+IDx1bmlxdWU+IDxjLWg+IDxQbHVnPk5ldHJ3SGlkZUVkaXQKICAgICBpbWFwIDxidWZmZXI+IDx1bmlxdWU+IDxjLWg+IDxQbHVnPk5ldHJ3SGlkZUVkaXQKQEAgLTE4NTYsNiArMTkyOCw3IEBACiAgICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPGxlZnRtb3VzZT4gICA8bGVmdG1vdXNlPjpjYWxsIDxTSUQ+TmV0cndMZWZ0bW91c2UoMSk8Y3I+CiAgICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPG1pZGRsZW1vdXNlPiA8bGVmdG1vdXNlPjpjYWxsIDxTSUQ+TmV0cndQcmV2V2luT3BlbigxKTxjcj4KICAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8cy1sZWZ0bW91c2U+IDxsZWZ0bW91c2U+OmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlKDEsPFNJRD5OZXRyd0dldFdvcmQoKSk8Y3I+CisgICAgbm1hcCAgICAgPGJ1ZmZlcj4gPHNpbGVudD4gPDItbGVmdG1vdXNlPiAtCiAgICAgZXhlICdubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8cmlnaHRtb3VzZT4gIDxsZWZ0bW91c2U+OmNhbGwgPFNJRD5OZXRyd0xvY2FsUm0oIicubWFwc2FmZWN1cmRpci4nIik8Y3I+JwogICAgIGV4ZSAndm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPHJpZ2h0bW91c2U+ICA8bGVmdG1vdXNlPjpjYWxsIDxTSUQ+TmV0cndMb2NhbFJtKCInLm1hcHNhZmVjdXJkaXIuJyIpPGNyPicKICAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8bGVmdG1vdXNlPiAgIDxjLW8+PGxlZnRtb3VzZT48Yy1vPjpjYWxsIDxTSUQ+TmV0cndMZWZ0bW91c2UoMSk8Y3I+CkBAIC0xOTAwLDYgKzE5NzMsOCBAQAogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbXgJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVFeGUoMCk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtegk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUNvbXByZXNzKDApPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2IJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDEsYjpuZXRyd19jdXIpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2QJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Rm9yY2VDaGdEaXIoMCw8U0lEPk5ldHJ3R2V0V29yZCgpKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IGdmCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0ZvcmNlRmlsZSgwLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ2gJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3SGlkZGVuKDApPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gZ3AJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Q2hnUGVybSgwLGI6bmV0cndfY3VyZGlyKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IEMJCTpsZXQgZzpuZXRyd19jaGd3aW49IHdpbm5yKCk8Y3I+CkBAIC0xOTgzLDYgKzIwNTgsNyBAQAogICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxsZWZ0bW91c2U+ICAgPGxlZnRtb3VzZT46Y2FsbCA8U0lEPk5ldHJ3TGVmdG1vdXNlKDApPGNyPgogICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxtaWRkbGVtb3VzZT4gPGxlZnRtb3VzZT46Y2FsbCA8U0lEPk5ldHJ3UHJldldpbk9wZW4oMCk8Y3I+CiAgICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPHMtbGVmdG1vdXNlPiA8bGVmdG1vdXNlPjpjYWxsIDxTSUQ+TmV0cndNYXJrRmlsZSgwLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgorICAgIG5tYXAgICAgIDxidWZmZXI+IDxzaWxlbnQ+IDwyLWxlZnRtb3VzZT4gLQogICAgIGV4ZSAnbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPHJpZ2h0bW91c2U+IDxsZWZ0bW91c2U+OmNhbGwgPFNJRD5OZXRyd1JlbW90ZVJtKCInLm1hcHNhZmV1c2VybWFjaC4nIiwiJy5tYXBzYWZlcGF0aC4nIik8Y3I+JwogICAgIGV4ZSAndm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPHJpZ2h0bW91c2U+IDxsZWZ0bW91c2U+OmNhbGwgPFNJRD5OZXRyd1JlbW90ZVJtKCInLm1hcHNhZmV1c2VybWFjaC4nIiwiJy5tYXBzYWZlcGF0aC4nIik8Y3I+JwogICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxsZWZ0bW91c2U+ICAgPGMtbz48bGVmdG1vdXNlPjxjLW8+OmNhbGwgPFNJRD5OZXRyd0xlZnRtb3VzZSgwKTxjcj4KQEAgLTIwMDQsOCArMjA4MCwyNSBAQAogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPEYxPgkJCTpoZSBuZXRydy1xdWlja2hlbHA8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8RjE+CQkJPGMtbz46aGUgbmV0cnctcXVpY2toZWxwPGNyPgogICBlbmRpZgotICBjYWxsIHM6U2V0UmV4RGlyKGE6aXNsb2NhbCxiOm5ldHJ3X2N1cmRpcikKLSIgIGNhbGwgRHJldCgiczpCcm93c2VyTWFwcyIpCisKKyAgIiBzZXQgdXAgUmV4cGxvcmUgYW5kIGxlZnRtb3VzZS1kb3VibGUtY2xpY2sKKyAgY29tISBSZXhwbG9yZSBjYWxsIHM6TmV0cndSZXhwbG9yZSh3Om5ldHJ3X3JleGxvY2FsLGV4aXN0cygidzpuZXRyd19yZXhkaXIiKT8gdzpuZXRyd19yZXhkaXIgOiAiLiIpCisgIGlmIGc6bmV0cndfbW91c2VtYXBzICYmIGc6bmV0cndfcmV0bWFwCisgICBpZiAhaGFzbWFwdG8oIjxQbHVnPk5ldHJ3UmV0dXJuIikKKyAgICBpZiBtYXBhcmcoIjwyLWxlZnRtb3VzZT4iLCJuIikgPT0gIiIgfHwgbWFwYXJnKCI8Mi1sZWZ0bW91c2U+IiwibiIpID1+ICdeLSQnCisiICAgICBjYWxsIERlY2hvKCJtYWtpbmcgbWFwIGZvciAyLWxlZnRtb3VzZSIpCisgICAgIG5tYXAgPHVuaXF1ZT4gPHNpbGVudD4gPDItbGVmdG1vdXNlPgk8UGx1Zz5OZXRyd1JldHVybgorICAgIGVsc2VpZiBtYXBhcmcoIjxjLWxlZnRtb3VzZT4iLCJuIikgPT0gIiIKKyIgICAgIGNhbGwgRGVjaG8oIm1ha2luZyBtYXAgZm9yIGMtbGVmdG1vdXNlIikKKyAgICAgbm1hcCA8dW5pcXVlPiA8c2lsZW50PiA8Yy1sZWZ0bW91c2U+CTxQbHVnPk5ldHJ3UmV0dXJuCisgICAgZW5kaWYKKyAgIGVuZGlmCisgICBleGUgJ25ub3JlbWFwIDxzaWxlbnQ+IDxQbHVnPk5ldHJ3UmV0dXJuIDpSZXhwbG9yZTxjcj4nCisiICAgY2FsbCBEZWNobygibWFkZSA8UGx1Zz5OZXRyd1JldHVybiBtYXAiKQorICBlbmRpZgorCisgIGtlZXBqIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGI6bmV0cndfY3VyZGlyKQorIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFwcyIpCiBlbmRmdW4KIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNTAsNyArMjE0Myw3IEBACiAgICAiIGNoYW5nZSB0byB0aGUgYm9va21hcmtlZCBkaXJlY3RvcnkKICIgICBjYWxsIERlY2hvKCIodXNlcjogPCIudjpjb3VudC4ibWI+KSBjaGFuZ2UgdG8gdGhlIGJvb2ttYXJrZWQgZGlyZWN0b3J5IikKICAgIGlmIGV4aXN0cygiZzpuZXRyd19ib29rbWFya2xpc3Rbdjpjb3VudC0xXSIpCi0gICAgZXhlICJlICIuZm5hbWVlc2NhcGUoZzpuZXRyd19ib29rbWFya2xpc3Rbdjpjb3VudC0xXSkKKyAgICBleGUgImtlZXBqIGUgIi5mbmFtZWVzY2FwZShnOm5ldHJ3X2Jvb2ttYXJrbGlzdFt2OmNvdW50LTFdKQogICAgZWxzZQogICAgIGVjaG9tc2cgIlNvcnJ5LCBib29rbWFyayMiLnY6Y291bnQuIiBkb2Vzbid0IGV4aXN0ISIKICAgIGVuZGlmCkBAIC0yMDc1LDIwICsyMTY4LDI0IEBACiAgICBsZXQgY250ICAgICA9IGc6bmV0cndfZGlyaGlzdF9jbnQKICAgIGxldCBmaXJzdCAgID0gMQogICAgbGV0IGhpc3RjbnQgPSAwCi0gICB3aGlsZSAoIGZpcnN0IHx8IGNudCAhPSBnOm5ldHJ3X2Rpcmhpc3RfY250ICkKKyAgIGlmIGc6bmV0cndfZGlyaGlzdG1heCA+IDAKKyAgICB3aGlsZSAoIGZpcnN0IHx8IGNudCAhPSBnOm5ldHJ3X2Rpcmhpc3RfY250ICkKICIgICAgY2FsbCBEZWNobygiZmlyc3Q9Ii5maXJzdC4iIGNudD0iLmNudC4iIGRpcmhpc3RfY250PSIuZzpuZXRyd19kaXJoaXN0X2NudCkKLSAgICBsZXQgaGlzdGNudD0gaGlzdGNudCArIDEKLSAgICBpZiBleGlzdHMoImc6bmV0cndfZGlyaGlzdF97Y250fSIpCisgICAgIGxldCBoaXN0Y250PSBoaXN0Y250ICsgMQorICAgICBpZiBleGlzdHMoImc6bmV0cndfZGlyaGlzdF97Y250fSIpCiAiICAgICBjYWxsIERlY2hvKCJOZXRydyAgSGlzdG9yeSMiLmhpc3RjbnQuIjogIi5nOm5ldHJ3X2Rpcmhpc3Rfe2NudH0pCi0gICAgIGVjaG8gIk5ldHJ3ICBIaXN0b3J5IyIuaGlzdGNudC4iOiAiLmc6bmV0cndfZGlyaGlzdF97Y250fQotICAgICBsZXQgZGlkd29yaz0gMQotICAgIGVuZGlmCi0gICAgbGV0IGZpcnN0ID0gMAotICAgIGxldCBjbnQgICA9ICggY250IC0gMSApICUgZzpuZXRyd19kaXJoaXN0bWF4Ci0gICAgaWYgY250IDwgMAotICAgICBsZXQgY250PSBjbnQgKyBnOm5ldHJ3X2Rpcmhpc3RtYXgKLSAgICBlbmRpZgotICAgZW5kd2hpbGUKKyAgICAgIGVjaG8gIk5ldHJ3ICBIaXN0b3J5IyIuaGlzdGNudC4iOiAiLmc6bmV0cndfZGlyaGlzdF97Y250fQorICAgICAgbGV0IGRpZHdvcms9IDEKKyAgICAgZW5kaWYKKyAgICAgbGV0IGZpcnN0ID0gMAorICAgICBsZXQgY250ICAgPSAoIGNudCAtIDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAorICAgICBpZiBjbnQgPCAwCisgICAgICBsZXQgY250PSBjbnQgKyBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICAgZW5kaWYKKyAgICBlbmR3aGlsZQorICAgZWxzZQorICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAwCisgICBlbmRpZgogICAgaWYgZGlkd29yawogICAgIGNhbGwgaW5wdXRzYXZlKCl8Y2FsbCBpbnB1dCgiUHJlc3MgPGNyPiB0byBjb250aW51ZSIpfGNhbGwgaW5wdXRyZXN0b3JlKCkKICAgIGVuZGlmCkBAIC0yMDk3LDU2ICsyMTk0LDcxIEBACiAgICAiIHNhdmVzIG1vc3QgcmVjZW50bHkgdmlzaXRlZCBkaXJlY3RvcmllcyAod2hlbiB0aGV5IGRpZmZlcikKICIgICBjYWxsIERlY2hvKCIoYnJvd3NpbmcpIHJlY29yZCBjdXJkaXIgaGlzdG9yeSIpCiAgICBpZiAhZXhpc3RzKCJnOm5ldHJ3X2Rpcmhpc3RfY250IikgfHwgIWV4aXN0cygiZzpuZXRyd19kaXJoaXN0X3tnOm5ldHJ3X2Rpcmhpc3RfY250fSIpIHx8IGc6bmV0cndfZGlyaGlzdF97ZzpuZXRyd19kaXJoaXN0X2NudH0gIT0gYTpjdXJkaXIKLSAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudCAgICAgICAgICAgICAgICAgICA9ICggZzpuZXRyd19kaXJoaXN0X2NudCArIDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAotICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9ID0gYTpjdXJkaXIKKyAgICBpZiBnOm5ldHJ3X2Rpcmhpc3RtYXggPiAwCisgICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250ICAgICAgICAgICAgICAgICAgID0gKCBnOm5ldHJ3X2Rpcmhpc3RfY250ICsgMSApICUgZzpuZXRyd19kaXJoaXN0bWF4CisgICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9ID0gYTpjdXJkaXIKKyAgICBlbmRpZgogIiAgICBjYWxsIERlY2hvKCJzYXZlIGRpcmhpc3QjIi5nOm5ldHJ3X2Rpcmhpc3RfY250LiI8Ii5nOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9LiI+IikKICAgIGVuZGlmCiAKICAgZWxzZWlmIGE6Y2hnID09IDQKICAgICIgdTogY2hhbmdlIHRvIHRoZSBwcmV2aW91cyBkaXJlY3Rvcnkgc3RvcmVkIG9uIHRoZSBoaXN0b3J5IGxpc3QKICIgICBjYWxsIERlY2hvKCIodXNlcjogPHU+KSBjaGcgdG8gcHJldiBkaXIgZnJvbSBoaXN0b3J5IikKLSAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAoIGc6bmV0cndfZGlyaGlzdF9jbnQgLSAxICkgJSBnOm5ldHJ3X2Rpcmhpc3RtYXgKLSAgIGlmIGc6bmV0cndfZGlyaGlzdF9jbnQgPCAwCi0gICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9IGc6bmV0cndfZGlyaGlzdF9jbnQgKyBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgIGlmIGc6bmV0cndfZGlyaGlzdG1heCA+IDAKKyAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gKCBnOm5ldHJ3X2Rpcmhpc3RfY250IC0gMSApICUgZzpuZXRyd19kaXJoaXN0bWF4CisgICAgaWYgZzpuZXRyd19kaXJoaXN0X2NudCA8IDAKKyAgICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9IGc6bmV0cndfZGlyaGlzdF9jbnQgKyBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICBlbmRpZgorICAgZWxzZQorICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAwCiAgICBlbmRpZgogICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9IikKICIgICAgY2FsbCBEZWNobygiY2hhbmdlZGlyIHUjIi5nOm5ldHJ3X2Rpcmhpc3RfY250LiI8Ii5nOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9LiI+IikKICAgICBpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVCAmJiBleGlzdHMoImI6bmV0cndfY3VyZGlyIikKICAgICAgc2V0bG9jYWwgbWEgbm9ybwogIiAgICAgY2FsbCBEZWNobygic2V0bG9jYWwgbWEgbm9ybyIpCi0gICAgIGtlZXBqICVkCisgICAgIHNpbCEga2VlcGogJWQKICAgICAgc2V0bG9jYWwgbm9tb2QKICIgICAgIGNhbGwgRGVjaG8oInNldGxvY2FsIG5vbW9kIikKICAgICBlbmRpZgogIiAgICAiICAgIGNhbGwgRGVjaG8oImV4ZSBlISAiLmZuYW1lZXNjYXBlKGc6bmV0cndfZGlyaGlzdF97ZzpuZXRyd19kaXJoaXN0X2NudH0pKQogICAgIGV4ZSAia2VlcGogZSEgIi5mbmFtZWVzY2FwZShnOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9KQogICAgZWxzZQotICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAoIGc6bmV0cndfZGlyaGlzdF9jbnQgKyAxICkgJSBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICBpZiBnOm5ldHJ3X2Rpcmhpc3RtYXggPiAwCisgICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAoIGc6bmV0cndfZGlyaGlzdF9jbnQgKyAxICkgJSBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICBlbHNlCisgICAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAwCisgICAgZW5kaWYKICAgICBlY2hvICJTb3JyeSwgbm8gcHJlZGVjZXNzb3IgZGlyZWN0b3J5IGV4aXN0cyB5ZXQiCiAgICBlbmRpZgogCiAgIGVsc2VpZiBhOmNoZyA9PSA1CiAgICAiIFU6IGNoYW5nZSB0byB0aGUgc3Vic2VxdWVudCBkaXJlY3Rvcnkgc3RvcmVkIG9uIHRoZSBoaXN0b3J5IGxpc3QKICIgICBjYWxsIERlY2hvKCIodXNlcjogPFU+KSBjaGcgdG8gbmV4dCBkaXIgZnJvbSBoaXN0b3J5IikKLSAgIGxldCBnOm5ldHJ3X2Rpcmhpc3RfY250PSAoIGc6bmV0cndfZGlyaGlzdF9jbnQgKyAxICkgJSBnOm5ldHJ3X2Rpcmhpc3RtYXgKLSAgIGlmIGV4aXN0cygiZzpuZXRyd19kaXJoaXN0X3tnOm5ldHJ3X2Rpcmhpc3RfY250fSIpCisgICBpZiBnOm5ldHJ3X2Rpcmhpc3RtYXggPiAwCisgICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9ICggZzpuZXRyd19kaXJoaXN0X2NudCArIDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAorICAgIGlmIGV4aXN0cygiZzpuZXRyd19kaXJoaXN0X3tnOm5ldHJ3X2Rpcmhpc3RfY250fSIpCiAiICAgIGNhbGwgRGVjaG8oImNoYW5nZWRpciBVIyIuZzpuZXRyd19kaXJoaXN0X2NudC4iPCIuZzpuZXRyd19kaXJoaXN0X3tnOm5ldHJ3X2Rpcmhpc3RfY250fS4iPiIpCi0gICAgaWYgZXhpc3RzKCJ3Om5ldHJ3X2xpc3RzdHlsZSIpICYmIHc6bmV0cndfbGlzdHN0eWxlID09IHM6VFJFRUxJU1QgJiYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCi0gICAgIHNldGxvY2FsIG1hIG5vcm8KKyAgICAgaWYgZXhpc3RzKCJ3Om5ldHJ3X2xpc3RzdHlsZSIpICYmIHc6bmV0cndfbGlzdHN0eWxlID09IHM6VFJFRUxJU1QgJiYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCisgICAgICBzZXRsb2NhbCBtYSBub3JvCiAiICAgICBjYWxsIERlY2hvKCJzZXRsb2NhbCBtYSBub3JvIikKLSAgICAga2VlcGogJWQKKyAgICAgIHNpbCEga2VlcGogJWQKICIgICAgIGNhbGwgRGVjaG8oInJlbW92ZWQgYWxsIGxpbmVzIGZyb20gYnVmZmVyICglZCkiKQotICAgICBzZXRsb2NhbCBub21vZAorICAgICAgc2V0bG9jYWwgbm9tb2QKICIgICAgIGNhbGwgRGVjaG8oInNldGxvY2FsIG5vbW9kIikKLSAgICBlbmRpZgorICAgICBlbmRpZgogIiAgICBjYWxsIERlY2hvKCJleGUgZSEgIi5mbmFtZWVzY2FwZShnOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9KSkKLSAgICBleGUgImtlZXBqIGUhICIuZm5hbWVlc2NhcGUoZzpuZXRyd19kaXJoaXN0X3tnOm5ldHJ3X2Rpcmhpc3RfY250fSkKLSAgIGVsc2UKLSAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gKCBnOm5ldHJ3X2Rpcmhpc3RfY250IC0gMSApICUgZzpuZXRyd19kaXJoaXN0bWF4Ci0gICAgaWYgZzpuZXRyd19kaXJoaXN0X2NudCA8IDAKLSAgICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9IGc6bmV0cndfZGlyaGlzdF9jbnQgKyBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICAgZXhlICJrZWVwaiBlISAiLmZuYW1lZXNjYXBlKGc6bmV0cndfZGlyaGlzdF97ZzpuZXRyd19kaXJoaXN0X2NudH0pCisgICAgZWxzZQorICAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gKCBnOm5ldHJ3X2Rpcmhpc3RfY250IC0gMSApICUgZzpuZXRyd19kaXJoaXN0bWF4CisgICAgIGlmIGc6bmV0cndfZGlyaGlzdF9jbnQgPCAwCisgICAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gZzpuZXRyd19kaXJoaXN0X2NudCArIGc6bmV0cndfZGlyaGlzdG1heAorICAgICBlbmRpZgorICAgICBlY2hvICJTb3JyeSwgbm8gc3VjY2Vzc29yIGRpcmVjdG9yeSBleGlzdHMgeWV0IgogICAgIGVuZGlmCi0gICAgZWNobyAiU29ycnksIG5vIHN1Y2Nlc3NvciBkaXJlY3RvcnkgZXhpc3RzIHlldCIKKyAgIGVsc2UKKyAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gMAorICAgIGVjaG8gIlNvcnJ5LCBubyBzdWNjZXNzb3IgZGlyZWN0b3J5IGV4aXN0cyB5ZXQgKGc6bmV0cndfZGlyaGlzdG1heCBpcyAiLmc6bmV0cndfZGlyaGlzdG1heC4iKSIKICAgIGVuZGlmCiAKICAgZWxzZWlmIGE6Y2hnID09IDYKQEAgLTIxNTQsMTAgKzIyNjYsMTAgQEAKICIgICBjYWxsIERlY2hvKCJkZWxldGUgYm9va21hcmsjIi52OmNvdW50LiI8Ii5nOm5ldHJ3X2Jvb2ttYXJrbGlzdFt2OmNvdW50LTFdLiI+IikKICAgIGxldCBzYXZlZmlsZT0gczpOZXRyd0hvbWUoKS4iLy5uZXRyd2Jvb2siCiAgICBpZiBmaWxlcmVhZGFibGUoc2F2ZWZpbGUpCi0gICAgY2FsbCBzOk5ldHJ3Qm9va0hpc3RTYXZlKCkgIiBkb25lIGhlcmUgdG8gbWVyZ2UgYm9va21hcmtzIGZpcnN0Ci0gICAgY2FsbCBkZWxldGUoc2F2ZWZpbGUpCisgICAga2VlcGogY2FsbCBzOk5ldHJ3Qm9va0hpc3RTYXZlKCkgIiBkb25lIGhlcmUgdG8gbWVyZ2UgYm9va21hcmtzIGZpcnN0CisgICAga2VlcGogY2FsbCBkZWxldGUoc2F2ZWZpbGUpCiAgICBlbmRpZgotICAgY2FsbCByZW1vdmUoZzpuZXRyd19ib29rbWFya2xpc3Qsdjpjb3VudC0xKQorICAga2VlcGogY2FsbCByZW1vdmUoZzpuZXRyd19ib29rbWFya2xpc3Qsdjpjb3VudC0xKQogICBlbmRpZgogICBjYWxsIHM6TmV0cndCb29rbWFya01lbnUoKQogIiAgY2FsbCBEcmV0KCJzOk5ldHJ3Qm9va0hpc3RIYW5kbGVyIikKQEAgLTIxNzMsMTUgKzIyODUsMTcgQEAKICAgIGxldCBzYXZlZmlsZT0gaG9tZS4iLy5uZXRyd2Jvb2siCiAgICBpZiBmaWxlcmVhZGFibGUoc2F2ZWZpbGUpCiAiICAgIGNhbGwgRGVjaG8oInNvdXJjaW5nIC5uZXRyd2Jvb2siKQotICAgIGV4ZSAic28gIi5zYXZlZmlsZQorICAgIGV4ZSAia2VlcGogc28gIi5zYXZlZmlsZQogICAgZW5kaWYKLSAgIGxldCBzYXZlZmlsZT0gaG9tZS4iLy5uZXRyd2hpc3QiCi0gICBpZiBmaWxlcmVhZGFibGUoc2F2ZWZpbGUpCisgICBpZiBnOm5ldHJ3X2Rpcmhpc3RtYXggPiAwCisgICAgbGV0IHNhdmVmaWxlPSBob21lLiIvLm5ldHJ3aGlzdCIKKyAgICBpZiBmaWxlcmVhZGFibGUoc2F2ZWZpbGUpCiAiICAgIGNhbGwgRGVjaG8oInNvdXJjaW5nIC5uZXRyd2hpc3QiKQotICAgIGV4ZSAic28gIi5zYXZlZmlsZQorICAgICBleGUgImtlZXBqIHNvICIuc2F2ZWZpbGUKKyAgICBlbmRpZgorICAgIGxldCBzOm5ldHJ3X2luaXRib29raGlzdD0gMQorICAgIGF1IFZpbUxlYXZlICogY2FsbCBzOk5ldHJ3Qm9va0hpc3RTYXZlKCkKICAgIGVuZGlmCi0gICBsZXQgczpuZXRyd19pbml0Ym9va2hpc3Q9IDEKLSAgIGF1IFZpbUxlYXZlICogY2FsbCBzOk5ldHJ3Qm9va0hpc3RTYXZlKCkKICAgZW5kaWYKICIgIGNhbGwgRHJldCgiczpOZXRyd0Jvb2tIaXN0UmVhZCIpCiBlbmRmdW4KQEAgLTIxOTEsOSArMjMwNSwxMyBAQAogIiAgICAgICAgICAgICAgICAgICAgICBTaXN0ZXIgZnVuY3Rpb246IHM6TmV0cndCb29rSGlzdFJlYWQoKQogIiAgICAgICAgICAgICAgICAgICAgICBJIHVzZWQgdG8gZG8gdGhpcyB2aWEgdmltaW5mbyBidXQgdGhhdCBhcHBlYXJzIHRvCiAiICAgICAgICAgICAgICAgICAgICAgIGJlIHVucmVsaWFibGUgZm9yIGxvbmctdGVybSBzdG9yYWdlCi0iICAgICAgICAgICAgICAgICAgICAgIENPTUJBSzogZG9lcyAkSE9NRSB3b3JrIHVuZGVyIHdpbmRvd3M/Pz8KIGZ1biEgczpOZXRyd0Jvb2tIaXN0U2F2ZSgpCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3Qm9va0hpc3RTYXZlKCkgZGlyaGlzdG1heD0iLmc6bmV0cndfZGlyaGlzdG1heCkKKyAgaWYgZzpuZXRyd19kaXJoaXN0bWF4IDw9IDAKKyIgICBjYWxsIERyZXQoInM6TmV0cndCb29rSGlzdFNhdmUgOiBkaXJoaXN0bWF4PSIuZzpuZXRyd19kaXJoaXN0bWF4KQorICAgcmV0dXJuCisgIGVuZGlmCisKICAgbGV0IHNhdmVmaWxlPSBzOk5ldHJ3SG9tZSgpLiIvLm5ldHJ3aGlzdCIKICAgMXNwbGl0CiAgIGNhbGwgczpOZXRyd0VuZXcoKQpAQCAtMjIwMSwxMCArMjMxOSwxMCBAQAogICBzZXRsb2NhbCBub2NpbiBub2FpIG5vY2kgbWFnaWMgbm9zcGVsbCBub2hpZCB3aWc9IG5vYXcKICAgc2V0bG9jYWwgbWEgbm9ybyB3cml0ZQogICBpZiBleGlzdHMoIiZhY2QiKSB8IHNldGxvY2FsIG5vYWNkIHwgZW5kaWYKLSAgc2lsZW50ICVkCisgIHNpbCEga2VlcGogJWQKIAogICAiIHNhdmUgLm5ldHJ3aGlzdCAtLSBubyBhdHRlbXB0IHRvIG1lcmdlCi0gIHNpbGVudCEgZmlsZSAubmV0cndoaXN0CisgIHNpbCEgZmlsZSAubmV0cndoaXN0CiAgIGNhbGwgc2V0bGluZSgxLCJsZXQgZzpuZXRyd19kaXJoaXN0bWF4ICA9Ii5nOm5ldHJ3X2Rpcmhpc3RtYXgpCiAgIGNhbGwgc2V0bGluZSgyLCJsZXQgZzpuZXRyd19kaXJoaXN0X2NudCA9Ii5nOm5ldHJ3X2Rpcmhpc3RfY250KQogICBsZXQgbGFzdGxpbmUgPSBsaW5lKCIkIikKQEAgLTIyNTQsNyArMjM3Miw3IEBACiAiICBjYWxsIERlY2hvKCJ0YWIjIi50YWJwYWdlbnIoKS4iIHdpbiMiLndpbm5yKCkpCiAiICBjYWxsIERyZWRpcigibHMhIikKICAgaWYgIWV4aXN0cygiczpuZXRyd19pbml0Ym9va2hpc3QiKQotICAgY2FsbCBzOk5ldHJ3Qm9va0hpc3RSZWFkKCkKKyAgIGtlZXBqIGNhbGwgczpOZXRyd0Jvb2tIaXN0UmVhZCgpCiAgIGVuZGlmCiAKICAgIiBzaW1wbGlmeSB0aGUgZGlybmFtZSAoZXNwZWNpYWxseSBmb3IgIi4uInMgaW4gZGlybmFtZXMpCkBAIC0yMjcxLDEyICsyMzg5LDEyIEBACiAgICByZXR1cm4KICAgZW5kaWYKICAgaWYgIWV4aXN0cygiKnNoZWxsZXNjYXBlIikKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibmV0cncgY2FuJ3QgcnVuIC0tIHlvdXIgdmltIGlzIG1pc3Npbmcgc2hlbGxlc2NhcGUoKSIsNjkpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsIm5ldHJ3IGNhbid0IHJ1biAtLSB5b3VyIHZpbSBpcyBtaXNzaW5nIHNoZWxsZXNjYXBlKCkiLDY5KQogIiAgIGNhbGwgRHJldCgiczpOZXRyd0Jyb3dzZSA6IG1pc3Npbmcgc2hlbGxlc2NhcGUoKSIpCiAgICByZXR1cm4KICAgZW5kaWYKICAgaWYgIWV4aXN0cygiKmZuYW1lZXNjYXBlIikKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibmV0cncgY2FuJ3QgcnVuIC0tIHlvdXIgdmltIGlzIG1pc3NpbmcgZm5hbWVlc2NhcGUoKSIsNzApCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsIm5ldHJ3IGNhbid0IHJ1biAtLSB5b3VyIHZpbSBpcyBtaXNzaW5nIGZuYW1lZXNjYXBlKCkiLDcwKQogIiAgIGNhbGwgRHJldCgiczpOZXRyd0Jyb3dzZSA6IG1pc3NpbmcgZm5hbWVlc2NhcGUoKSIpCiAgICByZXR1cm4KICAgZW5kaWYKQEAgLTIzMTUsMTIgKzI0MzMsMTIgQEAKICIgICBjYWxsIERlY2hvKCJzZXRsb2NhbCBtYSBub3JvIikKICAgIGxldCBiOm5ldHJ3X2N1cmRpcj0gZGlybmFtZQogIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKHM6bWV0aG9kLiI6Ly8iLnM6dXNlci5zOm1hY2hpbmUuIi8iLnM6cGF0aCkuIiAoYnQ9Ii4mYnQuIikiKQotICAgZXhlICJzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKHM6bWV0aG9kLiI6Ly8iLnM6dXNlci5zOm1hY2hpbmUuIi8iLnM6cGF0aCkKLSAgIGV4ZSAic2lsISBrZWVwYWx0IGRvYXUgQnVmUmVhZFByZSAiLmZuYW1lZXNjYXBlKHM6Zm5hbWUpCi0gICBzaWxlbnQgY2FsbCBuZXRydyNOZXRSZWFkKDIsczptZXRob2QuIjovLyIuczp1c2VyLnM6bWFjaGluZS4iLyIuczpwYXRoKQorICAgZXhlICJzaWwhIGtlZXBqIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKHM6bWV0aG9kLiI6Ly8iLnM6dXNlci5zOm1hY2hpbmUuIi8iLnM6cGF0aCkKKyAgIGV4ZSAic2lsISBrZWVwaiBrZWVwYWx0IGRvYXUgQnVmUmVhZFByZSAiLmZuYW1lZXNjYXBlKHM6Zm5hbWUpCisgICBzaWwgY2FsbCBuZXRydyNOZXRSZWFkKDIsczptZXRob2QuIjovLyIuczp1c2VyLnM6bWFjaGluZS4iLyIuczpwYXRoKQogICAgaWYgczpwYXRoICF+ICcudGFyLmJ6MiQnICYmIHM6cGF0aCAhfiAnLnRhci5neicgJiYgczpwYXRoICF+ICcudGFyLnh6JyAmJiBzOnBhdGggIX4gJy50eHonCiAgICAgIiBuZXRydy52aW0gYW5kIHRhci52aW0gaGF2ZSBhbHJlYWR5IGhhbmRsZWQgZGVjb21wcmVzc2lvbiBvZiB0aGUgdGFyYmFsbDsgYXZvaWRpbmcgZ3ppcC52aW0gZXJyb3IKLSAgICBleGUgInNpbCBrZWVwYWx0IGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZWVzY2FwZShzOmZuYW1lKQorICAgIGV4ZSAic2lsIGtlZXBqIGtlZXBhbHQgZG9hdSBCdWZSZWFkUG9zdCAiLmZuYW1lZXNjYXBlKHM6Zm5hbWUpCiAgICBlbmRpZgogCiAgICAiIHNhdmUgY2VydGFpbiB3aW5kb3ctb3JpZW50ZWQgdmFyaWFibGVzIGludG8gYnVmZmVyLW9yaWVudGVkIHZhcmlhYmxlcyB7e3szCkBAIC0yMzMzLDcgKzI0NTEsNyBAQAogICAgcmV0dXJuCiAgIGVuZGlmCiAKLSAgIiB1c2UgYnVmZmVyLW9yaWVudGVkIFdpblZhcnMgaWYgYnVmZmVyIG9uZXMgZXhpc3QgYnV0IHdpbmRvdyBvbmVzIGRvbid0IHt7ezMKKyAgIiB1c2UgYnVmZmVyLW9yaWVudGVkIFdpblZhcnMgaWYgYnVmZmVyIHZhcmlhYmxlcyBleGlzdCBidXQgYXNzb2NpYXRlZCB3aW5kb3cgdmFyaWFibGVzIGRvbid0IHt7ezMKICAgY2FsbCBzOlVzZUJ1ZldpblZhcnMoKQogCiAgICIgc2V0IHVwIHNvbWUgdmFyaWFibGVzIHt7ezMKQEAgLTIzNDIsNyArMjQ2MCw3IEBACiAgIGxldCBzOmxhc3Rfc29ydF9ieSAgICAgICAgID0gZzpuZXRyd19zb3J0X2J5CiAKICAgIiBzZXQgdXAgbWVudSB7e3szCi0gIGNhbGwgczpOZXRyd01lbnUoMSkKKyAga2VlcGogY2FsbCBzOk5ldHJ3TWVudSgxKQogCiAgICIgc2V0IHVwIGJ1ZmZlciB7e3szCiAgIGxldCByZXVzaW5nPSBzOk5ldHJ3R2V0QnVmZmVyKGE6aXNsb2NhbCxkaXJuYW1lKQpAQCAtMjQ0Myw5ICsyNTYxLDkgQEAKICAgIGxldCBkaXJwYXQgID0gJ15cKFx3XHstfVwpOi8vXChcd1wrQFwpXD1cKFteL11cK1wpL1woLipcKSQnCiAgICBpZiBkaXJuYW1lICF+IGRpcnBhdAogICAgIGlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQotICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsIm5ldHJ3IGRvZXNuJ3QgdW5kZXJzdGFuZCB5b3VyIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IiwyMCkKKyAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJuZXRydyBkb2Vzbid0IHVuZGVyc3RhbmQgeW91ciBkaXJuYW1lPCIuZGlybmFtZS4iPiIsMjApCiAgICAgZW5kaWYKLSAgICBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJ3OiIpCisgICAga2VlcGogY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgidzoiKQogICAgIHNldGxvY2FsIG5vbWEgbm9tb2Qgbm93cmFwCiAiICAgIGNhbGwgRGVjaG8oInJvPSIuJmw6cm8uIiBtYT0iLiZsOm1hLiIgbW9kPSIuJmw6bW9kLiIgd3JhcD0iLiZsOndyYXApCiAiICAgIGNhbGwgRHJldCgiczpOZXRyd0Jyb3dzZSA6IGJhZGx5IGZvcm1hdHRlZCBkaXJuYW1lPCIuZGlybmFtZS4iPiIpCkBAIC0yNDU4LDggKzI1NzYsMTIgQEAKICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAiIERpcmVjdG9yeSBMaXN0aW5nOiB7e3szCiAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgY2FsbCBzOkJyb3dzZXJNYXBzKGE6aXNsb2NhbCkKLSAgY2FsbCBzOlBlcmZvcm1MaXN0aW5nKGE6aXNsb2NhbCkKKyAga2VlcGogY2FsbCBzOk5ldHJ3TWFwcyhhOmlzbG9jYWwpCisgIGtlZXBqIGNhbGwgczpQZXJmb3JtTGlzdGluZyhhOmlzbG9jYWwpCisgIGlmIHY6dmVyc2lvbiA+PSA3MDAgJiYgaGFzKCJiYWxsb29uX2V2YWwiKSAmJiAmbDpiZXhwciA9PSAiIgorICAgbGV0ICZsOmJleHByPSAibmV0cncjTmV0cndCYWxsb29uSGVscCgpIgorICAgc2V0IGJldmFsCisgIGVuZGlmCiAKICAgIiBUaGUgczpMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCgpIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhbiBhdXRvY21kCiAgICIgaW5zdGFsbGVkIGJ5IHM6TG9jYWxGYXN0QnJvd3NlcigpIHdoZW4gZzpuZXRyd19mYXN0YnJvd3NlIDw9IDEgKGllLiBzbG93LCBtZWRpdW0gc3BlZWQpLgpAQCAtMjQ3MCw3ICsyNTkyLDcgQEAKICAgbGV0IHM6bG9jYnJvd3Nlc2hlbGxjbWQ9IDEKIAogIiAgY2FsbCBEZWNobygicm89Ii4mbDpyby4iIG1hPSIuJmw6bWEuIiBtb2Q9Ii4mbDptb2QuIiB3cmFwPSIuJmw6d3JhcCkKLSIgIGNhbGwgRHJldCgiczpOZXRyd0Jyb3dzZSA6IGRpZCBQZXJmb3JtTGlzdGluZyIpCisiICBjYWxsIERyZXQoInM6TmV0cndCcm93c2UgOiBkaWQgUGVyZm9ybUxpc3RpbmcgIGZ0PCIuJmZ0LiI+IikKICAgcmV0dXJuCiBlbmRmdW4KIApAQCAtMjYyNSwxMCArMjc0NywxMCBAQAogIiAgICBjYWxsIERlY2hvKCIgIGV4ZSBzaWwhIGtlZXBhbHQgZmlsZSBOZXRyd1RyZWVMaXN0aW5nICIuZm5hbWVlc2NhcGUoczpuZXRyd190cmVlbGlzdG51bSkpCiAgICAgZXhlICdzaWwhIGtlZXBhbHQgZmlsZSBOZXRyd1RyZWVMaXN0aW5nXCAnLmZuYW1lZXNjYXBlKHM6bmV0cndfdHJlZWxpc3RudW0pCiAgICAgc2V0IGJ0PW5vZmlsZSBub3N3ZgotICAgIG5ub3JlbWFwIDxzaWxlbnQ+IDxidWZmZXI+IFsJOnNpbGVudCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCdbJyk8Y3I+Ci0gICAgbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gXQk6c2lsZW50IGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ10nKTxjcj4KLSAgICBubm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiBbWyAgICAgICA6c2lsZW50IGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ1snKTxjcj4KLSAgICBubm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiBdXSAgICAgICA6c2lsZW50IGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ10nKTxjcj4KKyAgICBubm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiBbCTpzaWwgY2FsbCA8U0lEPlRyZWVMaXN0TW92ZSgnWycpPGNyPgorICAgIG5ub3JlbWFwIDxzaWxlbnQ+IDxidWZmZXI+IF0JOnNpbCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCddJyk8Y3I+CisgICAgbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gW1sgICAgICAgOnNpbCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCdbJyk8Y3I+CisgICAgbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gXV0gICAgICAgOnNpbCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCddJyk8Y3I+CiAiICAgIGNhbGwgRGVjaG8oIiAgdHJlZSBsaXN0aW5nIyIuczpuZXRyd190cmVlbGlzdG51bS4iIGJ1Zm5yPSIudzpuZXRyd190cmVlYnVmbnIpCiAgICBlbHNlCiAiICAgIGxldCB2OmVycm1zZz0gIiIgIiBEZWNobwpAQCAtMjY1OCwxNCArMjc4MCwxNCBAQAogICAgZW5kaWYKICAgIGxldCAmZWk9IGVpa2VlcAogICAgaWYgbGluZSgiJCIpIDw9IDEKLSAgICBjYWxsIHM6TmV0cndMaXN0U2V0dGluZ3MoYTppc2xvY2FsKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd0xpc3RTZXR0aW5ncyhhOmlzbG9jYWwpCiAiICAgIGNhbGwgRHJldCgiczpOZXRyd0dldEJ1ZmZlciAwIDogcmUtdXNpbmcgYnVmZmVyIyIuYnVmbnIoIiUiKS4iLCBidXQgaXRzIGVtcHR5LCBzbyByZWZyZXNoIGl0IikKICAgICByZXR1cm4gMAogICAgZWxzZWlmIGV4aXN0cygidzpuZXRyd19saXN0c3R5bGUiKSAmJiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOlRSRUVMSVNUCiAiICAgIGNhbGwgRGVjaG8oIi0tcmUtdXNlIHRyZWUgbGlzdGluZy0tIikKICIgICAgY2FsbCBEZWNobygiICBjbGVhciBidWZmZXI8Ii5leHBhbmQoIiUiKS4iPiB3aXRoIDolZCIpCiAgICAgc2lsIGtlZXBqICVkCi0gICAgY2FsbCBzOk5ldHJ3TGlzdFNldHRpbmdzKGE6aXNsb2NhbCkKKyAgICBrZWVwaiBjYWxsIHM6TmV0cndMaXN0U2V0dGluZ3MoYTppc2xvY2FsKQogIiAgICBjYWxsIERyZXQoInM6TmV0cndHZXRCdWZmZXIgMCA6IHJlLXVzaW5nIGJ1ZmZlciMiLmJ1Zm5yKCIlIikuIiwgYnV0IHRyZWVsaXN0IG1vZGUgYWx3YXlzIG5lZWRzIGEgcmVmcmVzaCIpCiAgICAgcmV0dXJuIDAKICAgIGVsc2UKQEAgLTI2ODEsOSArMjgwMyw5IEBACiAgICIgIGZhc3QgICAyICAgICAgICAgSCAgICAgIEgKICIgIGNhbGwgRGVjaG8oIi0tZG8gbmV0cncgc2V0dGluZ3M6IG1ha2UgdGhpcyBidWZmZXIjIi5idWZucigiJSIpLiIgbm90LWEtZmlsZSwgbW9kaWZpYWJsZSwgbm90IGxpbmUtbnVtYmVyZWQsIGV0Yy0tIikKICAgbGV0IGZuYW1lPSBleHBhbmQoIiUiKQotICBjYWxsIHM6TmV0cndMaXN0U2V0dGluZ3MoYTppc2xvY2FsKQorICBrZWVwaiBjYWxsIHM6TmV0cndMaXN0U2V0dGluZ3MoYTppc2xvY2FsKQogIiAgY2FsbCBEZWNobygiZXhlIHNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUoZm5hbWUpKQotICBleGUgInNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUoZm5hbWUpCisgIGV4ZSAic2lsISBrZWVwaiBrZWVwYWx0IGZpbGUgIi5mbmFtZWVzY2FwZShmbmFtZSkKIAogICAiIGRlbGV0ZSBhbGwgbGluZXMgZnJvbSBidWZmZXIge3t7MwogIiAgY2FsbCBEZWNobygiLS1kZWxldGUgYWxsIGxpbmVzIGZyb20gYnVmZmVyLS0iKQpAQCAtMjc3Nyw3ICsyODk5LDcgQEAKIAogICAgaWYgIWV4aXN0cygiYjpuZXRyd19jcGYiKQogICAgIGxldCBiOm5ldHJ3X2NwZj0gMAotICAgIGV4ZSAnc2lsZW50IGtlZXBqdW1wcyAnLnc6bmV0cndfYmFubmVyY250LicsJGcvXi4vaWYgdmlydGNvbCgiJCIpID4gYjpuZXRyd19jcGZ8bGV0IGI6bmV0cndfY3BmPSB2aXJ0Y29sKCIkIil8ZW5kaWYnCisgICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRnL14uL2lmIHZpcnRjb2woIiQiKSA+IGI6bmV0cndfY3BmfGxldCBiOm5ldHJ3X2NwZj0gdmlydGNvbCgiJCIpfGVuZGlmJwogICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAiICAgY2FsbCBEZWNobygiY29tcHV0ZWQgY3BmPSIuYjpuZXRyd19jcGYpCiAgICBlbmRpZgpAQCAtMjg3NCw3ICsyOTk2LDcgQEAKICAgIGxldCBnOm5ldHJ3X2xpc3RfY21kID0gc3Vic3RpdHV0ZShnOm5ldHJ3X2xpc3RfY21kLCcgLWwnLCcnLCdnZScpCiAKICAgZWxzZQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsImJhZCB2YWx1ZSBmb3IgZzpuZXRyd19saXN0c3R5bGUgKD0iLnc6bmV0cndfbGlzdHN0eWxlLiIpIiw0NikKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJiYWQgdmFsdWUgZm9yIGc6bmV0cndfbGlzdHN0eWxlICg9Ii53Om5ldHJ3X2xpc3RzdHlsZS4iKSIsNDYpCiAgICBsZXQgZzpuZXRyd19saXN0c3R5bGUgPSBzOlRISU5MSVNUCiAgICBsZXQgdzpuZXRyd19saXN0c3R5bGUgPSBnOm5ldHJ3X2xpc3RzdHlsZQogICAgbGV0IGc6bmV0cndfbGlzdF9jbWQgID0gc3Vic3RpdHV0ZShnOm5ldHJ3X2xpc3RfY21kLCcgLWwnLCcnLCdnZScpCkBAIC0yODkxLDkgKzMwMTMsOSBAQAogICAiIHJlZnJlc2ggdGhlIGxpc3RpbmcKICIgIGNhbGwgRGVjaG8oInJlZnJlc2ggdGhlIGxpc3RpbmciKQogICBsZXQgc3Zwb3M9IG5ldHJ3I05ldHJ3U2F2ZVBvc24oKQotICBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKLSAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQotICBjYWxsIHM6TmV0cndDdXJzb3JsaW5lKCkKKyAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCisgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKKyAga2VlcGogY2FsbCBzOk5ldHJ3Q3Vyc29yKCkKIAogICAiIGtlZXAgY3Vyc29yIG9uIHRoZSBmaWxlbmFtZQogICBzaWwhIGtlZXBqICQKQEAgLTI5NDEsNyArMzA2Myw3IEBACiAiICBjYWxsIERmdW5jKCJOZXRyd0Jvb2ttYXJrTWVudSgpICBoaXN0Y250PSIuZzpuZXRyd19kaXJoaXN0X2NudC4iIG1lbnVjbnQ9Ii5zOm5ldHJ3X21lbnVjbnQpCiAKICAgIiB0aGUgZm9sbG93aW5nIHRlc3QgYXNzdXJlcyB0aGF0IGd2aW0gaXMgcnVubmluZywgaGFzIG1lbnVzIGF2YWlsYWJsZSwgYW5kIGhhcyBtZW51cyBlbmFibGVkLgotICBpZiBoYXMoImd1aSIpICYmIGhhcygibWVudSIpICYmIGhhcygiZ3VpX3J1bm5pbmciKSAmJiAmZ28gPX4gJ20nICYmIGc6bmV0cndfbWVudQorICBpZiBoYXMoImd1aSIpICYmIGhhcygibWVudSIpICYmIGhhcygiZ3VpX3J1bm5pbmciKSAmJiAmZ28gPX4jICdtJyAmJiBnOm5ldHJ3X21lbnUKICAgIGlmIGV4aXN0cygiZzpOZXRyd1RvcEx2bE1lbnUiKQogIiAgICBjYWxsIERlY2hvKCJyZW1vdmluZyAiLmc6TmV0cndUb3BMdmxNZW51LiJCb29rbWFya3MgbWVudSBpdGVtKHMpIikKICAgICBleGUgJ3NpbCEgdW5tZW51ICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jvb2ttYXJrcycKQEAgLTI5NTUsNyArMzA3Nyw3IEBACiAgICBpZiBleGlzdHMoImc6bmV0cndfYm9va21hcmtsaXN0IikgJiYgZzpuZXRyd19ib29rbWFya2xpc3QgIT0gW10KICAgICBsZXQgY250PSAxCiAgICAgZm9yIGJtZCBpbiBnOm5ldHJ3X2Jvb2ttYXJrbGlzdAotIiAgICAgY2FsbCBEZWNobygnc2lsZW50ISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4iLjIuIi5jbnQuIiAiLmc6TmV0cndUb3BMdmxNZW51LidCb29rbWFyay4nLmJtZC4nCTplICcuYm1kKQorIiAgICAgY2FsbCBEZWNobygnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4iLjIuIi5jbnQuIiAiLmc6TmV0cndUb3BMdmxNZW51LidCb29rbWFyay4nLmJtZC4nCTplICcuYm1kKQogICAgICBsZXQgYm1kPSBlc2NhcGUoYm1kLGc6bmV0cndfbWVudV9lc2NhcGUpCiAKICAgICAgIiBzaG93IGJvb2ttYXJrcyBmb3IgZ290byBtZW51CkBAIC0yOTY5LDIzICszMDkxLDI1IEBACiAgICBlbmRpZgogCiAgICAiIHNob3cgZGlyZWN0b3J5IGJyb3dzaW5nIGhpc3RvcnkKLSAgIGxldCBjbnQgICAgID0gZzpuZXRyd19kaXJoaXN0X2NudAotICAgbGV0IGZpcnN0ICAgPSAxCi0gICBsZXQgaGlzdGNudCA9IDAKLSAgIHdoaWxlICggZmlyc3QgfHwgY250ICE9IGc6bmV0cndfZGlyaGlzdF9jbnQgKQotICAgIGxldCBoaXN0Y250ICA9IGhpc3RjbnQgKyAxCi0gICAgbGV0IHByaW9yaXR5ID0gZzpuZXRyd19kaXJoaXN0X2NudCArIGhpc3RjbnQKLSAgICBpZiBleGlzdHMoImc6bmV0cndfZGlyaGlzdF97Y250fSIpCi0gICAgIGxldCBoaXN0ZGlyPSBlc2NhcGUoZzpuZXRyd19kaXJoaXN0X3tjbnR9LGc6bmV0cndfbWVudV9lc2NhcGUpCi0iICAgICBjYWxsIERlY2hvKCdzaWxlbnQhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LiIuMy4iLnByaW9yaXR5LiIgIi5nOk5ldHJ3VG9wTHZsTWVudS4nSGlzdG9yeS4nLmhpc3RkaXIuJwk6ZSAnLmhpc3RkaXIpCi0gICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4iLjMuIi5wcmlvcml0eS4iICIuZzpOZXRyd1RvcEx2bE1lbnUuJ0hpc3RvcnkuJy5oaXN0ZGlyLicJOmUgJy5oaXN0ZGlyLiJcPGNyPiIKLSAgICBlbmRpZgotICAgIGxldCBmaXJzdCA9IDAKLSAgICBsZXQgY250ICAgPSAoIGNudCAtIDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAotICAgIGlmIGNudCA8IDAKLSAgICAgbGV0IGNudD0gY250ICsgZzpuZXRyd19kaXJoaXN0bWF4Ci0gICAgZW5kaWYKLSAgIGVuZHdoaWxlCisgICBpZiBnOm5ldHJ3X2Rpcmhpc3RtYXggPiAwCisgICAgbGV0IGNudCAgICAgPSBnOm5ldHJ3X2Rpcmhpc3RfY250CisgICAgbGV0IGZpcnN0ICAgPSAxCisgICAgbGV0IGhpc3RjbnQgPSAwCisgICAgd2hpbGUgKCBmaXJzdCB8fCBjbnQgIT0gZzpuZXRyd19kaXJoaXN0X2NudCApCisgICAgIGxldCBoaXN0Y250ICA9IGhpc3RjbnQgKyAxCisgICAgIGxldCBwcmlvcml0eSA9IGc6bmV0cndfZGlyaGlzdF9jbnQgKyBoaXN0Y250CisgICAgIGlmIGV4aXN0cygiZzpuZXRyd19kaXJoaXN0X3tjbnR9IikKKyAgICAgIGxldCBoaXN0ZGlyPSBlc2NhcGUoZzpuZXRyd19kaXJoaXN0X3tjbnR9LGc6bmV0cndfbWVudV9lc2NhcGUpCisiICAgICBjYWxsIERlY2hvKCdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LiIuMy4iLnByaW9yaXR5LiIgIi5nOk5ldHJ3VG9wTHZsTWVudS4nSGlzdG9yeS4nLmhpc3RkaXIuJwk6ZSAnLmhpc3RkaXIpCisgICAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuIi4zLiIucHJpb3JpdHkuIiAiLmc6TmV0cndUb3BMdmxNZW51LidIaXN0b3J5LicuaGlzdGRpci4nCTplICcuaGlzdGRpci4iXDxjcj4iCisgICAgIGVuZGlmCisgICAgIGxldCBmaXJzdCA9IDAKKyAgICAgbGV0IGNudCAgID0gKCBjbnQgLSAxICkgJSBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICAgaWYgY250IDwgMAorICAgICAgbGV0IGNudD0gY250ICsgZzpuZXRyd19kaXJoaXN0bWF4CisgICAgIGVuZGlmCisgICAgZW5kd2hpbGUKKyAgIGVuZGlmCiAKICAgZW5kaWYKICIgIGNhbGwgRHJldCgiTmV0cndCb29rbWFya01lbnUiKQpAQCAtMzAwOSw4ICszMTMzLDggQEAKICAgIHJldHVybgogICBlbmRpZgogCi0gIGNhbGwgczpOZXRyd09wdGlvblNhdmUoInM6IikKLSAgY2FsbCBzOk5ldHJ3U2FmZU9wdGlvbnMoKQorICBrZWVwaiBjYWxsIHM6TmV0cndPcHRpb25TYXZlKCJzOiIpCisgIGtlZXBqIGNhbGwgczpOZXRyd1NhZmVPcHRpb25zKCkKICAgbGV0IG5iY2RfY3VycG9zICAgICAgICAgICAgICAgID0gbmV0cncjTmV0cndTYXZlUG9zbigpCiAgIGxldCBzOm5iY2RfY3VycG9zX3tidWZucignJScpfSA9IG5iY2RfY3VycG9zCiAgIGlmIChoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikpCkBAIC0zMDMxLDcgKzMxNTUsNyBAQAogCiAgIGlmIGRpcm5hbWUgIX4gZGlycGF0CiAgICAiIGFwcGFyZW50bHkgdmltIGlzICJyZWNvZ25pemluZyIgdGhhdCBpdCBpcyBpbiBhIGRpcmVjdG9yeSBhbmQKLSAgICIgaXMgcmVtb3ZpbmcgdGhlIHRyYWlsaW5nICIvIi4gIEJhZCBpZGVhLCBzbyBJIHB1dCBpdCBiYWNrLgorICAgIiBpcyByZW1vdmluZyB0aGUgdHJhaWxpbmcgIi8iLiAgQmFkIGlkZWEsIHNvIGxldCdzIHB1dCBpdCBiYWNrLgogICAgbGV0IGRpcm5hbWU9IGRpcm5hbWUuJy8nCiAiICAgY2FsbCBEZWNobygiYWRqdXN0aW5nIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKICAgZW5kaWYKQEAgLTMwNTksNyArMzE4Myw3IEBACiAgICAiIHRoaXMgbGV0cyBOZXRyd0Jyb3dzZVggYXZvaWQgdGhlIGVkaXQKICAgIGlmIGE6MCA8IDEKICIgICAgY2FsbCBEZWNobygic2V0IHVwIHdpbmRvd3MgZm9yIGVkaXRpbmc8Ii5mbmFtZWVzY2FwZShkaXJuYW1lKS4iPiAgZGlkc3BsaXQ9Ii4oZXhpc3RzKCJzOmRpZHNwbGl0Iik/IHM6ZGlkc3BsaXQgOiAiZG9lc24ndCBleGlzdCIpKQotICAgIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInM6IikKKyAgICBrZWVwaiBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJzOiIpCiAgICAgaWYgIWV4aXN0cygiczpkaWRzcGxpdCIpCiAgICAgIGlmICAgICBnOm5ldHJ3X2Jyb3dzZV9zcGxpdCA9PSAxCiAgICAgICBuZXcKQEAgLTMxMDcsMTIgKzMyMzEsMTIgQEAKICIgICAgIGNhbGwgRGVjaG8oImhhbmRsZSBvcHRpb25hbCBGdW5jcmVmcyIpCiAgICAgIGlmIHR5cGUoZzpOZXRyd19mdW5jcmVmKSA9PSAyCiAiICAgICAgY2FsbCBEZWNobygiaGFuZGxpbmcgYSBnOk5ldHJ3X2Z1bmNyZWYiKQotICAgICAgY2FsbCBnOk5ldHJ3X2Z1bmNyZWYoKQorICAgICAga2VlcGogY2FsbCBnOk5ldHJ3X2Z1bmNyZWYoKQogICAgICBlbHNlaWYgdHlwZShnOk5ldHJ3X2Z1bmNyZWYpID09IDMKICIgICAgICBjYWxsIERlY2hvKCJoYW5kbGluZyBhIGxpc3Qgb2YgZzpOZXRyd19mdW5jcmVmcyIpCiAgICAgICBmb3IgRm5jcmVmIGluIGc6TmV0cndfZnVuY3JlZgogICAgICAgIGlmIHR5cGUoRm5jUmVmKSA9PSAyCi0gICAgICAgIGNhbGwgRm5jUmVmKCkKKyAgICAgICAga2VlcGogY2FsbCBGbmNSZWYoKQogICAgICAgIGVuZGlmCiAgICAgICBlbmRmb3IKICAgICAgZW5kaWYKQEAgLTMxMjUsMTUgKzMyNDksMTUgQEAKICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiICAgY2FsbCBEZWNobygnY2FzZSAianVzdCBnbyB0byBuZXcgZGlyZWN0b3J5IHNwZWMiOiBuZXdkaXI8Jy5uZXdkaXIuJz4nKQogICAgbGV0IGRpcm5hbWU9IG5ld2RpcgotICAgY2FsbCBzOlNldFJleERpcihhOmlzbG9jYWwsZGlybmFtZSkKLSAgIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInM6IikKKyAgIGtlZXBqIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGRpcm5hbWUpCisgICBrZWVwaiBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJzOiIpCiAKICAgZWxzZWlmIG5ld2RpciA9PSAnLi8nCiAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAiIHJlZnJlc2ggdGhlIGRpcmVjdG9yeSBsaXN0CiAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiICAgY2FsbCBEZWNobygnY2FzZSAicmVmcmVzaCBkaXJlY3RvcnkgbGlzdGluZyI6IG5ld2RpciA9PSAiLi8iJykKLSAgIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGRpcm5hbWUpCisgICBrZWVwaiBjYWxsIHM6U2V0UmV4RGlyKGE6aXNsb2NhbCxkaXJuYW1lKQogCiAgIGVsc2VpZiBuZXdkaXIgPT0gJy4uLycKICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzE3Myw3ICszMjk3LDcgQEAKICAgICBlbmRpZgogIiAgICBjYWxsIERlY2hvKCJ1bml4OiBkaXJuYW1lPCIuZGlybmFtZS4iPiAoZ28gdXAgb25lIGRpcikiKQogICAgZW5kaWYKLSAgIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGRpcm5hbWUpCisgICBrZWVwaiBjYWxsIHM6U2V0UmV4RGlyKGE6aXNsb2NhbCxkaXJuYW1lKQogCiAgIGVsc2VpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVCAmJiBleGlzdHMoInc6bmV0cndfdHJlZWRpY3QiKQogIiAgIGNhbGwgRGVjaG8oJ2Nhc2UgbGlzdHN0eWxlIGlzIFRSRUVMSVNUIGFuZCB3Om5ldHJ3X3RyZWVkaWN0IGV4aXN0cycpCkBAIC0zMjMxLDE3ICszMzU1LDE3IEBACiAgICAgbGV0IGRpcm5hbWU9IHN1YnN0aXR1dGUodHJlZWRpciwnLyokJywnLycsJycpCiAiICAgIGNhbGwgRGVjaG8oImdvIGRvd24gb25lIGRpcjogdHJlZWRpcjwiLnRyZWVkaXIuIj4iKQogICAgZW5kaWYKLSAgIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGRpcm5hbWUpCisgICBrZWVwaiBjYWxsIHM6U2V0UmV4RGlyKGE6aXNsb2NhbCxkaXJuYW1lKQogICAgbGV0IHM6dHJlZWZvcmNlcmVkcmF3ID0gMQogCiAgIGVsc2UKICAgICIgZ28gZG93biBvbmUgZGlyZWN0b3J5CiAgICBsZXQgZGlybmFtZT0gczpDb21wb3NlUGF0aChkaXJuYW1lLG5ld2RpcikKICIgICBjYWxsIERlY2hvKCJnbyBkb3duIG9uZSBkaXI6IGRpcm5hbWU8Ii5kaXJuYW1lLiI+IG5ld2RpcjwiLm5ld2Rpci4iPiIpCi0gICBjYWxsIHM6U2V0UmV4RGlyKGE6aXNsb2NhbCxkaXJuYW1lKQorICAga2VlcGogY2FsbCBzOlNldFJleERpcihhOmlzbG9jYWwsZGlybmFtZSkKICAgZW5kaWYKIAotICBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJzOiIpCisgIGtlZXBqIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInM6IikKICAgaWYgZG9sb2Nrb3V0CiAiICAgY2FsbCBEZWNobygiZmlsZXdyaXRhYmxlKGRpcm5hbWU8Ii5kaXJuYW1lLiI+KT0iLmZpbGV3cml0YWJsZShkaXJuYW1lKSkKICAgIGlmIGZpbGV3cml0YWJsZShkaXJuYW1lKQpAQCAtMzM4MCwxNyArMzUwNCwxNyBAQAogCiAgIGVsc2VpZiBleGlzdHMoImc6bmV0cndfYnJvd3NleF92aWV3ZXIiKSAmJiBleGVjdXRhYmxlKHZpZXdlcikKICIgICBjYWxsIERlY2hvKCJnOm5ldHJ3X2Jyb3dzZXhfdmlld2VyPCIuZzpuZXRyd19icm93c2V4X3ZpZXdlci4iPiIpCi0iICAgY2FsbCBEZWNobygiZXhlIHNpbGVudCAhIi52aWV3ZXIuIiAiLnZpZXdvcHQuc2hlbGxlc2NhcGUoZm5hbWUsMSkucmVkaXIpCi0gICBleGUgInNpbGVudCAhIi52aWV3ZXIuIiAiLnZpZXdvcHQuc2hlbGxlc2NhcGUoZm5hbWUsMSkucmVkaXIKKyIgICBjYWxsIERlY2hvKCJleGUgc2lsICEiLnZpZXdlci4iICIudmlld29wdC5zaGVsbGVzY2FwZShmbmFtZSwxKS5yZWRpcikKKyAgIGV4ZSAic2lsICEiLnZpZXdlci4iICIudmlld29wdC5zaGVsbGVzY2FwZShmbmFtZSwxKS5yZWRpcgogICAgbGV0IHJldD0gdjpzaGVsbF9lcnJvcgogCiAgIGVsc2VpZiBoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW42NCIpCiAgICBpZiBleGVjdXRhYmxlKCJzdGFydCIpCi0iICAgIGNhbGwgRGVjaG8oJ2V4ZSBzaWxlbnQgIXN0YXJ0IHJ1bmRsbDMyIHVybC5kbGwsRmlsZVByb3RvY29sSGFuZGxlciAnLnNoZWxsZXNjYXBlKGZuYW1lLDEpKQotICAgIGV4ZSAnc2lsZW50ICFzdGFydCBydW5kbGwzMiB1cmwuZGxsLEZpbGVQcm90b2NvbEhhbmRsZXIgJy5zaGVsbGVzY2FwZShmbmFtZSwxKQorIiAgICBjYWxsIERlY2hvKCdleGUgc2lsICFzdGFydCBydW5kbGwzMiB1cmwuZGxsLEZpbGVQcm90b2NvbEhhbmRsZXIgJy5zaGVsbGVzY2FwZShmbmFtZSwxKSkKKyAgICBleGUgJ3NpbCAhc3RhcnQgcnVuZGxsMzIgdXJsLmRsbCxGaWxlUHJvdG9jb2xIYW5kbGVyICcuc2hlbGxlc2NhcGUoZm5hbWUsMSkKICAgIGVsc2VpZiBleGVjdXRhYmxlKCJydW5kbGwzMiIpCi0iICAgIGNhbGwgRGVjaG8oJ2V4ZSBzaWxlbnQgIXJ1bmRsbDMyIHVybC5kbGwsRmlsZVByb3RvY29sSGFuZGxlciAnLnNoZWxsZXNjYXBlKGZuYW1lLDEpKQotICAgIGV4ZSAnc2lsZW50ICFydW5kbGwzMiB1cmwuZGxsLEZpbGVQcm90b2NvbEhhbmRsZXIgJy5zaGVsbGVzY2FwZShmbmFtZSwxKQorIiAgICBjYWxsIERlY2hvKCdleGUgc2lsICFydW5kbGwzMiB1cmwuZGxsLEZpbGVQcm90b2NvbEhhbmRsZXIgJy5zaGVsbGVzY2FwZShmbmFtZSwxKSkKKyAgICBleGUgJ3NpbCAhcnVuZGxsMzIgdXJsLmRsbCxGaWxlUHJvdG9jb2xIYW5kbGVyICcuc2hlbGxlc2NhcGUoZm5hbWUsMSkKICAgIGVsc2UKICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywicnVuZGxsMzIgbm90IG9uIHBhdGgiLDc0KQogICAgZW5kaWYKQEAgLTMzOTgsMTcgKzM1MjIsMTcgQEAKICAgIGxldCByZXQ9IHY6c2hlbGxfZXJyb3IKIAogICBlbHNlaWYgaGFzKCJ1bml4IikgJiYgZXhlY3V0YWJsZSgiZ25vbWUtb3BlbiIpICYmICFzOmhhc2tkZWluaXQKLSIgICBjYWxsIERlY2hvKCJleGUgc2lsZW50ICFnbm9tZS1vcGVuICIuc2hlbGxlc2NhcGUoZm5hbWUsMSkuIiAiLnJlZGlyKQorIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWwgIWdub21lLW9wZW4gIi5zaGVsbGVzY2FwZShmbmFtZSwxKS4iICIucmVkaXIpCiAgICBleGUgInNpbCAhZ25vbWUtb3BlbiAiLnNoZWxsZXNjYXBlKGZuYW1lLDEpLnJlZGlyCiAgICBsZXQgcmV0PSB2OnNoZWxsX2Vycm9yCiAKICAgZWxzZWlmIGhhcygidW5peCIpICYmIGV4ZWN1dGFibGUoImtmbWNsaWVudCIpICYmIHM6aGFza2RlaW5pdAotIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWxlbnQgIWtmbWNsaWVudCBleGVjICIuc2hlbGxlc2NhcGUoZm5hbWUsMSkuIiAiLnJlZGlyKQorIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWwgIWtmbWNsaWVudCBleGVjICIuc2hlbGxlc2NhcGUoZm5hbWUsMSkuIiAiLnJlZGlyKQogICAgZXhlICJzaWwgIWtmbWNsaWVudCBleGVjICIuc2hlbGxlc2NhcGUoZm5hbWUsMSkuIiAiLnJlZGlyCiAgICBsZXQgcmV0PSB2OnNoZWxsX2Vycm9yCiAKICAgZWxzZWlmIGhhcygibWFjdW5peCIpICYmIGV4ZWN1dGFibGUoIm9wZW4iKQotIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWxlbnQgIW9wZW4gIi5zaGVsbGVzY2FwZShmbmFtZSwxKS4iICIucmVkaXIpCisiICAgY2FsbCBEZWNobygiZXhlIHNpbCAhb3BlbiAiLnNoZWxsZXNjYXBlKGZuYW1lLDEpLiIgIi5yZWRpcikKICAgIGV4ZSAic2lsICFvcGVuICIuc2hlbGxlc2NhcGUoZm5hbWUsMSkuIiAiLnJlZGlyCiAgICBsZXQgcmV0PSB2OnNoZWxsX2Vycm9yCiAKQEAgLTM0NDAsNyArMzU2NCw3IEBACiAgICBpZiBnOm5ldHJ3X3VzZV9ub3N3ZgogICAgIHNldGxvY2FsIG5vc3dmCiAgICBlbmRpZgotICAgZXhlICJrZWVwaiBub3JtISBcPGMtbz4iCisgICBleGUgInNpbCEga2VlcGogbm9ybSEgXDxjLW8+IgogIiAgIHJlZHJhdyEKICAgZW5kaWYKIApAQCAtMzQ1OSwxMCArMzU4MywxMCBAQAogIiAgY2FsbCBEZWNobygiY2hncGVybTwiLmNoZ3Blcm0uIj4iKQogICBjYWxsIHN5c3RlbShjaGdwZXJtKQogICBpZiB2OnNoZWxsX2Vycm9yICE9IDAKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coMSwiY2hhbmdpbmcgcGVybWlzc2lvbiBvbiBmaWxlPCIuZXhwYW5kKCI8Y2ZpbGU+IikuIj4gc2VlbXMgdG8gaGF2ZSBmYWlsZWQiLDc1KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygxLCJjaGFuZ2luZyBwZXJtaXNzaW9uIG9uIGZpbGU8Ii5leHBhbmQoIjxjZmlsZT4iKS4iPiBzZWVtcyB0byBoYXZlIGZhaWxlZCIsNzUpCiAgIGVuZGlmCiAgIGlmIGE6aXNsb2NhbAotICAgY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCisgICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKICAgZW5kaWYKICIgIGNhbGwgRHJldCgiczpOZXRyd0NoZ1Blcm0iKQogZW5kZnVuCkBAIC0zNTU1LDcgKzM2NzksNyBAQAogICAgZWxzZWlmIGE6c3R5bGUgPT0gNiAgIiBUZXhwbG9yZQogICAgIGNhbGwgczpTYXZlQnVmVmFycygpCiAiICAgIGNhbGwgRGVjaG8oInN0eWxlICA9IDY6IFRleHBsb3JlIikKLSAgICB0YWJuZXcKKyAgICBleGUgInRhYm5ldyAiLmZuYW1lZXNjYXBlKGN1cmRpcikKICAgICBjYWxsIHM6UmVzdG9yZUJ1ZlZhcnMoKQogICAgZW5kaWYKICAgIGNhbGwgczpSZXN0b3JlV2luVmFycygpCkBAIC0zNjk5LDcgKzM4MjMsNyBAQAogICAgICAiIE5leHBsb3JlCiAiICAgICBjYWxsIERlY2hvKCJjYXNlIE5leHBsb3JlIHdpdGggc3RhcnBhdD0iLnN0YXJwYXQuIjogKGluZHg9Ii5pbmR4LiIpIikKICAgICAgaWYgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpc3QiKSAiIHNhbml0eSBjaGVjawotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInVzaW5nIE5leHBsb3JlIG9yIDxzLWRvd24+IGltcHJvcGVybHk7IHNlZSBoZWxwIGZvciBuZXRydy1zdGFyc3RhciIsNDApCisgICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywidXNpbmcgTmV4cGxvcmUgb3IgPHMtZG93bj4gaW1wcm9wZXJseTsgc2VlIGhlbHAgZm9yIG5ldHJ3LXN0YXJzdGFyIiw0MCkKICAgICAgIHNpbCEgbGV0IEAqID0ga2VlcHJlZ3N0YXIKICAgICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKICAgICAgIHNpbCEgbGV0IEAvID0ga2VlcHJlZ3NsYXNoCkBAIC0zNzIyLDcgKzM4NDYsNyBAQAogICAgICAiIFBleHBsb3JlCiAiICAgICBjYWxsIERlY2hvKCJjYXNlIFBleHBsb3JlIHdpdGggc3RhcnBhdD0iLnN0YXJwYXQuIjogKGluZHg9Ii5pbmR4LiIpIikKICAgICAgaWYgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpc3QiKSAiIHNhbml0eSBjaGVjawotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInVzaW5nIFBleHBsb3JlIG9yIDxzLXVwPiBpbXByb3Blcmx5OyBzZWUgaGVscCBmb3IgbmV0cnctc3RhcnN0YXIiLDQxKQorICAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInVzaW5nIFBleHBsb3JlIG9yIDxzLXVwPiBpbXByb3Blcmx5OyBzZWUgaGVscCBmb3IgbmV0cnctc3RhcnN0YXIiLDQxKQogICAgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgogICAgICAgc2lsISBsZXQgQCsgPSBrZWVwcmVnc3RhcgogICAgICAgc2lsISBsZXQgQC8gPSBrZWVwcmVnc2xhc2gKQEAgLTM3NDUsNyArMzg2OSw3IEBACiAgICAgICIgRXhwbG9yZSAtLSBpbml0aWFsaXplCiAgICAgICIgYnVpbGQgbGlzdCBvZiBmaWxlcyB0byBFeHBsb3JlIHdpdGggTmV4cGxvcmUvUGV4cGxvcmUKICIgICAgIGNhbGwgRGVjaG8oInN0YXJwYXQ9Ii5zdGFycGF0LiI6IGNhc2UgRXhwbG9yZTogaW5pdGlhbGl6ZSAoaW5keD0iLmluZHguIikiKQotICAgICBjYWxsIHM6TmV0cndDbGVhckV4cGxvcmUoKQorICAgICBrZWVwaiBjYWxsIHM6TmV0cndDbGVhckV4cGxvcmUoKQogICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2luZHg9IDAKICAgICAgaWYgIWV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQogICAgICAgbGV0IGI6bmV0cndfY3VyZGlyPSBnZXRjd2QoKQpAQCAtMzc3NSw5ICszODk5LDkgQEAKICAgICAgIGNhdGNoIC9eVmltXCUoKFxhXCspXClcPTpFNDgwLwogICAgICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCdubyBmaWxlcyBtYXRjaGVkIHBhdHRlcm48Jy5wYXR0ZXJuLic+Jyw0NSkKICAgICAgICBpZiAmaGxzIHwgbGV0IGtlZXByZWdzbGFzaD0gczpFeHBsb3JlUGF0SGxzKHBhdHRlcm4pIHwgZW5kaWYKLSAgICAgICBzaWxlbnQhIGxldCBAKiA9IGtlZXByZWdzdGFyCi0gICAgICAgc2lsZW50ISBsZXQgQCsgPSBrZWVwcmVnc3RhcgotICAgICAgIHNpbGVudCEgbGV0IEAvID0ga2VlcHJlZ3NsYXNoCisgICAgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgorICAgICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKKyAgICAgICBzaWwhIGxldCBALyA9IGtlZXByZWdzbGFzaAogIiAgICAgICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUgOiBubyBmaWxlcyBtYXRjaGVkIHBhdHRlcm4iKQogICAgICAgIHJldHVybgogICAgICAgZW5kdHJ5CkBAIC0zODA3LDcgKzM5MzEsNyBAQAogIiAgICAgY2FsbCBEZWNobygidzpuZXRyd19leHBsb3JlX2xpc3RsZW49Ii53Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbikKIAogICAgICBpZiB3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiA9PSAwIHx8ICh3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiA9PSAxICYmIHc6bmV0cndfZXhwbG9yZV9saXN0WzBdID1+ICdcKlwqXC8nKQotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsIm5vIGZpbGVzIG1hdGNoZWQiLDQyKQorICAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsIm5vIGZpbGVzIG1hdGNoZWQiLDQyKQogICAgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgogICAgICAgc2lsISBsZXQgQCsgPSBrZWVwcmVnc3RhcgogICAgICAgc2lsISBsZXQgQC8gPSBrZWVwcmVnc2xhc2gKQEAgLTM4MjUsNyArMzk0OSw3IEBACiAiICAgICBjYWxsIERlY2hvKCJ3cmFwIGluZHggKGluZHg9Ii5pbmR4LiIgbGlzdGxlbj0iLnc6bmV0cndfZXhwbG9yZV9saXN0bGVuLiIpIikKICAgICAgbGV0IGluZHggICAgICAgICAgICAgICAgPSAoaW5keCA8IDApPyAoIHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIC0gMSApIDogMAogICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2luZHg9IGluZHgKLSAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOk5PVEUsIm5vIG1vcmUgZmlsZXMgbWF0Y2ggRXhwbG9yZSBwYXR0ZXJuIiw0MykKKyAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOk5PVEUsIm5vIG1vcmUgZmlsZXMgbWF0Y2ggRXhwbG9yZSBwYXR0ZXJuIiw0MykKICAgICBlbmRpZgogCiAgICAgZXhlICJsZXQgZGlyZmlsZT0gdzpuZXRyd19leHBsb3JlX2xpc3RbIi5pbmR4LiJdIgpAQCAtMzg0NiwxMyArMzk3MCwxMyBAQAogICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbXRjaGNudCA9IGluZHggKyAxCiAgICAgbGV0IHc6bmV0cndfZXhwbG9yZV9idWZuciAgID0gYnVmbnIoIiUiKQogICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGluZSAgICA9IGxpbmUoIi4iKQotICAgIGNhbGwgczpTZXR1cE5ldHJ3U3RhdHVzTGluZSgnJWYgJWglbSVyJT0lOSole05ldHJ3U3RhdHVzTGluZSgpfScpCisgICAga2VlcGogY2FsbCBzOlNldHVwTmV0cndTdGF0dXNMaW5lKCclZiAlaCVtJXIlPSU5KiV7TmV0cndTdGF0dXNMaW5lKCl9JykKICIgICAgY2FsbCBEZWNobygiZXhwbG9yZTogbXRjaGNudD0iLnc6bmV0cndfZXhwbG9yZV9tdGNoY250LiIgYnVmbnI9Ii53Om5ldHJ3X2V4cGxvcmVfYnVmbnIuIiBsaW5lIyIudzpuZXRyd19leHBsb3JlX2xpbmUpCiAKICAgIGVsc2UKICIgICAgY2FsbCBEZWNobygieW91ciB2aW0gZG9lcyBub3QgaGF2ZSArcGF0aF9leHRyYSIpCiAgICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCi0gICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ5b3VyIHZpbSBuZWVkcyB0aGUgK3BhdGhfZXh0cmEgZmVhdHVyZSBmb3IgRXhwbG9yaW5nIHdpdGggKiohIiw0NCkKKyAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInlvdXIgdmltIG5lZWRzIHRoZSArcGF0aF9leHRyYSBmZWF0dXJlIGZvciBFeHBsb3Jpbmcgd2l0aCAqKiEiLDQ0KQogICAgIGVuZGlmCiAgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgogICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKQEAgLTM4NjksOSArMzk5Myw5IEBACiAgICBlbmRpZgogICAgbGV0IG5ld2Rpcj0gZGlybmFtZQogICAgaWYgIWV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQotICAgIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhnZXRjd2QoKSkKKyAgICBrZWVwaiBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soZ2V0Y3dkKCkpCiAgICBlbHNlCi0gICAgY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKHM6TmV0cndCcm93c2VDaGdEaXIoMSxuZXdkaXIpKQorICAgIGtlZXBqIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsbmV3ZGlyKSkKICAgIGVuZGlmCiAgIGVuZGlmCiAKQEAgLTM5NDQsNiArNDA2OCw0MiBAQAogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIHM6TmV0cndGb3JjZUNoZ0RpcjogKGdkIHN1cHBvcnQpIEZvcmNlIHRyZWF0bWVudCBhcyBhIGRpcmVjdG9yeSB7e3syCitmdW4hIHM6TmV0cndGb3JjZUNoZ0Rpcihpc2xvY2FsLG5ld2RpcikKKyIgIGNhbGwgRGZ1bmMoInM6TmV0cndGb3JjZUNoZ0Rpcihpc2xvY2FsPSIuYTppc2xvY2FsLiIgbmV3ZGlyPCIuYTpuZXdkaXIuIj4pIikKKyAgaWYgYTpuZXdkaXIgIX4gJy8kJworICAgIiBvaywgbG9va3MgbGlrZSBmb3JjZSBpcyBuZWVkZWQgdG8gZ2V0IGRpcmVjdG9yeS1zdHlsZSB0cmVhdG1lbnQKKyAgIGlmIGE6bmV3ZGlyID1+ICdAJCcKKyAgICBsZXQgbmV3ZGlyPSBzdWJzdGl0dXRlKGE6bmV3ZGlyLCdAJCcsJy8nLCcnKQorICAgZWxzZWlmIGE6bmV3ZGlyID1+ICdbKj18XFxdJCcKKyAgICBsZXQgbmV3ZGlyPSBzdWJzdGl0dXRlKGE6bmV3ZGlyLCcuJCcsJy8nLCcnKQorICAgZWxzZQorICAgIGxldCBuZXdkaXI9IGE6bmV3ZGlyLicvJworICAgZW5kaWYKKyIgICBjYWxsIERlY2hvKCJhZGp1c3RpbmcgbmV3ZGlyPCIubmV3ZGlyLiI+IGR1ZSB0byBnZCIpCisgIGVsc2UKKyAgICIgc2hvdWxkIGFscmVhZHkgYmUgZ2V0dGluZyB0cmVhdG1lbnQgYXMgYSBkaXJlY3RvcnkKKyAgIGxldCBuZXdkaXI9IGE6bmV3ZGlyCisgIGVuZGlmCisgIGNhbGwgczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsbmV3ZGlyKQorICBjYWxsIHM6TmV0cndCcm93c2UoYTppc2xvY2FsLG5ld2RpcikKKyIgIGNhbGwgRHJldCgiczpOZXRyd0ZvcmNlQ2hnRGlyIikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBzOk5ldHJ3Rm9yY2VGaWxlOiAoZ2Ygc3VwcG9ydCkgRm9yY2UgdHJlYXRtZW50IGFzIGEgZmlsZSB7e3syCitmdW4hIHM6TmV0cndGb3JjZUZpbGUoaXNsb2NhbCxuZXdmaWxlKQorIiAgIiAgY2FsbCBEZnVuYygiczpOZXRyd0ZvcmNlRmlsZShpc2xvY2FsPSIuYTppc2xvY2FsLiIgbmV3ZGlyPCIuYTpuZXdkaXIuIj4pIikKKyAgaWYgYTpuZXdmaWxlID1+ICdbL0AqPXxcXF0kJworICAgbGV0IG5ld2ZpbGU9IHN1YnN0aXR1dGUoYTpuZXdmaWxlLCcuJCcsJycsJycpCisgIGVsc2UKKyAgIGxldCBuZXdmaWxlPSBhOm5ld2ZpbGUKKyAgZW5kaWYKKyAgY2FsbCBzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCxuZXdmaWxlKQorIiAgY2FsbCBEcmV0KCJzOk5ldHJ3Rm9yY2VGaWxlIikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBzOk5ldHJ3SGlkZTogdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHRoZSAiYSIgbWFwIGZvciBicm93c2luZyB7e3syCiAiICAgICAgICAgIGFuZCBzd2l0Y2hlcyB0aGUgaGlkaW5nIG1vZGUuICBUaGUgYWN0dWFsIGhpZGluZyBpcyBkb25lIGJ5CiAiICAgICAgICAgIHM6TmV0cndMaXN0SGlkZSgpLgpAQCAtMzk3Nyw3ICs0MTM3LDcgQEAKICIgICAgIGNhbGwgRGVjaG8oImhpZGU6IGc6bmV0cndfbGlzdF9oaWRlPCIuZzpuZXRyd19saXN0X2hpZGUuIj4iKQogICAgIGVuZGlmCiAgICBlbmRmb3IKLSAgIGNhbGwgczpOZXRyd1VubWFya0xpc3QoYnVmbnIoIiUiKSxiOm5ldHJ3X2N1cmRpcikKKyAgIGtlZXBqIGNhbGwgczpOZXRyd1VubWFya0xpc3QoYnVmbnIoIiUiKSxiOm5ldHJ3X2N1cmRpcikKICAgIGxldCBnOm5ldHJ3X2hpZGU9IDEKIAogICBlbHNlCkBAIC0zOTg2LDE0ICs0MTQ2LDE0IEBACiAgICBsZXQgZzpuZXRyd19oaWRlPShnOm5ldHJ3X2hpZGUrMSklMwogICAgZXhlICJrZWVwaiBub3JtISAwIgogICAgaWYgZzpuZXRyd19oaWRlICYmIGc6bmV0cndfbGlzdF9oaWRlID09ICIiCi0gICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInlvdXIgaGlkaW5nIGxpc3QgaXMgZW1wdHkhIiw0OSkKKyAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywieW91ciBoaWRpbmcgbGlzdCBpcyBlbXB0eSEiLDQ5KQogIiAgICBjYWxsIERyZXQoIk5ldHJ3SGlkZSIpCiAgICAgcmV0dXJuCiAgICBlbmRpZgogICBlbmRpZgogCi0gIGNhbGwgczpOZXRyd1JlZnJlc2goYTppc2xvY2FsLHM6TmV0cndCcm93c2VDaGdEaXIoYTppc2xvY2FsLCcuLycpKQotICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCisgIGtlZXBqIGNhbGwgczpOZXRyd1JlZnJlc2goYTppc2xvY2FsLHM6TmV0cndCcm93c2VDaGdEaXIoYTppc2xvY2FsLCcuLycpKQorICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCiAiICBjYWxsIERyZXQoIk5ldHJ3SGlkZSIpCiBlbmRmdW4KIApAQCAtNDAxNCw4ICs0MTc0LDggQEAKICAgZW5kaWYKIAogICAiIHJlZnJlc2ggc2NyZWVuIGFuZCByZXR1cm4gdG8gc2F2ZWQgcG9zaXRpb24KLSAgY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCi0gIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKKyAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCisgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKICIgIGNhbGwgRHJldCgiczpOZXRyd0hpZGRlbiIpCiBlbmRmdW4KIApAQCAtNDA2MCw4ICs0MjIwLDExIEBACiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3TGVmdG1vdXNlKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIikiKQogCiAgICIgY2hlY2sgaWYgdGhlIHN0YXR1cyBiYXIgd2FzIGNsaWNrZWQgb24gaW5zdGVhZCBvZiBhIGZpbGUvZGlyZWN0b3J5IG5hbWUKKyAgd2hpbGUgZ2V0Y2hhcigwKSAhPSAwCisgICAiY2xlYXIgdGhlIGlucHV0IHN0cmVhbQorICBlbmR3aGlsZQogICBjYWxsIGZlZWRrZXlzKCJcPExlZnRNb3VzZT4iKQotICBsZXQgYz0gZ2V0Y2hhcigpCisgIGxldCBjICAgICAgICAgID0gZ2V0Y2hhcigpCiAgIGxldCBtb3VzZV9sbnVtID0gdjptb3VzZV9sbnVtCiAgIGxldCB3bGFzdGxpbmUgID0gbGluZSgndyQnKQogICBsZXQgbGFzdGxpbmUgICA9IGxpbmUoJyQnKQpAQCAtNDA3OSwxMSArNDI0MiwxMSBAQAogCiAgIGlmIGE6aXNsb2NhbAogICAgaWYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCi0gICAgY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKHM6TmV0cndCcm93c2VDaGdEaXIoMSxzOk5ldHJ3R2V0V29yZCgpKSkKKyAgICBrZWVwaiBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soczpOZXRyd0Jyb3dzZUNoZ0RpcigxLHM6TmV0cndHZXRXb3JkKCkpKQogICAgZW5kaWYKICAgZWxzZQogICAgaWYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCi0gICAgY2FsbCBzOk5ldHJ3QnJvd3NlKDAsczpOZXRyd0Jyb3dzZUNoZ0RpcigwLHM6TmV0cndHZXRXb3JkKCkpKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd0Jyb3dzZSgwLHM6TmV0cndCcm93c2VDaGdEaXIoMCxzOk5ldHJ3R2V0V29yZCgpKSkKICAgIGVuZGlmCiAgIGVuZGlmCiAiICBjYWxsIERyZXQoInM6TmV0cndMZWZ0bW91c2UiKQpAQCAtNDA5Myw3ICs0MjU2LDcgQEAKICIgczpOZXRyd0xpc3RIaWRlOiB1c2VzIFtyYW5nZV1nfi4uLn5kIHRvIGRlbGV0ZSBmaWxlcyB0aGF0IG1hdGNoIGNvbW1hIHt7ezIKICIgc2VwYXJhdGVkIHBhdHRlcm5zIGdpdmVuIGluIGc6bmV0cndfbGlzdF9oaWRlCiBmdW4hIHM6TmV0cndMaXN0SGlkZSgpCi0iICBjYWxsIERmdW5jKCJOZXRyd0xpc3RIaWRlKCkgaGlkZT0iLmc6bmV0cndfaGlkZS4iIGxpc3RoaWRlPCIuZzpuZXRyd19saXN0X2hpZGUuIj4iKQorIiAgY2FsbCBEZnVuYygiTmV0cndMaXN0SGlkZSgpIGc6bmV0cndfaGlkZT0iLmc6bmV0cndfaGlkZS4iIGc6bmV0cndfbGlzdF9oaWRlPCIuZzpuZXRyd19saXN0X2hpZGUuIj4iKQogCiAgICIgZmluZCBhIGNoYXJhY3RlciBub3QgaW4gdGhlICJoaWRlIiBzdHJpbmcgdG8gdXNlIGFzIGEgc2VwYXJhdG9yIGZvciA6ZyBhbmQgOnYgY29tbWFuZHMKICAgIiBIb3ctaXQtd29ya3M6IHRha2UgdGhlIGhpZGluZyBjb21tYW5kLCBjb252ZXJ0IGl0IGludG8gYSByYW5nZS4gIER1cGxpY2F0ZQpAQCAtNDEyNiw2ICs0Mjg5LDEwIEBACiAgICBleGUgJ3NpbCBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250LicsJHNAXlwlKCAvLUtFRVAtLyBcKVwrQEBlJwogICBlbmRpZgogCisgICIgcmVtb3ZlIGFueSBibGFuayBsaW5lcyB0aGF0IGhhdmUgc29tZWhvdyByZW1haW5lZC4KKyAgIiBUaGlzIHNlZW1zIHRvIGhhcHBlbiB1bmRlciBXaW5kb3dzLgorICBleGUgJ3NpbCEga2VlcGogMSwkZ0BeXHMqJEBkJworCiAiICBjYWxsIERyZXQoIk5ldHJ3TGlzdEhpZGUiKQogZW5kZnVuCiAKQEAgLTQxNDUsNyArNDMxMiw3IEBACiAiICBjYWxsIERlY2hvKCJuZXcgZzpuZXRyd19saXN0X2hpZGU8Ii5nOm5ldHJ3X2xpc3RfaGlkZS4iPiIpCiAKICAgIiByZWZyZXNoIHRoZSBsaXN0aW5nCi0gIHNpbGVudCBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwiLi8iKSkKKyAgc2lsIGtlZXBqIGNhbGwgczpOZXRyd1JlZnJlc2goYTppc2xvY2FsLHM6TmV0cndCcm93c2VDaGdEaXIoYTppc2xvY2FsLCIuLyIpKQogCiAgICIgcmVzdG9yZSBjdXJzb3IgcG9zaXRpb24KICAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQpAQCAtNDE2NSw4ICs0MzMyLDggQEAKIAogICAiIHJlZnJlc2ggdGhlIGxpc3RpbmcKICAgbGV0IGc6bmV0cndfc29ydF9zZXF1ZW5jZT0gbmV3c29ydHNlcQotICBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKLSAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKKyAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQogCiAiICBjYWxsIERyZXQoIk5ldFNvcnRTZXF1ZW5jZSIpCiBlbmRmdW4KQEAgLTQxOTgsMTQgKzQzNjUsMTQgQEAKICIgICBjYWxsIERlY2hvKCJmdWxsbmV3ZGlyPCIuZnVsbG5ld2Rpci4iPiIpCiAgICBpZiBpc2RpcmVjdG9yeShmdWxsbmV3ZGlyKQogICAgIGlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQotICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiPCIubmV3ZGlybmFtZS4iPiBpcyBhbHJlYWR5IGEgZGlyZWN0b3J5ISIsMjQpCisgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCI8Ii5uZXdkaXJuYW1lLiI+IGlzIGFscmVhZHkgYSBkaXJlY3RvcnkhIiwyNCkKICAgICBlbmRpZgogIiAgICBjYWxsIERyZXQoIk5ldHJ3TWFrZURpciA6IGRpcmVjdG9yeTwiLm5ld2Rpcm5hbWUuIj4gZXhpc3RzIHByZXZpb3VzbHkiKQogICAgIHJldHVybgogICAgZW5kaWYKICAgIGlmIHM6RmlsZVJlYWRhYmxlKGZ1bGxuZXdkaXIpCiAgICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCi0gICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCI8Ii5uZXdkaXJuYW1lLiI+IGlzIGFscmVhZHkgYSBmaWxlISIsMjUpCisgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCI8Ii5uZXdkaXJuYW1lLiI+IGlzIGFscmVhZHkgYSBmaWxlISIsMjUpCiAgICAgZW5kaWYKICIgICAgY2FsbCBEcmV0KCJOZXRyd01ha2VEaXIgOiBmaWxlPCIubmV3ZGlybmFtZS4iPiBleGlzdHMgcHJldmlvdXNseSIpCiAgICAgcmV0dXJuCkBAIC00MjE5LDcgKzQzODYsNyBAQAogICAgIGxldCBuZXRyd19vcmlnZGlyPSBzOk5ldHJ3R2V0Y3dkKDEpCiAgICAgZXhlICdrZWVwaiBsY2QgJy5mbmFtZWVzY2FwZShiOm5ldHJ3X2N1cmRpcikKICIgICAgY2FsbCBEZWNobygibmV0cndfb3JpZ2RpcjwiLm5ldHJ3X29yaWdkaXIuIj46IGxjZCBiOm5ldHJ3X2N1cmRpcjwiLmZuYW1lZXNjYXBlKGI6bmV0cndfY3VyZGlyKS4iPiIpCi0iICAgIGNhbGwgRGVjaG8oImV4ZSBzaWxlbnQhICEiLmc6bmV0cndfbG9jYWxfbWtkaXIuJyAnLnNoZWxsZXNjYXBlKG5ld2Rpcm5hbWUsMSkpCisiICAgIGNhbGwgRGVjaG8oImV4ZSBzaWwhICEiLmc6bmV0cndfbG9jYWxfbWtkaXIuJyAnLnNoZWxsZXNjYXBlKG5ld2Rpcm5hbWUsMSkpCiAgICAgZXhlICJzaWwhICEiLmc6bmV0cndfbG9jYWxfbWtkaXIuJyAnLnNoZWxsZXNjYXBlKG5ld2Rpcm5hbWUsMSkKICAgICBpZiAhZzpuZXRyd19rZWVwZGlyCiAgICAgIGV4ZSAna2VlcGogbGNkICcuZm5hbWVlc2NhcGUobmV0cndfb3JpZ2RpcikKQEAgLTQyNDMsMjQgKzQ0MTAsMjQgQEAKICIgICBjYWxsIERlY2hvKCJyZW1vdGUgbWtkaXIiKQogICAgbGV0IG1rZGlyY21kICA9IHM6TWFrZVNzaENtZChnOm5ldHJ3X21rZGlyX2NtZCkKICAgIGxldCBuZXdkaXJuYW1lPSBzdWJzdGl0dXRlKGI6bmV0cndfY3VyZGlyLCdeXCUoLlx7LX0vXClcezN9XCguKlwpJCcsJ1wxJywnJykubmV3ZGlybmFtZQotIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWxlbnQhICEiLm1rZGlyY21kLiIgIi5zaGVsbGVzY2FwZShuZXdkaXJuYW1lLDEpKQorIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWwhICEiLm1rZGlyY21kLiIgIi5zaGVsbGVzY2FwZShuZXdkaXJuYW1lLDEpKQogICAgZXhlICJzaWwhICEiLm1rZGlyY21kLiIgIi5zaGVsbGVzY2FwZShuZXdkaXJuYW1lLDEpCiAgICBpZiB2OnNoZWxsX2Vycm9yID09IDAKICAgICAiIHJlZnJlc2ggbGlzdGluZwogICAgIGxldCBzdnBvcz0gbmV0cncjTmV0cndTYXZlUG9zbigpCi0gICAgY2FsbCBzOk5ldHJ3UmVmcmVzaCgwLHM6TmV0cndCcm93c2VDaGdEaXIoMCwnLi8nKSkKLSAgICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCisgICAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaCgwLHM6TmV0cndCcm93c2VDaGdEaXIoMCwnLi8nKSkKKyAgICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCiAgICBlbHNlaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCi0gICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJ1bmFibGUgdG8gbWFrZSBkaXJlY3Rvcnk8Ii5uZXdkaXJuYW1lLiI+IiwyNykKKyAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsInVuYWJsZSB0byBtYWtlIGRpcmVjdG9yeTwiLm5ld2Rpcm5hbWUuIj4iLDI3KQogICAgZW5kaWYKICIgICByZWRyYXchCiAKICAgZWxzZWlmIGI6bmV0cndfbWV0aG9kID09IDIKICAgICIgQ09NQkFLIC0tIGZ1dHVyZSB3b3JrCi0gICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsIm1ha2luZyBkaXJlY3RvcmllcyB2aWEgZnRwIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIiw2OCkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibWFraW5nIGRpcmVjdG9yaWVzIHZpYSBmdHAgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiLDY4KQogICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMwogICAgIiBDT01CQUsgLS0gZnV0dXJlIHdvcmsKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibWFraW5nIGRpcmVjdG9yaWVzIHZpYSBmdHAgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiLDY4KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJtYWtpbmcgZGlyZWN0b3JpZXMgdmlhIGZ0cCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIsNjgpCiAgIGVuZGlmCiAKICIgIGNhbGwgRHJldCgiTmV0cndNYWtlRGlyIikKQEAgLTQyODMsMTQgKzQ0NTAsMTQgQEAKICIKICIgIENyZWF0ZXMgYSBidWZmZXIgdmVyc2lvbiBvZiBpc2xvY2FsCiAiICAgIGI6bmV0cndfaXNsb2NhbAotIgogZnVuISBzOk5ldHJ3TWFya0ZpbGUoaXNsb2NhbCxmbmFtZSkKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndNYXJrRmlsZShpc2xvY2FsPSIuYTppc2xvY2FsLiIgZm5hbWU8Ii5hOmZuYW1lLiI+KSIpCiAgIGxldCBjdXJidWZucj0gYnVmbnIoIiUiKQogICBsZXQgY3VyZGlyICA9IGI6bmV0cndfY3VyZGlyCiAgIGxldCB0cmFpbGVyID0gJ1tAPXxcL1wqXVw9XD4nCisKICAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKQotICAgIiBtYXJrZmlsZSBsaXN0IGV4aXN0cworICAgIiBtYXJrZmlsZSBsaXN0IHByZS1leGlzdHMKICIgICBjYWxsIERlY2hvKCJzdGFydGluZyBzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn08Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KS4iPiIpCiAiICAgY2FsbCBEZWNobygic3RhcnRpbmcgczpuZXRyd21hcmtmaWxlbXRjaF97Y3VyYnVmbnJ9PCIuczpuZXRyd21hcmtmaWxlbXRjaF97Y3VyYnVmbnJ9LiI+IikKICAgIGxldCBiOm5ldHJ3X2lzbG9jYWw9IGE6aXNsb2NhbApAQCAtNDM3Nyw3ICs0NTQ0LDcgQEAKICIgICBjYWxsIERlY2hvKCIybWF0Y2ggbm9uZSIpCiAgICAybWF0Y2ggbm9uZQogICBlbmRpZgotIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGUgOiBuZXRyd21hcmtmaWxlbGlzdF8iLmN1cmJ1Zm5yLiI8Ii4oZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKT8gc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkgOiAiIGRvZXNuJ3QgZXhpc3QiKS4iPiIpCisiICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZSA6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuKGV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9Iik/IHN0cmluZyhzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0pIDogIiBkb2Vzbid0IGV4aXN0IikuIj4iKQogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NDEzLDEwICs0NTgwLDEwIEBACiAgICAgICAgaWYgYTppc2xvY2FsCiAJY2FsbCBzeXN0ZW0oZXhlLiIgIi5mbmFtZSkKICAgICAgICBlbHNlCi0gICAgICAgIGNhbGwgczpSZW1vdGVTeXN0ZW0oZXhlLiIgIi5mbmFtZSkKKyAgICAgICAga2VlcGogY2FsbCBzOlJlbW90ZVN5c3RlbShleGUuIiAiLmZuYW1lKQogICAgICAgIGVuZGlmCiAgICAgICBlbHNlCi0gICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInVuYWJsZSB0byBhcHBseTwiLmV4ZS4iPiB0byBmaWxlPCIuZm5hbWUuIj4iLDUwKQorICAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ1bmFibGUgdG8gYXBwbHk8Ii5leGUuIj4gdG8gZmlsZTwiLmZuYW1lLiI+Iiw1MCkKICAgICAgIGVuZGlmCiAgICAgICBicmVhawogICAgICBlbmRpZgpAQCAtNDQyOSwxMiArNDU5NiwxMiBAQAogICAgICBjYWxsIHN5c3RlbShuZXRydyNXaW5QYXRoKGc6bmV0cndfY29tcHJlc3MpLiIgIi5zaGVsbGVzY2FwZShzOkNvbXBvc2VQYXRoKGI6bmV0cndfY3VyZGlyLGZuYW1lKSkpCiAgICAgZWxzZQogICAgICAiIGZuYW1lIG5vdCBhIGNvbXByZXNzZWQgZmlsZSwgc28gY29tcHJlc3MgaXQKLSAgICAgY2FsbCBzOlJlbW90ZVN5c3RlbShuZXRydyNXaW5QYXRoKGc6bmV0cndfY29tcHJlc3MpLiIgIi5zaGVsbGVzY2FwZShmbmFtZSkpCisgICAgIGtlZXBqIGNhbGwgczpSZW1vdGVTeXN0ZW0obmV0cncjV2luUGF0aChnOm5ldHJ3X2NvbXByZXNzKS4iICIuc2hlbGxlc2NhcGUoZm5hbWUpKQogICAgIGVuZGlmCiAgICBlbmRmb3IKICAgIGNhbGwgczpOZXRyd1VubWFya0xpc3QoY3VyYnVmbnIsY3VyZGlyKQotICAgY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCi0gICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCisgICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKICAgZW5kaWYKICIgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlQ29tcHJlc3MiKQogZW5kZnVuCkBAIC00NDUxLDEzICs0NjE4LDEzIEBACiAKICAgIiBzYW5pdHkgY2hlY2tzCiAgIGlmICFleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCclJyl9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pCi0gICBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCiAiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVDb3B5IDAiKQogICAgcmV0dXJuIDAKICAgZW5kaWYKICIgIGNhbGwgRGVjaG8oInNhbml0eSBjaGsgcGFzc2VkOiBzOm5ldHJ3bWFya2ZpbGVsaXN0XyIuYnVmbnIoJyUnKS4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCclJyl9KSkKICAgaWYgIWV4aXN0cygiczpuZXRyd21mdGd0IikKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coMiwieW91ciBtYXJrZWQgZmlsZSB0YXJnZXQgaXMgZW1wdHkhICg6aGVscCBuZXRydy1tdCkiLDY3KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygyLCJ5b3VyIG1hcmtlZCBmaWxlIHRhcmdldCBpcyBlbXB0eSEgKDpoZWxwIG5ldHJ3LW10KSIsNjcpCiAiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVDb3B5IDAiKQogICAgcmV0dXJuIDAKICAgZW5kaWYKQEAgLTQ0NzUsMTEgKzQ2NDIsMTEgQEAKICAgZWxzZWlmICBhOmlzbG9jYWwgJiYgIXM6bmV0cndtZnRndF9pc2xvY2FsCiAgICAiIENvcHkgbWFya2VkIGZpbGVzLCBsb2NhbCBkaXJlY3RvcnkgdG8gcmVtb3RlIGRpcmVjdG9yeQogIiAgIGNhbGwgRGVjaG8oImNvcHkgZnJvbSBsb2NhbCB0byByZW1vdGUiKQotICAgY2FsbCBzOk5ldHJ3VXBsb2FkKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCclJyl9LHM6bmV0cndtZnRndCkKKyAgIGtlZXBqIGNhbGwgczpOZXRyd1VwbG9hZChzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSxzOm5ldHJ3bWZ0Z3QpCiAKICAgZWxzZWlmICFhOmlzbG9jYWwgJiYgIHM6bmV0cndtZnRndF9pc2xvY2FsCiAiICAgY2FsbCBEZWNobygiY29weSBmcm9tIHJlbW90ZSB0byBsb2NhbCIpCi0gICBjYWxsIG5ldHJ3I05ldHJ3T2J0YWluKGE6aXNsb2NhbCxzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSxzOm5ldHJ3bWZ0Z3QpCisgICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3T2J0YWluKGE6aXNsb2NhbCxzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSxzOm5ldHJ3bWZ0Z3QpCiAKICAgZWxzZWlmICFhOmlzbG9jYWwgJiYgIXM6bmV0cndtZnRndF9pc2xvY2FsCiAiICAgY2FsbCBEZWNobygiY29weSBmcm9tIHJlbW90ZSB0byByZW1vdGUiKQpAQCAtNDQ5NSwxMiArNDY2MiwxMiBAQAogICAgZW5kaWYKICAgIGlmIGlzZGlyZWN0b3J5KHRtcGRpcikKICAgICBleGUgImtlZXBqIGxjZCAiLmZuYW1lZXNjYXBlKHRtcGRpcikKLSAgICBjYWxsIG5ldHJ3I05ldHJ3T2J0YWluKGE6aXNsb2NhbCxzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSx0bXBkaXIpCisgICAga2VlcGogY2FsbCBuZXRydyNOZXRyd09idGFpbihhOmlzbG9jYWwsczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0sdG1wZGlyKQogICAgIGxldCBsb2NhbGZpbGVzPSBtYXAoZGVlcGNvcHkoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pLCdzdWJzdGl0dXRlKHY6dmFsLCJeLiovIiwiIiwiIiknKQotICAgIGNhbGwgczpOZXRyd1VwbG9hZChsb2NhbGZpbGVzLHM6bmV0cndtZnRndCkKKyAgICBrZWVwaiBjYWxsIHM6TmV0cndVcGxvYWQobG9jYWxmaWxlcyxzOm5ldHJ3bWZ0Z3QpCiAgICAgaWYgZ2V0Y3dkKCkgPT0gdG1wZGlyCiAgICAgIGZvciBmbmFtZSBpbiBzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfQotICAgICAgY2FsbCBzOk5ldHJ3RGVsZXRlKGZuYW1lKQorICAgICAga2VlcGogY2FsbCBzOk5ldHJ3RGVsZXRlKGZuYW1lKQogICAgICBlbmRmb3IKICAgICAgZXhlICJrZWVwaiBsY2QgIi5mbmFtZWVzY2FwZShjdXJkaXIpCiAgICAgIGV4ZSAic2lsICEiLmc6bmV0cndfbG9jYWxfcm1kaXIuIiAiLnNoZWxsZXNjYXBlKHRtcGRpciwxKQpAQCAtNDUyMywxMCArNDY5MCwxMCBAQAogICAgY2FsbCBzOk5ldHJ3UmVmcmVzaERpcihzOm5ldHJ3bWZ0Z3RfaXNsb2NhbCxzOm5ldHJ3bWZ0Z3QpCiAgIGVuZGlmCiAgIGlmIGE6aXNsb2NhbAotICAgY2FsbCBzOk5ldHJ3UmVmcmVzaERpcihhOmlzbG9jYWwsYjpuZXRyd19jdXJkaXIpCisgICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoRGlyKGE6aXNsb2NhbCxjdXJkaXIpCiAgIGVuZGlmCiAgIGlmIGc6bmV0cndfZmFzdGJyb3dzZSA8PSAxCi0gICBjYWxsIHM6TG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2goKQorICAga2VlcGogY2FsbCBzOkxvY2FsQnJvd3NlU2hlbGxDbWRSZWZyZXNoKCkKICAgZW5kaWYKICAgCiAiICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUNvcHkgMSIpCkBAIC00NTgxLDggKzQ3NDgsOCBAQAogICAgIiB1bm1hcmsgbWFya2VkZmlsZSBsaXN0CiAiICAgY2FsbCBzOk5ldHJ3VW5tYXJrTGlzdChjdXJidWZucixjdXJkaXIpCiAgICBjYWxsIHM6TmV0cndVbm1hcmtBbGwoKQotIiAgIGNhbGwgRGVjaG8oImV4ZSBzaWxlbnQgYXJncyAiLmZsaXN0KQotICAgZXhlICJzaWxlbnQgYXJncyAiLmZsaXN0CisiICAgY2FsbCBEZWNobygiZXhlIHNpbCBhcmdzICIuZmxpc3QpCisgICBleGUgInNpbCBhcmdzICIuZmxpc3QKICAgZW5kaWYKICAgCiAiICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUVkaXQiKQpAQCAtNDYyNyw3ICs0Nzk0LDcgQEAKICAgICAgbGV0IHJldD0gczpSZW1vdGVTeXN0ZW0oeGNtZCkKICAgICBlbmRpZgogICAgIGlmIHY6c2hlbGxfZXJyb3IgPCAwCi0gICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiY29tbWFuZDwiLnhjbWQuIj4gZmFpbGVkLCBhYm9ydGluZyIsNTQpCisgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiY29tbWFuZDwiLnhjbWQuIj4gZmFpbGVkLCBhYm9ydGluZyIsNTQpCiAgICAgIGJyZWFrCiAgICAgZWxzZQogICAgICBlY2hvIHJldApAQCAtNDYzOCwxMCArNDgwNSwxMCBAQAogICAgY2FsbCBzOk5ldHJ3VW5tYXJrTGlzdChjdXJidWZucixjdXJkaXIpCiAKICAgICIgcmVmcmVzaCB0aGUgbGlzdGluZwotICAgY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCi0gICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCisgICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKICAgZWxzZQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJubyBmaWxlcyBtYXJrZWQhIiw1OSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibm8gZmlsZXMgbWFya2VkISIsNTkpCiAgIGVuZGlmCiAgIAogIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVFeGUiKQpAQCAtNDY5NSwxMCArNDg2MiwxMCBAQAogICAgIGVuZGZvcgogCiAgICAiIHJlZnJlc2ggdGhlIGxpc3RpbmcKLSAgIGNhbGwgczpOZXRyd1JlZnJlc2goYTppc2xvY2FsLHM6TmV0cndCcm93c2VDaGdEaXIoYTppc2xvY2FsLCcuLycpKQotICAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorICAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCisgICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCiAgIGVsc2UKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibm8gZmlsZXMgbWFya2VkISIsNTkpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsIm5vIGZpbGVzIG1hcmtlZCEiLDU5KQogICBlbmRpZgogCiAiICBjYWxsIERyZXQoInM6TmV0cndNYXJrSGlkZVNmeCIpCkBAIC00NzMzLDEzICs0OTAwLDEzIEBACiAgICB0cnkKICAgICBleGUgImtlZXBqIG5vYXV0b2NtZCB2aW1ncmVwIi5wYXQuIiAiLm5ldHJ3bWFya2ZpbGVsaXN0CiAgICAgY2F0Y2ggL15WaW1cJSgoXGFcKylcKVw9OkU0ODAvCi0gICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJubyBtYXRjaCB3aXRoIHBhdHRlcm48Ii5wYXR0ZXJuLiI+Iiw3NikKKyAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsIm5vIG1hdGNoIHdpdGggcGF0dGVybjwiLnBhdHRlcm4uIj4iLDc2KQogIiAgICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVHcmVwIDogdW5hYmxlIHRvIGZpbmQgcGF0dGVybjwiLnBhdHRlcm4uIj4iKQogICAgICByZXR1cm4KICAgIGVuZHRyeQogCiAgICAybWF0Y2ggbm9uZQotICAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorICAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQogICBlbmRpZgogCiAiICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUdyZXAiKQpAQCAtNDc1NywxMyArNDkyNCwxMyBAQAogCiAgICIgc2FuaXR5IGNoZWNrCiAgIGlmICFleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCclJyl9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pCi0gICBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCiAiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVNb3ZlIikKICAgIHJldHVybgogICBlbmRpZgogIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5idWZucignJScpLiI8Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pKQogICBpZiAhZXhpc3RzKCJzOm5ldHJ3bWZ0Z3QiKQotICAgY2FsbCBuZXRydyNFcnJvck1zZygyLCJ5b3VyIG1hcmtlZCBmaWxlIHRhcmdldCBpcyBlbXB0eSEgKDpoZWxwIG5ldHJ3LW10KSIsNjcpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInlvdXIgbWFya2VkIGZpbGUgdGFyZ2V0IGlzIGVtcHR5ISAoOmhlbHAgbmV0cnctbXQpIiw2NykKICIgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUNvcHkgMCIpCiAgICByZXR1cm4gMAogICBlbmRpZgpAQCAtNDc4Myw3ICs0OTUwLDcgQEAKICAgICAgZW5kaWYKICAgICBlbmRmb3IKICAgIGVsc2UKLSAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsImNvbW1hbmQ8Ii5nOm5ldHJ3X2xvY2FsbW92ZWNtZC4iPiBpcyBub3QgZXhlY3V0YWJsZSEiLDU3KQorICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiY29tbWFuZDwiLmc6bmV0cndfbG9jYWxtb3ZlY21kLiI+IGlzIG5vdCBleGVjdXRhYmxlISIsNTcpCiAgICBlbmRpZgogCiAgIGVsc2VpZiAgYTppc2xvY2FsICYmICFzOm5ldHJ3bWZ0Z3RfaXNsb2NhbApAQCAtNDc5MSw3ICs0OTU4LDcgQEAKICIgICBjYWxsIERlY2hvKCJtb3ZlIGZyb20gbG9jYWwgdG8gcmVtb3RlIikKICIgICBjYWxsIERlY2hvKCJjb3B5IikKICAgIGxldCBtZmxpc3Q9IHM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCIlIil9Ci0gICBjYWxsIHM6TmV0cndNYXJrRmlsZUNvcHkoYTppc2xvY2FsKQorICAga2VlcGogY2FsbCBzOk5ldHJ3TWFya0ZpbGVDb3B5KGE6aXNsb2NhbCkKICIgICBjYWxsIERlY2hvKCJyZW1vdmUiKQogICAgZm9yIGZuYW1lIGluIG1mbGlzdAogICAgIGxldCBiYXJlZm5hbWUgPSBzdWJzdGl0dXRlKGZuYW1lLCdeXCguKi9cKVwoLlx7LX1cKSQnLCdcMicsJycpCkBAIC00ODA0LDcgKzQ5NzEsNyBAQAogIiAgIGNhbGwgRGVjaG8oIm1vdmUgZnJvbSByZW1vdGUgdG8gbG9jYWwiKQogIiAgIGNhbGwgRGVjaG8oImNvcHkiKQogICAgbGV0IG1mbGlzdD0gczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoIiUiKX0KLSAgIGNhbGwgczpOZXRyd01hcmtGaWxlQ29weShhOmlzbG9jYWwpCisgICBrZWVwaiBjYWxsIHM6TmV0cndNYXJrRmlsZUNvcHkoYTppc2xvY2FsKQogIiAgIGNhbGwgRGVjaG8oInJlbW92ZSIpCiAgICBmb3IgZm5hbWUgaW4gbWZsaXN0CiAgICAgbGV0IGJhcmVmbmFtZSA9IHN1YnN0aXR1dGUoZm5hbWUsJ15cKC4qL1wpXCguXHstfVwpJCcsJ1wyJywnJykKQEAgLTQ4MTcsNyArNDk4NCw3IEBACiAiICAgY2FsbCBEZWNobygibW92ZSBmcm9tIHJlbW90ZSB0byByZW1vdGUiKQogIiAgIGNhbGwgRGVjaG8oImNvcHkiKQogICAgbGV0IG1mbGlzdD0gczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoIiUiKX0KLSAgIGNhbGwgczpOZXRyd01hcmtGaWxlQ29weShhOmlzbG9jYWwpCisgICBrZWVwaiBjYWxsIHM6TmV0cndNYXJrRmlsZUNvcHkoYTppc2xvY2FsKQogIiAgIGNhbGwgRGVjaG8oInJlbW92ZSIpCiAgICBmb3IgZm5hbWUgaW4gbWZsaXN0CiAgICAgbGV0IGJhcmVmbmFtZSA9IHN1YnN0aXR1dGUoZm5hbWUsJ15cKC4qL1wpXCguXHstfVwpJCcsJ1wyJywnJykKQEAgLTQ4MzYsMTMgKzUwMDMsMTYgQEAKIAogICAiIHJlZnJlc2ggYnVmZmVycwogICBpZiAhczpuZXRyd21mdGd0X2lzbG9jYWwKLSAgIGNhbGwgczpOZXRyd1JlZnJlc2hEaXIoczpuZXRyd21mdGd0X2lzbG9jYWwsczpuZXRyd21mdGd0KQorIiAgIGNhbGwgRGVjaG8oInJlZnJlc2ggbmV0cndtZnRndDwiLnM6bmV0cndtZnRndC4iPiIpCisgICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoRGlyKHM6bmV0cndtZnRndF9pc2xvY2FsLHM6bmV0cndtZnRndCkKICAgZW5kaWYKICAgaWYgYTppc2xvY2FsCi0gICBjYWxsIHM6TmV0cndSZWZyZXNoRGlyKGE6aXNsb2NhbCxiOm5ldHJ3X2N1cmRpcikKKyIgICBjYWxsIERlY2hvKCJyZWZyZXNoIGI6bmV0cndfY3VyZGlyPCIuYjpuZXRyd19jdXJkaXIuIj4iKQorICAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaERpcihhOmlzbG9jYWwsYjpuZXRyd19jdXJkaXIpCiAgIGVuZGlmCiAgIGlmIGc6bmV0cndfZmFzdGJyb3dzZSA8PSAxCi0gICBjYWxsIHM6TG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2goKQorIiAgIGNhbGwgRGVjaG8oInNpbmNlIGc6bmV0cndfZmFzdGJyb3dzZT0iLmc6bmV0cndfZmFzdGJyb3dzZS4iLCBwZXJmb3JtIHNoZWxsIGNtZCByZWZyZXNoIikKKyAgIGtlZXBqIGNhbGwgczpMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCgpCiAgIGVuZGlmCiAgIAogIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVNb3ZlIikKQEAgLTQ4NjgsOCArNTAzOCw4IEBACiAgICAgZW5kaWYKICAgICAxc3BsaXQKICAgICAiIHRoZSBhdXRvY21kcyB3aWxsIGhhbmRsZSBib3RoIGxvY2FsIGFuZCByZW1vdGUgZmlsZXMKLSIgICAgY2FsbCBEZWNobygiZXhlIHNpbGVudCBlICIuZXNjYXBlKGZuYW1lLCcgJykpCi0gICAgZXhlICJzaWxlbnQgZSAiLmZuYW1lZXNjYXBlKGZuYW1lKQorIiAgICBjYWxsIERlY2hvKCJleGUgc2lsIGUgIi5lc2NhcGUoZm5hbWUsJyAnKSkKKyAgICBleGUgInNpbCBlICIuZm5hbWVlc2NhcGUoZm5hbWUpCiAiICAgIGNhbGwgRGVjaG8oImhhcmRjb3B5IikKICAgICBoYXJkY29weQogICAgIHEKQEAgLTQ5MDIsNyArNTA3Miw3IEBACiAgICIgbWFyayB0aGUgbGlzdCBvZiBmaWxlcwogICBmb3IgZm5hbWUgaW4gZmlsZWxpc3QKICIgICBjYWxsIERlY2hvKCJmbmFtZTwiLmZuYW1lLiI+IikKLSAgIGNhbGwgczpOZXRyd01hcmtGaWxlKGE6aXNsb2NhbCxzdWJzdGl0dXRlKGZuYW1lLCdeLiovJywnJywnJykpCisgICBrZWVwaiBjYWxsIHM6TmV0cndNYXJrRmlsZShhOmlzbG9jYWwsc3Vic3RpdHV0ZShmbmFtZSwnXi4qLycsJycsJycpKQogICBlbmRmb3IKIAogICBlbHNlCkBAIC00OTE1LDggKzUwODUsOCBAQAogICAgc2V0IGVpPWFsbCBtYQogIiAgIGNhbGwgRGVjaG8oInNldCBlaT1hbGwgbWEiKQogICAgMXNwbGl0Ci0gICBjYWxsIHM6TmV0cndFbmV3KCkKLSAgIGNhbGwgczpOZXRyd1NhZmVPcHRpb25zKCkKKyAgIGtlZXBqIGNhbGwgczpOZXRyd0VuZXcoKQorICAga2VlcGogY2FsbCBzOk5ldHJ3U2FmZU9wdGlvbnMoKQogICAgc2lsIGtlZXBqIG5vcm0hICJhcAogICAga2VlcGogMgogICAgbGV0IGJhbm5lcmNudD0gc2VhcmNoKCdeIiA9PT09PScsJ1cnKQpAQCAtNDk0Miw3ICs1MTEyLDcgQEAKICAgIGxldCBmaWxlbGlzdD0gZ2V0bGluZSgxLGxpbmUoIiQiKSkKICAgIHEhCiAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZWxpc3QKLSAgICBjYWxsIHM6TmV0cndNYXJrRmlsZShhOmlzbG9jYWwsc3Vic3RpdHV0ZShmaWxlbmFtZSwnXi4qLycsJycsJycpKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd01hcmtGaWxlKGE6aXNsb2NhbCxzdWJzdGl0dXRlKGZpbGVuYW1lLCdeLiovJywnJywnJykpCiAgICBlbmRmb3IKICAgIHVubGV0IGZpbGVsaXN0CiAgICBsZXQgQGEgID0gYXJlZwpAQCAtNTE0NCw3ICs1MzE0LDcgQEAKICAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0IikKICAgIHVubGV0IHM6bmV0cndtYXJrZmlsZWxpc3QKICAgZW5kaWYKLSAgc2lsZW50IGNhbGwgczpOZXRyd1VubWFya0FsbDIoKQorICBzaWwgY2FsbCBzOk5ldHJ3VW5tYXJrQWxsMigpCiAgIDJtYXRjaCBub25lCiAiICBjYWxsIERyZXQoInM6TmV0cndVbm1hcmtBbGwiKQogZW5kZnVuCkBAIC01MTk3LDcgKzUzNjcsNyBAQAogICAgbGV0IGc6TmV0cndNZW51UHJpb3JpdHk9IDgwCiAgIGVuZGlmCiAKLSAgaWYgaGFzKCJtZW51IikgJiYgaGFzKCJndWlfcnVubmluZyIpICYmICZnbyA9fiAnbScgJiYgZzpuZXRyd19tZW51CisgIGlmIGhhcygibWVudSIpICYmIGhhcygiZ3VpX3J1bm5pbmciKSAmJiAmZ28gPX4jICdtJyAmJiBnOm5ldHJ3X21lbnUKICIgICBjYWxsIERmdW5jKCJOZXRyd01lbnUoZG9tZW51PSIuYTpkb21lbnUuIikiKQogCiAgICBpZiAhZXhpc3RzKCJzOm5ldHJ3X21lbnVfZW5hYmxlZCIpICYmIGE6ZG9tZW51CkBAIC01MjY1LDcgKzU0MzUsNyBAQAogICAgIGlmIHM6bmV0cndjbnQgPD0gMQogIiAgICAgY2FsbCBEZWNobygiY2xlYXIgbWVudXMiKQogICAgICBleGUgJ3NpbCEgdW5tZW51ICcuZzpOZXRyd1RvcEx2bE1lbnUKLSIgICAgIGNhbGwgRGVjaG8oJ2V4ZSBzaWxlbnQhIHVubWVudSAnLmc6TmV0cndUb3BMdmxNZW51LicqJykKKyIgICAgIGNhbGwgRGVjaG8oJ2V4ZSBzaWwhIHVubWVudSAnLmc6TmV0cndUb3BMdmxNZW51LicqJykKICAgICAgc2lsISB1bmxldCBzOm5ldHJ3X21lbnVfZW5hYmxlZAogICAgIGVuZGlmCiAgICBlbmRpZgpAQCAtNTM3Miw3ICs1NTQyLDcgQEAKICAgIGVsc2VpZiBiOm5ldHJ3X21ldGhvZCA9PSAyCiAgICAgIiBvYnRhaW4gZmlsZSB1c2luZyBmdHAgKyAubmV0cmMKICIgICAgIGNhbGwgRGVjaG8oIm9idGFpbiB2aWEgZnRwKy5uZXRyYyAobWV0aG9kICMyKSIpCi0gICAgIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbGVudCBrZWVwanVtcHMgbmV3fGNhbGwgczpSZXN0b3JlQnVmVmFycygpCisgICAgIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbCBrZWVwanVtcHMgbmV3fGNhbGwgczpSZXN0b3JlQnVmVmFycygpCiAgICAgIGxldCB0bXBidWZucj0gYnVmbnIoIiUiKQogICAgICBzZXRsb2NhbCBmZj11bml4CiAgICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBtb2RlIikgJiYgZzpuZXRyd19mdHBtb2RlICE9ICIiCkBAIC01Mzk0LDExICs1NTY0LDExIEBACiAiICAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKICAgICAgZW5kZm9yCiAgICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0iICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCisiICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuczpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKSkKKyAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCiAgICAgIGVsc2UKLSIgICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQorIiAgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpKQorICAgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpCiAgICAgIGVuZGlmCiAgICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKICAgICAgaWYgZ2V0bGluZSgxKSAhfiAiXiQiICYmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKSAmJiBnZXRsaW5lKDEpICF+ICdeVHJ5aW5nICcKQEAgLTU0MTEsNyArNTU4MSw3IEBACiAgICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMwogICAgICIgb2J0YWluIHdpdGggZnRwICsgbWFjaGluZSwgaWQsIHBhc3N3ZCwgYW5kIGZuYW1lIChpZS4gbm8gLm5ldHJjKQogIiAgICBjYWxsIERlY2hvKCJvYnRhaW4gdmlhIGZ0cCttaXBmIChtZXRob2QgIzMpIikKLSAgICBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxzaWxlbnQga2VlcGp1bXBzIG5ld3xjYWxsIHM6UmVzdG9yZUJ1ZlZhcnMoKQorICAgIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbCBrZWVwanVtcHMgbmV3fGNhbGwgczpSZXN0b3JlQnVmVmFycygpCiAgICAgbGV0IHRtcGJ1Zm5yPSBidWZucigiJSIpCiAgICAgc2V0bG9jYWwgZmY9dW5peAogCkBAIC01NDYyLDEzICs1NjMyLDEzIEBACiAgICAgIiAtbiAgdW5peCA6IERPTidUIHVzZSA8Lm5ldHJjPiwgZXZlbiB0aG91Z2ggaXQgZXhpc3RzCiAgICAgIiAtbiAgd2luMzI6IHF1aXQgYmVpbmcgb2Jub3hpb3VzIGFib3V0IHBhc3N3b3JkCiAgICAga2VlcGogbm9ybSEgMUdkZAotIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAtbiIpCi0gICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pIC1uIgorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAtbiIpCisgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pIC1uIgogICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKICAgICBpZiBnZXRsaW5lKDEpICF+ICJeJCIKICIgICAgIGNhbGwgRGVjaG8oImVycm9yPCIuZ2V0bGluZSgxKS4iPiIpCiAgICAgIGlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLGdldGxpbmUoMSksNSkKKyAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUixnZXRsaW5lKDEpLDUpCiAgICAgIGVuZGlmCiAgICAgZW5kaWYKICAgIGVsc2VpZiAhZXhpc3RzKCJiOm5ldHJ3X21ldGhvZCIpIHx8IGI6bmV0cndfbWV0aG9kIDwgMApAQCAtNTQ3OCw3ICs1NjQ4LDcgQEAKIAogICAgIiByZXN0b3JlIHN0YXR1cyBsaW5lCiAgICBpZiB0eXBlKGE6Zm5hbWUpID09IDEgJiYgZXhpc3RzKCJzOm5ldHJ3X3VzZXJzX3N0bCIpCi0gICAgY2FsbCBzOlNldHVwTmV0cndTdGF0dXNMaW5lKHM6bmV0cndfdXNlcnNfc3RsKQorICAgIGtlZXBqIGNhbGwgczpTZXR1cE5ldHJ3U3RhdHVzTGluZShzOm5ldHJ3X3VzZXJzX3N0bCkKICAgIGVuZGlmCiAKICAgZW5kaWYKQEAgLTU1MjksMTAgKzU2OTksMTAgQEAKICAgIGxldCBkaWRzcGxpdCAgPSAxCiAKICAgZWxzZQotICAgY2FsbCBzOlNhdmVCdWZWYXJzKCkKKyAgIGtlZXBqIGNhbGwgczpTYXZlQnVmVmFycygpCiAiICAgY2FsbCBEZWNobygid2luY21kIHAiKQogICAgd2luY21kIHAKLSAgIGNhbGwgczpSZXN0b3JlQnVmVmFycygpCisgICBrZWVwaiBjYWxsIHM6UmVzdG9yZUJ1ZlZhcnMoKQogICAgIiBpZiB0aGUgcHJldmlvdXMgd2luZG93J3MgYnVmZmVyIGhhcyBiZWVuIGNoYW5nZWQgKGlzIG1vZGlmaWVkKSwKICAgICIgYW5kIGl0IGRvZXNuJ3QgYXBwZWFyIGluIGFueSBvdGhlciBleHRhbnQgd2luZG93LCB0aGVuIGFzayB0aGUKICAgICIgdXNlciBpZiBzL2hlIHdhbnRzIHRvIGFiYW5kb24gbW9kaWZpY2F0aW9ucyB0aGVyZWluLgpAQCAtNTU1NCw3ICs1NzI0LDcgQEAKICAgICAgaWYgY2hvaWNlID09IDEKICAgICAgICIgWWVzIC0tIHdyaXRlIGZpbGUgJiB0aGVuIGJyb3dzZQogICAgICAgbGV0IHY6ZXJybXNnPSAiIgotICAgICAgc2lsZW50IHcKKyAgICAgIHNpbCB3CiAgICAgICBpZiB2OmVycm1zZyAhPSAiIgogICAgICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwidW5hYmxlIHRvIHdyaXRlIDwiLmJ1Zm5hbWUuIj4hIiwzMCkKICAgICAgICBpZiBkaWRzcGxpdApAQCAtNTU2OSw3ICs1NzM5LDcgQEAKICAgICAgZWxzZWlmIGNob2ljZSA9PSAyCiAgICAgICAiIE5vIC0tIGRvbid0IHdvcnJ5IGFib3V0IGNoYW5nZWQgZmlsZSwganVzdCBicm93c2UgYW55d2F5CiAgICAgICBzZXRsb2NhbCBub21vZAotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsYnVmbmFtZS4iIGNoYW5nZXMgdG8gIi5idWZuYW1lLiIgYWJhbmRvbmVkIiwzMSkKKyAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLGJ1Zm5hbWUuIiBjaGFuZ2VzIHRvICIuYnVmbmFtZS4iIGFiYW5kb25lZCIsMzEpCiAgICAgICB3aW5jbWQgcAogCiAgICAgIGVsc2UKQEAgLTU2NDQsNyArNTgxNCw3IEBACiAiICAgY2FsbCBEZWNobygiaGFuZGxlIHVwbG9hZGluZyBhIGxpc3Qgb2YgZmlsZXMgdmlhIHNjcCIpCiAgICBsZXQgY3VyZGlyPSBnZXRjd2QoKQogICAgaWYgYTp0Z3QgPX4gJ15zY3A6JwotICAgIGV4ZSAia2VlcGp1bXBzIHNpbGVudCBsY2QgIi5mbmFtZWVzY2FwZShmcm9tZGlyKQorICAgIGV4ZSAia2VlcGp1bXBzIHNpbCBsY2QgIi5mbmFtZWVzY2FwZShmcm9tZGlyKQogICAgIGxldCBmaWxlbGlzdD0gZGVlcGNvcHkoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pCiAgICAgbGV0IGFyZ3MgICAgPSBqb2luKG1hcChmaWxlbGlzdCwic2hlbGxlc2NhcGUodjp2YWwsIDEpIikpCiAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKQEAgLTU2NTYsNyArNTgyNiw3IEBACiAgICAgbGV0IHRndCAgICAgPSBzdWJzdGl0dXRlKGE6dGd0LCdec2NwOi8vW14vXVwrL1woLipcKSQnLCdcMScsJycpCiAiICAgIGNhbGwgRGVjaG8oImV4ZSAiLnM6bmV0cndfc2lsZW50eGZlci4iISIuZzpuZXRyd19zY3BfY21kLnNoZWxsZXNjYXBlKHVzZXBvcnQsMSkuIiAiLmFyZ3MuIiAiLnNoZWxsZXNjYXBlKG1hY2hpbmUuIjoiLnRndCwxKSkKICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIhIi5nOm5ldHJ3X3NjcF9jbWQuc2hlbGxlc2NhcGUodXNlcG9ydCwxKS4iICIuYXJncy4iICIuc2hlbGxlc2NhcGUobWFjaGluZS4iOiIudGd0LDEpCi0gICAgZXhlICJrZWVwanVtcHMgc2lsZW50IGxjZCAiLmZuYW1lZXNjYXBlKGN1cmRpcikKKyAgICBleGUgImtlZXBqdW1wcyBzaWwgbGNkICIuZm5hbWVlc2NhcGUoY3VyZGlyKQogCiAgICBlbHNlaWYgYTp0Z3QgPX4gJ15mdHA6JwogICAgIGNhbGwgczpOZXRyd01ldGhvZChhOnRndCkKQEAgLTU2NzgsNiArNTg0OCw5IEBACiAgICAgIGtlZXBqIGNhbGwgc2V0bGluZShsaW5lKCIkIikrMSwnbGNkICInLmZyb21kaXIuJyInKQogIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKIAorICAgICBpZiB0Z3RkaXIgPT0gIiIKKyAgICAgIGxldCB0Z3RkaXI9ICcvJworICAgICBlbmRpZgogICAgICBrZWVwaiBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsJ2NkICInLnRndGRpci4nIicpCiAiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQogCkBAIC01Njg3LDEyICs1ODYwLDEyIEBACiAgICAgIGVuZGZvcgogCiAgICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0iICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAiLnM6bmV0cndfc2lsZW50eGZlci4iJSEiLmc6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpLiIgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X3BvcnQsMSkpCi0gICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKQorIiAgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogIi5zOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpKQorICAgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpLiIgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X3BvcnQsMSkKICAgICAgZWxzZQogIiAgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dCB3aW5kb3cjIi53aW5ucigpKQotIiAgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogIi5zOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQorIiAgICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogIi5zOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKKyAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQogICAgICBlbmRpZgogICAgICAiIElmIHRoZSByZXN1bHQgb2YgdGhlIGZ0cCBvcGVyYXRpb24gaXNuJ3QgYmxhbmssIHNob3cgYW4gZXJyb3IgbWVzc2FnZSAodG54IHRvIERvdWcgQ2xhYXIpCiAgICAgIHNpbCBrZWVwaiBnL0xvY2FsIGRpcmVjdG9yeSBub3cvZApAQCAtNTcwNiw3ICs1ODc5LDcgQEAKICAgICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMwogICAgICAiIHVwbG9hZCB3aXRoIGZ0cCArIG1hY2hpbmUsIGlkLCBwYXNzd2QsIGFuZCBmbmFtZSAoaWUuIG5vIC5uZXRyYykKICAgICAgbGV0IG5ldHJ3X2ZuYW1lPSBiOm5ldHJ3X2ZuYW1lCi0gICAgIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbGVudCBrZWVwanVtcHMgbmV3fGNhbGwgczpSZXN0b3JlQnVmVmFycygpCisgICAgIGtlZXBqIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbCBrZWVwaiBuZXd8a2VlcGogY2FsbCBzOlJlc3RvcmVCdWZWYXJzKCkKICAgICAgbGV0IHRtcGJ1Zm5yPSBidWZucigiJSIpCiAgICAgIHNldGxvY2FsIGZmPXVuaXgKIApAQCAtNTc1MSw4ICs1OTI0LDggQEAKICAgICAgIiAtbiAgdW5peCA6IERPTidUIHVzZSA8Lm5ldHJjPiwgZXZlbiB0aG91Z2ggaXQgZXhpc3RzCiAgICAgICIgLW4gIHdpbjMyOiBxdWl0IGJlaW5nIG9ibm94aW91cyBhYm91dCBwYXNzd29yZAogICAgICBrZWVwaiBub3JtISAxR2RkCi0iICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICIuczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgLW4iKQotICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuZzpuZXRyd19mdHBfY21kLiIgLWkgLW4iCisiICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICIuczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuczpuZXRyd19mdHBfY21kLiIgLWkgLW4iKQorICAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuczpuZXRyd19mdHBfY21kLiIgLWkgLW4iCiAgICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKICAgICAgc2lsIGtlZXBqIGcvTG9jYWwgZGlyZWN0b3J5IG5vdy9kCiAgICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCkBAIC01NzgxLDggKzU5NTQsOCBAQAogIiBzOk5ldHJ3UHJldmlldzoge3t7MgogZnVuISBzOk5ldHJ3UHJldmlldyhwYXRoKSByYW5nZQogIiAgY2FsbCBEZnVuYygiTmV0cndQcmV2aWV3KHBhdGg8Ii5hOnBhdGguIj4pIikKLSAgY2FsbCBzOk5ldHJ3T3B0aW9uU2F2ZSgiczoiKQotICBjYWxsIHM6TmV0cndTYWZlT3B0aW9ucygpCisgIGtlZXBqIGNhbGwgczpOZXRyd09wdGlvblNhdmUoInM6IikKKyAga2VlcGogY2FsbCBzOk5ldHJ3U2FmZU9wdGlvbnMoKQogICBpZiBoYXMoInF1aWNrZml4IikKICAgIGlmICFpc2RpcmVjdG9yeShhOnBhdGgpCiAgICAgaWYgZzpuZXRyd19wcmV2aWV3ICYmICFnOm5ldHJ3X2FsdG8KQEAgLTU3OTQsMTIgKzU5NjcsMTIgQEAKICAgICAgbGV0ICZwdmg9IHB2aGtlZXAKICAgICBlbmRpZgogICAgZWxzZWlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQotICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJzb3JyeSwgY2Fubm90IHByZXZpZXcgYSBkaXJlY3Rvcnkgc3VjaCBhcyA8Ii5hOnBhdGguIj4iLDM4KQorICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJzb3JyeSwgY2Fubm90IHByZXZpZXcgYSBkaXJlY3Rvcnkgc3VjaCBhcyA8Ii5hOnBhdGguIj4iLDM4KQogICAgZW5kaWYKICAgZWxzZWlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInNvcnJ5LCB0byBwcmV2aWV3IHlvdXIgdmltIG5lZWRzIHRoZSBxdWlja2ZpeCBmZWF0dXJlIGNvbXBpbGVkIGluIiwzOSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJzb3JyeSwgdG8gcHJldmlldyB5b3VyIHZpbSBuZWVkcyB0aGUgcXVpY2tmaXggZmVhdHVyZSBjb21waWxlZCBpbiIsMzkpCiAgIGVuZGlmCi0gIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInM6IikKKyAga2VlcGogY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgiczoiKQogIiAgY2FsbCBEcmV0KCJOZXRyd1ByZXZpZXciKQogZW5kZnVuCiAKQEAgLTU4MTUsMTEgKzU5ODgsMTEgQEAKICIgIGNhbGwgRGVjaG8oImNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKICAgc2lsISBrZWVwaiAlZAogICBpZiBhOmlzbG9jYWwKLSAgIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhhOmRpcm5hbWUpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soYTpkaXJuYW1lKQogICBlbHNlCi0gICBjYWxsIHM6TmV0cndCcm93c2UoYTppc2xvY2FsLGE6ZGlybmFtZSkKKyAgIGtlZXBqIGNhbGwgczpOZXRyd0Jyb3dzZShhOmlzbG9jYWwsYTpkaXJuYW1lKQogICBlbmRpZgotICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oKQorICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oKQogCiAgICIgcmVzdG9yZSBmaWxlIG1hcmtzCiAgIGlmIGV4aXN0cygiczpuZXRyd21hcmtmaWxlbXRjaF97YnVmbnIoJyUnKX0iKSAmJiBzOm5ldHJ3bWFya2ZpbGVtdGNoX3tidWZucigiJSIpfSAhPSAiIgpAQCAtNTg1MSwxOCArNjAyNCwxOCBAQAogICAgIGxldCBjdXJ3aW49IHdpbm5yKCkKICIgICAgY2FsbCBEZWNobygicmVmcmVzaCB0Z3R3aW4jIi50Z3R3aW4uIiAoY3Vyd2luIyIuY3Vyd2luLiIpIikKICAgICBleGUgdGd0d2luLiJ3aW5jbWQgdyIKLSAgICBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkgCisgICAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpIAogICAgIGV4ZSBjdXJ3aW4uIndpbmNtZCB3IgogCiAgICBlbHNlaWYgYnVmbnIoYTpkaXJuYW1lKSA+IDAKICAgICBsZXQgYm49IGJ1Zm5yKGE6ZGlybmFtZSkKICIgICAgY2FsbCBEZWNobygiYmQgYnVmbnIoIi5hOmRpcm5hbWUuIik9Ii5ibikKLSAgICBleGUgInNpbGVudCBiZCAiLmJuCisgICAgZXhlICJzaWwgYmQgIi5ibgogICAgZW5kaWYKIAogICBlbHNlaWYgZzpuZXRyd19mYXN0YnJvd3NlIDw9IDEKICIgICBjYWxsIERlY2hvKCJtZWRpdW0tc3BlZWQgbW9kZTogcmVmcmVzaCBsb2NhbCBidWZmZXJzIG9ubHkiKQotICAgY2FsbCBzOkxvY2FsQnJvd3NlU2hlbGxDbWRSZWZyZXNoKCkKKyAgIGtlZXBqIGNhbGwgczpMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCgpCiAgIGVuZGlmCiAiICBjYWxsIERyZXQoInM6TmV0cndSZWZyZXNoRGlyIikKIGVuZGZ1bgpAQCAtNTkxOCwxMyArNjA5MSwxMyBAQAogICAgICIgc29tZXRpbWVzIG11bHRpcGxlIHNvcnRpbmcgcGF0dGVybnMgd2lsbCBtYXRjaCB0aGUgc2FtZSBmaWxlIG9yIGRpcmVjdG9yeS4KICAgICAiIFRoZSBmb2xsb3dpbmcgc3Vic3RpdHV0ZSBpcyBpbnRlbmRlZCB0byByZW1vdmUgdGhlIGV4Y2VzcyBtYXRjaGVzLgogICAgIGV4ZSAnc2lsIGtlZXBqICcudzpuZXRyd19iYW5uZXJjbnQuJywkZy9eXGRcezN9Jy5nOm5ldHJ3X3NlcGNoci4nXGRcezN9XC8vcy9eXGRcezN9Jy5nOm5ldHJ3X3NlcGNoci4nXChcZFx7M31cL1wpLlxAPS9cMS9lJwotICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKICAgIGVuZGlmCiAgICBsZXQgcHJpb3JpdHkgPSBwcmlvcml0eSArIDEKICAgZW5kd2hpbGUKICAgaWYgZXhpc3RzKCJzdGFycHJpb3JpdHkiKQogICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCR2L15cZFx7M30nLmc6bmV0cndfc2VwY2hyLicvcy9eLycuc3RhcnByaW9yaXR5LicvJwotICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAgIGVuZGlmCiAKICAgIiBGb2xsb3dpbmcgbGluZSBhc3NvY2lhdGVkIHdpdGggcHJpb3JpdHkgLS0gaXRlbXMgdGhhdCBzYXRpc2Z5IGEgcHJpb3JpdHkKQEAgLTU5MzQsNyArNjEwNyw3IEBACiAgICIgcHJpb3JpdHkgcHJlZml4ZXMgbmVlZCB0byBiZSByZW1vdmVkLCBidXQgbm90IGRpcmVjdG9yaWVzIHRoYXQgaGFwcGVuIHRvCiAgICIgYmUganVzdCBkaWdpdHMgdGhlbXNlbHZlcy4KICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cKFxkXHszfScuZzpuZXRyd19zZXBjaHIuJ1wpXCUoXGRcezN9Jy5nOm5ldHJ3X3NlcGNoci4nXClcK1x6ZS4vXDEvZScKLSAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKIAogIiAgY2FsbCBEcmV0KCJTZXRTb3J0IikKIGVuZGZ1bgpAQCAtNTk0MywxMyArNjExNiwxMyBAQAogIiBzOk5ldHJ3U29ydFN0eWxlOiBjaGFuZ2Ugc29ydGluZyBzdHlsZSAobmFtZSAtIHRpbWUgLSBzaXplKSBhbmQgcmVmcmVzaCBkaXNwbGF5IHt7ezIKIGZ1biEgczpOZXRyd1NvcnRTdHlsZShpc2xvY2FsKQogIiAgY2FsbCBEZnVuYygiczpOZXRyd1NvcnRTdHlsZShpc2xvY2FsPSIuYTppc2xvY2FsLiIpIG5ldHJ3X3NvcnRfYnk8Ii5nOm5ldHJ3X3NvcnRfYnkuIj4iKQotICBjYWxsIHM6TmV0cndTYXZlV29yZFBvc24oKQorICBrZWVwaiBjYWxsIHM6TmV0cndTYXZlV29yZFBvc24oKQogICBsZXQgc3Zwb3M9IG5ldHJ3I05ldHJ3U2F2ZVBvc24oKQogCiAgIGxldCBnOm5ldHJ3X3NvcnRfYnk9IChnOm5ldHJ3X3NvcnRfYnkgPX4gJ24nKT8gJ3RpbWUnIDogKGc6bmV0cndfc29ydF9ieSA9fiAndCcpPyAnc2l6ZScgOiAnbmFtZScKICAga2VlcGogbm9ybSEgMAotICBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKLSAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKGE6aXNsb2NhbCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKGE6aXNsb2NhbCwnLi8nKSkKKyAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQogCiAiICBjYWxsIERyZXQoInM6TmV0cndTb3J0U3R5bGUgOiBuZXRyd19zb3J0X2J5PCIuZzpuZXRyd19zb3J0X2J5LiI+IikKIGVuZGZ1bgpAQCAtNTk3Miw4ICs2MTQ1LDggQEAKICIgICBjYWxsIERlY2hvKCJleGUgIi4oZzpuZXRyd19hbHRvPyAiYmVsICIgOiAiYWJvICIpLmc6bmV0cndfd2luc2l6ZS4id2luY21kIHMiKQogICAgZXhlIChnOm5ldHJ3X2FsdG8/ICJiZWwgIiA6ICJhYm8gIikuZzpuZXRyd193aW5zaXplLiJ3aW5jbWQgcyIKICAgIGxldCBzOmRpZHNwbGl0PSAxCi0gICBjYWxsIHM6UmVzdG9yZVdpblZhcnMoKQotICAgY2FsbCBzOk5ldHJ3QnJvd3NlKDAsczpOZXRyd0Jyb3dzZUNoZ0RpcigwLHM6TmV0cndHZXRXb3JkKCkpKQorICAga2VlcGogY2FsbCBzOlJlc3RvcmVXaW5WYXJzKCkKKyAgIGtlZXBqIGNhbGwgczpOZXRyd0Jyb3dzZSgwLHM6TmV0cndCcm93c2VDaGdEaXIoMCxzOk5ldHJ3R2V0V29yZCgpKSkKICAgIHVubGV0IHM6ZGlkc3BsaXQKIAogICBlbHNlaWYgYTptb2RlID09IDEKQEAgLTU5ODIsOCArNjE1NSw4IEBACiAiICAgY2FsbCBEZWNobygidGFibmV3IikKICAgIHRhYm5ldwogICAgbGV0IHM6ZGlkc3BsaXQ9IDEKLSAgIGNhbGwgczpSZXN0b3JlV2luVmFycygpCi0gICBjYWxsIHM6TmV0cndCcm93c2UoMCxuZXdkaXIpCisgICBrZWVwaiBjYWxsIHM6UmVzdG9yZVdpblZhcnMoKQorICAga2VlcGogY2FsbCBzOk5ldHJ3QnJvd3NlKDAsbmV3ZGlyKQogICAgdW5sZXQgczpkaWRzcGxpdAogCiAgIGVsc2VpZiBhOm1vZGUgPT0gMgpAQCAtNTk5MSw4ICs2MTY0LDggQEAKICIgICBjYWxsIERlY2hvKCJleGUgIi4oZzpuZXRyd19hbHR2PyAicmlnaHRiICIgOiAibGVmdGEgIikuZzpuZXRyd193aW5zaXplLiJ3aW5jbWQgdiIpCiAgICBleGUgKGc6bmV0cndfYWx0dj8gInJpZ2h0YiAiIDogImxlZnRhICIpLmc6bmV0cndfd2luc2l6ZS4id2luY21kIHYiCiAgICBsZXQgczpkaWRzcGxpdD0gMQotICAgY2FsbCBzOlJlc3RvcmVXaW5WYXJzKCkKLSAgIGNhbGwgczpOZXRyd0Jyb3dzZSgwLHM6TmV0cndCcm93c2VDaGdEaXIoMCxzOk5ldHJ3R2V0V29yZCgpKSkKKyAgIGtlZXBqIGNhbGwgczpSZXN0b3JlV2luVmFycygpCisgICBrZWVwaiBjYWxsIHM6TmV0cndCcm93c2UoMCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKDAsczpOZXRyd0dldFdvcmQoKSkpCiAgICB1bmxldCBzOmRpZHNwbGl0CiAKICAgZWxzZWlmIGE6bW9kZSA9PSAzCkBAIC02MDAwLDggKzYxNzMsOCBAQAogIiAgIGNhbGwgRGVjaG8oImV4ZSAiLihnOm5ldHJ3X2FsdG8/ICJiZWwgIiA6ICJhYm8gIikuZzpuZXRyd193aW5zaXplLiJ3aW5jbWQgcyIpCiAgICBleGUgKGc6bmV0cndfYWx0bz8gImJlbCAiIDogImFibyAiKS5nOm5ldHJ3X3dpbnNpemUuIndpbmNtZCBzIgogICAgbGV0IHM6ZGlkc3BsaXQ9IDEKLSAgIGNhbGwgczpSZXN0b3JlV2luVmFycygpCi0gICBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soczpOZXRyd0Jyb3dzZUNoZ0RpcigxLHM6TmV0cndHZXRXb3JkKCkpKQorICAga2VlcGogY2FsbCBzOlJlc3RvcmVXaW5WYXJzKCkKKyAgIGtlZXBqIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsczpOZXRyd0dldFdvcmQoKSkpCiAgICB1bmxldCBzOmRpZHNwbGl0CiAKICAgZWxzZWlmIGE6bW9kZSA9PSA0CkBAIC02MDEyLDggKzYxODUsOCBAQAogICAgdGFibmV3CiAgICBsZXQgYjpuZXRyd19jdXJkaXI9IG5ldHJ3X2N1cmRpcgogICAgbGV0IHM6ZGlkc3BsaXQ9IDEKLSAgIGNhbGwgczpSZXN0b3JlV2luVmFycygpCi0gICBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soczpOZXRyd0Jyb3dzZUNoZ0RpcigxLGN1cnNvcndvcmQpKQorICAga2VlcGogY2FsbCBzOlJlc3RvcmVXaW5WYXJzKCkKKyAgIGtlZXBqIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsY3Vyc29yd29yZCkpCiAgICB1bmxldCBzOmRpZHNwbGl0CiAKICAgZWxzZWlmIGE6bW9kZSA9PSA1CkBAIC02MDIxLDEyICs2MTk0LDEyIEBACiAiICAgY2FsbCBEZWNobygiZXhlICIuKGc6bmV0cndfYWx0dj8gInJpZ2h0YiAiIDogImxlZnRhICIpLmc6bmV0cndfd2luc2l6ZS4id2luY21kIHYiKQogICAgZXhlIChnOm5ldHJ3X2FsdHY/ICJyaWdodGIgIiA6ICJsZWZ0YSAiKS5nOm5ldHJ3X3dpbnNpemUuIndpbmNtZCB2IgogICAgbGV0IHM6ZGlkc3BsaXQ9IDEKLSAgIGNhbGwgczpSZXN0b3JlV2luVmFycygpCi0gICBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soczpOZXRyd0Jyb3dzZUNoZ0RpcigxLHM6TmV0cndHZXRXb3JkKCkpKQorICAga2VlcGogY2FsbCBzOlJlc3RvcmVXaW5WYXJzKCkKKyAgIGtlZXBqIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsczpOZXRyd0dldFdvcmQoKSkpCiAgICB1bmxldCBzOmRpZHNwbGl0CiAKICAgZWxzZQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCIoTmV0cndTcGxpdCkgdW5zdXBwb3J0ZWQgbW9kZT0iLmE6bW9kZSw0NSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiKE5ldHJ3U3BsaXQpIHVuc3VwcG9ydGVkIG1vZGU9Ii5hOm1vZGUsNDUpCiAgIGVuZGlmCiAKICIgIGNhbGwgRHJldCgiczpOZXRyd1NwbGl0IikKQEAgLTYxNjcsMTAgKzYzNDAsMTAgQEAKICIgICBjYWxsIERlY2hvKCJkaXI8Ii5kaXIuIj4gZW50cnk8Ii5lbnRyeS4iPiBkaXJlbnRyeTwiLmRpcmVudHJ5LiI+IikKICAgIGlmIGVudHJ5ID1+ICcvJCcgJiYgaGFzX2tleSh3Om5ldHJ3X3RyZWVkaWN0LGRpcmVudHJ5KQogIiAgICBjYWxsIERlY2hvKCI8Ii5kaXJlbnRyeS4iPiBpcyBhIGtleSBpbiB0cmVlZGljdCAtIGRpc3BsYXkgc3VidHJlZSBmb3IgaXQiKQotICAgIGNhbGwgczpOZXRyd1RyZWVEaXNwbGF5KGRpcmVudHJ5LGRlcHRoKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd1RyZWVEaXNwbGF5KGRpcmVudHJ5LGRlcHRoKQogICAgZWxzZWlmIGVudHJ5ID1+ICcvJCcgJiYgaGFzX2tleSh3Om5ldHJ3X3RyZWVkaWN0LGRpcmVudHJ5LicvJykKICIgICAgY2FsbCBEZWNobygiPCIuZGlyZW50cnkuIi8+IGlzIGEga2V5IGluIHRyZWVkaWN0IC0gZGlzcGxheSBzdWJ0cmVlIGZvciBpdCIpCi0gICAgY2FsbCBzOk5ldHJ3VHJlZURpc3BsYXkoZGlyZW50cnkuJy8nLGRlcHRoKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd1RyZWVEaXNwbGF5KGRpcmVudHJ5LicvJyxkZXB0aCkKICAgIGVsc2UKICIgICAgY2FsbCBEZWNobygiPCIuZW50cnkuIj4gaXMgbm90IGEga2V5IGluIHRyZWVkaWN0IChubyBzdWJ0cmVlKSIpCiAgICAgc2lsISBrZWVwaiBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsZGVwdGguZW50cnkpCkBAIC02MjE5LDcgKzYzOTIsNyBAQAogIiAgIGNhbGwgRGVjaG8oImZuYW1lPCIuZm5hbWUuIj4iKQogCiAgICAiIGRpc3BsYXkgZnJvbSB0cmVldG9wIG9uIGRvd24KLSAgIGNhbGwgczpOZXRyd1RyZWVEaXNwbGF5KHc6bmV0cndfdHJlZXRvcCwiIikKKyAgIGtlZXBqIGNhbGwgczpOZXRyd1RyZWVEaXNwbGF5KHc6bmV0cndfdHJlZXRvcCwiIikKIAogIiAgIGNhbGwgRHJldCgiTmV0cndUcmVlTGlzdGluZyA6IGJ1Zm5hbWU8Ii5leHBhbmQoIiUiKS4iPiIpCiAgIGVuZGlmCkBAIC02MjQwLDcgKzY0MTMsNyBAQAogICAgbGV0IGI6bmV0cndfY3BmPSAwCiAgICBpZiBsaW5lKCIkIikgPj0gdzpuZXRyd19iYW5uZXJjbnQKICAgICBleGUgJ3NpbCBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250LicsJGcvXi4vaWYgdmlydGNvbCgiJCIpID4gYjpuZXRyd19jcGZ8bGV0IGI6bmV0cndfY3BmPSB2aXJ0Y29sKCIkIil8ZW5kaWYnCi0gICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQogICAgZWxzZQogIiAgICBjYWxsIERyZXQoIk5ldHJ3V2lkZUxpc3RpbmciKQogICAgIHJldHVybgpAQCAtNjI1Nyw3ICs2NDMwLDcgQEAKIAogICAgIiBtYWtlIHdpZGUgZGlzcGxheQogICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL14uKiQvXD1lc2NhcGUocHJpbnRmKCIlLScuYjpuZXRyd19jcGYuJ3MiLHN1Ym1hdGNoKDApKSwiXFwiKS8nCi0gICBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKICAgIGxldCBmcGMgICAgICAgICA9IChsaW5lKCIkIikgLSB3Om5ldHJ3X2Jhbm5lcmNudCArIHc6bmV0cndfZnBsKS93Om5ldHJ3X2ZwbAogICAgbGV0IG5ld2NvbHN0YXJ0ID0gdzpuZXRyd19iYW5uZXJjbnQgKyBmcGMKICAgIGxldCBuZXdjb2xlbmQgICA9IG5ld2NvbHN0YXJ0ICsgZnBjIC0gMQpAQCAtNjI3NSw5ICs2NDQ4LDkgQEAKICAgICBleGUgInNpbCEga2VlcGogIi5uZXdjb2xzdGFydC4nLCcubmV3Y29sZW5kLidkJwogICAgIGV4ZSAnc2lsISBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250CiAgICBlbmR3aGlsZQotICAgc2lsZW50ISBsZXQgQCo9IGtlZXByZWdzdGFyCisgICBzaWwhIGxldCBAKj0ga2VlcHJlZ3N0YXIKICAgIGV4ZSAic2lsISBrZWVwaiAiLnc6bmV0cndfYmFubmVyY250LicsJHMvXHNcKyQvL2UnCi0gICBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKICAgIHNldGxvY2FsIG5vbWEgbm9tb2Qgcm8KICIgICBjYWxsIERyZXQoIk5ldHJ3V2lkZUxpc3RpbmciKQogICBlbmRpZgpAQCAtNjI4OSw3ICs2NDYyLDcgQEAKIGZ1biEgczpQZXJmb3JtTGlzdGluZyhpc2xvY2FsKQogIiAgY2FsbCBEZnVuYygiczpQZXJmb3JtTGlzdGluZyhpc2xvY2FsPSIuYTppc2xvY2FsLiIpIGJ1Zm5yKCUpPSIuYnVmbnIoIiUiKS4iPCIuYnVmbmFtZSgiJSIpLiI+IikKIAotICBjYWxsIHM6TmV0cndTYWZlT3B0aW9ucygpCisgIGtlZXBqIGNhbGwgczpOZXRyd1NhZmVPcHRpb25zKCkKICAgc2V0bG9jYWwgbm9ybyBtYQogIiAgY2FsbCBEZWNobygic2V0bG9jYWwgbm9ybyBtYSIpCiAKQEAgLTYzMDUsMTcgKzY0NzgsMTYgQEAKICAgZW5kaWYKIAogICAiIHNhdmUgY3VycmVudCBkaXJlY3Rvcnkgb24gZGlyZWN0b3J5IGhpc3RvcnkgbGlzdAotICBjYWxsIHM6TmV0cndCb29rSGlzdEhhbmRsZXIoMyxiOm5ldHJ3X2N1cmRpcikKKyAga2VlcGogY2FsbCBzOk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDMsYjpuZXRyd19jdXJkaXIpCiAKICAgIiBTZXQgdXAgdGhlIGJhbm5lciB7e3szCiAgIGlmIGc6bmV0cndfYmFubmVyCiAiICAgY2FsbCBEZWNobygic2V0IHVwIGJhbm5lciIpCi0gICBrZWVwaiBwdXQgPSdcIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwotICAga2VlcGogcHV0ID0nXCIgTmV0cncgRGlyZWN0b3J5IExpc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHJ3ICcuZzpsb2FkZWRfbmV0cncuJyknCi0gICBrZWVwaiBwdXQgPSdcIiAgICcuYjpuZXRyd19jdXJkaXIKLSAgIGtlZXBqIDFkCisgICBrZWVwaiBjYWxsIHNldGxpbmUoMSwnIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JykKKyAgIGtlZXBqIGNhbGwgc2V0bGluZSgyLCciIE5ldHJ3IERpcmVjdG9yeSBMaXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRydyAnLmc6bG9hZGVkX25ldHJ3LicpJykKKyAgIGtlZXBqIGNhbGwgc2V0bGluZSgzLCciICAgJy5iOm5ldHJ3X2N1cmRpcikKICAgIGxldCB3Om5ldHJ3X2Jhbm5lcmNudD0gMwotICAgZXhlICJzaWwhIGtlZXBqICIudzpuZXRyd19iYW5uZXJjbnQKKyAgIGtlZXBqIGV4ZSAic2lsISBrZWVwaiAiLnc6bmV0cndfYmFubmVyY250CiAgIGVsc2UKICAgIGtlZXBqIDEKICAgIGxldCB3Om5ldHJ3X2Jhbm5lcmNudD0gMQpAQCAtNjM4OCwxOCArNjU2MCwyMCBAQAogICAiIHNldCB1cCBzeW50YXggaGlnaGxpZ2h0aW5nIHt7ezMKICIgIGNhbGwgRGVjaG8oInNldCB1cCBzeW50YXggaGlnaGxpZ2h0aW5nIikKICAgaWYgaGFzKCJzeW50YXgiKQotICAgc2V0ZiBuZXRydwogICAgaWYgIWV4aXN0cygiZzpzeW50YXhfb24iKSB8fCAhZzpzeW50YXhfb24KKyIgICAgY2FsbCBEZWNobygiYnV0IGc6c3ludGF4X29uIi4oZXhpc3RzKCJnOnN5bnRheF9vbiIpPyAiPSIuZzpzeW50YXhfb24gOiAiPGRvZXNuJ3QgZXhpc3Q+IikpCiAgICAgc2V0bG9jYWwgZnQ9CisgICBlbHNlaWYgJmZ0ICE9ICJuZXRydyIKKyAgICBzZXRsb2NhbCBmdD1uZXRydwogICAgZW5kaWYKICAgZW5kaWYKIAogICAiIGdldCBsaXN0IG9mIGZpbGVzCiAiICBjYWxsIERlY2hvKCJHZXQgbGlzdCBvZiBmaWxlcyAtIGlzbG9jYWw9Ii5hOmlzbG9jYWwpCiAgIGlmIGE6aXNsb2NhbAotICAgY2FsbCBzOkxvY2FsTGlzdGluZygpCisgICBrZWVwaiBjYWxsIHM6TG9jYWxMaXN0aW5nKCkKICAgZWxzZSAiIHJlbW90ZQotICAgY2FsbCBzOk5ldHJ3UmVtb3RlTGlzdGluZygpCisgICBrZWVwaiBjYWxsIHM6TmV0cndSZW1vdGVMaXN0aW5nKCkKICAgZW5kaWYKICIgIGNhbGwgRGVjaG8oImc6bmV0cndfYmFubmVyPSIuZzpuZXRyd19iYW5uZXIuIiB3Om5ldHJ3X2Jhbm5lcmNudD0iLnc6bmV0cndfYmFubmVyY250LiIgKGJhbm5lciBjb21wbGV0ZSkiKQogCkBAIC02NDA4LDE0ICs2NTgyLDE0IEBACiAiICAgY2FsbCBEZWNobygibWFuaXB1bGF0ZSBkaXJlY3RvcnkgbGlzdGluZyAoaGlkZSkiKQogIiAgIGNhbGwgRGVjaG8oImc6bmV0cndfaGlkZT0iLmc6bmV0cndfaGlkZS4iIGc6bmV0cndfbGlzdF9oaWRlPCIuZzpuZXRyd19saXN0X2hpZGUuIj4iKQogICAgaWYgZzpuZXRyd19oaWRlICYmIGc6bmV0cndfbGlzdF9oaWRlICE9ICIiCi0gICAgY2FsbCBzOk5ldHJ3TGlzdEhpZGUoKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd0xpc3RIaWRlKCkKICAgIGVuZGlmCiAgICBpZiAhZzpuZXRyd19iYW5uZXIgfHwgbGluZSgiJCIpID49IHc6bmV0cndfYmFubmVyY250CiAiICAgIGNhbGwgRGVjaG8oIm1hbmlwdWxhdGUgZGlyZWN0b3J5IGxpc3RpbmcgKHNvcnQpIDogZzpuZXRyd19zb3J0X2J5PCIuZzpuZXRyd19zb3J0X2J5LiI+IikKIAogICAgIGlmIGc6bmV0cndfc29ydF9ieSA9fiAiXm4iCiAgICAgICIgc29ydCBieSBuYW1lCi0gICAgIGNhbGwgczpOZXRyd1NldFNvcnQoKQorICAgICBrZWVwaiBjYWxsIHM6TmV0cndTZXRTb3J0KCkKIAogICAgICBpZiAhZzpuZXRyd19iYW5uZXIgfHwgdzpuZXRyd19iYW5uZXJjbnQgPCBsaW5lKCIkIikKICIgICAgICBjYWxsIERlY2hvKCJnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uPSIuZzpuZXRyd19zb3J0X2RpcmVjdGlvbi4iIChiYW5uZXJjbnQ9Ii53Om5ldHJ3X2Jhbm5lcmNudC4iKSIpCkBAIC02NDMwLDIwICs2NjA0LDIwIEBACiAgICAgICIgcmVtb3ZlIHByaW9yaXR5IHBhdHRlcm4gcHJlZml4CiAiICAgICBjYWxsIERlY2hvKCJyZW1vdmUgcHJpb3JpdHkgcGF0dGVybiBwcmVmaXgiKQogICAgICBleGUgJ3NpbCEga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cZFx7M30nLmc6bmV0cndfc2VwY2hyLicvL2UnCi0gICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAKICAgICBlbHNlaWYgYTppc2xvY2FsCiAgICAgIGlmICFnOm5ldHJ3X2Jhbm5lciB8fCB3Om5ldHJ3X2Jhbm5lcmNudCA8IGxpbmUoIiQiKQogIiAgICAgIGNhbGwgRGVjaG8oImc6bmV0cndfc29ydF9kaXJlY3Rpb249Ii5nOm5ldHJ3X3NvcnRfZGlyZWN0aW9uKQogICAgICAgaWYgZzpuZXRyd19zb3J0X2RpcmVjdGlvbiA9fiAnbicKLSIgICAgICAgY2FsbCBEZWNobygnZXhlIHNpbGVudCBrZWVwanVtcHMgJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzb3J0JykKKyIgICAgICAgY2FsbCBEZWNobygnZXhlIHNpbCBrZWVwanVtcHMgJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzb3J0JykKICAgICAgICBleGUgJ3NpbCEga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzb3J0Jy4nICcuZzpuZXRyd19zb3J0X29wdGlvbnMKICAgICAgIGVsc2UKLSIgICAgICAgY2FsbCBEZWNobygnZXhlIHNpbGVudCBrZWVwanVtcHMgJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzb3J0IScpCisiICAgICAgIGNhbGwgRGVjaG8oJ2V4ZSBzaWwga2VlcGp1bXBzICcudzpuZXRyd19iYW5uZXJjbnQuJywkc29ydCEnKQogICAgICAgIGV4ZSAnc2lsISBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250LicsJHNvcnQhJy4nICcuZzpuZXRyd19zb3J0X29wdGlvbnMKICAgICAgIGVuZGlmCiAgICAgIGV4ZSAnc2lsISBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250LicsJHMvXlxkXHstfVwvLy9lJwotICAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQogICAgICBlbmRpZgogICAgIGVuZGlmCiAKQEAgLTY0NTgsOCArNjYzMiw4IEBACiAKICAgIiBjb252ZXJ0IHRvIHdpZGUvdHJlZSBsaXN0aW5nIHt7ezMKICIgIGNhbGwgRGVjaG8oIm1vZGlmeSBkaXNwbGF5IGlmIHdpZGUvdHJlZSBsaXN0aW5nIHN0eWxlIikKLSAgY2FsbCBzOk5ldHJ3V2lkZUxpc3RpbmcoKQotICBjYWxsIHM6TmV0cndUcmVlTGlzdGluZyhiOm5ldHJ3X2N1cmRpcikKKyAga2VlcGogY2FsbCBzOk5ldHJ3V2lkZUxpc3RpbmcoKQorICBrZWVwaiBjYWxsIHM6TmV0cndUcmVlTGlzdGluZyhiOm5ldHJ3X2N1cmRpcikKIAogICBpZiBleGlzdHMoInc6bmV0cndfYmFubmVyY250IikgJiYgKGxpbmUoIiQiKSA+IHc6bmV0cndfYmFubmVyY250IHx8ICFnOm5ldHJ3X2Jhbm5lcikKICAgICIgcGxhY2UgY3Vyc29yIG9uIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGZpbGUgbGlzdGluZwpAQCAtNjQ3MywxNSArNjY0NywxNSBAQAogIiAgY2FsbCBEZWNobygicmVjb3JkIG5ldHJ3X3BydmRpcjwiLnc6bmV0cndfcHJ2ZGlyLiI+IikKIAogICAiIHNhdmUgY2VydGFpbiB3aW5kb3ctb3JpZW50ZWQgdmFyaWFibGVzIGludG8gYnVmZmVyLW9yaWVudGVkIHZhcmlhYmxlcyB7e3szCi0gIGNhbGwgczpTZXRCdWZXaW5WYXJzKCkKLSAgY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgidzoiKQorICBrZWVwaiBjYWxsIHM6U2V0QnVmV2luVmFycygpCisgIGtlZXBqIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInc6IikKIAogICAiIHNldCBkaXNwbGF5IHRvIG5ldHJ3IGRpc3BsYXkgc2V0dGluZ3MKICIgIGNhbGwgRGVjaG8oInNldCBkaXNwbGF5IHRvIG5ldHJ3IGRpc3BsYXkgc2V0dGluZ3MgKG5vbWEgbm9tb2QgZXRjKSIpCiAgIGV4ZSAic2V0bCAiLmc6bmV0cndfYnVmc2V0dGluZ3MKICAgaWYgZXhpc3RzKCJzOnRyZWVjdXJwb3MiKQogCi0gICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oczp0cmVlY3VycG9zKQorICAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHM6dHJlZWN1cnBvcykKICAgIHVubGV0IHM6dHJlZWN1cnBvcwogICBlbmRpZgogCkBAIC02NTU3LDEzICs2NzMxLDEzIEBACiAgIGVsc2VpZiAhZXhpc3RzKCJnOm5ldHJ3X2xpc3RfY21kIikgfHwgZzpuZXRyd19saXN0X2NtZCA9PSAnJwogICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCiAgICAgaWYgZzpuZXRyd19saXN0X2NtZCA9PSAiIgotICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsZzpuZXRyd19zc2hfY21kLiIgaXMgbm90IGV4ZWN1dGFibGUgb24geW91ciBzeXN0ZW0iLDQ3KQorICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsZzpuZXRyd19zc2hfY21kLiIgaXMgbm90IGV4ZWN1dGFibGUgb24geW91ciBzeXN0ZW0iLDQ3KQogICAgIGVsc2UKLSAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJ0aGlzIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgcmVtb3RlIGRpcmVjdG9yeSBsaXN0aW5nIHZpYSAiLmc6bmV0cndfbGlzdF9jbWQsMTkpCisgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwidGhpcyBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHJlbW90ZSBkaXJlY3RvcnkgbGlzdGluZyB2aWEgIi5nOm5ldHJ3X2xpc3RfY21kLDE5KQogICAgIGVuZGlmCiAgICBlbmRpZgogCi0gICBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJ3OiIpCisgICBrZWVwaiBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJ3OiIpCiAiICAgY2FsbCBEcmV0KCJzOk5ldHJ3UmVtb3RlTGlzdGluZyIpCiAgICByZXR1cm4KICAgZW5kaWYgICIgKHJlbW90ZSBoYW5kbGluZyBzYW5pdHkgY2hlY2spCkBAIC02NTc0LDcgKzY3NDgsNyBAQAogICBlbmRpZgogCiAgIGlmIHM6bWV0aG9kID09ICJmdHAiCi0gICAiIHVzZSBmdHAgdG8gZ2V0IHJlbW90ZSBmaWxlIGxpc3RpbmcKKyAgICIgdXNlIGZ0cCB0byBnZXQgcmVtb3RlIGZpbGUgbGlzdGluZyB7e3szCiAiICAgY2FsbCBEZWNobygidXNlIGZ0cCB0byBnZXQgcmVtb3RlIGZpbGUgbGlzdGluZyIpCiAgICBsZXQgczptZXRob2QgID0gImZ0cCIKICAgIGxldCBsaXN0Y21kID0gZzpuZXRyd19mdHBfbGlzdF9jbWQKQEAgLTY1OTUsMTAgKzY3NjksMTAgQEAKICAgICAiIGNsZWFudXAKICAgICBpZiBnOm5ldHJ3X2Z0cF9icm93c2VfcmVqZWN0ICE9ICIiCiAgICAgIGV4ZSAic2lsISBrZWVwYWx0IGtlZXBqIGcvIi5nOm5ldHJ3X2Z0cF9icm93c2VfcmVqZWN0LiIva2VlcGogZCIKLSAgICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKICAgICBlbmRpZgogICAgIHNpbCEga2VlcGogJXMvXHIkLy9lCi0gICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQogCiAgICAgIiBpZiB0aGVyZSdzIG5vIC4uLyBsaXN0ZWQsIHRoZW4gcHV0IC4vIGFuZCAuLi8gaW4KICAgICBsZXQgbGluZTE9IGxpbmUoIi4iKQpAQCAtNjYxNiwxNSArNjc5MCwxNSBAQAogICAgIGlmIHNlYXJjaCgnXlxkXHsyfS1cZFx7Mn0tXGRcezJ9XHMnLCduJykgIiBNJCBmdHAgc2l0ZSBjbGVhbnVwCiAiICAgICBjYWxsIERlY2hvKCJNJCBmdHAgY2xlYW51cCIpCiAgICAgIGV4ZSAnc2lsISBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250LicsJHMvXlxkXHsyfS1cZFx7Mn0tXGRcezJ9XHNcK1xkXCs6XGRcK1tBYVBwXVtNbV1cc1wrXCUoPERJUj5cfFxkXCtcKVxzXCsvLycKLSAgICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKICAgICBlbHNlICIgbm9ybWFsIGZ0cCBjbGVhbnVwCiAiICAgICBjYWxsIERlY2hvKCJub3JtYWwgZnRwIGNsZWFudXAiKQogICAgICBleGUgJ3NpbCEga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cKFwlKFxTXCtcc1wrXClcezd9XFNcK1wpXHNcK1woXFMuKlwpJC9cMi9lJwogICAgICBleGUgInNpbCEga2VlcGogIi53Om5ldHJ3X2Jhbm5lcmNudC4nLCRnLyAtPiAvcyMgLT4gLiovJCMvI2UnCiAgICAgIGV4ZSAic2lsISBrZWVwaiAiLnc6bmV0cndfYmFubmVyY250LicsJGcvIC0+IC9zIyAtPiAuKiQjLyNlJwotICAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQotICAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQotICAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQogICAgIGVuZGlmCiAgICBlbmRpZgogCkBAIC02NjM0LDI1ICs2ODA4LDI1IEBACiAgICBsZXQgbGlzdGNtZD0gczpNYWtlU3NoQ21kKGc6bmV0cndfbGlzdF9jbWQpCiAiICAgY2FsbCBEZWNobygibGlzdGNtZDwiLmxpc3RjbWQuIj4gKHVzaW5nIGc6bmV0cndfbGlzdF9jbWQpIikKICAgIGlmIGc6bmV0cndfc2NwX2NtZCA9fiAnXnBzY3AnCi0iICAgIGNhbGwgRGVjaG8oIjE6IGV4ZSBzaWxlbnQgciEgIi5zaGVsbGVzY2FwZShsaXN0Y21kLnM6cGF0aCwgMSkpCisiICAgIGNhbGwgRGVjaG8oIjE6IGV4ZSBzaWwgciEgIi5zaGVsbGVzY2FwZShsaXN0Y21kLnM6cGF0aCwgMSkpCiAgICAgZXhlICJzaWwhIGtlZXBqIHIhICIubGlzdGNtZC5zaGVsbGVzY2FwZShzOnBhdGgsIDEpCiAgICAgIiByZW1vdmUgcnViYmlzaCBhbmQgYWRqdXN0IGxpc3RpbmcgZm9ybWF0IG9mICdwc2NwJyB0byAnc3NoIGxzIC1GTGEnIGxpa2UKICAgICBzaWwhIGtlZXBqIGcvXkxpc3RpbmcgZGlyZWN0b3J5L2tlZXBqIGQKICAgICBzaWwhIGtlZXBqIGcvXmRbLXJ3eF1bLXJ3eF1bLXJ3eF0va2VlcGogcyskKy8rZQogICAgIHNpbCEga2VlcGogZy9ebFstcnd4XVstcnd4XVstcnd4XS9rZWVwaiBzKyQrQCtlCi0gICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKLSAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQotICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAgICAgaWYgZzpuZXRyd19saXN0c3R5bGUgIT0gczpMT05HTElTVAogICAgICBzaWwhIGtlZXBqIGcvXltkbHNwLV1bLXJ3eF1bLXJ3eF1bLXJ3eF0va2VlcGogcy9eLipcc1woXFNcK1wpJC9cMS9lCi0gICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAgICAgZW5kaWYKICAgIGVsc2UKICAgICBpZiBzOnBhdGggPT0gIiIKLSIgICAgIGNhbGwgRGVjaG8oIjI6IGV4ZSBzaWxlbnQgciEgIi5saXN0Y21kKQorIiAgICAgY2FsbCBEZWNobygiMjogZXhlIHNpbCByISAiLmxpc3RjbWQpCiAgICAgIGV4ZSAic2lsISBrZWVwYWx0IHIhICIubGlzdGNtZAogICAgIGVsc2UKLSIgICAgIGNhbGwgRGVjaG8oIjM6IGV4ZSBzaWxlbnQgciEgIi5saXN0Y21kLicgJy5zaGVsbGVzY2FwZShzOnBhdGgsMSkpCisiICAgICBjYWxsIERlY2hvKCIzOiBleGUgc2lsIHIhICIubGlzdGNtZC4nICcuc2hlbGxlc2NhcGUoczpwYXRoLDEpKQogICAgICBleGUgInNpbCEga2VlcGFsdCByISAiLmxpc3RjbWQuJyAnLnNoZWxsZXNjYXBlKHM6cGF0aCwxKQogIiAgICAgY2FsbCBEZWNobygibGlzdGNtZDwiLmxpc3RjbWQuIj4gcGF0aDwiLnM6cGF0aC4iPiIpCiAgICAgZW5kaWYKQEAgLTY2NjAsOSArNjgzNCw5IEBACiAKICAgICIgY2xlYW51cAogICAgaWYgZzpuZXRyd19mdHBfYnJvd3NlX3JlamVjdCAhPSAiIgotIiAgICBjYWxsIERlY2hvKCIoY2xlYW51cCkgZXhlIHNpbGVudCEgZy8iLmc6bmV0cndfc3NoX2Jyb3dzZV9yZWplY3QuIi9rZWVwanVtcHMgZCIpCisiICAgIGNhbGwgRGVjaG8oIihjbGVhbnVwKSBleGUgc2lsISBnLyIuZzpuZXRyd19zc2hfYnJvd3NlX3JlamVjdC4iL2tlZXBqdW1wcyBkIikKICAgICBleGUgInNpbCEgZy8iLmc6bmV0cndfc3NoX2Jyb3dzZV9yZWplY3QuIi9rZWVwaiBkIgotICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKICAgIGVuZGlmCiAgIGVuZGlmCiAKQEAgLTY2OTksOSArNjg3Myw5IEBACiAgICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzLyAtPiAuKiQvL2UnCiAgICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cKFwlKFxTXCtcc1wrXClcezd9XFNcK1wpXHNcK1woXFMuKlwpJC9cMlx0XDEvZScKICAgICBleGUgJ3NpbCBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250Ci0gICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKLSAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQotICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICAga2VlcGogY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAgICBlbmRpZgogICBlbmRpZgogCkBAIC02NzU0LDggKzY5MjgsOCBAQAogCiAgICIgcmVmcmVzaCB0aGUgKHJlbW90ZSkgZGlyZWN0b3J5IGxpc3RpbmcKICIgIGNhbGwgRGVjaG8oInJlZnJlc2ggcmVtb3RlIGRpcmVjdG9yeSBsaXN0aW5nIikKLSAgY2FsbCBzOk5ldHJ3UmVmcmVzaCgwLHM6TmV0cndCcm93c2VDaGdEaXIoMCwnLi8nKSkKLSAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorICBrZWVwaiBjYWxsIHM6TmV0cndSZWZyZXNoKDAsczpOZXRyd0Jyb3dzZUNoZ0RpcigwLCcuLycpKQorICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCiAKICIgIGNhbGwgRHJldCgiczpOZXRyd1JlbW90ZVJtIikKIGVuZGZ1bgpAQCAtNjgwMiw3ICs2OTc2LDcgQEAKICAgICAgbGV0IG5ldHJ3X3JtX2NtZD0gczpNYWtlU3NoQ21kKGc6bmV0cndfcm1fY21kKQogIiAgICAgY2FsbCBEZWNobygibmV0cndfcm1fY21kPCIubmV0cndfcm1fY21kLiI+IikKICAgICAgaWYgIWV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJmb3Igc29tZSByZWFzb24gYjpuZXRyd19jdXJkaXIgZG9lc24ndCBleGlzdCEiLDUzKQorICAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJmb3Igc29tZSByZWFzb24gYjpuZXRyd19jdXJkaXIgZG9lc24ndCBleGlzdCEiLDUzKQogICAgICAgbGV0IG9rPSJxIgogICAgICBlbHNlCiAgICAgICBsZXQgcmVtb3RlZGlyPSBzdWJzdGl0dXRlKGI6bmV0cndfY3VyZGlyLCdeLiovL1teL11cKy9cKC4qXCkkJywnXDEnLCcnKQpAQCAtNjgxNyw3ICs2OTkxLDcgQEAKICIgICAgICBjYWxsIERlY2hvKCJjYWxsIHN5c3RlbSgiLm5ldHJ3X3JtX2NtZC4iKSIpCiAgICAgICBsZXQgcmV0PSBzeXN0ZW0obmV0cndfcm1fY21kKQogICAgICAgaWYgcmV0ICE9IDAKLSAgICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiY21kPCIubmV0cndfcm1fY21kLiI+IGZhaWxlZCIsNjApCisgICAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsImNtZDwiLm5ldHJ3X3JtX2NtZC4iPiBmYWlsZWQiLDYwKQogICAgICAgZW5kaWYKICIgICAgICBjYWxsIERlY2hvKCJyZXR1cm5lZD0iLnJldC4iIGVycmNvZGU9Ii52OnNoZWxsX2Vycm9yKQogICAgICBlbmRpZgpAQCAtNjg0NSw3ICs3MDE5LDcgQEAKIAogICAgaWYgYWxsIHx8IG9rID1+ICd5XCVbZXNdJyB8fCBvayA9PSAiIgogICAgIGlmIGV4aXN0cygidzpuZXRyd19tZXRob2QiKSAmJiAodzpuZXRyd19tZXRob2QgPT0gMiB8fCB3Om5ldHJ3X21ldGhvZCA9PSAzKQotICAgICBjYWxsIHM6TmV0cndSZW1vdGVGdHBDbWQoYTpwYXRoLCJybWRpciAiLmE6cm1maWxlKQorICAgICBrZWVwaiBjYWxsIHM6TmV0cndSZW1vdGVGdHBDbWQoYTpwYXRoLCJybWRpciAiLmE6cm1maWxlKQogICAgIGVsc2UKICAgICAgbGV0IHJtZmlsZSAgICAgICAgICA9IHN1YnN0aXR1dGUoYTpwYXRoLmE6cm1maWxlLCcvJCcsJycsJycpCiAgICAgIGxldCBuZXRyd19ybWRpcl9jbWQgPSBzOk1ha2VTc2hDbWQobmV0cncjV2luUGF0aChnOm5ldHJ3X3JtZGlyX2NtZCkpLicgJy5zaGVsbGVzY2FwZShuZXRydyNXaW5QYXRoKHJtZmlsZSkpCkBAIC02ODYxLDcgKzcwMzUsNyBAQAogIiAgICAgIGNhbGwgRGVjaG8oInJldHVybmVkPSIucmV0LiIgZXJyY29kZT0iLnY6c2hlbGxfZXJyb3IpCiAKICAgICAgIGlmIHY6c2hlbGxfZXJyb3IgIT0gMCAmJiAhZXhpc3RzKCJnOm5ldHJ3X3F1aWV0IikKLSAgICAgIAljYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsInVuYWJsZSB0byByZW1vdmUgZGlyZWN0b3J5PCIucm1maWxlLiI+IC0tIGlzIGl0IGVtcHR5PyIsMjIpCisgICAgICAJa2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJ1bmFibGUgdG8gcmVtb3ZlIGRpcmVjdG9yeTwiLnJtZmlsZS4iPiAtLSBpcyBpdCBlbXB0eT8iLDIyKQogICAgICAgZW5kaWYKICAgICAgZW5kaWYKICAgICBlbmRpZgpAQCAtNjg5MSw4ICs3MDY1LDggQEAKIAogICAiIGNsZWFyIG9mZiBhbnkgb2xkZXIgbm9uLWJhbm5lciBsaW5lcwogICAiIG5vdGUgdGhhdCB3Om5ldHJ3X2Jhbm5lcmNudCBpbmRleGVzIHRoZSBsaW5lIGFmdGVyIHRoZSBiYW5uZXIKLSIgIGNhbGwgRGVjaG8oJ2V4ZSBzaWxlbnQhIGtlZXBqdW1wcyAnLnc6bmV0cndfYmFubmVyY250LiIsJGQgIChjbGVhciBvZmYgb2xkIG5vbi1iYW5uZXIgbGluZXMpIikKLSAgZXhlICJzaWxlbnQhIGtlZXBqdW1wcyAiLnc6bmV0cndfYmFubmVyY250LiIsJGQiCisiICBjYWxsIERlY2hvKCdleGUgc2lsISBrZWVwanVtcHMgJy53Om5ldHJ3X2Jhbm5lcmNudC4iLCRkICAoY2xlYXIgb2ZmIG9sZCBub24tYmFubmVyIGxpbmVzKSIpCisgIGV4ZSAic2lsISBrZWVwanVtcHMgIi53Om5ldHJ3X2Jhbm5lcmNudC4iLCRkIgogCiAgICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogICBpZiB3Om5ldHJ3X21ldGhvZCA9PSAyIHx8IHc6bmV0cndfbWV0aG9kID09IDUKQEAgLTY5MDQsMTQgKzcwNzgsMTQgQEAKICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwZXh0cmFjbWQKICIgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJy4nKSkKICAgIGVuZGlmCi0gICBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsYTpsaXN0Y21kKQorICAga2VlcGogY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSsxLGE6bGlzdGNtZCkKICIgICBleGUgImtlZXBqdW1wcyAiLnc6bmV0cndfYmFubmVyY250LicsJGcvXi4vY2FsbCBEZWNobygiZnRwIyIubGluZSgiLiIpLiI6ICIuZ2V0bGluZSgiLiIpKScKICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0iICAgIGNhbGwgRGVjaG8oImV4ZSAiLnM6bmV0cndfc2lsZW50eGZlci53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpKQotICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiBrZWVwanVtcHMgIi53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCisiICAgIGNhbGwgRGVjaG8oImV4ZSAiLnM6bmV0cndfc2lsZW50eGZlci53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpKQorICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiBrZWVwanVtcHMgIi53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCiAgICBlbHNlCi0iICAgIGNhbGwgRGVjaG8oImV4ZSAiLnM6bmV0cndfc2lsZW50eGZlci53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKLSAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIga2VlcGp1bXBzICIudzpuZXRyd19iYW5uZXJjbnQuIiwkISIuZzpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkKKyIgICAgY2FsbCBEZWNobygiZXhlICIuczpuZXRyd19zaWxlbnR4ZmVyLnc6bmV0cndfYmFubmVyY250LiIsJCEiLnM6bmV0cndfZnRwX2NtZC4iIC1pICIuc2hlbGxlc2NhcGUoZzpuZXRyd19tYWNoaW5lLDEpKQorICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiBrZWVwanVtcHMgIi53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQogICAgZW5kaWYKIAogICAgIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCkBAIC02OTQ1LDI4ICs3MTE5LDI4IEBACiAgICAgIiAtbiAgdW5peCA6IERPTidUIHVzZSA8Lm5ldHJjPiwgZXZlbiB0aG91Z2ggaXQgZXhpc3RzCiAgICAgIiAtbiAgd2luMzI6IHF1aXQgYmVpbmcgb2Jub3hpb3VzIGFib3V0IHBhc3N3b3JkCiAiICAgIGV4ZSB3Om5ldHJ3X2Jhbm5lcmNudC4nLCRnL14uL2NhbGwgRGVjaG8oImZ0cCMiLmxpbmUoIi4iKS4iOiAiLmdldGxpbmUoIi4iKSknCi0iICAgIGNhbGwgRGVjaG8oImV4ZSAiLnM6bmV0cndfc2lsZW50eGZlci53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAtbiIpCi0gICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci53Om5ldHJ3X2Jhbm5lcmNudC4iLCQhIi5nOm5ldHJ3X2Z0cF9jbWQuIiAtaSAtbiIKKyIgICAgY2FsbCBEZWNobygiZXhlICIuczpuZXRyd19zaWxlbnR4ZmVyLnc6bmV0cndfYmFubmVyY250LiIsJCEiLnM6bmV0cndfZnRwX2NtZC4iIC1pIC1uIikKKyAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLnc6bmV0cndfYmFubmVyY250LiIsJCEiLnM6bmV0cndfZnRwX2NtZC4iIC1pIC1uIgogCiAgICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICAgZWxzZQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInVuYWJsZSB0byBjb21wbHkgd2l0aCB5b3VyIHJlcXVlc3Q8IiAuIGNob2ljZSAuICI+IiwyMykKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ1bmFibGUgdG8gY29tcGx5IHdpdGggeW91ciByZXF1ZXN0PCIgLiBjaG9pY2UgLiAiPiIsMjMpCiAgIGVuZGlmCiAKICAgIiBjbGVhbnVwIGZvciBXaW5kb3dzCiAgIGlmIGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKQogICAgc2lsISBrZWVwaiAlcy9cciQvL2UKLSAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQogICBlbmRpZgogICBpZiBhOmxpc3RjbWQgPT0gImRpciIKICAgICIgaW5mZXIgZGlyZWN0b3J5L2xpbmsgYmFzZWQgb24gdGhlIGZpbGUgcGVybWlzc2lvbiBzdHJpbmcKICAgIHNpbCEga2VlcGogZy9kXCUoWy1yXVstd11bLXhdXClcezN9L2tlZXBqIHNAJEAvQAogICAgc2lsISBrZWVwaiBnL2xcJShbLXJdWy13XVsteF1cKVx7M30va2VlcGogcy8kL0AvCi0gICBjYWxsIGhpc3RkZWwoIi8iLC0xKQotICAgY2FsbCBoaXN0ZGVsKCIvIiwtMSkKKyAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCisgICBrZWVwaiBjYWxsIGhpc3RkZWwoIi8iLC0xKQogICAgaWYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUSElOTElTVCB8fCB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOldJREVMSVNUIHx8IHc6bmV0cndfbGlzdHN0eWxlID09IHM6VFJFRUxJU1QKICAgICBleGUgInNpbCEga2VlcGogIi53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cJShcU1wrXHNcK1wpXHs4fS8vZScKLSAgICBjYWxsIGhpc3RkZWwoIi8iLC0xKQorICAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAgICBlbmRpZgogICBlbmRpZgogCkBAIC03MDE1LDcgKzcxODksNyBAQAogICAgIGVuZGlmCiAgICAKICAgICBpZiBleGlzdHMoInc6bmV0cndfbWV0aG9kIikgJiYgKHc6bmV0cndfbWV0aG9kID09IDIgfHwgdzpuZXRyd19tZXRob2QgPT0gMykKLSAgICAgY2FsbCBzOk5ldHJ3UmVtb3RlRnRwQ21kKGE6cGF0aCwicmVuYW1lICIub2xkbmFtZS4iICIubmV3bmFtZSkKKyAgICAga2VlcGogY2FsbCBzOk5ldHJ3UmVtb3RlRnRwQ21kKGE6cGF0aCwicmVuYW1lICIub2xkbmFtZS4iICIubmV3bmFtZSkKICAgICBlbHNlCiAgICAgIGxldCBvbGRuYW1lPSBzaGVsbGVzY2FwZShhOnBhdGgub2xkbmFtZSkKICAgICAgbGV0IG5ld25hbWU9IHNoZWxsZXNjYXBlKGE6cGF0aC5uZXduYW1lKQpAQCAtNzA1Myw4ICs3MjI3LDggQEAKICAgZW5kaWYKIAogICAiIHJlZnJlc2ggdGhlIGRpcmVjdG9yeQotICBjYWxsIHM6TmV0cndSZWZyZXNoKDAsczpOZXRyd0Jyb3dzZUNoZ0RpcigwLCcuLycpKQotICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3MpCisgIGtlZXBqIGNhbGwgczpOZXRyd1JlZnJlc2goMCxzOk5ldHJ3QnJvd3NlQ2hnRGlyKDAsJy4vJykpCisgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKIAogIiAgY2FsbCBEcmV0KCJOZXRyd1JlbW90ZVJlbmFtZSIpCiBlbmRmdW4KQEAgLTcwNzQsMTUgKzcyNDgsMTYgQEAKICAgIiB3b3VsZCBoaXQgd2hlbiByZS1lbnRlcmluZyBuZXRydyB3aW5kb3dzLCBjcmVhdGluZyB1bmV4cGVjdGVkCiAgICIgcmVmcmVzaGVzIChhbmQgd291bGQgZG8gc28gaW4gdGhlIG1pZGRsZSBvZiBOZXRyd1NhdmVPcHRpb25zKCksIHRvbykKICIgIGNhbGwgRGVjaG8oIm5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2s6IGlzZGlyPCIuYTpkaXJuYW1lLiI+PSIuaXNkaXJlY3RvcnkoYTpkaXJuYW1lKS4oKGV4aXN0cygiczp0cmVlZm9yY2VyZWRyYXciKT8gIiB0cmVlZm9yY2VyZWRyYXciIDogIiIpKSkKKyIgIGNhbGwgRHJlZGlyKCJMb2NhbEJyb3dzZUNoZWNrIiwibHMhIil8cmVkcmF3IXxzbGVlcCAzCiAgIGlmIGlzZGlyZWN0b3J5KGE6ZGlybmFtZSkKICIgICBjYWxsIERlY2hvKCIgZnQ8Ii4mZnQuIj4gYjpuZXRyd19jdXJkaXI8Ii4oZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpPyBiOm5ldHJ3X2N1cmRpciA6ICIgZG9lc24ndCBleGlzdCIpLiI+IGRpcm5hbWU8Ii5hOmRpcm5hbWUuIj4iLiIgbGluZSgkKT0iLmxpbmUoIiQiKSkKICAgIGlmICZmdCAhPSAibmV0cnciIHx8IChleGlzdHMoImI6bmV0cndfY3VyZGlyIikgJiYgYjpuZXRyd19jdXJkaXIgIT0gYTpkaXJuYW1lKQotICAgIHNpbGVudCEgY2FsbCBzOk5ldHJ3QnJvd3NlKDEsYTpkaXJuYW1lKQorICAgIHNpbCEga2VlcGogY2FsbCBzOk5ldHJ3QnJvd3NlKDEsYTpkaXJuYW1lKQogICAgZWxzZWlmICZmdCA9PSAibmV0cnciICYmIGxpbmUoIiQiKSA9PSAxCi0gICAgc2lsZW50ISBjYWxsIHM6TmV0cndCcm93c2UoMSxhOmRpcm5hbWUpCisgICAgc2lsISBrZWVwaiBjYWxsIHM6TmV0cndCcm93c2UoMSxhOmRpcm5hbWUpCiAgICBlbHNlaWYgZXhpc3RzKCJzOnRyZWVmb3JjZXJlZHJhdyIpCiAgICAgdW5sZXQgczp0cmVlZm9yY2VyZWRyYXcKLSAgICBzaWxlbnQhIGNhbGwgczpOZXRyd0Jyb3dzZSgxLGE6ZGlybmFtZSkKKyAgICBzaWwhIGtlZXBqIGNhbGwgczpOZXRyd0Jyb3dzZSgxLGE6ZGlybmFtZSkKICAgIGVuZGlmCiAgIGVuZGlmCiAgICIgbm90IGEgZGlyZWN0b3J5LCBpZ25vcmUgaXQKQEAgLTcxMDEsNyArNzI3Niw3IEBACiAiICBpZiBleGlzdHMoImc6bmV0cndfc29ydF9ieSIpfGNhbGwgRGVjaG8oJ2c6bmV0cndfc29ydF9ieTwnLmc6bmV0cndfc29ydF9ieS4iPiIpfGVsc2V8Y2FsbCBEZWNobygiZzpuZXRyd19zb3J0X2J5IGRvZXNuJ3QgZXhpc3QiKXxlbmRpZgogCiAgICIgZ2V0IHRoZSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKLSAgbGV0IGRpcm5hbWUgICAgPSBlc2NhcGUoYjpuZXRyd19jdXJkaXIsZzpuZXRyd19nbG9iX2VzY2FwZSkKKyAgbGV0IGRpcm5hbWUgICAgPSBiOm5ldHJ3X2N1cmRpcgogICBsZXQgZGlybmFtZWxlbiA9IHM6U3RybGVuKGI6bmV0cndfY3VyZGlyKQogICBsZXQgZmlsZWxpc3QgICA9IGdsb2IoczpDb21wb3NlUGF0aChkaXJuYW1lLCIqIikpCiAiICBjYWxsIERlY2hvKCJnbG9iKGRpcm5hbWU8Ii5kaXJuYW1lLiIvKj4pPSIuZmlsZWxpc3QpCkBAIC03MzA5LDcgKzc0ODQsNyBAQAogICAgICIgcmVmcmVzaCBhbnkgbmV0cncgYnVmZmVyCiAiICAgIGNhbGwgRGVjaG8oInJlZnJlc2ggYnVmIyIuaWJ1Zi4nLT4gd2luIycuYnVmd2lubnIoaWJ1ZikpCiAgICAgZXhlIGJ1Zndpbm5yKGlidWYpLiJ3aW5jbWQgdyIKLSAgICBjYWxsIHM6TmV0cndSZWZyZXNoKDEsczpOZXRyd0Jyb3dzZUNoZ0RpcigxLCcuLycpKQorICAgIGtlZXBqIGNhbGwgczpOZXRyd1JlZnJlc2goMSxzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsJy4vJykpCiAgICBlbmRpZgogICAgbGV0IGlibD0gaWJsICsgMQogICBlbmRmb3IKQEAgLTczNzMsOCArNzU0OCw4IEBACiAgICIgcmVmcmVzaCB0aGUgZGlyZWN0b3J5CiAiICBjYWxsIERlY2hvKCJidWZuYW1lPCIuYnVmbmFtZSgiJSIpLiI+IikKICAgaWYgYnVmbmFtZSgiJSIpICE9ICJOZXRyd01lc3NhZ2UiCi0gICBjYWxsIHM6TmV0cndSZWZyZXNoKDEsczpOZXRyd0Jyb3dzZUNoZ0RpcigxLCcuLycpKQotICAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorICAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaCgxLHM6TmV0cndCcm93c2VDaGdEaXIoMSwnLi8nKSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKICAgZW5kaWYKIAogIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TG9jYWxSbSIpCkBAIC03NTMwLDggKzc3MDUsOCBAQAogCiAgICIgcmVmcmVzaCB0aGUgZGlyZWN0b3J5CiAiICBjYWxsIERlY2hvKCJyZWZyZXNoIHRoZSBkaXJlY3RvcnkgbGlzdGluZyIpCi0gIGNhbGwgczpOZXRyd1JlZnJlc2goMSxzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsJy4vJykpCi0gIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKKyAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaCgxLHM6TmV0cndCcm93c2VDaGdEaXIoMSwnLi8nKSkKKyAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQogCiAiICBjYWxsIERyZXQoIk5ldHJ3TG9jYWxSZW5hbWUiKQogZW5kZnVuCkBAIC03NTk3LDYgKzc3NzIsMjQgQEAKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBuZXRydyNGaWxlVXJsUmVhZDogaGFuZGxlcyByZWFkaW5nIGZpbGU6Ly8vKiBmaWxlcyB7e3syCitmdW4hIG5ldHJ3I0ZpbGVVcmxSZWFkKGZuYW1lKQorIiAgY2FsbCBEZnVuYygibmV0cncjRmlsZVVybFJlYWQoKSIpCisgIGxldCBmbmFtZTIzOTYgPSBuZXRydyNSRkMyMzk2KGE6Zm5hbWUpCisgIGxldCBmbmFtZTIzOTZlPSBmbmFtZWVzY2FwZShmbmFtZTIzOTYpCisgIGxldCBwbGFpbmZuYW1lPSBzdWJzdGl0dXRlKGZuYW1lMjM5NiwnZmlsZTovL1woLipcKScsJ1wxJywiIikKKyIgIGNhbGwgRGVjaG8oImZuYW1lMjM5NjwiLmZuYW1lMjM5Ni4iPiIpCisiICBjYWxsIERlY2hvKCJwbGFpbmZuYW1lPCIucGxhaW5mbmFtZS4iPiIpCisgIGV4ZSAic2lsIGRvYXUgQnVmUmVhZFByZSAiLmZuYW1lMjM5NmUKKyAgZXhlICdyICcucGxhaW5mbmFtZQorICBleGUgJ2ZpbGUhICcucGxhaW5mbmFtZQorICAxZAorICBzZXRsb2NhbCBub21vZAorIiAgY2FsbCBEcmV0KCJuZXRydyNGaWxlVXJsUmVhZCIpCisgIGV4ZSAic2lsIGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZTIzOTZlCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgU3VwcG9ydCBGdW5jdGlvbnM6IHt7ezEKIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc2MDQsNyArNzc5Nyw3IEBACiAiICAgMD1ub3RlICAgICA9IHM6Tk9URQogIiAgIDE9d2FybmluZyAgPSBzOldBUk5JTkcKICIgICAyPWVycm9yICAgID0gczpFUlJPUgotIiAgRGVjIDAzLCAyMDA5IDogbWF4IGVycm51bSBjdXJyZW50bHkgaXMgNzYKKyIgIERlYyAwMywgMjAwOSA6IG1heCBlcnJudW0gY3VycmVudGx5IGlzIDc3CiBmdW4hIG5ldHJ3I0Vycm9yTXNnKGxldmVsLG1zZyxlcnJudW0pCiAiICBjYWxsIERmdW5jKCJuZXRydyNFcnJvck1zZyhsZXZlbD0iLmE6bGV2ZWwuIiBtc2c8Ii5hOm1zZy4iPiBlcnJudW09Ii5hOmVycm51bS4iKSBnOm5ldHJ3X3VzZV9lcnJvcndpbmRvdz0iLmc6bmV0cndfdXNlX2Vycm9yd2luZG93KQogCkBAIC03NjMyLDE1ICs3ODI1LDE1IEBACiAgICAgZXhlIGJ1Zndpbm5yKCJOZXRyd01lc3NhZ2UiKS4id2luY21kIHciCiAiICAgIGNhbGwgRGVjaG8oInNldGxvY2FsIG1hIG5vcm8iKQogICAgIHNldGxvY2FsIG1hIG5vcm8KLSAgICBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsbGV2ZWwuYTptc2cpCisgICAga2VlcGogY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSsxLGxldmVsLmE6bXNnKQogICAgIGtlZXBqICQKICAgIGVsc2UKICIgICAgY2FsbCBEZWNobygiY3JlYXRlIGEgTmV0cndNZXNzYWdlIGJ1ZmZlciB3aW5kb3ciKQogICAgIGJvIDFzcGxpdAogICAgIGNhbGwgczpOZXRyd0VuZXcoKQotICAgIGNhbGwgczpOZXRyd1NhZmVPcHRpb25zKCkKKyAgICBrZWVwaiBjYWxsIHM6TmV0cndTYWZlT3B0aW9ucygpCiAgICAgc2V0bG9jYWwgYnQ9bm9maWxlCi0gICAgZmlsZSBOZXRyd01lc3NhZ2UKKyAgICBrZWVwaiBmaWxlIE5ldHJ3TWVzc2FnZQogIiAgICBjYWxsIERlY2hvKCJzZXRsb2NhbCBtYSBub3JvIikKICAgICBzZXRsb2NhbCBtYSBub3JvCiAgICAgY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSxsZXZlbC5hOm1zZykKQEAgLTc2ODksNyArNzg4Miw3IEBACiAKICAgIiByZXN0b3JlIHdpbmRvdwogICBpZiBleGlzdHMoInc6bmV0cndfd2lubnIiKQotIiAgIGNhbGwgRGVjaG8oInJlc3RvcmUgd2luZG93OiBleGUgc2lsZW50ISAiLnc6bmV0cndfd2lubnIuIndpbmNtZCB3IikKKyIgICBjYWxsIERlY2hvKCJyZXN0b3JlIHdpbmRvdzogZXhlIHNpbCEgIi53Om5ldHJ3X3dpbm5yLiJ3aW5jbWQgdyIpCiAgICBleGUgInNpbCEgIi53Om5ldHJ3X3dpbm5yLiJ3aW5jbWQgdyIKICAgZW5kaWYKICAgaWYgdjpzaGVsbF9lcnJvciA9PSAwCkBAIC03NzMxLDcgKzc5MjQsNyBAQAogICAiIHNldCB1cCBzdHJpbmcgaG9sZGluZyBwb3NpdGlvbiBwYXJhbWV0ZXJzCiAgIGxldCByZXQgICAgICAgICAgPSAibGV0IHc6bmV0cndfd2lubnI9Ii53Om5ldHJ3X3dpbm5yLiJ8bGV0IHc6bmV0cndfbGluZT0iLnc6bmV0cndfbGluZS4ifGxldCB3Om5ldHJ3X2NvbD0iLnc6bmV0cndfY29sLiJ8bGV0IHc6bmV0cndfaGxpbmU9Ii53Om5ldHJ3X2hsaW5lCiAKLSAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKCkKKyAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKCkKICIgIGNhbGwgRHJldCgibmV0cncjTmV0cndTYXZlUG9zbiA6IHdpbm5yPSIudzpuZXRyd193aW5uci4iIGxpbmU9Ii53Om5ldHJ3X2xpbmUuIiBjb2w9Ii53Om5ldHJ3X2NvbC4iIGhsaW5lPSIudzpuZXRyd19obGluZSkKICAgcmV0dXJuIHJldAogZW5kZnVuCkBAIC03ODM2LDcgKzgwMjksNyBAQAogICAgIiBzYW5pdHkgY2hlY2sgLS0gZG9lcyB0aGUgdGVtcG9yYXJ5IGZpbGUncyBkaXJlY3RvcnkgZXhpc3Q/CiAgICBpZiAhaXNkaXJlY3Rvcnkoc3Vic3RpdHV0ZSh0bXBmaWxlLCdbXi9dXCskJywnJywnZScpKQogIiAgICBjYWxsIERlY2hvKCJybz0iLiZsOnJvLiIgbWE9Ii4mbDptYS4iIG1vZD0iLiZsOm1vZC4iIHdyYXA9Ii4mbDp3cmFwKQotICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwieW91ciA8Ii5zdWJzdGl0dXRlKHRtcGZpbGUsJ1teL11cKyQnLCcnLCdlJykuIj4gZGlyZWN0b3J5IGlzIG1pc3NpbmchIiwyKQorICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwieW91ciA8Ii5zdWJzdGl0dXRlKHRtcGZpbGUsJ1teL11cKyQnLCcnLCdlJykuIj4gZGlyZWN0b3J5IGlzIG1pc3NpbmchIiwyKQogIiAgICBjYWxsIERyZXQoInM6R2V0VGVtcGZpbGUgZ2V0Y3dkPCIuZ2V0Y3dkKCkuIj4iKQogICAgIHJldHVybiAiIgogICAgZW5kaWYKQEAgLTc5MTgsNyArODExMSw3IEBACiAgICBpZiBibXNob3dmdW5jcyAhPSBbXQogICAgIGxldCBibXNob3dmdW5jID0gc3Vic3RpdHV0ZShibXNob3dmdW5jc1swXSwnXi4qOlwoY2FsbC4qQk1TaG93KClcKS4qJCcsJ1wxJywnJykKICAgICBpZiBibXNob3dmdW5jID1+ICdeY2FsbC4qQk1TaG93KCknCi0gICAgIGV4ZSAic2lsISAiLmJtc2hvd2Z1bmMKKyAgICAgZXhlICJzaWwhIGtlZXBqICIuYm1zaG93ZnVuYwogICAgIGVuZGlmCiAgICBlbmRpZgogICBlbmRpZgpAQCAtNzkyNiw0MyArODExOSw3MCBAQAogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIHM6TmV0cndDdXJzb3JsaW5lOiB7e3syCi1mdW4hIHM6TmV0cndDdXJzb3JsaW5lKCkKKyIgczpOZXRyd0N1cnNvcjogcmVzcG9uc2libGUgZm9yIHNldHRpbmcgY3Vyc29ybGluZS9jdXJzb3Jjb2x1bW4gYmFzZWQgdXBvbiBnOm5ldHJ3X2N1cnNvciB7e3syCitmdW4hIHM6TmV0cndDdXJzb3IoKQogICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2xpc3RzdHlsZSIpCiAgICBsZXQgdzpuZXRyd19saXN0c3R5bGU9IGc6bmV0cndfbGlzdHN0eWxlCiAgIGVuZGlmCi0iICBjYWxsIERmdW5jKCJzOk5ldHJ3Q3Vyc29ybGluZSgpIGxpc3RzdHlsZT0iLnc6bmV0cndfbGlzdHN0eWxlLiIgZzpuZXRyd19jdXJzb3JsaW5lPSIuZzpuZXRyd19jdXJzb3JsaW5lLiIgczpuZXRyd191c2VyY3VjPSIuczpuZXRyd191c2VyY3VjLiIgczpuZXRyd191c2VyY3VsPSIuczpuZXRyd191c2VyY3VsKQotICAiCi0gIGlmIHc6bmV0cndfbGlzdHN0eWxlICE9IHM6V0lERUxJU1QKLSAgICIgdGhpbi1sb25nLXRyZWUgbGlzdGluZ3MKLSAgIGlmIGc6bmV0cndfY3Vyc29ybGluZSA9PSAyCisiICBjYWxsIERmdW5jKCJzOk5ldHJ3Q3Vyc29yKCkgbGlzdHN0eWxlPSIudzpuZXRyd19saXN0c3R5bGUuIiBnOm5ldHJ3X2N1cnNvcj0iLmc6bmV0cndfY3Vyc29yLiIgczpuZXRyd191c2VyY3VjPSIuczpuZXRyd191c2VyY3VjLiIgczpuZXRyd191c2VyY3VsPSIuczpuZXRyd191c2VyY3VsKQorCisgIGlmICZmdCAhPSAibmV0cnciCisgICAiIGlmIHRoZSBjdXJyZW50IHdpbmRvdyBpc24ndCBhIG5ldHJ3IGRpcmVjdG9yeSBsaXN0aW5nIHdpbmRvdywgdGhlbiB1c2UgdXNlciBjdXJzb3JsaW5lL2NvbHVtbgorICAgIiBzZXR0aW5ncy4gIEFmZmVjdHMgd2hlbiBuZXRydyBpcyB1c2VkIHRvIHJlYWQvd3JpdGUgYSBmaWxlIHVzaW5nIHNjcC9mdHAvZXRjLgorICAgbGV0ICZsOmN1cnNvcmxpbmUgICA9IHM6bmV0cndfdXNlcmN1bAorICAgbGV0ICZsOmN1cnNvcmNvbHVtbiA9IHM6bmV0cndfdXNlcmN1YworCisgIGVsc2VpZiBnOm5ldHJ3X2N1cnNvciA9PSA0CisgICAiIGFsbCBzdHlsZXM6IGN1cnNvcmxpbmUsIGN1cnNvcmNvbHVtbgorICAgc2V0bG9jYWwgY3Vyc29ybGluZQorICAgc2V0bG9jYWwgY3Vyc29yY29sdW1uCisKKyAgZWxzZWlmIGc6bmV0cndfY3Vyc29yID09IDMKKyAgICIgdGhpbi1sb25nLXRyZWU6IGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KKyAgICIgd2lkZSAgICAgICAgICA6IGN1cnNvcmxpbmUsIGN1cnNvcmNvbHVtbgorICAgaWYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpXSURFTElTVAogICAgIHNldGxvY2FsIGN1cnNvcmxpbmUKLSAgICBsZXQgJmw6Y3Vyc29yY29sdW1uPSBzOm5ldHJ3X3VzZXJjdWMKLSIgICAgY2FsbCBEZWNobygic2V0bG9jYWwgY3Vyc29ybGluZSAgKGN1cnNvcmNvbHVtbiBpcyAiLigoczpuZXRyd191c2VyY3VjKT8gIm9uIiA6ICJvZmYiKS4iKSIpCi0gICBlbHNlaWYgZzpuZXRyd19jdXJzb3JsaW5lCisgICAgc2V0bG9jYWwgY3Vyc29yY29sdW1uCisgICBlbHNlCiAgICAgc2V0bG9jYWwgY3Vyc29ybGluZQotIiAgICBjYWxsIERlY2hvKCJzZXRsb2NhbCBjdXJzb3JsaW5lIikKKyAgICBsZXQgJmw6Y3Vyc29yY29sdW1uICAgPSBzOm5ldHJ3X3VzZXJjdWMKKyAgIGVuZGlmCisKKyAgZWxzZWlmIGc6bmV0cndfY3Vyc29yID09IDIKKyAgICIgdGhpbi1sb25nLXRyZWU6IGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KKyAgICIgd2lkZSAgICAgICAgICA6IGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KKyAgIGxldCAmbDpjdXJzb3Jjb2x1bW4gPSBzOm5ldHJ3X3VzZXJjdWMKKyAgIHNldGxvY2FsIGN1cnNvcmxpbmUKKworICBlbHNlaWYgZzpuZXRyd19jdXJzb3IgPT0gMQorICAgIiB0aGluLWxvbmctdHJlZTogdXNlcidzIGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KKyAgICIgd2lkZSAgICAgICAgICA6IGN1cnNvcmxpbmUsICAgICAgICB1c2VyJ3MgY3Vyc29yY29sdW1uCisgICBsZXQgJmw6Y3Vyc29yY29sdW1uID0gczpuZXRyd191c2VyY3VjCisgICBpZiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOldJREVMSVNUCisgICAgc2V0bG9jYWwgY3Vyc29ybGluZQorICAgZWxzZQorICAgIGxldCAmbDpjdXJzb3JsaW5lICAgPSBzOm5ldHJ3X3VzZXJjdWwKICAgIGVuZGlmCiAKICAgZWxzZQotICAgIiB3aWRlIGxpc3RpbmdzCi0gICBpZiBnOm5ldHJ3X2N1cnNvcmxpbmUgPT0gMgotICAgIHNldGxvY2FsIGN1cnNvcmxpbmUgY3Vyc29yY29sdW1uCi0iICAgIGNhbGwgRGVjaG8oInNldGxvY2FsIGN1cnNvcmxpbmUgY3Vyc29yY29sdW1uIikKLSAgIGVsc2VpZiBnOm5ldHJ3X2N1cnNvcmxpbmUKLSAgICBsZXQgJmw6Y3Vyc29ybGluZT0gczpuZXRyd191c2VyY3VsCi0iICAgIGNhbGwgRGVjaG8oImN1cnNvcmxpbmUgaXMgIi4oKHM6bmV0cndfdXNlcmN1bCk/ICJvbiIgOiAib2ZmIikuIikiKQotICAgZW5kaWYKKyAgICIgYWxsIHN0eWxlczogdXNlcidzIGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KKyAgIGxldCAmbDpjdXJzb3JsaW5lICAgPSBzOm5ldHJ3X3VzZXJjdWwKKyAgIGxldCAmbDpjdXJzb3Jjb2x1bW4gPSBzOm5ldHJ3X3VzZXJjdWMKICAgZW5kaWYKLSIgIGNhbGwgRHJldCgiczpOZXRyd0N1cnNvcmxpbmUgOiBsOmN1cnNvcmxpbmU9Ii4mbDpjdXJzb3JsaW5lLiIgbDpjdXJzb3Jjb2x1bW49Ii4mbDpjdXJzb3Jjb2x1bW4pCisKKyIgIGNhbGwgRHJldCgiczpOZXRyd0N1cnNvciA6IGw6Y3Vyc29ybGluZT0iLiZsOmN1cnNvcmxpbmUuIiBsOmN1cnNvcmNvbHVtbj0iLiZsOmN1cnNvcmNvbHVtbikKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBzOlJlc3RvcmVDdXJzb3JsaW5lOiByZXN0b3JlcyBjdXJzb3JsaW5lL2N1cnNvcmNvbHVtbiB0byBvcmlnaW5hbCB1c2VyIHNldHRpbmdzIHt7ezIKIGZ1biEgczpSZXN0b3JlQ3Vyc29ybGluZSgpCiAiICBjYWxsIERmdW5jKCJzOlJlc3RvcmVDdXJzb3JsaW5lKCkgY3VycmVudGx5LCBjdWw9Ii4mbDpjdXJzb3JsaW5lLiIgY3VjPSIuJmw6Y3Vyc29yY29sdW1uLiIgd2luIyIud2lubnIoKS4iIGJ1ZiMiLmJ1Zm5yKCIlIikpCi0gIGxldCAmbDpjdXJzb3JsaW5lICAgPSBzOm5ldHJ3X3VzZXJjdWwKLSAgbGV0ICZsOmN1cnNvcmNvbHVtbiA9IHM6bmV0cndfdXNlcmN1YworICBpZiBleGlzdHMoInM6bmV0cndfdXNlcmN1bCIpCisgICBsZXQgJmw6Y3Vyc29ybGluZSAgID0gczpuZXRyd191c2VyY3VsCisgIGVuZGlmCisgIGlmIGV4aXN0cygiczpuZXRyd191c2VyY3VjIikKKyAgIGxldCAmbDpjdXJzb3Jjb2x1bW4gPSBzOm5ldHJ3X3VzZXJjdWMKKyAgZW5kaWYKICIgIGNhbGwgRHJldCgiczpSZXN0b3JlQ3Vyc29ybGluZSA6IHJlc3RvcmVkIGN1bD0iLiZsOmN1cnNvcmxpbmUuIiBjdWM9Ii4mbDpjdXJzb3Jjb2x1bW4pCiBlbmRmdW4KIApAQCAtNzk5MCw3ICs4MjEwLDcgQEAKICAgIGxldCByZXN1bHQ9IGRlbGV0ZShwYXRoKQogICBlbmRpZgogICBpZiByZXN1bHQgPCAwCi0gICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiZGVsZXRlKCIucGF0aC4iKSBmYWlsZWQhIiw3MSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJkZWxldGUoIi5wYXRoLiIpIGZhaWxlZCEiLDcxKQogICBlbmRpZgogCiAiICBjYWxsIERyZXQoInM6TmV0cndEZWxldGUgIi5yZXN1bHQpCkBAIC04MDIyLDEzICs4MjQyLDE3IEBACiAgIGlmIGV4aXN0cygiYjpuZXRyd19vcHRpb24iKSAgICAgICAgIHxsZXQgbmV0cndfb3B0aW9uICAgICAgICAgID0gYjpuZXRyd19vcHRpb24gICAgICAgICB8ZW5kaWYKICAgaWYgZXhpc3RzKCJiOm5ldHJ3X3BydmRpciIpICAgICAgICAgfGxldCBuZXRyd19wcnZkaXIgICAgICAgICAgPSBiOm5ldHJ3X3BydmRpciAgICAgICAgIHxlbmRpZgogCi0gIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInc6IikKKyAga2VlcGogY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgidzoiKQogIiAgY2FsbCBEZWNobygiZ2VuZXJhdGUgYSBidWZmZXIgd2l0aCBrZWVwanVtcHMga2VlcGFsdCBlbmV3ISIpCiAgIGxldCBuZXRyd19rZWVwZGlmZj0gJmw6ZGlmZgorICAiIENPTUJBSzogQmVuemluZ2VyOiB1c2luZyB0cmVlIG1vZGUsIHZpbSAtbyBGb28vIGZpbGUgc2hvd3MgRm9vLyBGb28vIGluc3RlYWQuICBQbGFjZSByZXR1cm4gaGVyZSwgcHJvYmxlbSBnb2VzIGF3YXkgKGJlZXBzIHJlc3VsdCwgYnV0IHdobyBrbm93cykKKyIgIGNhbGwgRHJlZGlyKCJCZW56aW5nZXIgMToiLCJscyEiKQogICBrZWVwaiBrZWVwYWx0IGVuZXchCisiICBjYWxsIERyZWRpcigiQmVuemluZ2VyIDI6IiwibHMhIikKKyAgIiBDT01CQUs6IEJlbnppbmdlcjogdXNpbmcgdHJlZSBtb2RlLCB2aW0gLW8gRm9vLyBmaWxlIHNob3dzIEZvby8gRm9vLyBpbnN0ZWFkLiAgUGxhY2UgcmV0dXJuIGhlcmUsIHByb2JsZW0gcmVtYWlucy4KICAgbGV0ICZsOmRpZmY9IG5ldHJ3X2tlZXBkaWZmCiAiICBjYWxsIERlY2hvKCJidWZucigkKT0iLmJ1Zm5yKCIkIikpCi0gIGNhbGwgczpOZXRyd09wdGlvblNhdmUoInc6IikKKyAga2VlcGogY2FsbCBzOk5ldHJ3T3B0aW9uU2F2ZSgidzoiKQogCiAgICIgY29weSBmdW5jdGlvbi1sb2NhbC12YXJpYWJsZXMgdG8gYnVmZmVyIHZhcmlhYmxlIGVxdWl2YWxlbnRzCiAiICBjYWxsIERlY2hvKCJjb3B5IGZ1bmN0aW9uLWxvY2FsIHZhcmlhYmxlcyBiYWNrIHRvIGJ1ZmZlciBuZXRydyB2YXJpYWJsZXMiKQpAQCAtODA1NSw4ICs4Mjc5LDggQEAKICAgICBpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVAogICAgICBmaWxlIE5ldHJ3VHJlZUxpc3RpbmcKICAgICAgc2V0IGJ0PW5vd3JpdGUgbm9zd2YKLSAgICAgbm5vIDxzaWxlbnQ+IDxidWZmZXI+IFsJOnNpbGVudCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCdbJyk8Y3I+Ci0gICAgIG5ubyA8c2lsZW50PiA8YnVmZmVyPiBdCTpzaWxlbnQgY2FsbCA8U0lEPlRyZWVMaXN0TW92ZSgnXScpPGNyPgorICAgICBubm8gPHNpbGVudD4gPGJ1ZmZlcj4gWwk6c2lsIGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ1snKTxjcj4KKyAgICAgbm5vIDxzaWxlbnQ+IDxidWZmZXI+IF0JOnNpbCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCddJyk8Y3I+CiAgICAgZWxzZQogICAgICBleGUgInNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUoYjpuZXRyd19jdXJkaXIpCiAgICAgZW5kaWYKQEAgLTgwODAsNyArODMwNCw3IEBACiAiICBjaGFuZ2VkIHNvcnRpbmcsIGV0Yy4gIEFsc28gc2VlIHM6TmV0cndTYXZlV29yZFBvc24oKS4KIGZ1biEgczpOZXRyd1Jlc3RvcmVXb3JkUG9zbigpCiAiICBjYWxsIERmdW5jKCJOZXRyd1Jlc3RvcmVXb3JkUG9zbigpIikKLSAgc2lsZW50ISBjYWxsIHNlYXJjaChzOm5ldHJ3X3NhdmV3b3JkLCd3JykKKyAgc2lsISBjYWxsIHNlYXJjaChzOm5ldHJ3X3NhdmV3b3JkLCd3JykKICIgIGNhbGwgRHJldCgiTmV0cndSZXN0b3JlV29yZFBvc24iKQogZW5kZnVuCiAKQEAgLTgxMzEsOSArODM1NSw5IEBACiBmdW4hIHM6UmVtb3RlU3lzdGVtKGNtZCkKICIgIGNhbGwgRGZ1bmMoInM6UmVtb3RlU3lzdGVtKGNtZDwiLmE6Y21kLiI+KSIpCiAgIGlmICFleGVjdXRhYmxlKGc6bmV0cndfc3NoX2NtZCkKLSAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiZzpuZXRyd19zc2hfY21kPCIuZzpuZXRyd19zc2hfY21kLiI+IGlzIG5vdCBleGVjdXRhYmxlISIsNTIpCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsImc6bmV0cndfc3NoX2NtZDwiLmc6bmV0cndfc3NoX2NtZC4iPiBpcyBub3QgZXhlY3V0YWJsZSEiLDUyKQogICBlbHNlaWYgIWV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJmb3Igc29tZSByZWFzb24gYjpuZXRyd19jdXJkaXIgZG9lc24ndCBleGlzdCEiLDUzKQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJmb3Igc29tZSByZWFzb24gYjpuZXRyd19jdXJkaXIgZG9lc24ndCBleGlzdCEiLDUzKQogICBlbHNlCiAgICBsZXQgY21kICAgICAgPSBzOk1ha2VTc2hDbWQoZzpuZXRyd19zc2hfY21kLiIgVVNFUE9SVCBIT1NUTkFNRSIpCiAgICBsZXQgcmVtb3RlZGlyPSBzdWJzdGl0dXRlKGI6bmV0cndfY3VyZGlyLCdeLiovL1teL11cKy9cKC4qXCkkJywnXDEnLCcnKQpAQCAtODE4MywxNCArODQwNywxNCBAQAogIgogIiAgICAgICAgICAgICBzOm5iY2RfY3VycG9zX3tidWZucignJScpfSBpcyBzZXQgdXAgYnkgczpOZXRyd0Jyb3dzZUNoZ0RpcigpCiBmdW4hIHM6TmV0cndSZXhwbG9yZShpc2xvY2FsLGRpcm5hbWUpCi0iICBjYWxsIERmdW5jKCJzOk5ldHJ3UmV4cGxvcmUoaXNsb2NhbD0iLmE6aXNsb2NhbC4iIGRpcm5hbWU8Ii5hOmRpcm5hbWUuIj4pIikKLSAgaWYgYTppc2xvY2FsCi0gICBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soYTpkaXJuYW1lKQorIiAgY2FsbCBEZnVuYygiczpOZXRyd1JleHBsb3JlKCkgdzpuZXRyd19yZXhsb2NhbD0iLnc6bmV0cndfcmV4bG9jYWwuIiB3Om5ldHJ3X3JleGRpcjwiLnc6bmV0cndfcmV4ZGlyLiI+IikKKyAgaWYgdzpuZXRyd19yZXhsb2NhbAorICAga2VlcGogY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKHc6bmV0cndfcmV4ZGlyKQogICBlbHNlCi0gICBjYWxsIHM6TmV0cndCcm93c2UoMCxhOmRpcm5hbWUpCisgICBrZWVwaiBjYWxsIHM6TmV0cndCcm93c2UoMCx3Om5ldHJ3X3JleGRpcikKICAgZW5kaWYKICAgaWYgZXhpc3RzKCJzOm5iY2RfY3VycG9zX3tidWZucignJScpfSIpCi0gICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oczpuYmNkX2N1cnBvc197YnVmbnIoJyUnKX0pCisgICBrZWVwaiBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oczpuYmNkX2N1cnBvc197YnVmbnIoJyUnKX0pCiAgICB1bmxldCBzOm5iY2RfY3VycG9zX3tidWZucignJScpfQogICBlbmRpZgogICBpZiBleGlzdHMoInM6ZXhwbG9yZV9tYXRjaCIpCkBAIC04MjY1LDI2ICs4NDg5LDggQEAKICIgczpTZXRSZXhEaXI6IHNldCBkaXJlY3RvcnkgZm9yIDpSZXhwbG9yZSB7e3syCiBmdW4hIHM6U2V0UmV4RGlyKGlzbG9jYWwsZGlybmFtZSkKICIgIGNhbGwgRGZ1bmMoInM6U2V0UmV4RGlyKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIiBkaXJuYW1lPCIuYTpkaXJuYW1lLiI+KSIpCi0gICIgc2V0IHVwIFJleCBhbmQgbGVmdG1vdXNlLWRvdWJsZS1jbGljawotICBpZiBhOmlzbG9jYWwKLSAgIGV4ZSAnY29tISBSZXhwbG9yZSBjYWxsIHM6TmV0cndSZXhwbG9yZSgxLCInLmVzY2FwZShhOmRpcm5hbWUsJyJcJykuJyIpJwotICAgaWYgZzpuZXRyd19yZXRtYXAKLSAgICBpZiAhaGFzbWFwdG8oIjxQbHVnPk5ldHJ3UmV0dXJuIikgJiYgbWFwYXJnKCI8Mi1sZWZ0bW91c2U+IiwibiIpID09ICIiCi0gICAgIG5tYXAgPHVuaXF1ZT4gPHNpbGVudD4gPDItbGVmdG1vdXNlPgk8UGx1Zz5OZXRyd1JldHVybgotICAgIGVuZGlmCi0gICAgbGV0IGRpciA9IGVzY2FwZShhOmRpcm5hbWUsIHM6bmV0cndfbWFwX2VzY2FwZSkKLSAgICBleGUgJ25ub3JlbWFwIDxzaWxlbnQ+IDxQbHVnPk5ldHJ3UmV0dXJuIDpjYWxsIDxTSUQ+TmV0cndSZXhwbG9yZSgxLCInLmRpci4nIik8Y3I+JwotICAgZW5kaWYKLSAgZWxzZQotICAgZXhlICdjb20hIFJleHBsb3JlIGNhbGwgczpOZXRyd1JleHBsb3JlKDAsIicuZXNjYXBlKGE6ZGlybmFtZSwnIlwnKS4nIiknCi0gICBpZiBnOm5ldHJ3X3JldG1hcAotICAgIGlmICFoYXNtYXB0bygiPFBsdWc+TmV0cndSZXR1cm4iKSAmJiBtYXBhcmcoIjwyLWxlZnRtb3VzZT4iLCJuIikgPT0gIiIKLSAgICAgbm1hcCA8dW5pcXVlPiA8c2lsZW50PiA8Mi1sZWZ0bW91c2U+CTxQbHVnPk5ldHJ3UmV0dXJuCi0gICAgZW5kaWYKLSAgICBsZXQgZGlyID0gZXNjYXBlKGE6ZGlybmFtZSwgczpuZXRyd19tYXBfZXNjYXBlKQotICAgIGV4ZSAnbm5vcmVtYXAgPHNpbGVudD4gPFBsdWc+TmV0cndSZXR1cm4gOmNhbGwgPFNJRD5OZXRyd1JleHBsb3JlKDAsIicuZGlyLiciKTxjcj4nCi0gICBlbmRpZgotICBlbmRpZgorICBsZXQgdzpuZXRyd19yZXhkaXIgICA9IGE6ZGlybmFtZQorICBsZXQgdzpuZXRyd19yZXhsb2NhbCA9IGE6aXNsb2NhbAogIiAgY2FsbCBEcmV0KCJzOlNldFJleERpciIpCiBlbmRmdW4KIApAQCAtODM5MCwxMiArODU5NiwxMiBAQAogIiAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJzLlJlZnJlc2g7IGhlbmNlLCBzOk5ldHJ3Qk1TaG93KCkgdXRpbGl6ZXMgYSAiY2hlYXQiIHRvIGNhbGwgdGhhdCBmdW5jdGlvbiBhbnl3YXkuCiBmdW4hIHM6VXBkYXRlQnVmZmVyc01lbnUoKQogIiAgY2FsbCBEZnVuYygiczpVcGRhdGVCdWZmZXJzTWVudSgpIikKLSAgaWYgaGFzKCJndWkiKSAmJiBoYXMoIm1lbnUiKSAmJiBoYXMoImd1aV9ydW5uaW5nIikgJiYgJmdvID1+ICdtJyAmJiBnOm5ldHJ3X21lbnUKKyAgaWYgaGFzKCJndWkiKSAmJiBoYXMoIm1lbnUiKSAmJiBoYXMoImd1aV9ydW5uaW5nIikgJiYgJmdvID1+IyAnbScgJiYgZzpuZXRyd19tZW51CiAgICB0cnkKLSAgICBzaWxlbnQgZW1lbnUgQnVmZmVycy5SZWZyZXNoXCBtZW51CisgICAgc2lsIGVtZW51IEJ1ZmZlcnMuUmVmcmVzaFwgbWVudQogICAgY2F0Y2ggL15WaW1cJSgoXGFcKylcKVw9OkUvCiAgICAgbGV0IHY6ZXJybXNnPSAiIgotICAgIHNpbGVudCBjYWxsIHM6TmV0cndCTVNob3coKQorICAgIHNpbCBrZWVwaiBjYWxsIHM6TmV0cndCTVNob3coKQogICAgZW5kdHJ5CiAgIGVuZGlmCiAiICBjYWxsIERyZXQoInM6VXBkYXRlQnVmZmVyc01lbnUiKQpAQCAtODQwMyw3ICs4NjA5LDcgQEAKIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpVc2VCdWZXaW5WYXJzOiAodXNlZCBieSBOZXRyd0Jyb3dzZSgpIGFuZCBMb2NhbEJyb3dzZUNoZWNrKCkge3t7MgotIiAgICAgICAgICAgICAgTWF0Y2hpbmcgZnVuY3Rpb24gdG8gQnVmZmVyV2luVmFycygpCisiICAgICAgICAgICAgICBNYXRjaGluZyBmdW5jdGlvbiB0byBzOlNldEJ1ZldpblZhcnMoKQogZnVuISBzOlVzZUJ1ZldpblZhcnMoKQogIiAgY2FsbCBEZnVuYygiczpVc2VCdWZXaW5WYXJzKCkiKQogICBpZiBleGlzdHMoImI6bmV0cndfbGlzdHN0eWxlIikgICAgICAgJiYgIWV4aXN0cygidzpuZXRyd19saXN0c3R5bGUiKSAgICAgIHxsZXQgdzpuZXRyd19saXN0c3R5bGUgICAgICAgPSBiOm5ldHJ3X2xpc3RzdHlsZSAgICAgIHxlbmRpZgpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9nOTUudmltIGIvcnVudGltZS9jb21waWxlci9nOTUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGYwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2NvbXBpbGVyL2c5NS52aW0KQEAgLTAsMCArMSwyMyBAQAorIiBDb21waWxlcjogRzk1CisiIE1haW50YWluZXI6IEggWHUgPHh1aGRldkBnbWFpbC5jb20+CisiIFZlcnNpb246IDAuMS4zCisiIExhc3QgQ2hhbmdlOiAyMDExIEFwciAwMQorIiBIb21lcGFnZTogaHR0cDovL3d3dy52aW0ub3JnL3NjcmlwdHMvc2NyaXB0LnBocD9zY3JpcHRfaWQ9MzQ5MgorIiAgICAgICAgICAgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3h1aGRldi9jb21waWxlci1nOTUudmltCisiIExpY2Vuc2U6IFNhbWUgYXMgVmltCisKK2lmIGV4aXN0cygnY3VycmVudF9jb21waWxlcicpCisgICAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAnZzk1JworCitpZiBleGlzdHMoIjpDb21waWxlclNldCIpICE9IDIJCSIgb2xkZXIgVmltIGFsd2F5cyB1c2VkIDpzZXRsb2NhbAorICBjb21tYW5kIC1uYXJncz0qIENvbXBpbGVyU2V0IHNldGxvY2FsIDxhcmdzPgorZW5kaWYKKworQ29tcGlsZXJTZXQgZXJyb3Jmb3JtYXQ9CisgICAgICAgICAgICBcJUFJblwgZmlsZVwgJWY6JWwsCisgICAgICAgICAgICBcJS1DJXAxLAorICAgICAgICAgICAgXCUtWiV0cnJvcjpcICVtLAorICAgICAgICAgICAgXCUtWiV0YXJuaW5nXCAoJW4pOlwgJW0sCisgICAgICAgICAgICBcJS1DJS4lIwpkaWZmIC0tZ2l0IGEvcnVudGltZS9jb21waWxlci9nZm9ydHJhbi52aW0gYi9ydW50aW1lL2NvbXBpbGVyL2dmb3J0cmFuLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTgwMjZlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9jb21waWxlci9nZm9ydHJhbi52aW0KQEAgLTAsMCArMSwyMiBAQAorIiBDb21waWxlcjogR05VIEZvcnRyYW4gQ29tcGlsZXIKKyIgTWFpbnRhaW5lcjogSCBYdSA8eHVoZGV2QGdtYWlsLmNvbT4KKyIgVmVyc2lvbjogMC4xLjMKKyIgTGFzdCBDaGFuZ2U6IDE5IE1hcmNoIDIwMTEKKyIgSG9tZXBhZ2U6IGh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTM0OTYKKyIgICAgICAgICAgIGh0dHBzOi8vYml0YnVja2V0Lm9yZy94dWhkZXYvY29tcGlsZXItZ2ZvcnRyYW4udmltCisiIExpY2Vuc2U6IFNhbWUgYXMgVmltCisKK2lmIGV4aXN0cygnY3VycmVudF9jb21waWxlcicpCisgICAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAnZ2ZvcnRyYW4nCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0KKyAgICAgICAgICAgIFwlQSVmOiVsLiVjOiwKKyAgICAgICAgICAgIFwlLVoldHJyb3I6XCAlbSwKKyAgICAgICAgICAgIFwlLVoldGFybmluZzpcICVtLAorICAgICAgICAgICAgXCUtQyUuJSMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvY29tcGlsZXIvaWZvcnQudmltIGIvcnVudGltZS9jb21waWxlci9pZm9ydC52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3NjNmOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvY29tcGlsZXIvaWZvcnQudmltCkBAIC0wLDAgKzEsMjIgQEAKKyIgQ29tcGlsZXI6IEludGVsIEZvcnRyYW4gQ29tcGlsZXIKKyIgTWFpbnRhaW5lcjogSCBYdSA8eHVoZGV2QGdtYWlsLmNvbT4KKyIgVmVyc2lvbjogMC4xLjEKKyIgTGFzdCBDaGFuZ2U6IDE5IE1hcmNoIDIwMTEKKyIgSG9tZXBhZ2U6IGh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTM0OTcKKyIgICAgICAgICAgIGh0dHBzOi8vYml0YnVja2V0Lm9yZy94dWhkZXYvY29tcGlsZXItaWZvcnQudmltCisiIExpY2Vuc2U6IFNhbWUgYXMgVmltCisKK2lmIGV4aXN0cygnY3VycmVudF9jb21waWxlcicpCisgICAgZmluaXNoCitlbmRpZgorbGV0IGN1cnJlbnRfY29tcGlsZXIgPSAnaWZvcnQnCisKK2lmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgkJIiBvbGRlciBWaW0gYWx3YXlzIHVzZWQgOnNldGxvY2FsCisgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CitlbmRpZgorCitDb21waWxlclNldCBlcnJvcmZvcm1hdD0KKyAgICAgICAgICAgIFwlQSVmKCVsKTpcICV0cnJvclwgXCMlbjpcICVtLAorICAgICAgICAgICAgXCVBJWYoJWwpOlwgJXRhcm5pbmdcIFwjJW46XCAlbSwKKyAgICAgICAgICAgIFwlLVolcF4sCisgICAgICAgICAgICBcJS1HJS4lIwpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvY21kbGluZS50eHQgYi9ydW50aW1lL2RvYy9jbWRsaW5lLnR4dAppbmRleCAzOTg5M2Q3Li4xMmNlYmIyIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9jbWRsaW5lLnR4dAorKysgYi9ydW50aW1lL2RvYy9jbWRsaW5lLnR4dApAQCAtMSw0ICsxLDQgQEAKLSpjbWRsaW5lLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTEgRmViIDEwCisqY21kbGluZS50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDExIE1hciAyNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtODMsOSArODMsOSBAQAogQ1RSTC1RCQlTYW1lIGFzIENUUkwtVi4gIEJ1dCB3aXRoIHNvbWUgdGVybWluYWxzIGl0IGlzIHVzZWQgZm9yCiAJCWNvbnRyb2wgZmxvdywgaXQgZG9lc24ndCB3b3JrIHRoZW4uCiAKLQkJCQkJCQkqY188TGVmdD4qCisJCQkJCQkJKmNfPExlZnQ+KiAqY19MZWZ0KgogPExlZnQ+CQljdXJzb3IgbGVmdAotCQkJCQkJCSpjXzxSaWdodD4qCisJCQkJCQkJKmNfPFJpZ2h0PiogKmNfUmlnaHQqCiA8UmlnaHQ+CQljdXJzb3IgcmlnaHQKIAkJCQkJCQkqY188Uy1MZWZ0PioKIDxTLUxlZnQ+IG9yIDxDLUxlZnQ+CQkJCQkqY188Qy1MZWZ0PioKQEAgLTkzLDE4ICs5MywxOCBAQAogCQkJCQkJCSpjXzxTLVJpZ2h0PioKIDxTLVJpZ2h0PiBvciA8Qy1SaWdodD4JCQkJCSpjXzxDLVJpZ2h0PioKIAkJY3Vyc29yIG9uZSBXT1JEIHJpZ2h0Ci1DVFJMLUIgb3IgPEhvbWU+CQkJCQkqY19DVFJMLUIqICpjXzxIb21lPioKK0NUUkwtQiBvciA8SG9tZT4JCQkJKmNfQ1RSTC1CKiAqY188SG9tZT4qICpjX0hvbWUqCiAJCWN1cnNvciB0byBiZWdpbm5pbmcgb2YgY29tbWFuZC1saW5lCi1DVFJMLUUgb3IgPEVuZD4JCQkJCQkqY19DVFJMLUUqICpjXzxFbmQ+KgorQ1RSTC1FIG9yIDxFbmQ+CQkJCQkqY19DVFJMLUUqICpjXzxFbmQ+KiAqY19FbmQqCiAJCWN1cnNvciB0byBlbmQgb2YgY29tbWFuZC1saW5lCiAKIAkJCQkJCQkqY188TGVmdE1vdXNlPioKIDxMZWZ0TW91c2U+CU1vdmUgdGhlIGN1cnNvciB0byB0aGUgcG9zaXRpb24gb2YgdGhlIG1vdXNlIGNsaWNrLgogCi1DVFJMLUgJCQkJCQkJKmNfPEJTPiogKmNfQ1RSTC1IKgorQ1RSTC1ICQkJCQkJKmNfPEJTPiogKmNfQ1RSTC1IKiAqY19CUyoKIDxCUz4JCURlbGV0ZSB0aGUgY2hhcmFjdGVyIGluIGZyb250IG9mIHRoZSBjdXJzb3IgKHNlZSB8OmZpeGRlbHwgaWYKIAkJeW91ciA8QlM+IGtleSBkb2VzIG5vdCBkbyB3aGF0IHlvdSB3YW50KS4KLQkJCQkJCQkqY188RGVsPioKKwkJCQkJCQkqY188RGVsPiogKmNfRGVsKgogPERlbD4JCURlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgKGF0IGVuZCBvZiBsaW5lOgogCQljaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IpIChzZWUgfDpmaXhkZWx8IGlmIHlvdXIgPERlbD4KIAkJa2V5IGRvZXMgbm90IGRvIHdoYXQgeW91IHdhbnQpLgpAQCAtMTE4LDcgKzExOCw3IEBACiAJCXByZWZlcnJlZCBiZWhhdmlvciwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciAudmltcmM6ID4KIAkJCTpjbm9yZW1hcCA8Qy1VPiA8Qy1FPjxDLVU+CiA8Ci0JCQkJCQkJKmNfPEluc2VydD4qCisJCQkJCQkqY188SW5zZXJ0PiogKmNfSW5zZXJ0KgogPEluc2VydD4JVG9nZ2xlIGJldHdlZW4gaW5zZXJ0IGFuZCBvdmVyc3RyaWtlLiAge25vdCBpbiBWaX0KIAoge2NoYXIxfSA8QlM+IHtjaGFyMn0Jb3IJCQkJKmNfZGlncmFwaCoKQEAgLTIyNCw5ICsyMjQsOSBAQAogCQl0aGUgY2xpcGJvYXJkLiB8bW9kZWxlc3Mtc2VsZWN0aW9ufAogCQlJZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24gQ1RSTC1ZIGlzIGluc2VydGVkIGFzIGEgY2hhcmFjdGVyLgogCi1DVFJMLUoJCQkJCQkqY19DVFJMLUoqICpjXzxOTD4qICpjXzxDUj4qCitDVFJMLUoJCQkJCSpjX0NUUkwtSiogKmNfPE5MPiogKmNfPENSPiogKmNfQ1IqCiA8Q1I+IG9yIDxOTD4Jc3RhcnQgZW50ZXJlZCBjb21tYW5kCi0JCQkJCQkJKmNfPEVzYz4qCisJCQkJCQkJKmNfPEVzYz4qICpjX0VzYyoKIDxFc2M+CQlXaGVuIHR5cGVkIGFuZCAneCcgbm90IHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsIHF1aXQKIAkJQ29tbWFuZC1saW5lIG1vZGUgd2l0aG91dCBleGVjdXRpbmcuICBJbiBtYWNyb3Mgb3Igd2hlbiAneCcKIAkJcHJlc2VudCBpbiAnY3BvcHRpb25zJywgc3RhcnQgZW50ZXJlZCBjb21tYW5kLgpAQCAtMjM1LDEyICsyMzUsMTIgQEAKIAkJCQkJCQkqY19DVFJMLUMqCiBDVFJMLUMJCXF1aXQgY29tbWFuZC1saW5lIHdpdGhvdXQgZXhlY3V0aW5nCiAKLQkJCQkJCQkqY188VXA+KgorCQkJCQkJCSpjXzxVcD4qICpjX1VwKgogPFVwPgkJcmVjYWxsIG9sZGVyIGNvbW1hbmQtbGluZSBmcm9tIGhpc3RvcnksIHdob3NlIGJlZ2lubmluZwogCQltYXRjaGVzIHRoZSBjdXJyZW50IGNvbW1hbmQtbGluZSAoc2VlIGJlbG93KS4KIAkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NtZGxpbmVfaGlzdHwKIAkJZmVhdHVyZX0KLQkJCQkJCQkqY188RG93bj4qCisJCQkJCQkJKmNfPERvd24+KiAqY19Eb3duKgogPERvd24+CQlyZWNhbGwgbW9yZSByZWNlbnQgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeSwgd2hvc2UgYmVnaW5uaW5nCiAJCW1hdGNoZXMgdGhlIGN1cnJlbnQgY29tbWFuZC1saW5lIChzZWUgYmVsb3cpLgogCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY21kbGluZV9oaXN0fApAQCAtODY1LDcgKzg2NSw3IEBACiAJCUFmdGVyIHRoaXMsIHRoZSBwcmV2aW91cyBtb2RpZmllcnMgY2FuIGJlIHVzZWQgYWdhaW4uICBGb3IKIAkJZXhhbXBsZSAiOnAiLCB0byBtYWtlIGEgZnVsbCBwYXRoIGFmdGVyIHRoZSBzdWJzdGl0dXRpb24uCiAJOmdzP3BhdD9zdWI/Ci0JCVN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIG9mICJwYXRoIiB3aXRoICJzdWIiLiAgT3RoZXJ3aXNlCisJCVN1YnN0aXR1dGUgYWxsIG9jY3VycmVuY2VzIG9mICJwYXQiIHdpdGggInN1YiIuICBPdGhlcndpc2UKIAkJdGhpcyB3b3JrcyBsaWtlICI6cyIuCiAKIEV4YW1wbGVzLCB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgInNyYy92ZXJzaW9uLmMiLCBjdXJyZW50IGRpcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcGlfbmV0cncudHh0IGIvcnVudGltZS9kb2MvcGlfbmV0cncudHh0CmluZGV4IDhlMTczMGIuLmFlNGE4NzAgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3BpX25ldHJ3LnR4dAorKysgYi9ydW50aW1lL2RvYy9waV9uZXRydy50eHQKQEAgLTEsNCArMSw0IEBACi0qcGlfbmV0cncudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEwIEp1bCAyOAorKnBpX25ldHJ3LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMSBBcHIgMDEKIAogCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAgICBORVRSVyBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgpAQCAtNiw3ICs2LDcgQEAKIEF1dGhvcjogIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiAgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0+CiAJICAocmVtb3ZlIE5PU1BBTSBmcm9tIENhbXBiZWxsJ3MgZW1haWwgZmlyc3QpCiAKLUNvcHlyaWdodDogQ29weXJpZ2h0IChDKSAxOTk5LTIwMTAgQ2hhcmxlcyBFIENhbXBiZWxsLCBKciAgICAqbmV0cnctY29weXJpZ2h0KgorQ29weXJpZ2h0OiBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMSBDaGFybGVzIEUgQ2FtcGJlbGwsIEpyICAgICpuZXRydy1jb3B5cmlnaHQqCiAJICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhpcyBjb2RlLCB3aXRoCiAJICAgb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwogCSAgIGNvcGllZCB3aXRoIGl0LiBMaWtlIGFueXRoaW5nIGVsc2UgdGhhdCdzIGZyZWUsIG5ldHJ3LnZpbSwKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgIE5FVFJDLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1uZXRyY3wKICAgICAgIFBBU1NXT1JELi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1wYXNzd2R8CiA1LiAgQWN0aXZhdGlvbi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctYWN0aXZhdGV8Ci02LiAgVHJhbnNwYXJlbnQgRmlsZSBFZGl0aW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctdHJhbnNwYXJlbnR8Cis2LiAgVHJhbnNwYXJlbnQgUmVtb3RlIEZpbGUgRWRpdGluZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctdHJhbnNwYXJlbnR8CiA3LiAgRXggQ29tbWFuZHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZXh8CiA4LiAgVmFyaWFibGVzIGFuZCBPcHRpb25zLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctdmFyfAogOS4gIEJyb3dzaW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWJyb3dzZXwKQEAgLTY1LDYgKzY1LDcgQEAKICAgICAgIERpc3BsYXlpbmcgSW5mb3JtYXRpb24gQWJvdXQgRmlsZS4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1xZnwKICAgICAgIEVkaXQgRmlsZSBPciBEaXJlY3RvcnkgSGlkaW5nIExpc3QuLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1jdHJsLWh8CiAgICAgICBFZGl0aW5nIFRoZSBTb3J0aW5nIFNlcXVlbmNlLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctU3wKKyAgICAgIEZvcmNpbmcgdHJlYXRtZW50IGFzIGEgZmlsZSBvciBkaXJlY3RvcnkuLi4uLi4uLi4uLnxuZXRydy1nZHwgfG5ldHJ3LWdmfAogICAgICAgR29pbmcgVXAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LS18CiAgICAgICBIaWRpbmcgRmlsZXMgT3IgRGlyZWN0b3JpZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctYXwKICAgICAgIEltcHJvdmluZyBCcm93c2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1zc2gtaGFja3wKQEAgLTE4MCwxOSArMTgxLDE5IEBACiAKIAlQcm90b2NvbCAgVmFyaWFibGUJICAgIERlZmF1bHQgVmFsdWUKIAktLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQotCSAgIGRhdjogICpnOm5ldHJ3X2Rhdl9jbWQqICAgPSAiY2FkYXZlciIgICAgIGlmIGNhZGF2ZXIgaXMgZXhlY3V0YWJsZQotCSAgIGRhdjogICBnOm5ldHJ3X2Rhdl9jbWQgICAgPSAiY3VybCAtbyIgICAgIGVsc2VpZiBjdXJsIGlzIGF2YWlsYWJsZQotCSBmZXRjaDogICpnOm5ldHJ3X2ZldGNoX2NtZCogPSAiZmV0Y2ggLW8iICAgIGlmIGZldGNoIGlzIGF2YWlsYWJsZQotCSAgIGZ0cDogICpnOm5ldHJ3X2Z0cF9jbWQqICAgPSAiZnRwIgotCSAgaHR0cDogICpnOm5ldHJ3X2h0dHBfY21kKiAgPSAiZWxpbmtzIiAgICAgaWYgICBlbGlua3MgIGlzIGF2YWlsYWJsZQorCSAgIGRhdjogICAqZzpuZXRyd19kYXZfY21kKiAgICA9ICJjYWRhdmVyIiAgICBpZiBjYWRhdmVyIGlzIGV4ZWN1dGFibGUKKwkgICBkYXY6ICAgZzpuZXRyd19kYXZfY21kICAgID0gImN1cmwgLW8iICAgIGVsc2VpZiBjdXJsIGlzIGF2YWlsYWJsZQorCSBmZXRjaDogICAqZzpuZXRyd19mZXRjaF9jbWQqICA9ICJmZXRjaCAtbyIgICBpZiBmZXRjaCBpcyBhdmFpbGFibGUKKwkgICBmdHA6ICAgKmc6bmV0cndfZnRwX2NtZCogICAgPSAiZnRwIgorCSAgaHR0cDogICAqZzpuZXRyd19odHRwX2NtZCogICA9ICJlbGlua3MiICAgICBpZiAgIGVsaW5rcyAgaXMgYXZhaWxhYmxlCiAJICBodHRwOiAgIGc6bmV0cndfaHR0cF9jbWQgICA9ICJsaW5rcyIgICAgICBlbHNlaWYgbGlua3MgaXMgYXZhaWxhYmxlCiAJICBodHRwOiAgIGc6bmV0cndfaHR0cF9jbWQgICA9ICJjdXJsIiAgICAgICBlbHNlaWYgY3VybCAgaXMgYXZhaWxhYmxlCiAJICBodHRwOiAgIGc6bmV0cndfaHR0cF9jbWQgICA9ICJ3Z2V0IiAgICAgICBlbHNlaWYgd2dldCAgaXMgYXZhaWxhYmxlCiAgICAgICAgICAgaHR0cDogICBnOm5ldHJ3X2h0dHBfY21kICAgPSAiZmV0Y2giICAgICAgZWxzZWlmIGZldGNoIGlzIGF2YWlsYWJsZQotCSAgIHJjcDogICpnOm5ldHJ3X3JjcF9jbWQqICAgPSAicmNwIgotCSByc3luYzogICpnOm5ldHJ3X3JzeW5jX2NtZCogPSAicnN5bmMgLWEiCi0JICAgc2NwOiAgKmc6bmV0cndfc2NwX2NtZCogICA9ICJzY3AgLXEiCi0JICBzZnRwOiAgKmc6bmV0cndfc2Z0cF9jbWQqICA9ICJzZnRwIgorCSAgIHJjcDogICAqZzpuZXRyd19yY3BfY21kKiAgICA9ICJyY3AiCisJIHJzeW5jOiAgICpnOm5ldHJ3X3JzeW5jX2NtZCogID0gInJzeW5jIC1hIgorCSAgIHNjcDogICAqZzpuZXRyd19zY3BfY21kKiAgICA9ICJzY3AgLXEiCisJICBzZnRwOiAgICpnOm5ldHJ3X3NmdHBfY21kKiAgID0gInNmdHAiCiAKIAkqZzpuZXRyd19odHRwX3hjbWQqIDogdGhlIG9wdGlvbiBzdHJpbmcgZm9yIGh0dHA6Ly8uLi4gcHJvdG9jb2xzIGFyZQogCXNwZWNpZmllZCB2aWEgdGhpcyB2YXJpYWJsZSBhbmQgbWF5IGJlIGluZGVwZW5kZW50bHkgb3ZlcnJpZGRlbi4gIEJ5CkBAIC01MDAsNyArNTAxLDIzIEBACiA+CiAJdmltIGZ0cDovL1t1c2VyQF1tYWNoaW5lW1s6I11wb3J0bnVtYmVyXS9wYXRoCiA8Ci1Ib3dldmVyLCBmdHAgd2lsbCBvZnRlbiBuZWVkIHRvIHF1ZXJ5IHRoZSB1c2VyIGZvciB0aGUgdXNlcmlkIGFuZCBwYXNzd29yZC4KK1dpbmRvd3MgcHJvdmlkZXMgYW4gZnRwICh0eXBpY2FsbHkgYzpcV2luZG93c1xTeXN0ZW0zMlxmdHAuZXhlKSB3aGljaCB1c2VzCithbiBvcHRpb24sIC1zOmZpbGVuYW1lIChmaWxlbmFtZSBjYW4gYW5kIHByb2JhYmx5IHNob3VsZCBiZSBhIGZ1bGwgcGF0aCkKK3doaWNoIGNvbnRhaW5zIGZ0cCBjb21tYW5kcyB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW5ldmVyIGZ0cAorc3RhcnRzLiAgWW91IG1heSB1c2UgdGhpcyBmZWF0dXJlIHRvIGVudGVyIGEgdXNlciBhbmQgcGFzc3dvcmQgZm9yIG9uZSBzaXRlOiA+CisJdXNlcmlkCisJcGFzc3dvcmQKK0lmIHxnOm5ldHJ3X2Z0cF9jbWR8IGNvbnRhaW5zIC1zOltwYXRoL11NQUNISU5FLCB0aGVuIChvbiBXaW5kb3dzIG1hY2hpbmVzIG9ubHkpCituZXRydyB3aWxsIHN1YnN0aXR1dGUgdGhlIGN1cnJlbnQgbWFjaGluZSBuYW1lIHJlcXVlc3RlZCBmb3IgZnRwIGNvbm5lY3Rpb24KK2ZvciBNQUNISU5FLiAgSGVuY2Ugb25lIGNhbiBoYXZlIG11bHRpcGxlIG1hY2hpbmUuZnRwIGZpbGVzIGNvbnRhaW5pbmcgbG9naW4KK2FuZCBwYXNzd29yZCBmb3IgZnRwLiAgRXhhbXBsZTogPgorCisJZzpuZXRyd19mdHBfY21kPSAnYzpcV2luZG93c1xTeXN0ZW0zMlxmdHAgLXM6QzpcVXNlcnNcTXlzZWxmXE1BQ0hJTkUnCisJdmltIGZ0cDovL215aG9zdC5zb21ld2hlcmUubmV0Lword2lsbCB1c2UgYSBmaWxlID4KKwlDOlxVc2Vyc1xNeXNlbGZcbXlob3N0LmZ0cAorPAorT2Z0ZW4sIGZ0cCB3aWxsIG5lZWQgdG8gcXVlcnkgdGhlIHVzZXIgZm9yIHRoZSB1c2VyaWQgYW5kIHBhc3N3b3JkLgogVGhlIGxhdHRlciB3aWxsIGJlIGRvbmUgInNpbGVudGx5IjsgaWUuIGFzdGVyaXNrcyB3aWxsIHNob3cgdXAgaW5zdGVhZCBvZgogdGhlIGFjdHVhbGx5LXR5cGVkLWluIHBhc3N3b3JkLiAgTmV0cncgd2lsbCByZXRhaW4gdGhlIHVzZXJpZCBhbmQgcGFzc3dvcmQKIGZvciBzdWJzZXF1ZW50IHJlYWQvd3JpdGVzIGZyb20gdGhlIG1vc3QgcmVjZW50IHRyYW5zZmVyIHNvIHN1YnNlcXVlbnQKQEAgLTYyNCw3ICs2NDEsNyBAQAogPAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTYuIFRyYW5zcGFyZW50IEZpbGUgRWRpdGluZwkJCSpuZXRydy10cmFuc3BhcmVudCoge3t7MQorNi4gVHJhbnNwYXJlbnQgUmVtb3RlIEZpbGUgRWRpdGluZwkJCSpuZXRydy10cmFuc3BhcmVudCoge3t7MQogCiBUcmFuc3BhcmVudCBmaWxlIHRyYW5zZmVycyBvY2N1ciB3aGVuZXZlciBhIHJlZ3VsYXIgZmlsZSByZWFkIG9yIHdyaXRlCiAoaW52b2tlZCB2aWEgYW4gfDphdXRvY21kfCBmb3IgfEJ1ZlJlYWRDbWR8LCB8QnVmV3JpdGVDbWR8LCBvciB8U291cmNlQ21kfApAQCAtMTIyNSw3ICsxMjQyLDcgQEAKIAogRXZlcnkgdGltZSB5b3UgY2hhbmdlIHRvIGEgbmV3IGRpcmVjdG9yeSAobmV3IGZvciB0aGUgY3VycmVudCBzZXNzaW9uKSwKIG5ldHJ3IHdpbGwgc2F2ZSB0aGUgZGlyZWN0b3J5IGluIGEgcmVjZW50bHktdmlzaXRlZCBkaXJlY3RvcnkgaGlzdG9yeQotbGlzdCAodW5sZXNzIGc6bmV0cndfZGlyaGlzdG1heCBpcyB6ZXJvOyBieSBkZWZhdWx0LCBpdCdzIHRlbikuICBXaXRoIHRoZQorbGlzdCAodW5sZXNzIHxnOm5ldHJ3X2Rpcmhpc3RtYXh8IGlzIHplcm87IGJ5IGRlZmF1bHQsIGl0J3MgdGVuKS4gIFdpdGggdGhlCiAidSIgbWFwLCBvbmUgY2FuIGNoYW5nZSB0byBhbiBlYXJsaWVyIGRpcmVjdG9yeSAocHJlZGVjZXNzb3IpLiAgVG8gZG8KIHRoZSBvcHBvc2l0ZSwgc2VlIHxuZXRydy1VfC4KIApAQCAtMTUyNyw2ICsxNTQ0LDE5IEBACiBBc3NvY2lhdGVkIHNldHRpbmcgdmFyaWFibGVzOiB8ZzpuZXRyd19zb3J0X3NlcXVlbmNlfCB8ZzpuZXRyd19zb3J0X29wdGlvbnN8CiAKIAorRk9SQ0lORyBUUkVBVE1FTlQgQVMgQSBGSUxFIE9SIERJUkVDVE9SWQkqbmV0cnctZ2QqICpuZXRydy1nZioge3t7MgorCitSZW1vdGUgc3ltYm9saWMgbGlua3MgKGllLiB0aG9zZSBsaXN0ZWQgdmlhIHNzaCBvciBmdHApIGFyZSBwcm9ibGVtYXRpYworaW4gdGhhdCBpdCBpcyBkaWZmaWN1bHQgdG8gdGVsbCB3aGV0aGVyIHRoZXkgbGluayB0byBhIGZpbGUgb3IgdG8gYQorZGlyZWN0b3J5LgorCitUbyBmb3JjZSB0cmVhdG1lbnQgYXMgYSBmaWxlOiB1c2UgPgorCWdkCis8CitUbyBmb3JjZSB0cmVhdG1lbnQgYXMgYSBkaXJlY3Rvcnk6IHVzZSA+CisJZ2YKKzwKKwogR09JTkcgVVAJCQkJCQkJKm5ldHJ3LS0qIHt7ezIKIAogVG8gZ28gdXAgYSBkaXJlY3RvcnksIHByZXNzICItIiBvciBwcmVzcyB0aGUgPGNyPiB3aGVuIGF0b3AgdGhlIC4uLyBkaXJlY3RvcnkKQEAgLTE3NDAsNiArMTc3MCwxNiBAQAogd2l0aCA8cy1sZWZ0bW91c2U+IHVzaW5nIGd2aW0uICBPbmUgbWF5IHVubWFyayBhbGwgZmlsZXMgYnkgcHJlc3NpbmcKICJtdSIgKHNlZSB8bmV0cnctbXV8KS4KIAorTWFya2VkIGZpbGVzIGFyZSBoaWdobGlnaHRlZCB1c2luZyB0aGUgIm5ldHJ3TWFya0ZpbGUiIGhpZ2hsaWdodGluZyBncm91cCwKK3doaWNoIGJ5IGRlZmF1bHQgaXMgbGlua2VkIHRvICJJZGVudGlmaWVyIiAoc2VlIElkZW50aWZpZXIgdW5kZXIKK3xncm91cC1uYW1lfCkuICBZb3UgbWF5IGNoYW5nZSB0aGUgaGlnaGxpZ2h0aW5nIGdyb3VwIGJ5IHB1dHRpbmcgc29tZXRoaW5nCitsaWtlID4KKworCWhpZ2hsaWdodCBjbGVhciBuZXRyd01hcmtGaWxlCisJaGkgbGluayBuZXRyd01hcmtGaWxlIC4ud2hhdGV2ZXIuLgorPAoraW50byAkSE9NRS8udmltL2FmdGVyL3N5bnRheC9uZXRydy52aW0gLgorCiAqbWFya2ZpbGVsaXN0KiAqZ2xvYmFsX21hcmtmaWxlbGlzdCogKmxvY2FsX21hcmtmaWxlbGlzdCoKIEFsbCBtYXJrZWQgZmlsZXMgYXJlIGVudGVyZWQgb250byB0aGUgZ2xvYmFsIG1hcmtlZCBmaWxlIGxpc3Q7IHRoZXJlIGlzIG9ubHkKIG9uZSBzdWNoIGxpc3QuICBJbiBhZGRpdGlvbiwgZXZlcnkgbmV0cncgYnVmZmVyIGFsc28gaGFzIGl0cyBvd24gbG9jYWwgbWFya2VkCkBAIC0xNzg5LDcgKzE4MjksOCBAQAogCQkgICAgICAoVXNlcyB0aGUgZ2xvYmFsIG1hcmtlZCBmaWxlIGxpc3QpCiAKIFNlbGVjdCBhIHRhcmdldCBkaXJlY3Rvcnkgd2l0aCBtdCAofG5ldHJ3LW10fCkuICBUaGVuIGNoYW5nZSBkaXJlY3RvcnksCi1zZWxlY3QgZmlsZShzKSAoc2VlIHxuZXRydy1tZnwpLCBhbmQgcHJlc3MgIm1jIi4KK3NlbGVjdCBmaWxlKHMpIChzZWUgfG5ldHJ3LW1mfCksIGFuZCBwcmVzcyAibWMiLiAgVGhlIGNvcHkgaXMgZG9uZQorZnJvbSB0aGUgY3VycmVudCB3aW5kb3cgKHdoZXJlIG9uZSBkb2VzIHRoZSBtZikgdG8gdGhlIHRhcmdldC4KIAogQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlOiB8ZzpuZXRyd19sb2NhbGNvcHljbWR8IHxnOm5ldHJ3X3NzaF9jbWR8CiAKQEAgLTE4NDEsNyArMTg4Miw4IEBACiAJVXNlIGF0IHlvdXIgb3duIHJpc2shCiAKIFNlbGVjdCBhIHRhcmdldCBkaXJlY3Rvcnkgd2l0aCBtdCAofG5ldHJ3LW10fCkuICBUaGVuIGNoYW5nZSBkaXJlY3RvcnksCi1zZWxlY3QgZmlsZShzKSAoc2VlIHxuZXRydy1tZnwpLCBhbmQgcHJlc3MgIm1tIi4KK3NlbGVjdCBmaWxlKHMpIChzZWUgfG5ldHJ3LW1mfCksIGFuZCBwcmVzcyAibW0iLiAgVGhlIG1vdmUgaXMgZG9uZQorZnJvbSB0aGUgY3VycmVudCB3aW5kb3cgKHdoZXJlIG9uZSBkb2VzIHRoZSBtZikgdG8gdGhlIHRhcmdldC4KIAogQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlOiB8ZzpuZXRyd19sb2NhbG1vdmVjbWR8IHxnOm5ldHJ3X3NzaF9jbWR8CiAKQEAgLTE5MjIsMjEgKzE5NjQsMjEgQEAKICAgIC0tLQkJCQktLS0tLS0tLS0tLQogICAgVmFyCQkJCUV4cGxhbmF0aW9uCiAgICAtLS0JCQkJLS0tLS0tLS0tLS0KLTwgKmc6bmV0cndfYWx0byoJCWNoYW5nZSBmcm9tIGFib3ZlIHNwbGl0dGluZyB0byBiZWxvdyBzcGxpdHRpbmcKKzwgKmc6bmV0cndfYWx0byoJCSAgY2hhbmdlIGZyb20gYWJvdmUgc3BsaXR0aW5nIHRvIGJlbG93IHNwbGl0dGluZwogCQkJCWJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSAoc2VlIHxuZXRydy1vfCkKIAkJCQkgZGVmYXVsdDogPSZzYiAgICAgICAgICAgKHNlZSB8J3NiJ3wpCiAKLSAgKmc6bmV0cndfYWx0dioJCWNoYW5nZSBmcm9tIGxlZnQgc3BsaXR0aW5nIHRvIHJpZ2h0IHNwbGl0dGluZworICAqZzpuZXRyd19hbHR2KgkJICBjaGFuZ2UgZnJvbSBsZWZ0IHNwbGl0dGluZyB0byByaWdodCBzcGxpdHRpbmcKIAkJCQlieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgKHNlZSB8bmV0cnctdnwpCiAJCQkJIGRlZmF1bHQ6ID0mc3ByICAgICAgICAgIChzZWUgfCdzcHInfCkKIAotICAqZzpuZXRyd19iYW5uZXIqCQllbmFibGUvc3VwcHJlc3MgdGhlIGJhbm5lcgorICAqZzpuZXRyd19iYW5uZXIqCQkgIGVuYWJsZS9zdXBwcmVzcyB0aGUgYmFubmVyCiAJCQkJPTA6IHN1cHByZXNzIHRoZSBiYW5uZXIKIAkJCQk9MTogYmFubmVyIGlzIGVuYWJsZWQgKGRlZmF1bHQpCiAJCQkJTk9URTogc3VwcHJlc3NpbmcgdGhlIGJhbm5lciBpcyBhIG5ldyBmZWF0dXJlCiAJCQkJd2hpY2ggbWF5IGNhdXNlIHByb2JsZW1zLgogCi0gICpnOm5ldHJ3X2Jyb3dzZV9zcGxpdCoJd2hlbiBicm93c2luZywgPGNyPiB3aWxsIG9wZW4gdGhlIGZpbGUgYnk6CisgICpnOm5ldHJ3X2Jyb3dzZV9zcGxpdCoJICB3aGVuIGJyb3dzaW5nLCA8Y3I+IHdpbGwgb3BlbiB0aGUgZmlsZSBieToKIAkJCQk9MDogcmUtdXNpbmcgdGhlIHNhbWUgd2luZG93CiAJCQkJPTE6IGhvcml6b250YWxseSBzcGxpdHRpbmcgdGhlIHdpbmRvdyBmaXJzdAogCQkJCT0yOiB2ZXJ0aWNhbGx5ICAgc3BsaXR0aW5nIHRoZSB3aW5kb3cgZmlyc3QKQEAgLTE5NDYsNyArMTk4OCw3IEBACiAJCQkJICAgIHRvIGdldCB2ZXJ0aWNhbCBzcGxpdHRpbmcgaW5zdGVhZCBvZgogCQkJCSAgICBob3Jpem9udGFsIHNwbGl0dGluZy4KIAotICAqZzpuZXRyd19icm93c2V4X3ZpZXdlcioJc3BlY2lmeSB1c2VyJ3MgcHJlZmVyZW5jZSBmb3IgYSB2aWV3ZXI6ID4KKyAgKmc6bmV0cndfYnJvd3NleF92aWV3ZXIqCSAgc3BlY2lmeSB1c2VyJ3MgcHJlZmVyZW5jZSBmb3IgYSB2aWV3ZXI6ID4KIAkJCQkJImtmbWNsaWVudCBleGVjIgogCQkJCQkiZ25vbWUtb3BlbiIKIDwJCQkJSWYgPgpAQCAtMTk1NSwzNSArMTk5Nyw0OCBAQAogCQkJCWEgc2NyaXB0L2Z1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZ2l2ZW4KIAkJCQlleHRlbnNpb24uICAoc2VlIHxuZXRyd19maWxlaGFuZGxlcnwpLgogCi0gICpnOm5ldHJ3X2NoZ3Blcm0qCQlVbml4L0xpbnV4OiAiY2htb2QgUEVSTSBGSUxFTkFNRSIKKyAgKmc6bmV0cndfY2hncGVybSoJCSAgVW5peC9MaW51eDogImNobW9kIFBFUk0gRklMRU5BTUUiCiAJCQkJV2luZG93czogICAgImNhY2xzIEZJTEVOQU1FIC9lIC9wIFBFUk0iCiAJCQkJVXNlZCB0byBjaGFuZ2UgYWNjZXNzIHBlcm1pc3Npb24gZm9yIGEgZmlsZS4KIAotICAqZzpuZXRyd19jb21wcmVzcyoJCT0iZ3ppcCIKKyAgKmc6bmV0cndfY29tcHJlc3MqCQkgID0iZ3ppcCIKIAkJCQkgICAgV2lsbCBjb21wcmVzcyBtYXJrZWQgZmlsZXMgd2l0aCB0aGlzCiAJCQkJICAgIGNvbW1hbmQKIAotICAqZzpuZXRyd19jdGFncyoJCT0iY3RhZ3MiCisgICpnOm5ldHJ3X2N0YWdzKgkJICA9ImN0YWdzIgogCQkJCVRoZSBkZWZhdWx0IGV4dGVybmFsIHByb2dyYW0gdXNlZCB0byBjcmVhdGUgdGFncwogCi0gICpnOm5ldHJ3X2N1cnNvcmxpbmUqCQk9IDEgKGRlZmF1bHQpCi0JCQkJd2lsbCB1c2UgdGhlIHwnY3Vyc29ybGluZSd8IGxvY2FsIHNldHRpbmcgd2hlbgotCQkJCXxnOm5ldHJ3X2xpc3RzdHlsZXwgPT0wICh0aGluIGxpc3RpbmcpIG9yCi0JCQkJfGc6bmV0cndfbGlzdHN0eWxlfCA9PTEgKGxvbmcgbGlzdGluZykgb3IKLQkJCQl8ZzpuZXRyd19saXN0c3R5bGV8ID09MyAodHJlZSBsaXN0aW5nKQotCQkJCShpZS4gZG9lc24ndCBhZmZlY3QgdGhlIHdpZGUgbGlzdGluZykKLQkJCQk9MDogb2ZmCi0JCQkJPTI6IGxpa2UgPT0xLCBidXQgdGhlIHdpZGUgbGlzdGluZyBnZXRzIGJvdGgKLQkJCQljdXJzb3JsaW5lIGFuZCB8J2N1cnNvcmNvbHVtbid8bG9jYWxseSBzZXQKKyAgKmc6bmV0cndfY3Vyc29yKgkJICA9IDIgKGRlZmF1bHQpCisgIAkJCQlUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgdXNlIG9mIHRoZQorCQkJCXwnY3Vyc29ybGluZSd8IChjdWwpIGFuZCB8J2N1cnNvcmNvbHVtbid8CisJCQkJKGN1Yykgc2V0dGluZ3MgYnkgbmV0cnc6CiAKLSAgKmc6bmV0cndfZGVjb21wcmVzcyoJCT0geyAiLmd6IiA6ICJndW56aXAiICwKKwkJCQlWYWx1ZSAgIFRoaW4tTG9uZy1UcmVlICAgICAgV2lkZQorCQkJCSA9MCAgICAgIHUtY3VsIHUtY3VjICAgICAgdS1jdWwgdS1jdWMKKwkJCQkgPTEgICAgICB1LWN1bCB1LWN1YyAgICAgICAgY3VsIHUtY3VjCisJCQkJID0yICAgICAgICBjdWwgdS1jdWMgICAgICAgIGN1bCB1LWN1YworCQkJCSA9MyAgICAgICAgY3VsIHUtY3VjICAgICAgICBjdWwgICBjdWMKKwkJCQkgPTQgICAgICAgIGN1bCAgIGN1YyAgICAgICAgY3VsICAgY3VjCisKKwkJCQlXaGVyZQorCQkJCSAgdS1jdWwgOiB1c2VyJ3MgfCdjdXJzb3JsaW5lJ3wgICBzZXR0aW5nIHVzZWQKKwkJCQkgIHUtY3VjIDogdXNlcidzIHwnY3Vyc29yY29sdW1uJ3wgc2V0dGluZyB1c2VkCisJCQkJICBjdWwgICA6IHwnY3Vyc29ybGluZSd8ICBsb2NhbGx5IHNldAorCQkJCSAgY3VjICAgOiB8J2N1cnNvcmNvbHVtbid8IGxvY2FsbHkgc2V0CisKKyAgKmc6bmV0cndfZGVjb21wcmVzcyoJCSAgPSB7ICIuZ3oiIDogImd1bnppcCIgLAogCQkJCSAgICAiLmJ6MiIgOiAiYnVuemlwMiIgLAogCQkJCSAgICAiLnppcCIgOiAidW56aXAiICwKIAkJCQkgICAgIi50YXIiIDogInRhciAteGYifQogCQkJCSAgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgc3VmZmljZXMgdG8KIAkJCQkgIGRlY29tcHJlc3Npb24gcHJvZ3JhbXMuCiAKLSAgKmc6bmV0cndfZmFzdGJyb3dzZSoJCT0wOiBzbG93IHNwZWVkIGRpcmVjdG9yeSBicm93c2luZzsKKyAgKmc6bmV0cndfZGlyaGlzdG1heCogICAgICAgICAgICA9MTA6IGNvbnRyb2xzIG1heGltdW0gcXVhbnRpdHkgb2YgcGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcnkuICBNYXkgYmUgemVybyB0byBzdXBwcHJlc3MKKwkJCQkgICAgIGhpc3RvcnkuCisJCQkJICAgICAocmVsYXRlZDogfG5ldHJ3LXFifCB8bmV0cnctdXwgfG5ldHJ3LVV8KQorCisgICpnOm5ldHJ3X2Zhc3Ricm93c2UqCQkgID0wOiBzbG93IHNwZWVkIGRpcmVjdG9yeSBicm93c2luZzsKIAkJCQkgICAgbmV2ZXIgcmUtdXNlcyBkaXJlY3RvcnkgbGlzdGluZ3MsCiAJCQkJICAgIGFsd2F5cyBvYnRhaW5zIGRpcmVjdG9yeSBsaXN0aW5ncy4KIAkJCQk9MTogbWVkaXVtIHNwZWVkIGRpcmVjdG9yeSBicm93c2luZzsKQEAgLTIwMDcsMTAgKzIwNjIsMTAgQEAKIAkJCQl0cmFkaW5nIG9mZiBhY2N1cmFjeSAoaWUuIHVwLXRvLWRhdGUgbGlzdGluZykKIAkJCQl2ZXJzdXMgc3BlZWQuCiAKLSAgKmc6bmV0cndfZm5hbWVfZXNjYXBlKgk9JyA/JjslJworICAqZzpuZXRyd19mbmFtZV9lc2NhcGUqCSAgPScgPyY7JScKIAkJCQlVc2VkIG9uIGZpbGVuYW1lcyBiZWZvcmUgcmVtb3RlIHJlYWRpbmcvd3JpdGluZwogCi0gICpnOm5ldHJ3X2Z0cF9icm93c2VfcmVqZWN0KglmdHAgY2FuIHByb2R1Y2UgYSBudW1iZXIgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncworICAqZzpuZXRyd19mdHBfYnJvd3NlX3JlamVjdCoJICBmdHAgY2FuIHByb2R1Y2UgYSBudW1iZXIgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncwogCQkJCXRoYXQgY2FuIHNob3cgdXAgYXMgImRpcmVjdG9yaWVzIiBhbmQgImZpbGVzIgogCQkJCWluIHRoZSBsaXN0aW5nLiAgVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8KIAkJCQlyZW1vdmUgc3VjaCBlbWJlZGRlZCBtZXNzYWdlcy4gIEJ5IGRlZmF1bHQgaXRzCkBAIC0yMDIzLDg3ICsyMDc4LDg3IEBACiAJCQkJIDogY29ubmVjdCB0byBhZGRyZXNzIFswLTlhLWZBLUY6XSoKIAkJCQkgOiBObyByb3V0ZSB0byBob3N0JCcKIAotICAqZzpuZXRyd19mdHBfbGlzdF9jbWQqCW9wdGlvbnMgZm9yIHBhc3NpbmcgYWxvbmcgdG8gZnRwIGZvciBkaXJlY3RvcnkKKyAgKmc6bmV0cndfZnRwX2xpc3RfY21kKgkgIG9wdGlvbnMgZm9yIHBhc3NpbmcgYWxvbmcgdG8gZnRwIGZvciBkaXJlY3RvcnkKIAkJCQlsaXN0aW5nLiAgRGVmYXVsdHM6CiAJCQkJIHVuaXggb3IgZzpuZXRyd19jeWd3aW4gc2V0OiA6ICJscyAtbEYiCiAJCQkJIG90aGVyd2lzZSAgICAgICAgICAgICAgICAgICAgICJkaXIiCiAKIAotICAqZzpuZXRyd19mdHBfc2l6ZWxpc3RfY21kKglvcHRpb25zIGZvciBwYXNzaW5nIGFsb25nIHRvIGZ0cCBmb3IgZGlyZWN0b3J5CisgICpnOm5ldHJ3X2Z0cF9zaXplbGlzdF9jbWQqCSAgb3B0aW9ucyBmb3IgcGFzc2luZyBhbG9uZyB0byBmdHAgZm9yIGRpcmVjdG9yeQogCQkJCWxpc3RpbmcsIHNvcnRlZCBieSBzaXplIG9mIGZpbGUuCiAJCQkJRGVmYXVsdHM6CiAJCQkJIHVuaXggb3IgZzpuZXRyd19jeWd3aW4gc2V0OiA6ICJscyAtc2xGIgogCQkJCSBvdGhlcndpc2UgICAgICAgICAgICAgICAgICAgICAiZGlyIgogCi0gICpnOm5ldHJ3X2Z0cF90aW1lbGlzdF9jbWQqCW9wdGlvbnMgZm9yIHBhc3NpbmcgYWxvbmcgdG8gZnRwIGZvciBkaXJlY3RvcnkKKyAgKmc6bmV0cndfZnRwX3RpbWVsaXN0X2NtZCoJICBvcHRpb25zIGZvciBwYXNzaW5nIGFsb25nIHRvIGZ0cCBmb3IgZGlyZWN0b3J5CiAJCQkJbGlzdGluZywgc29ydGVkIGJ5IHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24uCiAJCQkJRGVmYXVsdHM6CiAJCQkJIHVuaXggb3IgZzpuZXRyd19jeWd3aW4gc2V0OiA6ICJscyAtdGxGIgogCQkJCSBvdGhlcndpc2UgICAgICAgICAgICAgICAgICAgICAiZGlyIgogCi0gICpnOm5ldHJ3X2dsb2JfZXNjYXBlKgkJPSdbXSo/YHt+JCcgICh1bml4KQorICAqZzpuZXRyd19nbG9iX2VzY2FwZSoJCSAgPSdbXSo/YHt+JCcgICh1bml4KQogCQkJCT0nW10qP2B7JCcgICh3aW5kb3dzCiAJCQkJVGhlc2UgY2hhcmFjdGVycyBpbiBkaXJlY3RvcnkgbmFtZXMgYXJlCiAJCQkJZXNjYXBlZCBiZWZvcmUgYXBwbHlpbmcgZ2xvYigpCiAKLSAgKmc6bmV0cndfaGlkZSoJCWlmIHRydWUsIHRoZSBoaWRpbmcgbGlzdCBpcyB1c2VkCisgICpnOm5ldHJ3X2hpZGUqCQkgIGlmIHRydWUsIHRoZSBoaWRpbmcgbGlzdCBpcyB1c2VkCiAJCQkJIGRlZmF1bHQ6ID0wCiAKLSAgKmc6bmV0cndfaG9tZSoJCVRoZSBob21lIGRpcmVjdG9yeSBmb3Igd2hlcmUgYm9va21hcmtzIGFuZAorICAqZzpuZXRyd19ob21lKgkJICBUaGUgaG9tZSBkaXJlY3RvcnkgZm9yIHdoZXJlIGJvb2ttYXJrcyBhbmQKIAkJCQloaXN0b3J5IGFyZSBzYXZlZCAoYXMgLm5ldHJ3Ym9vayBhbmQKIAkJCQkubmV0cndoaXN0KS4KIAkJCQkgZGVmYXVsdDogdGhlIGZpcnN0IGRpcmVjdG9yeSBvbiB0aGUKIAkJCQkgICAgICAgICB8J3J1bnRpbWVwYXRoJ3wKIAotICAqZzpuZXRyd19rZWVwZGlyKgkJPTEgKGRlZmF1bHQpIGtlZXAgY3VycmVudCBkaXJlY3RvcnkgaW1tdW5lIGZyb20KKyAgKmc6bmV0cndfa2VlcGRpcioJCSAgPTEgKGRlZmF1bHQpIGtlZXAgY3VycmVudCBkaXJlY3RvcnkgaW1tdW5lIGZyb20KIAkJCQkgICB0aGUgYnJvd3NpbmcgZGlyZWN0b3J5LgogCQkJCT0wIGtlZXAgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRoZSBzYW1lIGFzIHRoZQogCQkJCSAgIGJyb3dzaW5nIGRpcmVjdG9yeS4KIAkJCQlUaGUgY3VycmVudCBicm93c2luZyBkaXJlY3RvcnkgaXMgY29udGFpbmVkIGluCiAJCQkJYjpuZXRyd19jdXJkaXIgKGFsc28gc2VlIHxuZXRydy1jfCkKIAotICAqZzpuZXRyd19saXN0X2NtZCoJCWNvbW1hbmQgZm9yIGxpc3RpbmcgcmVtb3RlIGRpcmVjdG9yaWVzCisgICpnOm5ldHJ3X2xpc3RfY21kKgkJICBjb21tYW5kIGZvciBsaXN0aW5nIHJlbW90ZSBkaXJlY3RvcmllcwogCQkJCSBkZWZhdWx0OiAoaWYgc3NoIGlzIGV4ZWN1dGFibGUpCiAJCQkJICAgICAgICAgICJzc2ggSE9TVE5BTUUgbHMgLUZMYSIKIAotICAqZzpuZXRyd19saXN0c3R5bGUqCQlTZXQgdGhlIGRlZmF1bHQgbGlzdGluZyBzdHlsZToKKyAgKmc6bmV0cndfbGlzdHN0eWxlKgkJICBTZXQgdGhlIGRlZmF1bHQgbGlzdGluZyBzdHlsZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOiB0aGluIGxpc3RpbmcgKG9uZSBmaWxlIHBlciBsaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE6IGxvbmcgbGlzdGluZyAob25lIGZpbGUgcGVyIGxpbmUgd2l0aCB0aW1lCiAJCQkJICAgICBzdGFtcCBpbmZvcm1hdGlvbiBhbmQgZmlsZSBzaXplKQogCQkJCT0gMjogd2lkZSBsaXN0aW5nIChtdWx0aXBsZSBmaWxlcyBpbiBjb2x1bW5zKQogCQkJCT0gMzogdHJlZSBzdHlsZSBsaXN0aW5nCi0gICpnOm5ldHJ3X2xpc3RfaGlkZSoJCWNvbW1hIHNlcGFyYXRlZCBwYXR0ZXJuIGxpc3QgZm9yIGhpZGluZyBmaWxlcworICAqZzpuZXRyd19saXN0X2hpZGUqCQkgIGNvbW1hIHNlcGFyYXRlZCBwYXR0ZXJuIGxpc3QgZm9yIGhpZGluZyBmaWxlcwogCQkJCVBhdHRlcm5zIGFyZSByZWd1bGFyIGV4cHJlc3Npb25zIChzZWUgfHJlZ2V4cHwpCiAJCQkJRXhhbXBsZTogbGV0IGc6bmV0cndfbGlzdF9oaWRlPSAnLipcLnN3cCQnCiAJCQkJIGRlZmF1bHQ6ICIiCiAKLSAgKmc6bmV0cndfbG9jYWxjb3B5Y21kKgk9ImNwIiBMaW51eC9Vbml4L01hY09TL0N5Z3dpbgorICAqZzpuZXRyd19sb2NhbGNvcHljbWQqCSAgPSJjcCIgTGludXgvVW5peC9NYWNPUy9DeWd3aW4KIAkJCQk9ImNvcHkiIFdpbmRvd3MKIAkJCQlDb3BpZXMgbWFya2VkIGZpbGVzICh8bmV0cnctbWZ8KSB0byB0YXJnZXQKIAkJCQlkaXJlY3RvcnkgKHxuZXRydy1tdHwsIHxuZXRydy1tY3wpCiAKLSAgKmc6bmV0cndfbG9jYWxtb3ZlY21kKgk9Im12IiBMaW51eC9Vbml4L01hY09TL0N5Z3dpbgorICAqZzpuZXRyd19sb2NhbG1vdmVjbWQqCSAgPSJtdiIgTGludXgvVW5peC9NYWNPUy9DeWd3aW4KIAkJCQk9Im1vdmUiIFdpbmRvd3MKIAkJCQlNb3ZlcyBtYXJrZWQgZmlsZXMgKHxuZXRydy1tZnwpIHRvIHRhcmdldAogCQkJCWRpcmVjdG9yeSAofG5ldHJ3LW10fCwgfG5ldHJ3LW1tfCkKIAotICAqZzpuZXRyd19sb2NhbF9ta2RpcioJCWNvbW1hbmQgZm9yIG1ha2luZyBhIGxvY2FsIGRpcmVjdG9yeQorICAqZzpuZXRyd19sb2NhbF9ta2RpcioJCSAgY29tbWFuZCBmb3IgbWFraW5nIGEgbG9jYWwgZGlyZWN0b3J5CiAJCQkJIGRlZmF1bHQ6ICJta2RpciIKIAotICAqZzpuZXRyd19sb2NhbF9ybWRpcioJCXJlbW92ZSBkaXJlY3RvcnkgY29tbWFuZCAocm1kaXIpCisgICpnOm5ldHJ3X2xvY2FsX3JtZGlyKgkJICByZW1vdmUgZGlyZWN0b3J5IGNvbW1hbmQgKHJtZGlyKQogCQkJCSBkZWZhdWx0OiAicm1kaXIiCiAKLSAgKmc6bmV0cndfbWF4ZmlsZW5hbWVsZW4qCT0zMiBieSBkZWZhdWx0LCBzZWxlY3RlZCBzbyBhcyB0byBtYWtlIGxvbmcKKyAgKmc6bmV0cndfbWF4ZmlsZW5hbWVsZW4qCSAgPTMyIGJ5IGRlZmF1bHQsIHNlbGVjdGVkIHNvIGFzIHRvIG1ha2UgbG9uZwogCQkJCSAgICBsaXN0aW5ncyBmaXQgb24gODAgY29sdW1uIGRpc3BsYXlzLgogCQkJCUlmIHlvdXIgc2NyZWVuIGlzIHdpZGVyLCBhbmQgeW91IGhhdmUgZmlsZQogCQkJCW9yIGRpcmVjdG9yeSBuYW1lcyBsb25nZXIgdGhhbiAzMiBieXRlcywKIAkJCQl5b3UgbWF5IHNldCB0aGlzIG9wdGlvbiB0byBrZWVwIGxpc3RpbmdzCiAJCQkJY29sdW1uYXIuCiAKLSAgKmc6bmV0cndfbWtkaXJfY21kKgkJY29tbWFuZCBmb3IgbWFraW5nIGEgcmVtb3RlIGRpcmVjdG9yeQorICAqZzpuZXRyd19ta2Rpcl9jbWQqCQkgIGNvbW1hbmQgZm9yIG1ha2luZyBhIHJlbW90ZSBkaXJlY3RvcnkKIAkJCQkgZGVmYXVsdDogInNzaCBVU0VQT1JUIEhPU1ROQU1FIG1rZGlyIgogCi0gICpnOm5ldHJ3X21vdXNlbWFwcyoJCT0xIChkZWZhdWx0KSBlbmFibGVzIHRoZSBtb3VzZSBidXR0b25zCisgICpnOm5ldHJ3X21vdXNlbWFwcyoJCSAgPTEgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIG1vdXNlIGJ1dHRvbnMKIAkJCQkgICB3aGlsZSBicm93c2luZzoKIAkJCQkgICAgIGxlZnRtb3VzZSAgICAgICA6IG9wZW4gZmlsZS9kaXJlY3RvcnkKIAkJCQkgICAgIHNoaWZ0LWxlZnRtb3VzZSA6IG1hcmsgZmlsZQpAQCAtMjExMSw3ICsyMTY2LDcgQEAKIAkJCQkgICAgIHJpZ2h0bW91c2UgICAgICA6IHJlbW92ZSBmaWxlL2RpcmVjdG9yeQogCQkJCT0wOiBkaXNhYmxlcyBtb3VzZSBtYXBzCiAKLSAgKmc6bmV0cndfcmV0bWFwKgkJaWYgaXQgZXhpc3RzIGFuZCBpcyBzZXQgdG8gb25lLCB0aGVuOgorICAqZzpuZXRyd19yZXRtYXAqCQkgIGlmIGl0IGV4aXN0cyBhbmQgaXMgc2V0IHRvIG9uZSwgdGhlbjoKIAkJCQkgKiBpZiBpbiBhIG5ldHJ3LXNlbGVjdGVkIGZpbGUsIEFORAogCQkJCSAqIG5vIG5vcm1hbC1tb2RlIDwyLWxlZnRtb3VzZT4gbWFwcGluZyBleGlzdHMsCiAJCQkJdGhlbiB0aGUgPDItbGVmdG1vdXNlPiB3aWxsIGJlIG1hcHBlZCBmb3IgZWFzeQpAQCAtMjEzMCwyMiArMjE4NSwyMiBAQAogCiAJCQkJICBkZWZhdWx0OiA9MAogCi0gICpnOm5ldHJ3X3JtX2NtZCoJCWNvbW1hbmQgZm9yIHJlbW92aW5nIGZpbGVzCisgICpnOm5ldHJ3X3JtX2NtZCoJCSAgY29tbWFuZCBmb3IgcmVtb3ZpbmcgZmlsZXMKIAkJCQkgZGVmYXVsdDogInNzaCBVU0VQT1JUIEhPU1ROQU1FIHJtIgogCi0gICpnOm5ldHJ3X3JtZGlyX2NtZCoJCWNvbW1hbmQgZm9yIHJlbW92aW5nIGRpcmVjdG9yaWVzCisgICpnOm5ldHJ3X3JtZGlyX2NtZCoJCSAgY29tbWFuZCBmb3IgcmVtb3ZpbmcgZGlyZWN0b3JpZXMKIAkJCQkgZGVmYXVsdDogInNzaCBVU0VQT1JUIEhPU1ROQU1FIHJtZGlyIgogCi0gICpnOm5ldHJ3X3JtZl9jbWQqCQkgY29tbWFuZCBmb3IgcmVtb3Zpbmcgc29mdGxpbmtzCisgICpnOm5ldHJ3X3JtZl9jbWQqCQkgICBjb21tYW5kIGZvciByZW1vdmluZyBzb2Z0bGlua3MKIAkJCQkgZGVmYXVsdDogInNzaCBVU0VQT1JUIEhPU1ROQU1FIHJtIC1mIgogCi0gICpnOm5ldHJ3X3NvcnRfYnkqCQlzb3J0IGJ5ICJuYW1lIiwgInRpbWUiLCBvciAic2l6ZSIKKyAgKmc6bmV0cndfc29ydF9ieSoJCSAgc29ydCBieSAibmFtZSIsICJ0aW1lIiwgb3IgInNpemUiCiAJCQkJIGRlZmF1bHQ6ICJuYW1lIgogCi0gICpnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uKglzb3J0aW5nIGRpcmVjdGlvbjogIm5vcm1hbCIgb3IgInJldmVyc2UiCisgICpnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uKgkgIHNvcnRpbmcgZGlyZWN0aW9uOiAibm9ybWFsIiBvciAicmV2ZXJzZSIKIAkJCQkgZGVmYXVsdDogIm5vcm1hbCIKIAotICAqZzpuZXRyd19zb3J0X29wdGlvbnMqCXNvcnRpbmcgaXMgZG9uZSB1c2luZyB8OnNvcnR8OyB0aGlzCisgICpnOm5ldHJ3X3NvcnRfb3B0aW9ucyoJICBzb3J0aW5nIGlzIGRvbmUgdXNpbmcgfDpzb3J0fDsgdGhpcwogCQkJCXZhcmlhYmxlJ3MgdmFsdWUgaXMgYXBwZW5kZWQgdG8gdGhlCiAJCQkJc29ydCBjb21tYW5kLiAgVGh1cyBvbmUgbWF5IGlnbm9yZSBjYXNlLAogCQkJCWZvciBleGFtcGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgaW4geW91cgpAQCAtMjE1MywxNCArMjIwOCwxNCBAQAogCQkJCQlsZXQgZzpuZXRyd19zb3J0X29wdGlvbnM9ImkiCiA8CQkJCSBkZWZhdWx0OiAiIgogCi0gICpnOm5ldHJ3X3NvcnRfc2VxdWVuY2UqCXdoZW4gc29ydGluZyBieSBuYW1lLCBmaXJzdCBzb3J0IGJ5IHRoZQorICAqZzpuZXRyd19zb3J0X3NlcXVlbmNlKgkgIHdoZW4gc29ydGluZyBieSBuYW1lLCBmaXJzdCBzb3J0IGJ5IHRoZQogCQkJCWNvbW1hLXNlcGFyYXRlZCBwYXR0ZXJuIHNlcXVlbmNlLiAgTm90ZSB0aGF0CiAJCQkJdGhlIGZpbGlncmVlIGFkZGVkIHRvIGluZGljYXRlIGZpbGV0eXBlcwogCQkJCXNob3VsZCBiZSBhY2NvdW50ZWQgZm9yIGluIHlvdXIgcGF0dGVybi4KIAkJCQkgZGVmYXVsdDogJ1tcL10kLCosXC5iYWskLFwubyQsXC5oJCwKIAkJCQkgICAgICAgICAgIFwuaW5mbyQsXC5zd3AkLFwub2JqJCcKIAotICAqZzpuZXRyd19zcGVjaWFsX3N5bnRheCoJSWYgdHJ1ZSwgdGhlbiBjZXJ0YWluIGZpbGVzIHdpbGwgYmUgc2hvd24KKyAgKmc6bmV0cndfc3BlY2lhbF9zeW50YXgqCSAgSWYgdHJ1ZSwgdGhlbiBjZXJ0YWluIGZpbGVzIHdpbGwgYmUgc2hvd24KIAkJCQlpbiBzcGVjaWFsIHN5bnRheCBpbiB0aGUgYnJvd3NlcjoKIAogCQkJCQluZXRyd0JhayAgICAgOiAqLmJhawpAQCAtMjE3MSw3ICsyMjI2LDcgQEAKIAkJCQkJbmV0cndNYWtlZmlsZTogW21NXWFrZWZpbGUgKi5tYWsKIAkJCQkJbmV0cndPYmogICAgIDogKi5vICoub2JqCiAJCQkJCW5ldHJ3VGFncyAgICA6IHRhZ3MgQU5tZW51IEFOdGFncwotCQkJCQluZXRyd1RpbGRlICAgOiAqfiAKKwkJCQkJbmV0cndUaWxkZSAgIDogKn4KIAkJCQkJbmV0cndUbXAgICAgIDogdG1wKiAqdG1wCiAKIAkJCQlUaGVzZSBzeW50YXggaGlnaGxpZ2h0aW5nIGdyb3VwcyBhcmUgbGlua2VkCkBAIC0yMTgyLDEyICsyMjM3LDEyIEBACiA8CQkJCWludG8gb25lJ3MgPC52aW1yYz4gdG8gdXNlIG9uZSdzIG93bgogCQkJCXByZWZlcmVuY2VzLgogCi0gICpnOm5ldHJ3X3NzaF9jbWQqCQlPbmUgbWF5IHNwZWNpZnkgYW4gZXhlY3V0YWJsZSBjb21tYW5kCisgICpnOm5ldHJ3X3NzaF9jbWQqCQkgIE9uZSBtYXkgc3BlY2lmeSBhbiBleGVjdXRhYmxlIGNvbW1hbmQKIAkJCQl0byB1c2UgaW5zdGVhZCBvZiBzc2ggZm9yIHJlbW90ZSBhY3Rpb25zCiAJCQkJc3VjaCBhcyBsaXN0aW5nLCBmaWxlIHJlbW92YWwsIGV0Yy4KIAkJCQkgZGVmYXVsdDogc3NoCiAKLSAgKmc6bmV0cndfc3NoX2Jyb3dzZV9yZWplY3QqCXNzaCBjYW4gc29tZXRpbWVzIHByb2R1Y2UgdW53YW50ZWQgbGluZXMsCisgICpnOm5ldHJ3X3NzaF9icm93c2VfcmVqZWN0KgkgIHNzaCBjYW4gc29tZXRpbWVzIHByb2R1Y2UgdW53YW50ZWQgbGluZXMsCiAJCQkJbWVzc2FnZXMsIGJhbm5lcnMsIGFuZCB3aGF0bm90IHRoYXQgb25lIGRvZXNuJ3QKIAkJCQl3YW50IG1hc3F1ZXJhZGluZyBhcyAiZGlyZWN0b3JpZXMiIGFuZCAiZmlsZXMiLgogCQkJCVVzZSB0aGlzIHBhdHRlcm4gdG8gcmVtb3ZlIHN1Y2ggZW1iZWRkZWQKQEAgLTIxOTUsMTEgKzIyNTAsMTEgQEAKIAkJCQkJICdedG90YWxcc1wrXGRcKyQnCiAKIAotICAqZzpuZXRyd190bXBmaWxlX2VzY2FwZSoJPScgJjsnCisgICpnOm5ldHJ3X3RtcGZpbGVfZXNjYXBlKgkgID0nICY7JwogCQkJCWVzY2FwZSgpIGlzIGFwcGxpZWQgdG8gYWxsIHRlbXBvcmFyeSBmaWxlcwogCQkJCXRvIGVzY2FwZSB0aGVzZSBjaGFyYWN0ZXJzLgogCi0gICpnOm5ldHJ3X3RpbWVmbXQqCQlzcGVjaWZ5IGZvcm1hdCBzdHJpbmcgdG8gdmltJ3Mgc3RyZnRpbWUoKS4KKyAgKmc6bmV0cndfdGltZWZtdCoJCSAgc3BlY2lmeSBmb3JtYXQgc3RyaW5nIHRvIHZpbSdzIHN0cmZ0aW1lKCkuCiAJCQkJVGhlIGRlZmF1bHQsICIlYyIsIGlzICJ0aGUgcHJlZmVycmVkIGRhdGUKIAkJCQlhbmQgdGltZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQKIAkJCQlsb2NhbGUiIGFjY29yZGluZyB0byBteSBtYW5wYWdlIGVudHJ5IGZvcgpAQCAtMjIwOSw3ICsyMjY0LDcgQEAKIAkJCQkgIiAlYSAlWS0lbS0lZCAgJUktJU0tJVMgJXAiCiAJCQkJIGRlZmF1bHQ6ICIlYyIKIAotICAqZzpuZXRyd191c2Vfbm9zd2YqCQluZXRydyBub3JtYWxseSBhdm9pZHMgd3JpdGluZyBzd2FwZmlsZXMKKyAgKmc6bmV0cndfdXNlX25vc3dmKgkJICBuZXRydyBub3JtYWxseSBhdm9pZHMgd3JpdGluZyBzd2FwZmlsZXMKIAkJCQlmb3IgYnJvd3NlciBidWZmZXJzLiAgSG93ZXZlciwgdW5kZXIgc29tZQogCQkJCXN5c3RlbXMgdGhpcyBhcHBhcmVudGx5IGlzIGNhdXNpbmcgbmFzdHkKIAkJCQltbF9nZXQgZXJyb3JzIHRvIGFwcGVhcjsgaWYgeW91J3JlIGdldHRpbmcKQEAgLTIyMTcsMTIgKzIyNzIsMTIgQEAKIAkJCQkgIGxldCBnOm5ldHJ3X3VzZV9ub3N3Zj0gMAogCQkJCWluIHlvdXIgLnZpbXJjLgogCi0gICpnOm5ldHJ3X3dpbnNpemUqCQlzcGVjaWZ5IGluaXRpYWwgc2l6ZSBvZiBuZXcgd2luZG93cyBtYWRlIHdpdGgKKyAgKmc6bmV0cndfd2luc2l6ZSoJCSAgc3BlY2lmeSBpbml0aWFsIHNpemUgb2YgbmV3IHdpbmRvd3MgbWFkZSB3aXRoCiAJCQkJIm8iIChzZWUgfG5ldHJ3LW98KSwgInYiIChzZWUgfG5ldHJ3LXZ8KSwKIAkJCQl8OkhleHBsb3JlfCBvciB8OlZleHBsb3JlfC4KIAkJCQkgZGVmYXVsdDogIiIKIAotICAqZzpuZXRyd194c3RybGVuKgkJQ29udHJvbHMgaG93IG5ldHJ3IGNvbXB1dGVzIHN0cmluZyBsZW5ndGhzLAorICAqZzpuZXRyd194c3RybGVuKgkJICBDb250cm9scyBob3cgbmV0cncgY29tcHV0ZXMgc3RyaW5nIGxlbmd0aHMsCiAJCQkJaW5jbHVkaW5nIG11bHRpLWJ5dGUgY2hhcmFjdGVycycgc3RyaW5nCiAJCQkJbGVuZ3RoLiAodGhhbmtzIHRvIE4gV2VpYnVsbCwgVCBNZWNoZWx5bmNrKQogCQkJCT0wOiB1c2VzIFZpbSdzIGJ1aWx0LWluIHN0cmxlbigpCkBAIC0yMjM4LDcgKzIyOTMsNyBAQAogCQkJCSAgICBpbW1lZGlhdGVseSBwcmVjZWRlZCBieSBsYW0sIG9uZQogCQkJCSAgICBvdGhlcndpc2UsIGV0YykKIAotICAqZzpOZXRyd1RvcEx2bE1lbnUqCQlUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgdG9wIGxldmVsCisgICpnOk5ldHJ3VG9wTHZsTWVudSoJCSAgVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHRvcCBsZXZlbAogCQkJCW1lbnUgbmFtZTsgYnkgZGVmYXVsdCwgaXQncyAiTmV0cncuIi4gIElmCiAJCQkJeW91IHdpc2ggdG8gY2hhbmdlIHRoaXMsIGRvIHNvIGluIHlvdXIKIAkJCQkudmltcmMuCkBAIC0yMjU0LDcgKzIzMDksNyBAQAogYXV0b2NoZGlyIHNldHMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHRoYXQgY29udGFpbmluZyB0aGUgImZpbGUiIChldmVuIGlmCiB0aGF0ICJmaWxlIiBpcyBpdHNlbGYgYSBkaXJlY3RvcnkpLgogCi1ORVRSVyBTRVRUSU5HUwkJCQkJCSpuZXRydy1zZXR0aW5ncyoge3t7MgorTkVUUlcgQlJPV1NFUiBTRVRUSU5HUwkJCQkJCSpuZXRydy1zZXR0aW5ncyoge3t7MgogCiBXaXRoIHRoZSBOZXRyd1NldHRpbmdzLnZpbSBwbHVnaW4sID4KIAk6TmV0cndTZXR0aW5ncwpAQCAtMjI5OCw2ICsyMzUzLDcgQEAKICAgIGRpcmVjdG9yeSwgc2VlIHxnOm5ldHJ3X2tlZXBkaXJ8LgogCiAKKwkJCQkJCQkqbmV0cnctY3JlYXRlZmlsZSoKIE9QRU4gQSBORVcgRklMRSBJTiBORVRSVydTIENVUlJFTlQgRElSRUNUT1JZCQkqbmV0cnctJSoKIAogVG8gb3BlbiBhIGZpbGUgaW4gbmV0cncncyBjdXJyZW50IGRpcmVjdG9yeSwgcHJlc3MgIiUiLiAgVGhpcyBtYXAgd2lsbApAQCAtMjY1NSwxMyArMjcxMSwxMyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAxMS4gRGVidWdnaW5nIE5ldHJ3IEl0c2VsZgkJCQkqbmV0cnctZGVidWcqIHt7ezEKIAotVGhlIDxuZXRydy52aW0+IHNjcmlwdCBpcyB0eXBpY2FsbHkgYXZhaWxhYmxlIGFzOgorVGhlIDxuZXRydy52aW0+IHNjcmlwdCBpcyB0eXBpY2FsbHkgYXZhaWxhYmxlIGFzIHNvbWV0aGluZyBsaWtlOgogPgotCS91c3IvbG9jYWwvc2hhcmUvdmltL3ZpbTZ4L3BsdWdpbi9uZXRyd1BsdWdpbi52aW0KLQkvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02eC9hdXRvbG9hZC9uZXRydy52aW0KLTwgLW9yLSA+CiAJL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltN3gvcGx1Z2luL25ldHJ3UGx1Z2luLnZpbQogCS91c3IvbG9jYWwvc2hhcmUvdmltL3ZpbTd4L2F1dG9sb2FkL25ldHJ3LnZpbQorPCAtb3ItID4KKwkvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02eC9wbHVnaW4vbmV0cndQbHVnaW4udmltCisJL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNngvYXV0b2xvYWQvbmV0cncudmltCiA8CiB3aGljaCBpcyBsb2FkZWQgYXV0b21hdGljYWxseSBhdCBzdGFydHVwIChhc3N1bWluZyA6c2V0IG5vY3ApLgogCkBAIC0yNzA2LDYgKzI3NjIsMTYgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogMTIuIEhpc3RvcnkJCQkJCQkqbmV0cnctaGlzdG9yeSoge3t7MQogCisJdjE0MTogQXVnIDI4LCAyMDEwICogYWRkZWQgLXM6Li4uIHN1cHBvcnQgZm9yIFdpbmRvd3MgZnRwCisJCQkgICAqIHJlc3RvcmVkIDItbGVmdG1vdXNlIGZvciA6UmV4LWxpa2UgcmV0dXJuCisJCQkgICAqIGFkZGVkIGJhbGxvb24gaGVscCBmb3IgYmFubmVyCisJICAgICAgT2N0IDI2LCAyMDEwICogOlRleHBsb3JlIGNoYW5nZWQgdG8gc3RhcnQgZnJvbSBuZXRydydzIGlkZWEKKwkJCSAgICAgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBub3QgcHdkJ3MKKwkgICAgICBGZWIgMTAsIDIwMTEgKiBuZXRyd1BsdWdpbiBtb2RpZmllZCB0byB1c2UgQnVmUmVhZENtZAorCQkJICAgICB3aGVuIHRoZSAiZmlsZW5hbWUiIGVuZHMgd2l0aCBhICIvIiBvciBhICJcIgorCQkJICAgICBBdm9pZHMgIi4uLiBpcyBhIGRpcmVjdG9yeSIgbWVzc2FnZSwgd29ya3MKKwkJCSAgICAgaW5zaWRlIGEgdHJ5LWNhdGNoLWVuZHRyeSBjbGF1c2UuCisJICAgICAgRmViIDIyLCAyMDExICogZm9yIG1lbnVzLCAmZ28gPX4jIHVzZWQgdG8gaW5zdXJlIGNvcnJlY3QgY2FzZQogCXYxNDA6IEp1bCAyNywgMjAxMCAqIChMZWNoIExvcmVucykgdW5leHBlY3RlZCBjaGFuZ2Ugb2Ygd2luZG93CiAJdjEzOTogTWF5IDE0LCAyMDEwICogd2hlbiB2aWV3aW5nIHJlbW90ZSBkaXJlY3RvcnkgbGlzdGluZ3MgYW5kCiAJCQkgICAgIGNoYW5naW5nIGxpc3Rpbmcgc3R5bGUsIGdvaW5nIHRvIHRyZWUgbGlzdGluZwpAQCAtMjczMiw3ICsyNzk4LDcgQEAKIAl2MTM3OiBEZWMgMjgsIDIwMDkgKiBtb2RpZmllZCB0aGUgcHJldmlldyB3aW5kb3cgaGFuZGxpbmcgZm9yCiAJCQkgICAgIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cy4gIFRoZSBwcmV2aWV3CiAJCQkgICAgIHdpbmRvdyB3aWxsIHRha2UgdXAgYWxsIGJ1dCBnOm5ldHJ3X3dpbnNpemUKLQkJCSAgICAgY29sdW1ucyBvZiB0aGUgb3JpZ2luYWwgd2luZG93OyB0aG9zZSAKKwkJCSAgICAgY29sdW1ucyBvZiB0aGUgb3JpZ2luYWwgd2luZG93OyB0aG9zZQogCQkJICAgICBnOm5ldHJ3X3dpbnNpemUgY29sdW1ucyB3aWxsIGJlIHVzZWQgZm9yCiAJCQkgICAgIHRoZSBuZXRydyBsaXN0aW5nLgogCQkJICAgKiAoU2ltb24gRGFtYmUpIHJlbW92ZWQgIn4iIGZyb20KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3N5bnRheC50eHQgYi9ydW50aW1lL2RvYy9zeW50YXgudHh0CmluZGV4IDIxMmFhNzcuLjZjMzkyNzQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3N5bnRheC50eHQKKysrIGIvcnVudGltZS9kb2Mvc3ludGF4LnR4dApAQCAtMSw0ICsxLDQgQEAKLSpzeW50YXgudHh0KglGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTEgSmFuIDIyCisqc3ludGF4LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDExIEFwciAwMQogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0zMjIzLDYgKzMyMjMsOSBAQAogICAgOmhpIHBhcjEgY3Rlcm1mZz1yZWQgZ3VpZmc9cmVkCiAgICA6aGkgcGFyMiBjdGVybWZnPWJsdWUgZ3VpZmc9Ymx1ZQogICAgOmhpIHBhcjMgY3Rlcm1mZz1kYXJrZ3JlZW4gZ3VpZmc9ZGFya2dyZWVuCis8CisJCQkJCQkqRTg0OSoKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBzeW50YXggZ3JvdXBzIGlzIDE5OTk5LgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDYuIDpzeW50YXggYXJndW1lbnRzCQkJCQkqOnN5bi1hcmd1bWVudHMqCkBAIC0zNzYxLDYgKzM3NjQsOSBAQAogICAgOnN5bnRheCBtYXRjaCBTdHVmZiAiKCBhYWEgYmJiICkiIGNvbnRhaW5zPUBCaWdHcm91cAogICAgOnN5bnRheCBjbHVzdGVyIEJpZ0dyb3VwIHJlbW92ZT1CCSIgbm8gZWZmZWN0LCBzaW5jZSBCIGlzbid0IGluIEJpZ0dyb3VwCiAgICA6c3ludGF4IGNsdXN0ZXIgU21hbGxHcm91cCByZW1vdmU9QgkiIG5vdyBiYmIgaXNuJ3QgbWF0Y2hlZCB3aXRoaW4gU3R1ZmYKKzwKKwkJCQkJCSpFODQ4KgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsdXN0ZXJzIGlzIDk3NjcuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogOS4gSW5jbHVkaW5nIHN5bnRheCBmaWxlcwkJCQkqOnN5bi1pbmNsdWRlKiAqRTM5NyoKQEAgLTM4MDAsNiArMzgwNiw5IEBACiAJICB3aXRoIGhpcyBvd24gdmVyc2lvbiwgd2l0aG91dCByZXBsYWNpbmcgdGhlIGZpbGUgdGhhdCBkb2VzIHRoZSAiOnN5bgogCSAgaW5jbHVkZSIuCiAKKwkJCQkJCSpFODQ3KgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluY2x1ZGVzIGlzIDk5OS4KKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAxMC4gU3luY2hyb25pemluZwkJCQkqOnN5bi1zeW5jKiAqRTQwMyogKkU0MDQqCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCmluZGV4IGRjYzExYzguLmJlZTM5YzEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RhZ3MKKysrIGIvcnVudGltZS9kb2MvdGFncwpAQCAtNDIyOSw2ICs0MjI5LDEwIEBACiBFODQzCWVkaXRpbmcudHh0CS8qRTg0MyoKIEU4NDQJc3ludGF4LnR4dAkvKkU4NDQqCiBFODQ1CXNwZWxsLnR4dAkvKkU4NDUqCitFODQ2CW9wdGlvbnMudHh0CS8qRTg0NioKK0U4NDcJc3ludGF4LnR4dAkvKkU4NDcqCitFODQ4CXN5bnRheC50eHQJLypFODQ4KgorRTg0OQlzeW50YXgudHh0CS8qRTg0OSoKIEU4NQlvcHRpb25zLnR4dAkvKkU4NSoKIEU4Ngl3aW5kb3dzLnR4dAkvKkU4NioKIEU4Nwl3aW5kb3dzLnR4dAkvKkU4NyoKQEAgLTQ4NjEsNiArNDg2NSw4IEBACiBjXzxTLVVwPgljbWRsaW5lLnR4dAkvKmNfPFMtVXA+KgogY188VGFiPgljbWRsaW5lLnR4dAkvKmNfPFRhYj4qCiBjXzxVcD4JY21kbGluZS50eHQJLypjXzxVcD4qCitjX0JTCWNtZGxpbmUudHh0CS8qY19CUyoKK2NfQ1IJY21kbGluZS50eHQJLypjX0NSKgogY19DVFJMLUEJY21kbGluZS50eHQJLypjX0NUUkwtQSoKIGNfQ1RSTC1CCWNtZGxpbmUudHh0CS8qY19DVFJMLUIqCiBjX0NUUkwtQwljbWRsaW5lLnR4dAkvKmNfQ1RSTC1DKgpAQCAtNDg5Myw2ICs0ODk5LDE1IEBACiBjX0NUUkwtXQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1dKgogY19DVFJMLV4JY21kbGluZS50eHQJLypjX0NUUkwtXioKIGNfQ1RSTC1fCWNtZGxpbmUudHh0CS8qY19DVFJMLV8qCitjX0RlbAljbWRsaW5lLnR4dAkvKmNfRGVsKgorY19Eb3duCWNtZGxpbmUudHh0CS8qY19Eb3duKgorY19FbmQJY21kbGluZS50eHQJLypjX0VuZCoKK2NfRXNjCWNtZGxpbmUudHh0CS8qY19Fc2MqCitjX0hvbWUJY21kbGluZS50eHQJLypjX0hvbWUqCitjX0luc2VydAljbWRsaW5lLnR4dAkvKmNfSW5zZXJ0KgorY19MZWZ0CWNtZGxpbmUudHh0CS8qY19MZWZ0KgorY19SaWdodAljbWRsaW5lLnR4dAkvKmNfUmlnaHQqCitjX1VwCWNtZGxpbmUudHh0CS8qY19VcCoKIGNfZGlncmFwaAljbWRsaW5lLnR4dAkvKmNfZGlncmFwaCoKIGNfd2lsZGNoYXIJY21kbGluZS50eHQJLypjX3dpbGRjaGFyKgogY2FsbCgpCWV2YWwudHh0CS8qY2FsbCgpKgpAQCAtNTc1MCwxMCArNTc2NSwxMSBAQAogZzpuZXRyd19jaGd3aW4JcGlfbmV0cncudHh0CS8qZzpuZXRyd19jaGd3aW4qCiBnOm5ldHJ3X2NvbXByZXNzCXBpX25ldHJ3LnR4dAkvKmc6bmV0cndfY29tcHJlc3MqCiBnOm5ldHJ3X2N0YWdzCXBpX25ldHJ3LnR4dAkvKmc6bmV0cndfY3RhZ3MqCi1nOm5ldHJ3X2N1cnNvcmxpbmUJcGlfbmV0cncudHh0CS8qZzpuZXRyd19jdXJzb3JsaW5lKgorZzpuZXRyd19jdXJzb3IJcGlfbmV0cncudHh0CS8qZzpuZXRyd19jdXJzb3IqCiBnOm5ldHJ3X2N5Z3dpbglwaV9uZXRydy50eHQJLypnOm5ldHJ3X2N5Z3dpbioKIGc6bmV0cndfZGF2X2NtZAlwaV9uZXRydy50eHQJLypnOm5ldHJ3X2Rhdl9jbWQqCiBnOm5ldHJ3X2RlY29tcHJlc3MJcGlfbmV0cncudHh0CS8qZzpuZXRyd19kZWNvbXByZXNzKgorZzpuZXRyd19kaXJoaXN0bWF4CXBpX25ldHJ3LnR4dAkvKmc6bmV0cndfZGlyaGlzdG1heCoKIGc6bmV0cndfZmFzdGJyb3dzZQlwaV9uZXRydy50eHQJLypnOm5ldHJ3X2Zhc3Ricm93c2UqCiBnOm5ldHJ3X2ZldGNoX2NtZAlwaV9uZXRydy50eHQJLypnOm5ldHJ3X2ZldGNoX2NtZCoKIGc6bmV0cndfZm5hbWVfZXNjYXBlCXBpX25ldHJ3LnR4dAkvKmc6bmV0cndfZm5hbWVfZXNjYXBlKgpAQCAtNjcxMCw2ICs2NzI2LDcgQEAKIG5ldHJ3LWNvbnRlbnRzCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWNvbnRlbnRzKgogbmV0cnctY29weXJpZ2h0CXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWNvcHlyaWdodCoKIG5ldHJ3LWNyCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWNyKgorbmV0cnctY3JlYXRlZmlsZQlwaV9uZXRydy50eHQJLypuZXRydy1jcmVhdGVmaWxlKgogbmV0cnctY3JlZGl0cwlwaV9uZXRydy50eHQJLypuZXRydy1jcmVkaXRzKgogbmV0cnctY3RybC1oCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWN0cmwtaCoKIG5ldHJ3LWN0cmwtbAlwaV9uZXRydy50eHQJLypuZXRydy1jdHJsLWwqCkBAIC02NzMzLDcgKzY3NTAsOSBAQAogbmV0cnctZnRwCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWZ0cCoKIG5ldHJ3LWZ0eXBlCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWZ0eXBlKgogbmV0cnctZ2IJcGlfbmV0cncudHh0CS8qbmV0cnctZ2IqCituZXRydy1nZAlwaV9uZXRydy50eHQJLypuZXRydy1nZCoKIG5ldHJ3LWdldGZ0eXBlCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWdldGZ0eXBlKgorbmV0cnctZ2YJcGlfbmV0cncudHh0CS8qbmV0cnctZ2YqCiBuZXRydy1naAlwaV9uZXRydy50eHQJLypuZXRydy1naCoKIG5ldHJ3LWdwCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWdwKgogbmV0cnctZ3gJcGlfbmV0cncudHh0CS8qbmV0cnctZ3gqCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CmluZGV4IGU2ZWZmZDkuLmY3YTk2YjYgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RvZG8udHh0CisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0xLDQgKzEsNCBAQAotKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMSBNYXIgMjIKKyp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTEgQXByIDAxCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTMwLDEyOSArMzAsMjEgQEAKIAkJCQkJCQkqa25vd24tYnVncyoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEtub3duIGJ1Z3MgYW5kIGN1cnJlbnQgd29yayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgOnogY29tbWFuZCBkb2Vzbid0IHdvcmsgZXhhY3RseSBhcyBpdCBzaG91bGQuIChDaGFuZ1podW8gQ2hlbiwgMjAxMSBNYXIgMikKLUNvbXBhcmUgd2l0aCBob3cgb2xkIFZpIHdvcmtzIGFuZCB3aXRoIHBvc2l4IHNwZWMuICB0ZXJtaW5hbCBpcyA4MCB4IDI0LAotJ3Njcm9sbCcgb3B0aW9uIHNldCB0byAxMS4KLQotQ3Jhc2ggd2l0aCAiOnB5dGhvbiBoZWxwKGRpcikiLiAoS2Vhcm4gSG9sbGlkYXksIDIwMTEgTWFyIDE5KQotSSBjYW4gcmVwcm9kdWNlIGl0LiAgRG9uJ3Qga25vdyB3aHkgaXQgaGFwcGVucy4KLQotJ2N1cnNvcmxpbmUnIGlzIGRpc3BsYXllZCB0b28gc2hvcnQgd2hlbiB0aGVyZSBhcmUgY29uY2VhbGVkIGNoYXJhY3RlcnMgYW5kCi0nbGlzdCcgaXMgc2V0LiAgKERlbm5pcyBQcmVpc2VyKQotUGF0Y2ggNy4zLjExNiB3YXMgdGhlIHdyb25nIHNvbHV0aW9uLgotCi1XaGVuIG9wZW5pbmcgZmlsZSBmcm9tIHdpbmRvd3MgZXhwbG9yZXIsIGNoYXJhY3RlcnMgaW5zaWRlIFtdIGNhdXNlCi1wcm9ibGVtcywgZXZlbiB0aG91Z2ggZG91YmxlIHF1b3RlcyBhcmUgdXNlZC4gKE1hbnVlbCBTdG9sLCAyMDExIE1hciA5KQotCi1QYXRjaCBmb3IgVmltIGluZGVudCBmaWxlLiAoQ29jdWxhciwgMjAxMSBNYXIpCi0KLTpoZWxwIGNfRXNjIHNob3VsZCB3b3JrLCBidXQgb25seSA6aGVscCBjXzxFc2M+IGRvZXMuCi0KLVBhdGNoIHRvIGNoYW5nZSB0aGUgbWVhbmluZyBvZiBcbiBpbiBzdWJzdGl0dXRlKCkuIChtb3RveWEga3Vyb3RzdSwgMjAxMSBNYXIgOCkKLQotTmV3IHZlcnNpb24gb2YgUGFzY2FsIGluZGVudCBmaWxlLiAoTmVpbCBDYXJ0ZXIsIDIwMTEgTWFyIDkpCi0KLUhlbHAgZmlsZSBmb2xkZXhwciAoWnlYKQotCi11cHN0YXJ0IHN5bnRheCBmaWxlIChKYW1lcyBIdW50LCBNYXIgMTEgMjAxMSkKLQotU3ludGF4IHJlZ2lvbiB3aXRoICdjb25jZWFsZW5kcycgYW5kIGEgJ2NjaGFyJyB2YWx1ZSwgJ2NvbmNlYWxsZXZlbCcgc2V0IHRvIDIsCi1vbmx5IG9uZSBvZiB0aGUgdHdvIGVuZHMgZ2V0cyB0aGUgY2NoYXIgZGlzcGxheWVkLiAoQnJldHQgU3RhaGxtYW4sIDIwMTAgQXVnCi0yMSwgQmVuIEZyaXR6LCAyMDEwIFNlcCAxNCkKLQotQnVnIGluIHJlcGVhdGluZyBWaXN1YWwgInUiLiAoTGF3cmVuY2UgS2VzdGVsb290LCAyMDEwIERlYyAyMCkKLQotQ3Jhc2ggd2l0aCBiaWcgLnhwbSBmaWxlLiAoWXVraWhpcm8gTmFrYWRhaXJhLCAyMDExIEZlYiAxOCkKLVBhdGNoIGZyb20gQmVuIFNjaG1pZHQgKDIwMTEgTWFyIDMpLiAgTmVlZHMgc29tZSBtb3JlIHdvcmsuCi0KLVBhdGNoIGZvciBkaXNhcHBlYXJpbmcgY3Vyc29yIGFmdGVyIG5ldGJlYW5zIGNvbW1hbmQuIChYYXZpZXIgZGUgR2F5ZSwgMjAxMQotTWFyIDQpCi0KLVdpbmRvd3Mga2V5cyBub3Qgc2V0IHByb3Blcmx5IG9uIFdpbmRvd3MgNz8gIChjbmN5YmVyLCAyMDEwIEF1ZyAyNikKLQotQ29tcGlsZXIgc2NyaXB0cyBmb3IgZm9ydHJhbiAoSG9uZyBYdSwgMjAxMSBNYXJjaCAxOSkKLQotVGhpcyBsaW5lIGhhbmdzIFZpbSwgYmVjYXVzZSBvZiBzeW50YXggSEw6Ci1jYWxsIGFwcGVuZChsaW5lLCAiSU5GTyAgLi4uLjEyLi4uLjE4Li4uLjI0Li4uLjMwLi4uLjM2Li4uLjQyLi4uLjQ4Li4uLjU0Li4uLjYwLi4uLjY2Li4uLjcyLi4uLjc4JSQiKQotCi1CdWlsZGluZyB0aGUgTWluZ1cgdmVyc2lvbiB3aXRob3V0IGNsaXBib2FyZCBidXQgd2l0aCBtdWx0aS1ieXRlIGRvZXNuJ3QKLXdvcmsuIChCaWxsIExhbSwgMjAxMCBTZXAgMTgpCi0KLVBhdGNoIGZvciBoYW5kbGluZyBvZiBOTCBpbiBzdWJzdGl0dXRlKCkgd2l0aCBcPSBleHByZXNzaW9uLiAoTW90b3lhIEt1cm90c3UsCi0yMDExIE1hciAxNikKLQotV2hlbiB1c2luZyBhIFZpbSBzZXJ2ZXIsIGEgIyBpbiB0aGUgcGF0aCBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZS4KLShKZWZmIExhbnphcm90dGEsIDIwMTEgRmViIDE3KQotCi1CdWc6IEU2ODUgZXJyb3IgZm9yIGZ1bmNfdW5yZWYoKS4gKFp5WCwgMjAxMCBBdWcgNSkKLQotVXNpbmcgIjpicmVhayIgb3Igc29tZXRoaW5nIGVsc2UgdGhhdCBzdG9wcyBleGVjdXRpbmcgY29tbWFuZHMgaW5zaWRlIGEKLSI6ZmluYWxseSIgZG9lcyBub3QgcmV0aHJvdyBhIHByZXZpb3VzbHkgdW5jYXVnaHQgZXhjZXB0aW9uLiAoWnlYLCAyMDEwIE9jdAotMTUpCi0KLVZpbSB1c2luZyBsb3RzIG9mIG1lbW9yeSB3aGVuIGpvaW5pbmcgbGluZXMuIChKb2huIExpdHRsZSwgMjAxMCBEZWMgMykKLQotT24gNjQgYml0IE1TLVdpbmRvd3MgImxvbmciIGlzIG9ubHkgMzIgYml0cywgYnV0IHdlIHNvbWV0aW1lcyBuZWVkIHRvIHN0b3JlIGEKLTY0IGJpdHMgdmFsdWUuICBDaGFuZ2UgYWxsIG51bWJlciBvcHRpb25zIHRvIHVzZSBucm9wdF9UIGFuZCBkZWZpbmUgaXQgdG8gdGhlCi1yaWdodCB0eXBlLgotCi1QYXRjaCB0byBpbXByb3ZlIG1mX2hhc2gsIGR5bmFtaWMgc2l6aW5nLiAoSXZhbiBLcmFzaWxuaWtvdiwgMjAxMCBEZWMgMTcpCi1VcGRhdGUgd2l0aCB0ZXN0czogMjAxMSBGZWIgMjguCi0KLXN0cmluZygpIGNhbid0IHBhcnNlIGJhY2sgImluZiIgYW5kICJuYW4iLiAgRml4IGRvY3VtZW50YXRpb24gb3IgZml4IGNvZGU/Ci0oWnlYLCAyMDEwIEF1ZyAyMykKLQotbWFwYXJnKCkgZG9lcyBub3Qgc2hvdyB0aGUgPHNjcmlwdD4gZmxhZy4gIFdoZW4gdGVtcG9yYXJpbHkgY2hhbmdpbmcgYQotbWFwcGluZywgaG93IHRvIHJlc3RvcmUgdGhlIHNjcmlwdCBJRD8KLQotUGF0Y2ggdG8gZml4IFwlViBpdGVtIGluIHJlZ2V4cC4gKENocmlzdGlhbiBCcmFiYW5kdCwgMjAxMCBOb3YgOCkKLVVwZGF0ZSBOb3YgMTkuICBKYW1lcyBWZWdhOiBzdGlsbCBub3QgcmlnaHQuICBDaHJpc3RpYW46IGl0J3MgZGlmZmljdWx0LgotCi1QYXRjaCB0byBhZGQgdXAgdG8gOTkgbWF0Y2ggZ3JvdXBzLiAoQ2hyaXN0aWFuIEJyYWJhbmR0LCAyMDEwIERlYyAyMikKLUFsc28gYWRkIG5hbWVkIGdyb3VwczogXCV7bmFtZX0ocmUpICBhbmQgXCV7bmFtZX1nCi0KLUJ1ZyBpbiB0cnkvY2F0Y2g6IHJldHVybiB3aXRoIGludmFsaWQgY29tcGFyZSB0aHJvd3MgZXJyb3IgdGhhdCBpc24ndCBjYXVnaHQuCi0oWnlYLCAyMDExIEphbiAyNikKLQogSW1wcm92ZW1lbnQgcGF0Y2ggZm9yIGZpbGV0eXBlLnZpbS4gKFRoaWxvIFNpeCwgMjAxMSBNYXIgMTkpCiAKLVBhdGNoIGZvciAiKyBhbmQgIiogZ2V0dGluZyBzYW1lIHNlbGVjdGlvbiB3aGVuICJhIiBpcyBub3QgaW4gJ2d1aW9wdGlvbnMnLgotKEphbWVzIFZlZ2EsIDIwMTEgTWFyIDE3KQotCi1IaWdobGlnaHRpbmcgc3RvcHMgd29ya2luZyBhZnRlciBjaGFuZ2luZyBpdCBtYW55IHRpbWVzLiAgU2NyaXB0IHRvIHJlcHJvZHVjZQotaXQ6IFBhYmxvIENvbnRyZXJhcywgMjAxMCBPY3QgMTIgIFdpbmRvd3MgWFAgYW5kIDcuICBGb250IGlzIG5ldmVyIGZyZWVkPwotCi1BZnRlciBwYXRjaCA3LjMuMDk3IHN0aWxsIGdldCBFMTUuIChZdWtpaGlybyBOYWthZGFpcmEsIDIwMTEgSmFuIDE4KQotQWxzbyBmb3IgYW5vdGhlciBleGFtcGxlIChaeVgsIDIwMTEgSmFuIDI0KQotCi1CdWlsZCBwcm9ibGVtIHdpdGggc21hbGwgZmVhdHVyZXMgb24gTWFjIE9TIFggMTAuNi4gKFJhaW5lciwgMjAxMSBKYW4gMjQpCi0KLSIwZ0AkIiBwdXRzICddIG9uIGxhc3QgYnl0ZSBvZiBtdWx0aS1ieXRlLiAoWnlYLCAyMDExIEphbiAyMikKLQotRGVsZXRpbmcgYSBsaW5ld2lzZSBzZWxlY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlIGxlYXZlcwotYW4gZW1wdHkgbGluZS4gKEJlbiBTY2htaWR0LCAyMDExIE1hciAxNykKLVBhdGNoIGJ5IENocmlzdGlhbiBCcmFiYW5kdCwgMjAxMSBNYXIgMTkuCitQYXRjaCB0byByZWNvZ25pemUgbW9yZSBmaWxlcyBhcyBsb2cgZmlsZXMuIChNYXRoaWV1IFBhcmVudCwgMjAxMSBKYW4gMTQpCiAKIFR3byBwYXRjaGVzIGZvciB4eGQuIChGbG9yaWFuIFp1bWJpZWhsLCAyMDExIEphbiAxMSkKIFR3byB1cGRhdGVzIGZvciBzZWNvbmQgb25lIEphbiAxMi4KIAotUHJvYmxlbSB3aXRoICJzeW4gc3luYyBnb3VwaGVyZSIuIChHdXN0YXZvIE5pZW1leWVyLCAyMDExIEphbiAyNykKLQotTG9hZGluZyBhdXRvbG9hZCBzY3JpcHQgZXZlbiB3aGVuIHVzYWdlIGlzIGluc2lkZSAiaWYgMCIuIChDaHJpc3RpYW4gQnJhYmFuZHQsCi0yMDEwIERlYyAxOCkKK0dvIHRocm91Z2ggbmV3IGNvdmVyaXR5IHJlcG9ydHMuCiAKIFdoZW4gJ2NvbG9yY29sdW1uJyBpcyBzZXQgbG9jYWxseSB0byBhIHdpbmRvdywgIjpuZXciIG9wZW5zIGEgd2luZG93IHdpdGggdGhlCiBzYW1lIGhpZ2hsaWdodGluZyBidXQgJ2NvbG9yY29sdW1uJyBpcyBlbXB0eS4gKFR5cnUsIDIwMTAgTm92IDE1KQogUGF0Y2ggYnkgQ2hyaXN0aWFuIEJyYWJhbmR0LCAyMDExIEZlYiAxMyAoYnV0IG1vdmUgZnVydGhlciBkb3duKS4KIAotSW4gdGhlIHNhbmRib3ggaXQncyBub3QgYWxsb3dlZCB0byBkbyBtYW55IHRoaW5ncywgYnV0IGl0J3MgcG9zc2libGUgdG8gY2hhbmdlCi1vciBzZXQgdmFyaWFibGVzLiAgQWRkIGEgd2F5IHRvIHByZXZlbnQgdmFyaWFibGVzIGZyb20gYmVpbmcgY2hhbmdlZCBpbiB0aGUKLXNhbmRib3g/ICBFLmcuOiAiOnByb3RlY3QgZzpyZXN0b3JlX3NldHRpbmdzIi4KLQogUGF0Y2ggZm9yIGNvbmZpZ3VyZSByZWxhdGVkIHRvIFJ1Ynkgb24gTWFjIE9TIFguIChCam9ybiBXaW5ja2xlciwgMjAxMSBKYW4gMTQpCiAKLVBhdGNoIHRvIHJlY29nbml6ZSBtb3JlIGZpbGVzIGFzIGxvZyBmaWxlcy4gKE1hdGhpZXUgUGFyZW50LCAyMDExIEphbiAxNCkKLQogUGF0Y2ggdG8gc2V0IHY6cmVnaXN0ZXIgb24gc3RhcnR1cC4gKEluZ28gS2Fya2F0LCAyMDExIEphbiAxNikKIAogUGF0Y2ggdG8gc2V0IHY6cmVnaXN0ZXIgZGVmYXVsdCBkZXBlbmRpbmcgb24gInVubmFtZWQiIGluICdjbGlwYm9hcmQnLiAoSW5nbwpAQCAtMTcwLDI4ICs2Miw5IEBACiAKIFBhdGNoIGZvciBjbWRsaW5lIGNvbXBsZXRpb24gb2YgIjpsYW5nIi4gIChEb21pbmlxdWUgUGVsbGUsIDIwMTEgRmViIDUpCiAKLUdUSzogZHJhd2luZyBhIGRvdWJsZS13aWR0aCBjb21iaW5pbmcgY2hhcmFjdGVyIG92ZXIgc2luZ2xlLXdpZHRoIGNoYXJhY3RlcnMKLWRvZXNuJ3QgbG9vayByaWdodC4gKERvbWluaXF1ZSBQZWxsZSwgMjAxMCBBdWcgOCkKLQotR1RLOiB0ZWFyLW9mZiBtZW51IGRvZXMgbm90IHdvcmsuIChLdXJ0IFNvbm5lbm1vc2VyLCAyMDEwIE9jdCAyNSkKLQotV2luMzI6IHRlYXItb2ZmIG1lbnUgZG9lcyBub3Qgd29yayB3aGVuIG1lbnUgbGFuZ3VhZ2UgaXMgR2VybWFuLiAoTWFya3VzCi1Cb3NzbGVyLCAyMDExIE1hciAyKSAgRml4ZWQgYnkgNy4zLjA5NT8KLQogUGF0Y2ggZm9yIGFkZGluZyAncycgb3B0aW9uIHRvICdjaW5vJywgQysrIG5hbWVzcGFjZSBpbmRlbnRpbmcuIChLb25zdGFudGluCiBMZXBhLCAyMDExIEphbiAxOCkKIAotVmVyc2lvbiBvZiBuZXRiZWFucy5jIGZvciB1c2Ugd2l0aCBNYWNWaW0uIChLYXp1a2kgU2FrYW1vdG8sIDIwMTAgTm92IDE4KQotCi03LjMuMDE0IGNoYW5nZWQgaG93IGJhY2tzbGFzaCBhdCBlbmQgb2YgbGluZSB3b3JrcywgYnV0IHN0aWxsIGdldCBhIE5VTCB3aGVuCi10aGVyZSBpcyBvbmUgYmFja3NsYXNoLiAoUmF5IEZydXNoLCAyMDEwIE5vdiAxOCkgIFdoYXQgZG9lcyB0aGUgb3JpZ2luYWwgZXgKLWRvPwotCi0iOmZpbmQiIGNvbXBsZXRpb24gZG9lcyBub3QgZXNjYXBlIHNwYWNlIGluIGRpcmVjdG9yeSBuYW1lLiAoSXN6LCAyMDEwIE5vdiAyKQotCi1TZWFyY2hpbmcgbWl4ZWQgd2l0aCBWaXN1YWwgbW9kZSBkb2Vzbid0IHJlZHJhdyBwcm9wZXJseS4gKEphbWVzIFZlZ2EsIDIwMTAgTm92Ci0yMikKLQogUGF0Y2ggdG8gc3VwcG9ydCAiOiFzdGFydCAvYiBjbWQiLiAoWGFpemVrLCAyMDEwIERlYyAyMikKIAogUGF0Y2ggdG8gYnVpbGQgd2l0aCBHVEsgb24gTWFjLiAoQmVuIFNjaG1pZHQsIDIwMTEgSmFuIDE4KQpAQCAtMjA3LDYgKzgwLDEzNSBAQAogCiBQYXRjaCBmb3IgUHl0aG9uIDMgc3VwcG9ydC4gKGxpbHlkandnLCAyMDExIEZlYiAyNCkKIAorQnVpbGRpbmcgdGhlIE1pbmdXIHZlcnNpb24gd2l0aG91dCBjbGlwYm9hcmQgYnV0IHdpdGggbXVsdGktYnl0ZSBkb2Vzbid0Cit3b3JrLiAoQmlsbCBMYW0sIDIwMTAgU2VwIDE4KQorCitQYXRjaCBmb3IgaGFuZGxpbmcgb2YgTkwgaW4gc3Vic3RpdHV0ZSgpIHdpdGggXD0gZXhwcmVzc2lvbi4gKE1vdG95YSBLdXJvdHN1LAorMjAxMSBNYXIgMTYpICBVcGRhdGUgTWFyIDI0LgorCitQYXRjaCB0byBkaXNhbGxvdyBmb3JrKCkgd2hlbiBfX0FQUExFX18gaXMgZGVmaW5lZC4gKEhpc2FzaGkgVCBGdWppbmFrYSwgMjAxMAorTm92IDI1KQorCitHVEs6IFBhdGNoIHRvIGZpeCBtZW51IHBvcHBpbmcgZG93bi4gKEhvbmcgWHUsIDIwMTAgRGVjIDQsIERlYyA1KQorVXBkYXRlIDIwMTEgRmViIDMuCisKK1BhdGNoIHRvIHVzZSBwaXBlcyBvbiBXaW4zMi4gIChWaW5jZW50IEJlcnRob3V4LCAyMDExIEZlYiAyOCkKK1VwZGF0ZSBNYXIgMSB1c2luZyAnc2hlbGx0ZW1wJy4KKworImdoPERlbD4iIGRlbGV0ZXMgdGhlIGN1cnJlbnQgbGluZSwgZXhjZXB0IHdoZW4gaXQncyB0aGUgbGFzdCBsaW5lLgorSGludCBieSBDaHJpc3RpYW4gQnJhYmFuZHQsIDIwMTEgTWFyIDIyCisKK1RoZSA6eiBjb21tYW5kIGRvZXNuJ3Qgd29yayBleGFjdGx5IGFzIGl0IHNob3VsZC4gKENoYW5nWmh1byBDaGVuLCAyMDExIE1hciAyKQorQ29tcGFyZSB3aXRoIGhvdyBvbGQgVmkgd29ya3MgYW5kIHdpdGggcG9zaXggc3BlYy4gIHRlcm1pbmFsIGlzIDgwIHggMjQsCisnc2Nyb2xsJyBvcHRpb24gc2V0IHRvIDExLgorCisnY3Vyc29ybGluZScgaXMgZGlzcGxheWVkIHRvbyBzaG9ydCB3aGVuIHRoZXJlIGFyZSBjb25jZWFsZWQgY2hhcmFjdGVycyBhbmQKKydsaXN0JyBpcyBzZXQuICAoRGVubmlzIFByZWlzZXIpCitQYXRjaCA3LjMuMTE2IHdhcyB0aGUgd3Jvbmcgc29sdXRpb24uCisKK1doZW4gb3BlbmluZyBmaWxlIGZyb20gd2luZG93cyBleHBsb3JlciwgY2hhcmFjdGVycyBpbnNpZGUgW10gY2F1c2UKK3Byb2JsZW1zLCBldmVuIHRob3VnaCBkb3VibGUgcXVvdGVzIGFyZSB1c2VkLiAoTWFudWVsIFN0b2wsIDIwMTEgTWFyIDkpCisKK1BhdGNoIHRvIGNoYW5nZSB0aGUgbWVhbmluZyBvZiBcbiBpbiBzdWJzdGl0dXRlKCkuIChtb3RveWEga3Vyb3RzdSwgMjAxMSBNYXIgOCkKKworSGVscCBmaWxlIGZvbGRleHByIChaeVgpCisKK1N5bnRheCByZWdpb24gd2l0aCAnY29uY2VhbGVuZHMnIGFuZCBhICdjY2hhcicgdmFsdWUsICdjb25jZWFsbGV2ZWwnIHNldCB0byAyLAorb25seSBvbmUgb2YgdGhlIHR3byBlbmRzIGdldHMgdGhlIGNjaGFyIGRpc3BsYXllZC4gKEJyZXR0IFN0YWhsbWFuLCAyMDEwIEF1ZworMjEsIEJlbiBGcml0eiwgMjAxMCBTZXAgMTQpCisKK0J1ZyBpbiByZXBlYXRpbmcgVmlzdWFsICJ1Ii4gKExhd3JlbmNlIEtlc3RlbG9vdCwgMjAxMCBEZWMgMjApCisKK0N1cnNvckhvbGQgcmVwZWF0cyB0eXBlZCBrZXkgd2hlbiBpdCdzIHRoZSBzdGFydCBvZiBhIG1hcHBpbmcuCisoV2lsbCBHcmF5LCAyMDExIE1hciAyMykKKworV2luZG93cyBrZXlzIG5vdCBzZXQgcHJvcGVybHkgb24gV2luZG93cyA3PyAgKGNuY3liZXIsIDIwMTAgQXVnIDI2KQorCitUaGlzIGxpbmUgaGFuZ3MgVmltLCBiZWNhdXNlIG9mIHN5bnRheCBITDoKK2NhbGwgYXBwZW5kKGxpbmUsICJJTkZPICAuLi4uMTIuLi4uMTguLi4uMjQuLi4uMzAuLi4uMzYuLi4uNDIuLi4uNDguLi4uNTQuLi4uNjAuLi4uNjYuLi4uNzIuLi4uNzglJCIpCisKK1doZW4gdXNpbmcgYSBWaW0gc2VydmVyLCBhICMgaW4gdGhlIHBhdGggY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuCisoSmVmZiBMYW56YXJvdHRhLCAyMDExIEZlYiAxNykKKworQnVnOiBFNjg1IGVycm9yIGZvciBmdW5jX3VucmVmKCkuIChaeVgsIDIwMTAgQXVnIDUpCisKK1VzaW5nICI6YnJlYWsiIG9yIHNvbWV0aGluZyBlbHNlIHRoYXQgc3RvcHMgZXhlY3V0aW5nIGNvbW1hbmRzIGluc2lkZSBhCisiOmZpbmFsbHkiIGRvZXMgbm90IHJldGhyb3cgYSBwcmV2aW91c2x5IHVuY2F1Z2h0IGV4Y2VwdGlvbi4gKFp5WCwgMjAxMCBPY3QKKzE1KQorCitWaW0gdXNpbmcgbG90cyBvZiBtZW1vcnkgd2hlbiBqb2luaW5nIGxpbmVzLiAoSm9obiBMaXR0bGUsIDIwMTAgRGVjIDMpCisKK09uIDY0IGJpdCBNUy1XaW5kb3dzICJsb25nIiBpcyBvbmx5IDMyIGJpdHMsIGJ1dCB3ZSBzb21ldGltZXMgbmVlZCB0byBzdG9yZSBhCis2NCBiaXRzIHZhbHVlLiAgQ2hhbmdlIGFsbCBudW1iZXIgb3B0aW9ucyB0byB1c2UgbnJvcHRfVCBhbmQgZGVmaW5lIGl0IHRvIHRoZQorcmlnaHQgdHlwZS4KKworc3RyaW5nKCkgY2FuJ3QgcGFyc2UgYmFjayAiaW5mIiBhbmQgIm5hbiIuICBGaXggZG9jdW1lbnRhdGlvbiBvciBmaXggY29kZT8KKyhaeVgsIDIwMTAgQXVnIDIzKQorCitXaGVuIGRvaW5nICJyZWRpciA9PiBzOmZvbyIgaW4gYSBzY3JpcHQgYW5kIHRoZW4gInJlZGlyIEVORCIgc29tZXdoZXJlIGVsc2UKKyhlLmcuIGluIGEgZnVuY3Rpb24pIGl0IGNhbid0IGZpbmQgczpmb28uCisKK21hcGFyZygpIGRvZXMgbm90IHNob3cgdGhlIDxzY3JpcHQ+IGZsYWcuICBXaGVuIHRlbXBvcmFyaWx5IGNoYW5naW5nIGEKK21hcHBpbmcsIGhvdyB0byByZXN0b3JlIHRoZSBzY3JpcHQgSUQ/CisKK1BhdGNoIHRvIGZpeCBcJVYgaXRlbSBpbiByZWdleHAuIChDaHJpc3RpYW4gQnJhYmFuZHQsIDIwMTAgTm92IDgpCitVcGRhdGUgTm92IDE5LiAgSmFtZXMgVmVnYTogc3RpbGwgbm90IHJpZ2h0LiAgQ2hyaXN0aWFuOiBpdCdzIGRpZmZpY3VsdC4KKworUGF0Y2ggdG8gYWRkIHVwIHRvIDk5IG1hdGNoIGdyb3Vwcy4gKENocmlzdGlhbiBCcmFiYW5kdCwgMjAxMCBEZWMgMjIpCitBbHNvIGFkZCBuYW1lZCBncm91cHM6IFwle25hbWV9KHJlKSAgYW5kIFwle25hbWV9ZworCitCdWcgaW4gdHJ5L2NhdGNoOiByZXR1cm4gd2l0aCBpbnZhbGlkIGNvbXBhcmUgdGhyb3dzIGVycm9yIHRoYXQgaXNuJ3QgY2F1Z2h0LgorKFp5WCwgMjAxMSBKYW4gMjYpCisKK0hpZ2hsaWdodGluZyBzdG9wcyB3b3JraW5nIGFmdGVyIGNoYW5naW5nIGl0IG1hbnkgdGltZXMuICBTY3JpcHQgdG8gcmVwcm9kdWNlCitpdDogUGFibG8gQ29udHJlcmFzLCAyMDEwIE9jdCAxMiAgV2luZG93cyBYUCBhbmQgNy4gIEZvbnQgaXMgbmV2ZXIgZnJlZWQ/CisKK0FmdGVyIHBhdGNoIDcuMy4wOTcgc3RpbGwgZ2V0IEUxNS4gKFl1a2loaXJvIE5ha2FkYWlyYSwgMjAxMSBKYW4gMTgpCitBbHNvIGZvciBhbm90aGVyIGV4YW1wbGUgKFp5WCwgMjAxMSBKYW4gMjQpCisKK0J1aWxkIHByb2JsZW0gd2l0aCBzbWFsbCBmZWF0dXJlcyBvbiBNYWMgT1MgWCAxMC42LiAoUmFpbmVyLCAyMDExIEphbiAyNCkKKworIjBnQCQiIHB1dHMgJ10gb24gbGFzdCBieXRlIG9mIG11bHRpLWJ5dGUuIChaeVgsIDIwMTEgSmFuIDIyKQorCitEZWxldGluZyBhIGxpbmV3aXNlIHNlbGVjdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGZpbGUgbGVhdmVzCithbiBlbXB0eSBsaW5lLiAoQmVuIFNjaG1pZHQsIDIwMTEgTWFyIDE3KQorUGF0Y2ggYnkgQ2hyaXN0aWFuIEJyYWJhbmR0LCAyMDExIE1hciAxOS4KKworUGF0Y2ggdG8gc3VwcG9ydCBzb3J0aW5nIG9uIGZsb2F0aW5nIHBvaW50IG51bWJlci4gIChBbGV4IEpha3VzaGV2LCAyMDEwIE9jdAorMzApCisKK1doZW4gYSBzY3JpcHQgY29udGFpbnMgInJlZGlyID0+IHM6Zm9vIiBidXQgZG9lc24ndCBlbmQgcmVkaXJlY3Rpb24sIGEKK2ZvbGxvd2luZyAicmVkaXIiIGNvbW1hbmQgZ2l2ZXMgYW4gZXJyb3IgZm9yIG5vdCBiZWluZyBhYmxlIHRvIGFjY2VzcyBzOmZvby4KKyhaeVgsIDIwMTEgTWFyIDI3KQorCitQcm9ibGVtIHdpdGggInN5biBzeW5jIGdvdXBoZXJlIi4gKEd1c3Rhdm8gTmllbWV5ZXIsIDIwMTEgSmFuIDI3KQorCitMb2FkaW5nIGF1dG9sb2FkIHNjcmlwdCBldmVuIHdoZW4gdXNhZ2UgaXMgaW5zaWRlICJpZiAwIi4gKENocmlzdGlhbiBCcmFiYW5kdCwKKzIwMTAgRGVjIDE4KQorCitJbiB0aGUgc2FuZGJveCBpdCdzIG5vdCBhbGxvd2VkIHRvIGRvIG1hbnkgdGhpbmdzLCBidXQgaXQncyBwb3NzaWJsZSB0byBjaGFuZ2UKK29yIHNldCB2YXJpYWJsZXMuICBBZGQgYSB3YXkgdG8gcHJldmVudCB2YXJpYWJsZXMgZnJvbSBiZWluZyBjaGFuZ2VkIGluIHRoZQorc2FuZGJveD8gIEUuZy46ICI6cHJvdGVjdCBnOnJlc3RvcmVfc2V0dGluZ3MiLgorCitHVEs6IGRyYXdpbmcgYSBkb3VibGUtd2lkdGggY29tYmluaW5nIGNoYXJhY3RlciBvdmVyIHNpbmdsZS13aWR0aCBjaGFyYWN0ZXJzCitkb2Vzbid0IGxvb2sgcmlnaHQuIChEb21pbmlxdWUgUGVsbGUsIDIwMTAgQXVnIDgpCisKK0dUSzogdGVhci1vZmYgbWVudSBkb2VzIG5vdCB3b3JrLiAoS3VydCBTb25uZW5tb3NlciwgMjAxMCBPY3QgMjUpCisKK1dpbjMyOiB0ZWFyLW9mZiBtZW51IGRvZXMgbm90IHdvcmsgd2hlbiBtZW51IGxhbmd1YWdlIGlzIEdlcm1hbi4gKE1hcmt1cworQm9zc2xlciwgMjAxMSBNYXIgMikgIEZpeGVkIGJ5IDcuMy4wOTU/CisKK1ZlcnNpb24gb2YgbmV0YmVhbnMuYyBmb3IgdXNlIHdpdGggTWFjVmltLiAoS2F6dWtpIFNha2Ftb3RvLCAyMDEwIE5vdiAxOCkKKworNy4zLjAxNCBjaGFuZ2VkIGhvdyBiYWNrc2xhc2ggYXQgZW5kIG9mIGxpbmUgd29ya3MsIGJ1dCBzdGlsbCBnZXQgYSBOVUwgd2hlbgordGhlcmUgaXMgb25lIGJhY2tzbGFzaC4gKFJheSBGcnVzaCwgMjAxMCBOb3YgMTgpICBXaGF0IGRvZXMgdGhlIG9yaWdpbmFsIGV4Citkbz8KKworIjpmaW5kIiBjb21wbGV0aW9uIGRvZXMgbm90IGVzY2FwZSBzcGFjZSBpbiBkaXJlY3RvcnkgbmFtZS4gKElzeiwgMjAxMCBOb3YgMikKKworU2VhcmNoaW5nIG1peGVkIHdpdGggVmlzdWFsIG1vZGUgZG9lc24ndCByZWRyYXcgcHJvcGVybHkuIChKYW1lcyBWZWdhLCAyMDEwIE5vdgorMjIpCisKIE5ldyBlc3BlcmFudG8gc3BlbGwgZmlsZSBjYW4ndCBiZSBwcm9jZXNzZWQuIChEb21pbmlxdWUgUGVsbGUsIDIwMTEgSmFuIDMwKQogLSBtb3ZlIGNvbXBmbGFncyB0byBzZXBhcmF0ZSBncm93YXJyYXk/CiAtIGluc3RlYWQgb2YgYSByZWdleHAgdXNlIGEgaGFzaHRhYmxlLiAgRXhwYW5kICc/JywgJyoiLCAnKycuICBXaGF0IHdvdWxkIGJlCkBAIC0yMzUsMTUgKzIzNyw2IEBACiBTaW5jZSBwYXRjaCA3LjIuNDYgWWFua3JpbmcgcGx1Z2luIGhhcyBiZWNvbWUgdmVyeSBzbG93LCBldmVudHVhbGx5IG1ha2UgVmltCiBjcmFzaD8gKFJhaXdpbCwgMjAxMCBOb3YgMTcpCiAKLVBhdGNoIHRvIGRpc2FsbG93IGZvcmsoKSB3aGVuIF9fQVBQTEVfXyBpcyBkZWZpbmVkLiAoSGlzYXNoaSBUIEZ1amluYWthLCAyMDEwCi1Ob3YgMjUpCi0KLUdUSzogUGF0Y2ggdG8gZml4IG1lbnUgcG9wcGluZyBkb3duLiAoSG9uZyBYdSwgMjAxMCBEZWMgNCwgRGVjIDUpCi1VcGRhdGUgMjAxMSBGZWIgMy4KLQotUGF0Y2ggdG8gdXNlIHBpcGVzIG9uIFdpbjMyLiAgKFZpbmNlbnQgQmVydGhvdXgsIDIwMTEgRmViIDI4KQotVXBkYXRlIE1hciAxIHVzaW5nICdzaGVsbHRlbXAnLgotCiBQeXRob246IEFkZGluZyBsaW5lIHRvIGJ1ZmZlciBvdGhlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBkb2Vzbid0IHdvcmsKIGNvcnJlY3RseS4gKFJvemJ1am5paywgMjAxMCBEZWMgMTkpCiAKQEAgLTI1NSw5ICsyNDgsNiBAQAogUHJvYmxlbSBwcm9kdWNpbmcgdGFncyBmaWxlIHdoZW4gaGVicmV3LmZyeCBpcyBwcmVzZW50LiAgSXQgaGFzIGEgQk9NLgogUmVzdWx0cyBpbiBFNjcwLiAoVG9ueSBNZWNoZWx5bmNrLCAyMDEwIE1heSAyKQogCi1QYXRjaCB0byBzdXBwb3J0IHNvcnRpbmcgb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiAgKEFsZXggSmFrdXNoZXYsIDIwMTAgT2N0Ci0zMCkKLQogUnVieTogIjpydWJ5IHByaW50ICRidWZmZXIubnVtYmVyIiByZXR1cm5zIHplcm8uCiAKIHNldHBvcygpIGRvZXMgbm90IHJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIDpub3JtYWwuIChUeXJ1LCAyMDEwIEF1ZyAxMSkKQEAgLTg5Niw2ICs4ODYsOSBAQAogIjpjY2wiIGNsb3NlcyB0aGUgcXVpY2tmaXggd2luZG93LiAgQWRkICI6aGNsb3NlIi4gKENocmlzIEdhYWwpCiBQYXRjaCBmb3IgOmhlbHBjbG9zZSwgQ2hyaXN0aWFuIEJyYWJhbmR0LCAyMDEwIFNlcCA2LgogCitQYXRjaCBmb3IgOmxtYWtlIG5vdCB1cGRhdGluZyB0aGUgcXVpY2tmaXggd2luZG93IHRpdGxlLiAoTGVjaCBMb3JlbnMsIDIwMTEKK01hciAyNikKKwogV2hlbiAnZGlmZm9wdCcgaGFzICJjb250ZXh0OjAiIGEgc2luZ2xlIGRlbGV0ZWQgbGluZSBjYXVzZXMgdHdvIGZvbGRzIHRvIG1lcmdlCiBhbmQgbWVzcyB1cCBzeW5jaW5nLiAoQXVzdGluIEplbm5pbmdzLCAyMDA4IEphbiAzMSkKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9maWxldHlwZS52aW0gYi9ydW50aW1lL2ZpbGV0eXBlLnZpbQppbmRleCA1MDkwOTI1Li4wZDc4YTk0IDEwMDY0NAotLS0gYS9ydW50aW1lL2ZpbGV0eXBlLnZpbQorKysgYi9ydW50aW1lL2ZpbGV0eXBlLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIHN1cHBvcnQgZmlsZSB0byBkZXRlY3QgZmlsZSB0eXBlcwogIgogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAxMSBNYXIgMjIKKyIgTGFzdCBDaGFuZ2U6CTIwMTEgQXByIDAxCiAKICIgTGlzdGVuIHZlcnkgY2FyZWZ1bGx5LCBJIHdpbGwgc2F5IHRoaXMgb25seSBvbmNlCiBpZiBleGlzdHMoImRpZF9sb2FkX2ZpbGV0eXBlcyIpCkBAIC03NSw3ICs3NSw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hYXAJCQlzZXRmIGFhcAogCiAiIEEycHMgcHJpbnRpbmcgdXRpbGl0eQotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGV0Yy9hMnBzLmNmZyxldGMvYTJwcy8qLmNmZyxhMnBzcmMsLmEycHNyYyBzZXRmIGEycHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9hMnBzLmNmZywqL2V0Yy9hMnBzLyouY2ZnLGEycHNyYywuYTJwc3JjIHNldGYgYTJwcwogCiAiIEFCQUIvNAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYWJhcAkJCXNldGYgYWJhcApAQCAtMTEwLDggKzExMCw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgcHJvZnRwZC5jb25mKgkJY2FsbCBzOlN0YXJTZXRmKCdhcGFjaGVzdHlsZScpCiAKICIgQXBhY2hlIGNvbmZpZyBmaWxlCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmh0YWNjZXNzLC9ldGMvaHR0cGQvKi5jb25mCQkgc2V0ZiBhcGFjaGUKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBodHRwZC5jb25mKixzcm0uY29uZiosYWNjZXNzLmNvbmYqLGFwYWNoZS5jb25mKixhcGFjaGUyLmNvbmYqLC9ldGMvYXBhY2hlMi8qLmNvbmYqLC9ldGMvaHR0cGQvY29uZi5kLyouY29uZiogY2FsbCBzOlN0YXJTZXRmKCdhcGFjaGUnKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5odGFjY2VzcywqL2V0Yy9odHRwZC8qLmNvbmYJCXNldGYgYXBhY2hlCiAKICIgWEE2NSBNT1M2NTEwIGNyb3NzIGFzc2VtYmxlcgogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYTY1CQkJc2V0ZiBhNjUKQEAgLTEyNCw3ICsxMjMsNyBAQAogCVwgaWYgZXhwYW5kKCI8YWZpbGU+IikgIX4/ICdNYWtlZmlsZS5hbVw+JyB8IHNldGYgZWxmIHwgZW5kaWYKIAogIiBBTFNBIGNvbmZpZ3VyYXRpb24KLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB+Ly5hc291bmRyYywvdXNyL3NoYXJlL2Fsc2EvYWxzYS5jb25mLC9ldGMvYXNvdW5kLmNvbmYJc2V0ZiBhbHNhY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIH4vLmFzb3VuZHJjLC91c3Ivc2hhcmUvYWxzYS9hbHNhLmNvbmYsKi9ldGMvYXNvdW5kLmNvbmYJc2V0ZiBhbHNhY29uZgogCiAiIEFyYyBNYWNybyBMYW5ndWFnZQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYW1sCQkJc2V0ZiBhbWwKQEAgLTE1Nyw3ICsxNTYsNyBAQAogCVwgZW5kaWYKIAogIiBHcnViIChtdXN0IGJlIGJlZm9yZSBjYXRjaCAqLmxzdCkKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvYm9vdC9ncnViL21lbnUubHN0LC9ib290L2dydWIvZ3J1Yi5jb25mLC9ldGMvZ3J1Yi5jb25mCXNldGYgZ3J1YgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ib290L2dydWIvbWVudS5sc3QsL2Jvb3QvZ3J1Yi9ncnViLmNvbmYsKi9ldGMvZ3J1Yi5jb25mCXNldGYgZ3J1YgogCiAiIEFzc2VtYmx5IChhbGwga2luZHMpCiAiICoubHN0IGlzIG5vdCBwdXJlIGFzc2VtYmx5LCBpdCBoYXMgdHdvIGV4dHJhIGNvbHVtbnMgKGFkZHJlc3MsIGJ5dGUgY29kZXMpCkBAIC0yOTYsNyArMjk1LDcgQEAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJsCQkJc2V0ZiBibGFuawogCiAiIEJsa2lkIGNhY2hlIGZpbGUKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2Jsa2lkLnRhYiwvZXRjL2Jsa2lkLnRhYi5vbGQgICBzZXRmIHhtbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2Jsa2lkLnRhYiwqL2V0Yy9ibGtpZC50YWIub2xkICAgc2V0ZiB4bWwKIAogIiBDIG9yIGxwYwogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYwkJCWNhbGwgczpGVGxwYygpCkBAIC0zMzEsNyArMzMwLDcgQEAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRvYwkJCXNldGYgY2RydG9jCiAKICIgQ2RyZGFvIGNvbmZpZwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGV0Yy9jZHJkYW8uY29uZixldGMvZGVmYXVsdHMvY2RyZGFvLGV0Yy9kZWZhdWx0L2NkcmRhbyx+Ly5jZHJkYW8JCQkJCQlzZXRmIGNkcmRhb2NvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9jZHJkYW8uY29uZiwqL2V0Yy9kZWZhdWx0cy9jZHJkYW8sKi9ldGMvZGVmYXVsdC9jZHJkYW8sfi8uY2RyZGFvCXNldGYgY2RyZGFvY29uZgogCiAiIENmZW5naW5lCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgY2ZlbmdpbmUuY29uZgkJc2V0ZiBjZmVuZ2luZQpAQCAtNTUzLDcgKzU1Miw4IEBACiAJXHwgZW5kaWYKIAogIiBEZWJpYW4gU291cmNlcy5saXN0Ci1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9hcHQvc291cmNlcy5saXN0CXNldGYgZGVic291cmNlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2FwdC9zb3VyY2VzLmxpc3QJCXNldGYgZGVic291cmNlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2FwdC9zb3VyY2VzLmxpc3QuZC8qLmxpc3QJc2V0ZiBkZWJzb3VyY2VzCiAKICIgRGVueSBob3N0cwogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGRlbnlob3N0cy5jb25mCQlzZXRmIGRlbnlob3N0cwpAQCAtNTg2LDcgKzU4Niw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kaWZmLCoucmVqLCoucGF0Y2gJc2V0ZiBkaWZmCiAKICIgRGlyY29sb3JzCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmRpcl9jb2xvcnMsL2V0Yy9ESVJfQ09MT1JTCXNldGYgZGlyY29sb3JzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmRpcl9jb2xvcnMsLmRpcmNvbG9ycywqL2V0Yy9ESVJfQ09MT1JTCXNldGYgZGlyY29sb3JzCiAKICIgRGl2YSAod2l0aCBTa2lsbCkgb3IgSW5zdGFsbFNoaWVsZAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucnVsCkBAIC03NjcsNyArNzY3LDcgQEAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmdzcAkJCXNldGYgZ3NwCiAKICIgR3JvdXAgZmlsZQotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvZ3JvdXAsL2V0Yy9ncm91cC0sL2V0Yy9ncm91cC5lZGl0LC9ldGMvZ3NoYWRvdywvZXRjL2dzaGFkb3ctLC9ldGMvZ3NoYWRvdy5lZGl0LC92YXIvYmFja3Vwcy9ncm91cC5iYWssL3Zhci9iYWNrdXBzL2dzaGFkb3cuYmFrICBzZXRmIGdyb3VwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvZ3JvdXAsKi9ldGMvZ3JvdXAtLCovZXRjL2dyb3VwLmVkaXQsKi9ldGMvZ3NoYWRvdywqL2V0Yy9nc2hhZG93LSwqL2V0Yy9nc2hhZG93LmVkaXQsKi92YXIvYmFja3Vwcy9ncm91cC5iYWssKi92YXIvYmFja3Vwcy9nc2hhZG93LmJhayAgc2V0ZiBncm91cAogCiAiIEdUSyBSQwogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5ndGtyYyxndGtyYwkJc2V0ZiBndGtyYwpAQCAtODI2LDEwICs4MjYsMTAgQEAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRtcGwJCQlzZXRmIGh0bWxjaGVldGFoCiAKICIgSG9zdCBjb25maWcKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2hvc3QuY29uZgkJc2V0ZiBob3N0Y29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2hvc3QuY29uZgkJc2V0ZiBob3N0Y29uZgogCiAiIEhvc3RzIGFjY2VzcwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvaG9zdHMuYWxsb3csL2V0Yy9ob3N0cy5kZW55ICBzZXRmIGhvc3RzYWNjZXNzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvaG9zdHMuYWxsb3csKi9ldGMvaG9zdHMuZGVueSAgc2V0ZiBob3N0c2FjY2VzcwogCiAiIEh5cGVyIEJ1aWxkZXIKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmhiCQkJc2V0ZiBoYgpAQCAtODg5LDcgKzg4OSw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pbmYsKi5JTkYJCXNldGYgaW5mb3JtCiAKICIgSW5pdG5nCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9pbml0bmcvKiovKi5pLCouaWkJc2V0ZiBpbml0bmcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9pbml0bmcvKiovKi5pLCouaWkJc2V0ZiBpbml0bmcKIAogIiBJcGZpbHRlcgogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGlwZi5jb25mLGlwZjYuY29uZixpcGYucnVsZXMJc2V0ZiBpcGZpbHRlcgpAQCAtOTUzLDcgKzk1Myw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5sYXR0ZSwqLmx0ZQkJc2V0ZiBsYXR0ZQogCiAiIExpbWl0cwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbGltaXRzCQlzZXRmIGxpbWl0cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2xpbWl0cywqL2V0Yy8qbGltaXRzLmNvbmYsKi9ldGMvKmxpbWl0cy5kLyouY29uZglzZXRmIGxpbWl0cwogCiAiIExhbWJkYVByb2xvZyAoKi5tb2QgdG9vLCBzZWUgTW9kc2ltKQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2lnCQkJc2V0ZiBscHJvbG9nCkBAIC05NjgsMTAgKzk2OCwxMCBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGV4LCoubAkJCXNldGYgbGV4CiAKICIgTGliYW8KLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2xpYmFvLmNvbmYsKi8ubGliYW8Jc2V0ZiBsaWJhbworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2xpYmFvLmNvbmYsKi8ubGliYW8Jc2V0ZiBsaWJhbwogCiAiIExpYnNlbnNvcnMKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3NlbnNvcnMuY29uZgkJc2V0ZiBzZW5zb3JzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvc2Vuc29ycy5jb25mLCovZXRjL3NlbnNvcnMzLmNvbmYJc2V0ZiBzZW5zb3JzCiAKICIgTEZUUAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGxmdHAuY29uZiwubGZ0cHJjLCpsZnRwL3JjCXNldGYgbGZ0cApAQCAtMTAwMiwxMCArMTAwMiwxMCBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovTGl0ZVN0ZXAvKi8qLnJjCQlzZXRmIGxpdGVzdGVwCiAKICIgTG9naW4gYWNjZXNzCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9sb2dpbi5hY2Nlc3MJCXNldGYgbG9naW5hY2Nlc3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9sb2dpbi5hY2Nlc3MJc2V0ZiBsb2dpbmFjY2VzcwogCiAiIExvZ2luIGRlZnMKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2xvZ2luLmRlZnMJCXNldGYgbG9naW5kZWZzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvbG9naW4uZGVmcwkJc2V0ZiBsb2dpbmRlZnMKIAogIiBMb2d0YWxrCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5sZ3QJCQlzZXRmIGxvZ3RhbGsKQEAgLTEwMzYsNyArMTAzNiw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc25kLlxkXCssLmxldHRlciwubGV0dGVyLlxkXCssLmZvbGxvd3VwLC5hcnRpY2xlLC5hcnRpY2xlLlxkXCsscGljby5cZFwrLG11dHR7bmcsfS0qLVx3XCssbXV0dFtbOmFsbnVtOl1fLV1cezZcfSxhZVxkXCsudHh0LC90bXAvU0xSTlswLTlBLVouXVwrLCouZW1sIHNldGYgbWFpbAogCiAiIE1haWwgYWxpYXNlcwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbWFpbC9hbGlhc2VzLC9ldGMvYWxpYXNlcwlzZXRmIG1haWxhbGlhc2VzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvbWFpbC9hbGlhc2VzLCovZXRjL2FsaWFzZXMJc2V0ZiBtYWlsYWxpYXNlcwogCiAiIE1haWxjYXAgY29uZmlndXJhdGlvbiBmaWxlCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLm1haWxjYXAsbWFpbGNhcAkJc2V0ZiBtYWlsY2FwCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWFuCQkJc2V0ZiBtYW4KIAogIiBNYW4gY29uZmlnCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9tYW4uY29uZixtYW4uY29uZmlnCXNldGYgbWFuY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL21hbi5jb25mLG1hbi5jb25maWcJc2V0ZiBtYW5jb25mCiAKICIgTWFwbGUgVgogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXYsKi5tcGwsKi5td3MJCXNldGYgbWFwbGUKQEAgLTExNTksOCArMTE1OSw4IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tb28JCQlzZXRmIG1vbwogCiAiIE1vZGNvbmYKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL21vZHVsZXMuY29uZiwvZXRjL2NvbmYubW9kdWxlcwlzZXRmIG1vZGNvbmYKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL21vZHV0aWxzLyoKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9tb2R1bGVzLmNvbmYsKi9ldGMvbW9kdWxlcywqL2V0Yy9jb25mLm1vZHVsZXMJc2V0ZiBtb2Rjb25mCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvbW9kdXRpbHMvKgogCVwgaWYgZXhlY3V0YWJsZShleHBhbmQoIjxhZmlsZT4iKSkgIT0gMQogCVx8ICBjYWxsIHM6U3RhclNldGYoJ21vZGNvbmYnKQogCVx8ZW5kaWYKQEAgLTExOTMsNyArMTE5Myw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgTXV0dHtuZyx9cmMJCXNldGYgbXV0dHJjCiAKICIgTmFubwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbmFub3JjLC5uYW5vcmMJc2V0ZiBuYW5vcmMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9uYW5vcmMsLm5hbm9yYwlzZXRmIG5hbm9yYwogCiAiIE5hc3RyYW4gaW5wdXQvRE1BUAogImF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRhdAkJCXNldGYgbmFzdHJhbgpAQCAtMTI2OSwxMyArMTI2OSwxMyBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHBmLmNvbmYJCQlzZXRmIHBmCiAKICIgUGFtIGNvbmYKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3BhbS5jb25mCQlzZXRmIHBhbWNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9wYW0uY29uZgkJc2V0ZiBwYW1jb25mCiAKICIgUEFwcAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGFwcCwqLnB4bWwsKi5weHNsCXNldGYgcGFwcAogCiAiIFBhc3N3b3JkIGZpbGUKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3Bhc3N3ZCwvZXRjL3Bhc3N3ZC0sL2V0Yy9wYXNzd2QuZWRpdCwvZXRjL3NoYWRvdywvZXRjL3NoYWRvdy0sL3Zhci9iYWNrdXBzL3Bhc3N3ZC5iYWssL3Zhci9iYWNrdXBzL3NoYWRvdy5iYWsgc2V0ZiBwYXNzd2QKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9wYXNzd2QsKi9ldGMvcGFzc3dkLSwqL2V0Yy9wYXNzd2QuZWRpdCwqL2V0Yy9zaGFkb3csKi9ldGMvc2hhZG93LSwqL2V0Yy9zaGFkb3cuZWRpdCwqL3Zhci9iYWNrdXBzL3Bhc3N3ZC5iYWssKi92YXIvYmFja3Vwcy9zaGFkb3cuYmFrIHNldGYgcGFzc3dkCiAKICIgUGFzY2FsIChhbHNvICoucCkKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBhcwkJCXNldGYgcGFzY2FsCkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucG1sCQkJc2V0ZiBwcm9tZWxhCiAKICIgUHJvdG9jb2xzCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9wcm90b2NvbHMJCXNldGYgcHJvdG9jb2xzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvcHJvdG9jb2xzCQlzZXRmIHByb3RvY29scwogCiAiIFB5cmV4CiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5weXgsKi5weGQJCXNldGYgcHlyZXgKQEAgLTE2ODksMTkgKzE2ODksMTkgQEAKIGVuZGZ1bmMKIAogIiBTZXJ2aWNlcwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvc2VydmljZXMJCXNldGYgc2VydmljZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9zZXJ2aWNlcwkJc2V0ZiBzZXJ2aWNlcwogCiAiIFNlcnZpY2UgTG9jYXRpb24gY29uZmlnCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zbHAuY29uZgkJc2V0ZiBzbHBjb25mCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvc2xwLmNvbmYJCXNldGYgc2xwY29uZgogCiAiIFNlcnZpY2UgTG9jYXRpb24gcmVnaXN0cmF0aW9uCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zbHAucmVnCQlzZXRmIHNscHJlZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL3NscC5yZWcJCXNldGYgc2xwcmVnCiAKICIgU2VydmljZSBMb2NhdGlvbiBTUEkKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3NscC5zcGkJCXNldGYgc2xwc3BpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvc2xwLnNwaQkJc2V0ZiBzbHBzcGkKIAogIiBTZXRzZXJpYWwgY29uZmlnCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zZXJpYWwuY29uZgkJc2V0ZiBzZXRzZXJpYWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9zZXJpYWwuY29uZgkJc2V0ZiBzZXRzZXJpYWwKIAogIiBTR01MCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zZ20sKi5zZ21sCkBAIC0xNzI4LDcgKzE3MjgsNyBAQAogIiBHZW50b28gZWJ1aWxkcyBhcmUgYWN0dWFsbHkgYmFzaCBzY3JpcHRzCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmJhc2hyYyosYmFzaHJjLGJhc2guYmFzaHJjLC5iYXNoX3Byb2ZpbGUqLC5iYXNoX2xvZ291dCosKi5iYXNoLCouZWJ1aWxkIGNhbGwgU2V0RmlsZVR5cGVTSCgiYmFzaCIpCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmtzaHJjKiwqLmtzaCBjYWxsIFNldEZpbGVUeXBlU0goImtzaCIpCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9wcm9maWxlLC5wcm9maWxlKiwqLnNoLCouZW52IGNhbGwgU2V0RmlsZVR5cGVTSChnZXRsaW5lKDEpKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL3Byb2ZpbGUsLnByb2ZpbGUqLCouc2gsKi5lbnYgY2FsbCBTZXRGaWxlVHlwZVNIKGdldGxpbmUoMSkpCiAKICIgQWxzbyBjYWxsZWQgZnJvbSBzY3JpcHRzLnZpbS4KIGZ1bmMhIFNldEZpbGVUeXBlU0gobmFtZSkKQEAgLTE4MTEsNyArMTgxMSw3IEBACiBlbmRmdW5jCiAKICIgWi1TaGVsbCBzY3JpcHQKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuenByb2ZpbGUsL2V0Yy96cHJvZmlsZSwuemZiZm1hcmtzICBzZXRmIHpzaAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC56cHJvZmlsZSwqL2V0Yy96cHJvZmlsZSwuemZiZm1hcmtzICBzZXRmIHpzaAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC56c2gqLC56bG9nKiwuemNvbXBkdW1wKiAgY2FsbCBzOlN0YXJTZXRmKCd6c2gnKQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouenNoCQkJc2V0ZiB6c2gKIApAQCAtMTg4Miw3ICsxODgyLDcgQEAKIGxldCBzOmZ0X3J1bGVzX3VkZXZfcnVsZXNfcGF0dGVybiA9ICdeXHMqXGN1ZGV2X3J1bGVzXHMqPVxzKiJcKFteIl1cey0xLH1cKS8qIi4qJwogZnVuYyEgczpGVFJ1bGVzKCkKICAgbGV0IHBhdGggPSBleHBhbmQoJzxhbWF0Y2g+OnAnKQotICBpZiBwYXRoID1+ICdeL2V0Yy91ZGV2L1wlKHJ1bGVzXC5kL1wpXD0uKlwucnVsZXMkJworICBpZiBwYXRoID1+ICdeL1woZXRjL3VkZXYvXCUocnVsZXNcLmQvXClcPS4qXC5ydWxlc1x8bGliL3VkZXYvXCUocnVsZXNcLmQvXClcPS4qXC5ydWxlc1wpJCcKICAgICBzZXRmIHVkZXZydWxlcwogICAgIHJldHVybgogICBlbmRpZgpAQCAtMTk3MCwxMyArMTk3MCwxMyBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY20JCQlzZXRmIHZvc2NtCiAKICIgU3lzY3RsCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zeXNjdGwuY29uZgkJc2V0ZiBzeXNjdGwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9zeXNjdGwuY29uZiwqL2V0Yy9zeXNjdGwuZC8qLmNvbmYJc2V0ZiBzeXNjdGwKIAogIiBTeW5vcHN5cyBEZXNpZ24gQ29uc3RyYWludHMKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNkYwkJCXNldGYgc2RjCiAKICIgU3Vkb2VycwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvc3Vkb2VycyxzdWRvZXJzLnRtcAlzZXRmIHN1ZG9lcnMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9zdWRvZXJzLHN1ZG9lcnMudG1wCXNldGYgc3Vkb2VycwogCiAiIFNWRyAoU2NhbGFibGUgVmVjdG9yIEdyYXBoaWNzKQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3ZnCQkJc2V0ZiBzdmcKQEAgLTIxMjIsMjMgKzIxMjIsMjMgQEAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnVpdCwqLnVpbAkJc2V0ZiB1aWwKIAogIiBVZGV2IGNvbmYKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3VkZXYvdWRldi5jb25mCXNldGYgdWRldmNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy91ZGV2L3VkZXYuY29uZglzZXRmIHVkZXZjb25mCiAKICIgVWRldiBwZXJtaXNzaW9ucwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvdWRldi9wZXJtaXNzaW9ucy5kLyoucGVybWlzc2lvbnMgc2V0ZiB1ZGV2cGVybQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL3VkZXYvcGVybWlzc2lvbnMuZC8qLnBlcm1pc3Npb25zIHNldGYgdWRldnBlcm0KICIKICIgVWRldiBzeW1saW5rcyBjb25maWcKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3VkZXYvY2RzeW1saW5rcy5jb25mCXNldGYgc2gKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy91ZGV2L2Nkc3ltbGlua3MuY29uZglzZXRmIHNoCiAKICIgVW5yZWFsU2NyaXB0CiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi51YwkJCXNldGYgdWMKIAogIiBVcGRhdGVkYgotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvdXBkYXRlZGIuY29uZglzZXRmIHVwZGF0ZWRiCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvdXBkYXRlZGIuY29uZglzZXRmIHVwZGF0ZWRiCiAKICIgVXBzdGFydCAoaW5pdCg4KSkgY29uZmlnIGZpbGVzCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvaW5pdC8qLmNvbmYsfi8uaW5pdC8qLmNvbmYgICAgICAgICAgc2V0ZiB1cHN0YXJ0Ci1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvaW5pdC8qLm92ZXJyaWRlLH4vLmluaXQvKi5vdmVycmlkZSAgc2V0ZiB1cHN0YXJ0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvaW5pdC8qLmNvbmYsKi8uaW5pdC8qLmNvbmYgICAgICAgICAgc2V0ZiB1cHN0YXJ0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMvaW5pdC8qLm92ZXJyaWRlLCovLmluaXQvKi5vdmVycmlkZSAgc2V0ZiB1cHN0YXJ0CiAKICIgVmVyYQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudnIsKi52cmksKi52cmgJCXNldGYgdmVyYQpAQCAtMjIzMywxMiArMjIzMywxNSBAQAogCVwgICBsZXQgYjp4Zjg2Y194ZnJlZTg2X3ZlcnNpb24gPSAzIHwKIAlcIGVuZGlmIHwKIAlcIHNldGYgeGY4NmNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL3hvcmcuY29uZi5kLyouY29uZgorCVwgbGV0IGI6eGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uID0gNCB8CisJXCBzZXRmIHhmODZjb25mCiAKICIgWG9yZyBjb25maWcKLWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB4b3JnLmNvbmYseG9yZy5jb25mLTQJbGV0IGI6eGY4NmNfeGZyZWU4Nl92ZXJzaW9uID0gNCB8IHNldGYgeGY4NmNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB4b3JnLmNvbmYseG9yZy5jb25mLTQJbGV0IGI6eGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uID0gNCB8IHNldGYgeGY4NmNvbmYKIAogIiBYaW5ldGQgY29uZgotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMveGluZXRkLmNvbmYJCXNldGYgeGluZXRkCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMveGluZXRkLmNvbmYJCXNldGYgeGluZXRkCiAKICIgWFMgUGVybCBleHRlbnNpb24gaW50ZXJmYWNlIGxhbmd1YWdlCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54cwkJCXNldGYgeHMKQEAgLTIyODUsNyArMjI4OCw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50cG0JCQlzZXRmIHhtbAogCiAiIFhkZyBtZW51cwotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMveGRnL21lbnVzLyoubWVudQlzZXRmIHhtbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL3hkZy9tZW51cy8qLm1lbnUJc2V0ZiB4bWwKIAogIiBBVEkgZ3JhcGhpY3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24KIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBmZ2xyeHJjCQkJc2V0ZiB4bWwKQEAgLTIzNjksOCArMjM3Miw5IEBACiAiIE1vc3Qgb2YgdGhlc2Ugc2hvdWxkIGNhbGwgczpTdGFyU2V0ZigpIHRvIGF2b2lkIG5hbWVzIGVuZGluZyBpbiAuZ3ogYW5kIHRoZQogIiBsaWtlIGFyZSB1c2VkLgogCi0iIE1vcmUgQXBhY2hlIGZpbGVzLgotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvYXBhY2hlMi9jb25mLiovKiwvZXRjL2FwYWNoZTIvc2l0ZXMtKi8qLC9ldGMvYXBhY2hlMi9tb2RzLSovKgkJY2FsbCBzOlN0YXJTZXRmKCdhcGFjaGUnKQorIiBNb3JlIEFwYWNoZSBjb25maWcgZmlsZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBhY2Nlc3MuY29uZiosYXBhY2hlLmNvbmYqLGFwYWNoZTIuY29uZiosaHR0cGQuY29uZiosc3JtLmNvbmYqCWNhbGwgczpTdGFyU2V0ZignYXBhY2hlJykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9hcGFjaGUyLyouY29uZiosKi9ldGMvYXBhY2hlMi9jb25mLiovKiwqL2V0Yy9hcGFjaGUyL21vZHMtKi8qLCovZXRjL2FwYWNoZTIvc2l0ZXMtKi8qLCovZXRjL2h0dHBkL2NvbmYuZC8qLmNvbmYqCQljYWxsIHM6U3RhclNldGYoJ2FwYWNoZScpCiAKICIgQXN0ZXJpc2sgY29uZmlnIGZpbGUKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqYXN0ZXJpc2svKi5jb25mKgkJY2FsbCBzOlN0YXJTZXRmKCdhc3RlcmlzaycpCkBAIC0yMzkxLDEwICsyMzk1LDcgQEAKIAlcfGVuZGlmCiAKICIgQ3JvbnRhYgotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGNyb250YWIsY3JvbnRhYi4qLC9ldGMvY3Jvbi5kLyoJCWNhbGwgczpTdGFyU2V0ZignY3JvbnRhYicpCi0KLSIgRGViaWFuIFNvdXJjZXMubGlzdAotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kLyoJY2FsbCBzOlN0YXJTZXRmKCdkZWJzb3VyY2VzJykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBjcm9udGFiLGNyb250YWIuKiwqL2V0Yy9jcm9uLmQvKgkJY2FsbCBzOlN0YXJTZXRmKCdjcm9udGFiJykKIAogIiBEcmFjdWxhCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgZHJhYy4qCQkJY2FsbCBzOlN0YXJTZXRmKCdkcmFjdWxhJykKQEAgLTI0MjksNyArMjQzMCw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgS2NvbmZpZy4qCQkJY2FsbCBzOlN0YXJTZXRmKCdrY29uZmlnJykKIAogIiBMb2djaGVjawotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbG9nY2hlY2svKi5kKi8qCWNhbGwgczpTdGFyU2V0ZignbG9nY2hlY2snKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL2xvZ2NoZWNrLyouZCovKgljYWxsIHM6U3RhclNldGYoJ2xvZ2NoZWNrJykKIAogIiBNYWtlZmlsZQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFttTV1ha2VmaWxlKgkJY2FsbCBzOlN0YXJTZXRmKCdtYWtlJykKQEAgLTI0NDEsNyArMjQ0Miw3IEBACiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgbXV0dFtbOmFsbnVtOl0uXy1dXHs2XH0Jc2V0ZiBtYWlsCiAKICIgTW9kY29uZgotYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbW9kcHJvYmUuKgkJY2FsbCBzOlN0YXJTZXRmKCdtb2Rjb25mJykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9tb2Rwcm9iZS4qCQljYWxsIHM6U3RhclNldGYoJ21vZGNvbmYnKQogCiAiIE11dHQgc2V0dXAgZmlsZQogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5tdXR0e25nLH1yYyosKi8ubXV0dHtuZyx9L211dHR7bmcsfXJjKgljYWxsIHM6U3RhclNldGYoJ211dHRyYycpCkBAIC0yNDUxLDcgKzI0NTIsNyBAQAogYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHRtYWMuKgkJCWNhbGwgczpTdGFyU2V0ZignbnJvZmYnKQogCiAiIFBhbSBjb25mCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9wYW0uZC8qCQljYWxsIHM6U3RhclNldGYoJ3BhbWNvbmYnKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovZXRjL3BhbS5kLyoJCWNhbGwgczpTdGFyU2V0ZigncGFtY29uZicpCiAKICIgUHJpbnRjYXAgYW5kIFRlcm1jYXAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqcHJpbnRjYXAqCkBAIC0yNDc0LDEwICsyNDc1LDEwIEBACiAKICIgWEZyZWU4NiBjb25maWcKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBYRjg2Q29uZmlnLTQqCi0JXCBsZXQgYjp4Zjg2Y194ZnJlZTg2X3ZlcnNpb24gPSA0IHwgY2FsbCBzOlN0YXJTZXRmKCd4Zjg2Y29uZicpCisJXCBsZXQgYjp4Zjg2Y29uZl94ZnJlZTg2X3ZlcnNpb24gPSA0IHwgY2FsbCBzOlN0YXJTZXRmKCd4Zjg2Y29uZicpCiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgWEY4NkNvbmZpZyoKIAlcIGlmIGdldGxpbmUoMSkgPX4gJ1w8WENvbmZpZ3VyYXRvclw+JwotCVx8ICBsZXQgYjp4Zjg2Y194ZnJlZTg2X3ZlcnNpb24gPSAzCisJXHwgIGxldCBiOnhmODZjb25mX3hmcmVlODZfdmVyc2lvbiA9IDMKIAlcfGVuZGlmCiAJXHxjYWxsIHM6U3RhclNldGYoJ3hmODZjb25mJykKIApAQCAtMjQ4NSw3ICsyNDg2LDcgQEAKIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqeG1vZG1hcCoJCQljYWxsIHM6U3RhclNldGYoJ3htb2RtYXAnKQogCiAiIFhpbmV0ZCBjb25mCi1hdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy94aW5ldGQuZC8qCQljYWxsIHM6U3RhclNldGYoJ3hpbmV0ZCcpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9ldGMveGluZXRkLmQvKgkJY2FsbCBzOlN0YXJTZXRmKCd4aW5ldGQnKQogCiAiIFotU2hlbGwgc2NyaXB0CiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgenNoKix6bG9nKgkJY2FsbCBzOlN0YXJTZXRmKCd6c2gnKQpkaWZmIC0tZ2l0IGEvcnVudGltZS9mdHBsdWdpbi9zcWwudmltIGIvcnVudGltZS9mdHBsdWdpbi9zcWwudmltCmluZGV4IGNiYzhkY2MuLjdjNjg2NGEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZnRwbHVnaW4vc3FsLnZpbQorKysgYi9ydW50aW1lL2Z0cGx1Z2luL3NxbC52aW0KQEAgLTEsOCArMSw4IEBACiAiIFNRTCBmaWxldHlwZSBwbHVnaW4gZmlsZQogIiBMYW5ndWFnZTogICAgU1FMIChDb21tb24gZm9yIE9yYWNsZSwgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIsIFN5YmFzZSkKLSIgVmVyc2lvbjogICAgIDcuMAotIiBNYWludGFpbmVyOiAgRGF2aWQgRmlzaGJ1cm4gPGZpc2hidXJuIGF0IGlhbnl3aGVyZSBkb3QgY29tPgotIiBMYXN0IENoYW5nZTogMjAxMCBKdW4gMTEKKyIgVmVyc2lvbjogICAgIDguMAorIiBNYWludGFpbmVyOiAgRGF2aWQgRmlzaGJ1cm4gPGRmaXNoYnVybiBkb3QgdmltIGF0IGdtYWlsIGRvdCBjb20+CisiIExhc3QgQ2hhbmdlOiAyMDExIEFwciAwMQogIiBEb3dubG9hZDogICAgaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvc2NyaXB0LnBocD9zY3JpcHRfaWQ9NDU0CiAKICIgRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgdXNlOgpAQCAtMzYsNiArMzYsMTAgQEAKICIKICIgSGlzdG9yeQogIgorIiBWZXJzaW9uIDguMAorIiAKKyIgTkY6IEltcHJvdmVkIHRoZSBtYXRjaGl0IHBsdWdpbiByZWdleCAoVGFsZWspCisiCiAiIFZlcnNpb24gNy4wCiAiIAogIiBORjogQ2FsbHMgdGhlIHNxbGNvbXBsZXRlI1Jlc2V0Q2FjaGVTeW50YXgoKSBmdW5jdGlvbiB3aGVuIGNhbGxpbmcKQEAgLTI5MCw2ICsyOTQsNyBAQAogICAgICIgV0hFTiBPVEhFUlMgVEhFTgogICAgICIKICAgICAiIGNyZWF0ZVsgb3IgcmVwbGFjZV0gcHJvY2VkdXJlfGZ1bmN0aW9ufGV2ZW50CisgICAgICAgICAgICAgICAgIiBcICdeXHMqXDxcJShkb1x8Zm9yXHx3aGlsZVx8bG9vcFwpXD4uKjonLgogCiAgICAgbGV0IGI6bWF0Y2hfd29yZHMgPQogCQlcICdcPGJlZ2luXD46XDxlbmRcPlxXKiQsJy4KQEAgLTI5OCwxMiArMzAzLDkgQEAKICAgICAgICAgICAgICAgICBcICdcPGVsc2lmXD5cfFw8ZWxzZWlmXD5cfFw8ZWxzZVw+OicuCiAgICAgICAgICAgICAgICAgXCAnXDxlbmRcc1wraWZcPiwnLgogICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBcICdcPGRvXD5cfCcuCi0gICAgICAgICAgICAgICAgXCAnXDx3aGlsZVw+XHwnLgotICAgICAgICAgICAgICAgIFwgJ1wlKCcgLiBzOm5vdGVuZCAuICdcPGxvb3BcPlwpXHwnLgotICAgICAgICAgICAgICAgIFwgJ1wlKCcgLiBzOm5vdGVuZCAuICdcPGZvclw+XCk6Jy4KLSAgICAgICAgICAgICAgICBcICdcPGV4aXRcPlx8XDxsZWF2ZVw+XHxcPGJyZWFrXD5cfFw8Y29udGludWVcPjonLgotICAgICAgICAgICAgICAgIFwgJ1wlKFw8ZW5kXHNcK1wlKGZvclx8bG9vcFw+XClcKVx8XDxkb2VuZFw+LCcuCisgICAgICAgICAgICAgICAgXCAnXCheXHMqXClcQDw9XChcPFwlKGRvXHxmb3JcfHdoaWxlXHxsb29wXClcPi4qXCk6Jy4KKyAgICAgICAgICAgICAgICBcICdcJShcPGV4aXRcPlx8XDxsZWF2ZVw+XHxcPGJyZWFrXD5cfFw8Y29udGludWVcPlwpOicuCisgICAgICAgICAgICAgICAgXCAnXCUoXDxkb2VuZFw+XHxcJShcPGVuZFxzXCtcJShmb3JcfHdoaWxlXHxsb29wXD5cKVwpXCksJy4KICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgXCAnXCUoJy4gczpub3RlbmQgLiAnXDxjYXNlXD5cKTonLgogICAgICAgICAgICAgICAgIFwgJ1wlKCcuczp3aGVuX25vX21hdGNoZWRfb3Jfb3RoZXJzLidcKTonLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9pbmRlbnQvcGFzY2FsLnZpbSBiL3J1bnRpbWUvaW5kZW50L3Bhc2NhbC52aW0KaW5kZXggYjFhNjUyZC4uNmRkMzAzMCAxMDA2NDQKLS0tIGEvcnVudGltZS9pbmRlbnQvcGFzY2FsLnZpbQorKysgYi9ydW50aW1lL2luZGVudC9wYXNjYWwudmltCkBAIC0yLDcgKzIsMTEgQEAKICIgTGFuZ3VhZ2U6ICAgIFBhc2NhbAogIiBNYWludGFpbmVyOiAgTmVpbCBDYXJ0ZXIgPG4uY2FydGVyQHN3YW5zZWEuYWMudWs+CiAiIENyZWF0ZWQ6ICAgICAyMDA0IEp1bCAxMwotIiBMYXN0IENoYW5nZTogMjAwNSBKdWwgMDUKKyIgTGFzdCBDaGFuZ2U6IDIwMTEgQXByIDAxCisiCisiIFRoaXMgaXMgdmVyc2lvbiAyLjAsIGEgY29tcGxldGUgcmV3cml0ZS4KKyIKKyIgRm9yIGZ1cnRoZXIgZG9jdW1lbnRhdGlvbiwgc2VlIGh0dHA6Ly9wc3kuc3dhbnNlYS5hYy51ay9zdGFmZi9jYXJ0ZXIvdmltLwogCiAKIGlmIGV4aXN0cygiYjpkaWRfaW5kZW50IikKQEAgLTM4LDcgKzQyLDE1IEBACiBlbmRmdW5jdGlvbgogCiAKK2Z1bmN0aW9uISBzOlB1cmlmeUNvZGUoIGxpbmVfbnVtICkKKwkiIFN0cmlwIGFueSB0cmFpbGluZyBjb21tZW50cyBhbmQgd2hpdGVzcGFjZQorCWxldCBwdXJlbGluZSA9ICdUT0RPJworCXJldHVybiBwdXJlbGluZQorZW5kZnVuY3Rpb24KKworCiBmdW5jdGlvbiEgR2V0UGFzY2FsSW5kZW50KCBsaW5lX251bSApCisKIAkiIExpbmUgMCBhbHdheXMgZ29lcyBhdCBjb2x1bW4gMAogCWlmIGE6bGluZV9udW0gPT0gMAogCQlyZXR1cm4gMApAQCAtNDYsMTI4ICs1OCwxNzEgQEAKIAogCWxldCB0aGlzX2NvZGVsaW5lID0gZ2V0bGluZSggYTpsaW5lX251bSApCiAKLQkiIElmIGluIHRoZSBtaWRkbGUgb2YgYSB0aHJlZS1wYXJ0IGNvbW1lbnQKKworCSIgU0FNRSBJTkRFTlQKKworCSIgTWlkZGxlIG9mIGEgdGhyZWUtcGFydCBjb21tZW50CiAJaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKlwqJwotCQlyZXR1cm4gaW5kZW50KCBhOmxpbmVfbnVtICkKKwkJcmV0dXJuIGluZGVudCggYTpsaW5lX251bSAtIDEpCiAJZW5kaWYKIAorCisJIiBDT0xVTU4gMSBBTFdBWVMKKworCSIgTGFzdCBsaW5lIG9mIHRoZSBwcm9ncmFtCisJaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKmVuZFwuJworCQlyZXR1cm4gMAorCWVuZGlmCisKKwkiIENvbXBpbGVyIGRpcmVjdGl2ZXMsIGFsbG93aW5nICIoKiIgYW5kICJ7IgorCSJpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqXCh7XHwoXCpcKSRcKElGREVGXHxJRk5ERUZcfEVMU0VcfEVORElGXCknCisJaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKlwoe1x8KFwqXClcJCcKKwkJcmV0dXJuIDAKKwllbmRpZgorCisJIiBzZWN0aW9uIGhlYWRlcnMKKwlpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqXChwcm9ncmFtXHxwcm9jZWR1cmVcfGZ1bmN0aW9uXHx0eXBlXClcPicKKwkJcmV0dXJuIDAKKwllbmRpZgorCisJIiBTdWJyb3V0aW5lIHNlcGFyYXRvcnMsIGxpbmVzIGVuZGluZyB3aXRoICJjb25zdCIgb3IgInZhciIKKwlpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqXCgoXCpcIF9cK1wgXCopXHxcKGNvbnN0XHx2YXJcKVwpJCcKKwkJcmV0dXJuIDAKKwllbmRpZgorCisKKwkiIE9USEVSV0lTRSwgV0UgTkVFRCBUTyBMT09LIEZVUlRIRVIgQkFDSy4uLgorCiAJbGV0IHByZXZfY29kZWxpbmVfbnVtID0gczpHZXRQcmV2Tm9uQ29tbWVudExpbmVOdW0oIGE6bGluZV9udW0gKQogCWxldCBwcmV2X2NvZGVsaW5lID0gZ2V0bGluZSggcHJldl9jb2RlbGluZV9udW0gKQogCWxldCBpbmRudCA9IGluZGVudCggcHJldl9jb2RlbGluZV9udW0gKQogCi0JIiBDb21waWxlciBkaXJlY3RpdmVzIHNob3VsZCBhbHdheXMgZ28gaW4gY29sdW1uIHplcm8uCi0JaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKntcKFwkSUZERUZcfFwkRUxTRVx8XCRFTkRJRlwpJwotCQlyZXR1cm4gMAorCisJIiBJTkNSRUFTRSBJTkRFTlQKKworCSIgSWYgdGhlIFBSRVZJT1VTIExJTkUgZW5kZWQgaW4gdGhlc2UgaXRlbXMsIGFsd2F5cyBpbmRlbnQKKwlpZiBwcmV2X2NvZGVsaW5lID1+ICdcPFwodHlwZVx8Y29uc3RcfHZhclwpJCcKKwkJcmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKIAllbmRpZgogCi0JIiBUaGVzZSBpdGVtcyBoYXZlIG5vdGhpbmcgYmVmb3JlIG9yIGFmdGVyIChub3QgZXZlbiBhIGNvbW1lbnQpLCBhbmQKLQkiIGdvIG9uIGNvbHVtbiAwLiBNYWtlIHN1cmUgdGhhdCB0aGUgXlxzKiBpcyBmb2xsb3dlZCBieSBcKCB0byBtYWtlCi0JIiBPUnMgd29yayBwcm9wZXJseSwgYW5kIG5vdCBpbmNsdWRlIHRoZSBzdGFydCBvZiBsaW5lICh0aGlzIG11c3QKLQkiIGFsd2F5cyBhcHBlYXIpLgotCSIgVGhlIGJyYWNrZXRlZCBleHByZXNzaW9uIHdpdGggdGhlIHVuZGVybGluZSBpcyBhIHJvdXRpbmUKLQkiIHNlcGFyYXRvci4gVGhpcyBpcyBvbmUgY2FzZSB3aGVyZSB3ZSBkbyBpbmRlbnQgY29tbWVudCBsaW5lcy4KLQlpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqXCgoXCpcIF9cK1wgXCopXHxcPFwoY29uc3RcfHZhclwpXD5cKSQnCi0JCXJldHVybiAwCi0JZW5kaWYKLQotCSIgVGhlc2UgaXRlbXMgbWF5IGhhdmUgdGV4dCBhZnRlciB0aGVtLCBhbmQgZ28gb24gY29sdW1uIDAgKGluIG1vc3QKLQkiIGNhc2VzKS4gVGhlIHByb2JsZW0gaXMgdGhhdCAiZnVuY3Rpb24iIGFuZCAicHJvY2VkdXJlIiBrZXl3b3JkcwotCSIgc2hvdWxkIGJlIGluZGVudGVkIGlmIHdpdGhpbiBhIGNsYXNzIGRlY2xhcmF0aW9uLgotCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcPFwocHJvZ3JhbVx8dHlwZVx8dXNlc1x8cHJvY2VkdXJlXHxmdW5jdGlvblwpXD4nCi0JCXJldHVybiAwCi0JZW5kaWYKLQotCSIgQkVHSU4KLQkiIElmIHRoZSBiZWdpbiBkb2VzIG5vdCBjb21lIGFmdGVyICJpZiIsICJmb3IiLCBvciAiZWxzZSIsIHRoZW4gaXQKLQkiIGdvZXMgaW4gY29sdW1uIDAKLQlpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqYmVnaW5cPicgJiYgcHJldl9jb2RlbGluZSAhfiAnXlxzKlw8XChpZlx8Zm9yXHxlbHNlXClcPicKLQkJcmV0dXJuIDAKLQllbmRpZgotCi0JIiBUaGVzZSBrZXl3b3JkcyBhcmUgaW5kZW50ZWQgb25jZSBvbmx5LgotCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcPFwocHJpdmF0ZVwpXD4nCi0JCXJldHVybiAmc2hpZnR3aWR0aAotCWVuZGlmCi0KLQkiIElmIHRoZSBQUkVWSU9VUyBMSU5FIGNvbnRhaW5lZCB0aGVzZSBpdGVtcywgdGhlIGN1cnJlbnQgbGluZSBpcwotCSIgYWx3YXlzIGluZGVudGVkIG9uY2UuCi0JaWYgcHJldl9jb2RlbGluZSA9fiAnXlxzKlw8XCh0eXBlXHx1c2VzXClcPicKLQkJcmV0dXJuICZzaGlmdHdpZHRoCi0JZW5kaWYKLQotCSIgVGhlc2Uga2V5d29yZHMgYXJlIGluZGVudGVkIG9uY2Ugb25seS4gUG9zc2libHkgc3Vycm91bmRlZCBieQotCSIgb3RoZXIgY2hhcnMuCi0JaWYgdGhpc19jb2RlbGluZSA9fiAnXi5cK1w8XChvYmplY3RcfHJlY29yZFwpXD4nCi0JCXJldHVybiAmc2hpZnR3aWR0aAotCWVuZGlmCi0KLQkiIElmIHRoZSBwcmV2aW91cyBsaW5lIHdhcyBpbmRlbnRpbmcuLi4KLQlpZiBwcmV2X2NvZGVsaW5lID1+ICdeXHMqXDxcKGZvclx8aWZcfGNhc2VcfGVsc2VcfGVuZFwgZWxzZVwpXD4nCi0JCSIgdGhlbiBpbmRlbnQuCi0JCWxldCBpbmRudCA9IGluZG50ICsgJnNoaWZ0d2lkdGgKLQkJIiBCVVQuLi4gaWYgdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBtdWx0aXN0YXRlbWVudCBibG9jayB0aGVuIHdlCi0JCSIgbmVlZCB0byBhbGlnbiB0aGUgYmVnaW4gd2l0aCB0aGUgcHJldmlvdXMgbGluZS4KLQkJaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKmJlZ2luXD4nCi0JCQlyZXR1cm4gaW5kbnQgLSAmc2hpZnR3aWR0aAotCQllbmRpZgotCi0JCSIgV2UgYWxzbyBuZWVkIHRvIGtlZXAgdGhlIGluZGVudGF0aW9uIGxldmVsIGNvbnN0YW50IGlmIHRoZQotCQkiIHdob2xlIGlmLXRoZW4gc3RhdGVtZW50IHdhcyBvbiBvbmUgbGluZS4KLQkJaWYgcHJldl9jb2RlbGluZSA9fiAnXDx0aGVuXD4uXCsnCi0JCQlsZXQgaW5kbnQgPSBpbmRudCAtICZzaGlmdHdpZHRoCi0JCWVuZGlmCi0JZW5kaWYKLQotCSIgUFJFVklPVVMtTElORSBCRUdJTgotCSIgSWYgdGhlIHByZXZpb3VzIGxpbmUgd2FzIGFuIGluZGVudGluZyBrZXl3b3JkIHRoZW4gaW5kZW50IG9uY2UuLi4KLQlpZiBwcmV2X2NvZGVsaW5lID1+ICdeXHMqXDxcKGNvbnN0XHx2YXJcfGJlZ2luXHxyZXBlYXRcfHByaXZhdGVcKVw+JwotCQkiIEJ1dCBvbmx5IGlmIHRoaXMgaXMgYW5vdGhlciB2YXIgaW4gYSBsaXN0LgotCQlpZiB0aGlzX2NvZGVsaW5lICF+ICdeXHMqdmFyXD4nCisJaWYgcHJldl9jb2RlbGluZSA9fiAnXDxyZXBlYXQkJworCQlpZiB0aGlzX2NvZGVsaW5lICF+ICdeXHMqdW50aWxcPicKIAkJCXJldHVybiBpbmRudCArICZzaGlmdHdpZHRoCisJCWVsc2UKKwkJCXJldHVybiBpbmRudAogCQllbmRpZgogCWVuZGlmCiAKLQkiIFBSRVZJT1VTLUxJTkUgQkVHSU4KLQkiIEluZGVudCBjb2RlIGFmdGVyIGEgY2FzZSBzdGF0ZW1lbnQgYmVnaW4KLQlpZiBwcmV2X2NvZGVsaW5lID1+ICdcOlwgYmVnaW5cPicKKwlpZiBwcmV2X2NvZGVsaW5lID1+ICdcPFwoYmVnaW5cfHJlY29yZFwpJCcKKwkJaWYgdGhpc19jb2RlbGluZSAhfiAnXlxzKmVuZFw+JworCQkJcmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKKwkJZWxzZQorCQkJcmV0dXJuIGluZG50CisJCWVuZGlmCisJZW5kaWYKKworCSIgSWYgdGhlIFBSRVZJT1VTIExJTkUgZW5kZWQgd2l0aCB0aGVzZSBpdGVtcywgaW5kZW50IGlmIG5vdAorCSIgZm9sbG93ZWQgYnkgImJlZ2luIgorCWlmIHByZXZfY29kZWxpbmUgPX4gJ1w8XChcfGVsc2VcfHRoZW5cfGRvXCkkJyB8fCBwcmV2X2NvZGVsaW5lID1+ICc6JCcKKwkJaWYgdGhpc19jb2RlbGluZSAhfiAnXlxzKmJlZ2luXD4nCisJCQlyZXR1cm4gaW5kbnQgKyAmc2hpZnR3aWR0aAorCQllbHNlCisJCQkiIElmIGl0IGRvZXMgc3RhcnQgd2l0aCAiYmVnaW4iIHRoZW4ga2VlcCB0aGUgc2FtZSBpbmRlbnQKKwkJCSJyZXR1cm4gaW5kbnQgKyAmc2hpZnR3aWR0aAorCQkJcmV0dXJuIGluZG50CisJCWVuZGlmCisJZW5kaWYKKworCSIgSW5zaWRlIGEgcGFyYW1ldGVyIGxpc3QgKGkuZS4gYSAiKCIgd2l0aG91dCBhICIpIikuID8/Pz8gQ29uc2lkZXJzCisJIiBvbmx5IHRoZSBsaW5lIGJlZm9yZSB0aGUgY3VycmVudCBvbmUuIFRPRE86IEdldCBpdCB3b3JraW5nIGZvcgorCSIgcGFyYW1ldGVyIGxpc3RzIGxvbmdlciB0aGFuIHR3byBsaW5lcy4KKwlpZiBwcmV2X2NvZGVsaW5lID1+ICcoW14pXVwrJCcKIAkJcmV0dXJuIGluZG50ICsgJnNoaWZ0d2lkdGgKIAllbmRpZgogCi0JIiBUaGVzZSB3b3JkcyBtYXkgaGF2ZSB0ZXh0IGJlZm9yZSB0aGVtIG9uIHRoZSBsaW5lIChoZW5jZSB0aGUgLiopCi0JIiBidXQgYXJlIGZvbGxvd2VkIGJ5IG5vdGhpbmcuIEFsd2F5cyBpbmRlbnQgb25jZSBvbmx5LgotCWlmIHByZXZfY29kZWxpbmUgPX4gJ15cKC4qXHxccypcKVw8XChvYmplY3RcfHJlY29yZFwpXD4kJwotCQlyZXR1cm4gaW5kbnQgKyAmc2hpZnR3aWR0aAotCWVuZGlmCiAKLQkiIElmIHdlIGp1c3QgY2xvc2VkIGEgYnJhY2tldCB0aGF0IHN0YXJ0ZWQgb24gYSBwcmV2aW91cyBsaW5lLCB0aGVuCi0JIiB1bmluZGVudC4gQnV0IGRvbid0IHJldHVybiB5ZXQgLS0gd2UgbmVlZCB0byBjaGVjayBmb3IgZnVydGhlcgotCSIgdW5pbmRlbnRhdGlvbiAoZm9yIGVuZC91bnRpbC9lbHNlKQotCWlmIHByZXZfY29kZWxpbmUgPX4gJ15bXihdKlteKl0pJwotCQlsZXQgaW5kbnQgPSBpbmRudCAtICZzaGlmdHdpZHRoCi0JZW5kaWYKKwkiIERFQ1JFQVNFIElOREVOVAogCi0JIiBBdCB0aGUgZW5kIG9mIGEgYmxvY2ssIHdlIGhhdmUgdG8gdW5pbmRlbnQgYm90aCB0aGUgY3VycmVudCBsaW5lCi0JIiAodGhlICJlbmQiIGZvciBpbnN0YW5jZSkgYW5kIHRoZSBuZXdseS1jcmVhdGVkIGxpbmUuCi0JaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKlw8XChlbmRcfHVudGlsXHxlbHNlXClcPicKKwkiIExpbmVzIHN0YXJ0aW5nIHdpdGggImVsc2UiLCBidXQgbm90IGZvbGxvd2luZyBsaW5lIGVuZGluZyB3aXRoCisJIiAiZW5kIi4KKwlpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqZWxzZVw+JyAmJiBwcmV2X2NvZGVsaW5lICF+ICdcPGVuZCQnCiAJCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoCiAJZW5kaWYKIAotCSIgSWYgd2UgaGF2ZSBvcGVuZWQgYSBicmFja2V0IGFuZCBpdCBjb250aW51ZXMgb3ZlciBvbmUgbGluZSwKLQkiIHRoZW4gaW5kZW50IG9uY2UuCi0JIgotCSIgUkUgPSBhbiBvcGVuaW5nIGJyYWNrZXQgZm9sbG93ZWQgYnkgYW55IGFtb3VudCBvZiBhbnl0aGluZyBvdGhlcgotCSIgdGhhbiBhIGNsb3NpbmcgYnJhY2tldCBhbmQgdGhlbiB0aGUgZW5kLW9mLWxpbmUuCi0JIgotCSIgSWYgd2UgZGlkbid0IGluY2x1ZGUgdGhlIGVuZCBvZiBsaW5lLCB0aGlzIFJFIHdvdWxkIG1hdGNoIGV2ZW4KLQkiIGNsb3NlZCBicmFja2V0cywgc2luY2UgaXQgd291bGQgbWF0Y2ggZXZlcnl0aGluZyB1cCB0byB0aGUgY2xvc2luZwotCSIgYnJhY2tldC4KLQkiCi0JIiBUaGlzIHRlc3QgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBoYW5kbGUgYnJhY2tldHMgaW5zaWRlIHN0cmluZ3Mgb3IKLQkiIGNvbW1lbnRzLgotCWlmIHByZXZfY29kZWxpbmUgPX4gJyhbXipdXD1bXildKiQnCisJIiBMaW5lcyBhZnRlciBhIHNpbmdsZS1zdGF0ZW1lbnQgYnJhbmNoL2xvb3AuCisJIiBUd28gbGluZXMgYmVmb3JlIGVuZGVkIGluICJ0aGVuIiwgImVsc2UiLCBvciAiZG8iCisJIiBQcmV2aW91cyBsaW5lIGRpZG4ndCBlbmQgaW4gImJlZ2luIgorCWxldCBwcmV2Ml9jb2RlbGluZV9udW0gPSBzOkdldFByZXZOb25Db21tZW50TGluZU51bSggcHJldl9jb2RlbGluZV9udW0gKQorCWxldCBwcmV2Ml9jb2RlbGluZSA9IGdldGxpbmUoIHByZXYyX2NvZGVsaW5lX251bSApCisJaWYgcHJldjJfY29kZWxpbmUgPX4gJ1w8XCh0aGVuXHxlbHNlXHxkb1wpJCcgJiYgcHJldl9jb2RlbGluZSAhfiAnXDxiZWdpbiQnCisJCSIgSWYgdGhlIG5leHQgY29kZSBsaW5lIGFmdGVyIGEgc2luZ2xlIHN0YXRlbWVudCBicmFuY2gvbG9vcAorCQkiIHN0YXJ0cyB3aXRoICJlbmQiLCAiZXhjZXB0IiBvciAiZmluYWxseSIsIHdlIG5lZWQgYW4KKwkJIiBhZGRpdGlvbmFsIHVuaW5kZW50YXRpb24uCisJCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKGVuZDtcfGV4Y2VwdFx8ZmluYWxseVx8XCkkJworCQkJIiBOb3RlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGZyb20gaGVyZS4KKwkJCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoIC0gJnNoaWZ0d2lkdGgKKwkJZW5kaWYKKwkJcmV0dXJuIGluZG50IC0gJnNoaWZ0d2lkdGgKKwllbmRpZgorCisJIiBMaW5lcyBzdGFydGluZyB3aXRoICJ1bnRpbCIgb3IgImVuZCIuIFRoaXMgcnVsZSBtdXN0IGJlIG92ZXJyaWRkZW4KKwkiIGJ5IHRoZSBvbmUgZm9yICJlbmQiIGFmdGVyIGEgc2luZ2xlLXN0YXRlbWVudCBicmFuY2gvbG9vcC4gSW4KKwkiIG90aGVyIHdvcmRzIHRoYXQgcnVsZSBzaG91bGQgY29tZSBiZWZvcmUgdGhpcyBvbmUuCisJaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKlwoZW5kXHx1bnRpbFwpXD4nCisJCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoCisJZW5kaWYKKworCisJIiBNSVNDRUxMQU5FT1VTIFRISU5HUyBUTyBDQVRDSAorCisJIiBNb3N0ICJiZWdpbiJzIHdpbGwgaGF2ZSBiZWVuIGhhbmRsZWQgYnkgbm93LiBBbnkgcmVtYWluaW5nCisJIiAiYmVnaW4icyBvbiB0aGVpciBvd24gbGluZSBzaG91bGQgZ28gaW4gY29sdW1uIDEuCisJaWYgdGhpc19jb2RlbGluZSA9fiAnXlxzKmJlZ2luJCcKKwkJcmV0dXJuIDAKKwllbmRpZgorCisKKyIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyIgT2JqZWN0L0JvcmxhbmQgUGFzY2FsL0RlbHBoaSBFeHRlbnNpb25zCisiCisiIE5vdGUgdGhhdCBleHRlbmRlZC1wYXNjYWwgaXMgaGFuZGxlZCBoZXJlLCB1bmxlc3MgaXQgaXMgc2ltcGxlciB0bworIiBoYW5kbGUgdGhlbSBpbiB0aGUgc3RhbmRhcmQtcGFzY2FsIHNlY3Rpb24gYWJvdmUuCisKKworCSIgQ09MVU1OIDEgQUxXQVlTCisKKwkiIHNlY3Rpb24gaGVhZGVycyBhdCBzdGFydCBvZiBsaW5lLgorCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKGludGVyZmFjZVx8aW1wbGVtZW50YXRpb25cfHVzZXNcfHVuaXRcKVw+JworCQlyZXR1cm4gMAorCWVuZGlmCisKKworCSIgSU5ERU5UIE9OQ0UKKworCSIgSWYgdGhlIFBSRVZJT1VTIExJTkUgZW5kZWQgaW4gdGhlc2UgaXRlbXMsIGFsd2F5cyBpbmRlbnQuCisJaWYgcHJldl9jb2RlbGluZSA9fiAnXlxzKlwodW5pdFx8dXNlc1x8dHJ5XHxleGNlcHRcfGZpbmFsbHlcfHByaXZhdGVcfHByb3RlY3RlZFx8cHVibGljXHxwdWJsaXNoZWRcKSQnCiAJCXJldHVybiBpbmRudCArICZzaGlmdHdpZHRoCiAJZW5kaWYKIAorCSIgPz8/PyBJbmRlbnQgInByb2NlZHVyZSIgYW5kICJmdW5jdGlvbnMiIGlmIHRoZXkgYXBwZWFyIHdpdGhpbiBhbgorCSIgY2xhc3Mvb2JqZWN0IGRlZmluaXRpb24uIEJ1dCB0aGF0IG1lYW5zIG92ZXJyaWRpbmcgc3RhbmRhcmQtcGFzY2FsCisJIiBydWxlIHdoZXJlIHRoZXNlIHdvcmRzIGFsd2F5cyBnbyBpbiBjb2x1bW4gMS4KKworCisJIiBVTklOREVOVCBPTkNFCisKKwlpZiB0aGlzX2NvZGVsaW5lID1+ICdeXHMqXChleGNlcHRcfGZpbmFsbHlcKSQnCisJCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoCisJZW5kaWYKKworCWlmIHRoaXNfY29kZWxpbmUgPX4gJ15ccypcKHByaXZhdGVcfHByb3RlY3RlZFx8cHVibGljXHxwdWJsaXNoZWRcKSQnCisJCXJldHVybiBpbmRudCAtICZzaGlmdHdpZHRoCisJZW5kaWYKKworCisiIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKwkiIElmIG5vdGhpbmcgY2hhbmdlZCwgcmV0dXJuIHNhbWUgaW5kZW50LgogCXJldHVybiBpbmRudAogZW5kZnVuY3Rpb24KIApkaWZmIC0tZ2l0IGEvcnVudGltZS9sYW5nL21lbnVfamFfanAuZXVjLWpwLnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLmV1Yy1qcC52aW0KaW5kZXggZjIzMTg1Ny4uMTZiN2VlZSAxMDA2NDQKLS0tIGEvcnVudGltZS9sYW5nL21lbnVfamFfanAuZXVjLWpwLnZpbQorKysgYi9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC5ldWMtanAudmltCkBAIC0xLDggKzEsOCBAQAogIiB2aTpzZXQgdHM9OCBzdHM9OCBzdz04IHR3PTA6CiAiCiAiIE1lbnUgVHJhbnNsYXRpb25zOglKYXBhbmVzZSAoRVVDLUpQKQotIiBUcmFuc2xhdGVkIEJ5OglNVVJBT0tBIFRhcm8gIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPgotIiBMYXN0IENoYW5nZToJCTE4LUFwci0yMDA2LgorIiBUcmFuc2xhdGVkIEJ5OglNVVJBT0tBIFRhcm8gIDxrb3Jvbi5rYW9yaXlhQGdtYWlsLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CQkyMS1NYXItMjAxMS4KIAogIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KIGlmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQpAQCAtOTksNiArOTksOCBAQAogbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJpdWloaWkpevA38TqKCZJKQogbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCiAJXAm51MjWuebJvbyowNrC2CgmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgcmVsYXRpJnZlXCBMaW5lXCBOdW1iZXJpbmc8VGFiPjpzZXRcIHJudSEKKwlcCcHqwtC51MjWuebJvbyowNrC2CgmVik8VGFiPjpzZXRcIHJudSEKIG1lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQogCVwgpeqluaXIpeKhvKXJwNrC2CgmTCk8VGFiPjpzZXRcIGxpc3QhCiBtZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEKQEAgLTE0OSw3ICsxNTEsNyBAQAogIiBUb29scy5TcGVsbGluZyBNZW51CiBtZW51dHJhbnMgJlNwZWxsaW5nCQkJpbml2qXqpfOlsCgmUykKIG1lbnV0cmFucyAmU3BlbGxcIENoZWNrXCBPbgkJpbml2qXrpcGlp6XDpa/Nrbj6KCZTKQotbWVudXRyYW5zIFNwZWxsXCBDaGVja1wgJk9mZgkJpbml2qXrpcGlp6XDpa/Nrbj6KCZPKQorbWVudXRyYW5zIFNwZWxsXCBDaGVja1wgJk9mZgkJpbml2qXrpcGlp6XDpa/Mtbj6KCZPKQogbWVudXRyYW5zIFRvXCAmTmV4dFwgZXJyb3I8VGFiPl1zCbyhpM6lqKXpobwoJk4pPFRhYj5dcwogbWVudXRyYW5zIFRvXCAmUHJldmlvdXNcIGVycm9yPFRhYj5bcwnBsKTOpail6aG8KCZQKTxUYWI+W3MKIG1lbnV0cmFucyBTdWdnZXN0XCAmQ29ycmVjdGlvbnM8VGFiPno9Cb2kwLW49crkKCZDKTxUYWI+ej0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLnV0Zi04LnZpbSBiL3J1bnRpbWUvbGFuZy9tZW51X2phX2pwLnV0Zi04LnZpbQppbmRleCBiMjMxMDA1Li5kNTRkZmQ1IDEwMDY0NAotLS0gYS9ydW50aW1lL2xhbmcvbWVudV9qYV9qcC51dGYtOC52aW0KKysrIGIvcnVudGltZS9sYW5nL21lbnVfamFfanAudXRmLTgudmltCkBAIC0xLDggKzEsOCBAQAogIiB2aTpzZXQgdHM9OCBzdHM9OCBzdz04IHR3PTA6CiAiCiAiIE1lbnUgVHJhbnNsYXRpb25zOglKYXBhbmVzZSAoVVRGLTgpCi0iIFRyYW5zbGF0ZWQgQnk6CU1VUkFPS0EgVGFybyAgPGtvcm9uQHRrYS5hdHQubmUuanA+Ci0iIExhc3QgQ2hhbmdlOgkJMTgtQXByLTIwMDYuCisiIFRyYW5zbGF0ZWQgQnk6CU1VUkFPS0EgVGFybyAgPGtvcm9uLmthb3JpeWFAZ21haWwuY29tPgorIiBMYXN0IENoYW5nZToJCTIxLU1hci0yMDExLgogCiAiIFF1aXQgd2hlbiBtZW51IHRyYW5zbGF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgogaWYgZXhpc3RzKCJkaWRfbWVudV90cmFucyIpCkBAIC05OSw2ICs5OSw4IEBACiBtZW51dHJhbnMgRiZpbGVcIFNldHRpbmdzCQnjg5XjgqHjgqTjg6voqK3lrpooJkkpCiBtZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmTnVtYmVyaW5nPFRhYj46c2V0XCBudSEKIAlcCeihjOeVquWPt+ihqOekuuWIh+abvygmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgcmVsYXRpJnZlXCBMaW5lXCBOdW1iZXJpbmc8VGFiPjpzZXRcIHJudSEKKwlcCeebuOWvvuihjOeVquWPt+ihqOekuuWIh+abvygmVik8VGFiPjpzZXRcIHJudSEKIG1lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQogCVwg44Oq44K544OI44Oi44O844OJ5YiH5pu/KCZMKTxUYWI+OnNldFwgbGlzdCEKIG1lbnV0cmFucyBUb2dnbGVcIExpbmVcICZXcmFwPFRhYj46c2V0XCB3cmFwIQpAQCAtMTQ5LDcgKzE1MSw3IEBACiAiIFRvb2xzLlNwZWxsaW5nIE1lbnUKIG1lbnV0cmFucyAmU3BlbGxpbmcJCQnjgrnjg5rjg6rjg7PjgrAoJlMpCiBtZW51dHJhbnMgJlNwZWxsXCBDaGVja1wgT24JCeOCueODmuODq+ODgeOCp+ODg+OCr+acieWKuSgmUykKLW1lbnV0cmFucyBTcGVsbFwgQ2hlY2tcICZPZmYJCeOCueODmuODq+ODgeOCp+ODg+OCr+acieWKuSgmTykKK21lbnV0cmFucyBTcGVsbFwgQ2hlY2tcICZPZmYJCeOCueODmuODq+ODgeOCp+ODg+OCr+eEoeWKuSgmTykKIG1lbnV0cmFucyBUb1wgJk5leHRcIGVycm9yPFRhYj5dcwnmrKHjga7jgqjjg6njg7woJk4pPFRhYj5dcwogbWVudXRyYW5zIFRvXCAmUHJldmlvdXNcIGVycm9yPFRhYj5bcwnliY3jga7jgqjjg6njg7woJlApPFRhYj5bcwogbWVudXRyYW5zIFN1Z2dlc3RcICZDb3JyZWN0aW9uczxUYWI+ej0J5L+u5q2j5YCZ6KOcKCZDKTxUYWI+ej0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvbGFuZy9tZW51X2phcGFuZXNlX2phcGFuLjkzMi52aW0gYi9ydW50aW1lL2xhbmcvbWVudV9qYXBhbmVzZV9qYXBhbi45MzIudmltCmluZGV4IDA5OTc2YTkuLjk3ODdiOWIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvbGFuZy9tZW51X2phcGFuZXNlX2phcGFuLjkzMi52aW0KKysrIGIvcnVudGltZS9sYW5nL21lbnVfamFwYW5lc2VfamFwYW4uOTMyLnZpbQpAQCAtMSw4ICsxLDggQEAKICIgdmk6c2V0IHRzPTggc3RzPTggc3c9OCB0dz0wOgogIgogIiBNZW51IFRyYW5zbGF0aW9uczoJSmFwYW5lc2UgKENQOTMyKQotIiBUcmFuc2xhdGVkIEJ5OglNVVJBT0tBIFRhcm8gIDxrb3JvbkB0a2EuYXR0Lm5lLmpwPgotIiBMYXN0IENoYW5nZToJCTE4LUFwci0yMDA2LgorIiBUcmFuc2xhdGVkIEJ5OglNVVJBT0tBIFRhcm8gIDxrb3Jvbi5rYW9yaXlhQGdtYWlsLmNvbT4KKyIgTGFzdCBDaGFuZ2U6CQkyMS1NYXItMjAxMS4KIAogIiBRdWl0IHdoZW4gbWVudSB0cmFuc2xhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KIGlmIGV4aXN0cygiZGlkX21lbnVfdHJhbnMiKQpAQCAtOTksNiArOTksOCBAQAogbWVudXRyYW5zIEYmaWxlXCBTZXR0aW5ncwkJg3SDQINDg4uQ3ZLoKCZJKQogbWVudXRyYW5zIFRvZ2dsZVwgTGluZVwgJk51bWJlcmluZzxUYWI+OnNldFwgbnUhCiAJXAmNc5TUjYaVXI6mkNiR1igmTik8VGFiPjpzZXRcIG51IQorbWVudXRyYW5zIFRvZ2dsZVwgcmVsYXRpJnZlXCBMaW5lXCBOdW1iZXJpbmc8VGFiPjpzZXRcIHJudSEKKwlcCZGKkc6Nc5TUjYaVXI6mkNiR1igmVik8VGFiPjpzZXRcIHJudSEKIG1lbnV0cmFucyBUb2dnbGVcICZMaXN0XCBNb2RlPFRhYj46c2V0XCBsaXN0IQogCVwgg4qDWINng4KBW4NokNiR1igmTCk8VGFiPjpzZXRcIGxpc3QhCiBtZW51dHJhbnMgVG9nZ2xlXCBMaW5lXCAmV3JhcDxUYWI+OnNldFwgd3JhcCEKQEAgLTE0OSw3ICsxNTEsNyBAQAogIiBUb29scy5TcGVsbGluZyBNZW51CiBtZW51dHJhbnMgJlNwZWxsaW5nCQkJg1iDeYOKg5ODTygmUykKIG1lbnV0cmFucyAmU3BlbGxcIENoZWNrXCBPbgkJg1iDeYOLg2CDRoNig06XTIz4KCZTKQotbWVudXRyYW5zIFNwZWxsXCBDaGVja1wgJk9mZgkJg1iDeYOLg2CDRoNig06XTIz4KCZPKQorbWVudXRyYW5zIFNwZWxsXCBDaGVja1wgJk9mZgkJg1iDeYOLg2CDRoNig06Ws4z4KCZPKQogbWVudXRyYW5zIFRvXCAmTmV4dFwgZXJyb3I8VGFiPl1zCY6fgsyDR4OJgVsoJk4pPFRhYj5dcwogbWVudXRyYW5zIFRvXCAmUHJldmlvdXNcIGVycm9yPFRhYj5bcwmRT4LMg0eDiYFbKCZQKTxUYWI+W3MKIG1lbnV0cmFucyBTdWdnZXN0XCAmQ29ycmVjdGlvbnM8VGFiPno9CY9DkLOM85XiKCZDKTxUYWI+ej0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvcGx1Z2luL25ldHJ3UGx1Z2luLnZpbSBiL3J1bnRpbWUvcGx1Z2luL25ldHJ3UGx1Z2luLnZpbQppbmRleCAzY2U3MTBiLi45ODMzZTJiIDEwMDY0NAotLS0gYS9ydW50aW1lL3BsdWdpbi9uZXRyd1BsdWdpbi52aW0KKysrIGIvcnVudGltZS9wbHVnaW4vbmV0cndQbHVnaW4udmltCkBAIC0xLDYgKzEsNiBAQAogIiBuZXRyd1BsdWdpbi52aW06IEhhbmRsZXMgZmlsZSB0cmFuc2ZlciBhbmQgcmVtb3RlIGRpcmVjdG9yeSBsaXN0aW5nIGFjcm9zcyBhIG5ldHdvcmsKICIgICAgICAgICAgICBQTFVHSU4gU0VDVElPTgotIiBEYXRlOgkJSnVsIDI3LCAyMDEwCisiIERhdGU6CQlGZWIgMTAsIDIwMTEKICIgTWFpbnRhaW5lcjoJQ2hhcmxlcyBFIENhbXBiZWxsLCBKciA8TmRyT2NoaXBAU2NhbXBiZWxsUGZhbWlseS5BYml6TS1OT1NQQU0+CiAiIEdldExhdGVzdFZpbVNjcmlwdHM6IDEwNzUgMSA6QXV0b0luc3RhbGw6IG5ldHJ3LnZpbQogIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA4IENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiB7e3sxCkBAIC0yMCw3ICsyMCw3IEBACiBpZiAmY3AgfHwgZXhpc3RzKCJnOmxvYWRlZF9uZXRyd1BsdWdpbiIpCiAgZmluaXNoCiBlbmRpZgotbGV0IGc6bG9hZGVkX25ldHJ3UGx1Z2luID0gInYxNDAiCitsZXQgZzpsb2FkZWRfbmV0cndQbHVnaW4gPSAidjE0MSIKIGlmIHY6dmVyc2lvbiA8IDcwMgogIGVjaG9obCBXYXJuaW5nTXNnIHwgZWNobyAiKioqbmV0cncqKiogeW91IG5lZWQgdmltIHZlcnNpb24gNy4yIGZvciB0aGlzIHZlcnNpb24gb2YgbmV0cnciIHwgZWNob2hsIE5vbmUKICBmaW5pc2gKQEAgLTM0LDEwICszNCwxMyBAQAogIiBMb2NhbCBCcm93c2luZzoge3t7MgogYXVncm91cCBGaWxlRXhwbG9yZXIKICBhdSEKLSBhdSBCdWZFbnRlciAqIHNpbGVudCEgY2FsbCBzOkxvY2FsQnJvd3NlKGV4cGFuZCgiPGFtYXRjaD4iKSkKLSBhdSBWaW1FbnRlciAqIHNpbGVudCEgY2FsbCBzOlZpbUVudGVyKGV4cGFuZCgiPGFtYXRjaD4iKSkKKyIgYXUgQnVmUmVhZENtZCAqWy9cXF0Jc2lsISBjYWxsIHM6TG9jYWxCcm93c2UoZXhwYW5kKCI8YW1hdGNoPiIpKSAKKyIgYXUgQnVmRW50ZXIgKlteL1xcXQlzaWwhIGNhbGwgczpMb2NhbEJyb3dzZShleHBhbmQoIjxhbWF0Y2g+IikpCisiIGF1IFZpbUVudGVyICpbXi9cXF0Jc2lsISBjYWxsIHM6VmltRW50ZXIoZXhwYW5kKCI8YW1hdGNoPiIpKQorIGF1IEJ1ZkVudGVyICoJc2lsISBjYWxsIHM6TG9jYWxCcm93c2UoZXhwYW5kKCI8YW1hdGNoPiIpKQorIGF1IFZpbUVudGVyICoJc2lsISBjYWxsIHM6VmltRW50ZXIoZXhwYW5kKCI8YW1hdGNoPiIpKQogIGlmIGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKQotICBhdSBCdWZFbnRlciAuKiBzaWxlbnQhIGNhbGwgczpMb2NhbEJyb3dzZShleHBhbmQoIjxhbWF0Y2g+IikpCisgIGF1IEJ1ZkVudGVyIC4qIHNpbCEgY2FsbCBzOkxvY2FsQnJvd3NlKGV4cGFuZCgiPGFtYXRjaD4iKSkKICBlbmRpZgogYXVncm91cCBFTkQKIApAQCAtNDUsMTAgKzQ4LDEwIEBACiBhdWdyb3VwIE5ldHdvcmsKICBhdSEKICBpZiBoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikKLSAgYXUgQnVmUmVhZENtZCAgZmlsZTovLyoJCWV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFByZSAiLmZuYW1lZXNjYXBlKG5ldHJ3I1JGQzIzOTYoZXhwYW5kKCI8YW1hdGNoPiIpKSl8ZXhlICdlICcuZm5hbWVlc2NhcGUoc3Vic3RpdHV0ZShuZXRydyNSRkMyMzk2KGV4cGFuZCgiPGFtYXRjaD4iKSksJ2ZpbGU6Ly9cKC4qXCknLCdcMScsIiIpKXxleGUgImJ3aXBlICIuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKXxleGUgInNpbGVudCBkb2F1IEJ1ZlJlYWRQb3N0ICIuZm5hbWVlc2NhcGUobmV0cncjUkZDMjM5NihleHBhbmQoIjxhbWF0Y2g+IikpKQorICBhdSBCdWZSZWFkQ21kICBmaWxlOi8vKgkJY2FsbCBuZXRydyNGaWxlVXJsUmVhZChleHBhbmQoIjxhbWF0Y2g+IikpCiAgZWxzZQotICBhdSBCdWZSZWFkQ21kICBmaWxlOi8vKgkJZXhlICJzaWxlbnQgZG9hdSBCdWZSZWFkUHJlICIuZm5hbWVlc2NhcGUobmV0cncjUkZDMjM5NihleHBhbmQoIjxhbWF0Y2g+IikpKXxleGUgJ2UgJy5mbmFtZWVzY2FwZShzdWJzdGl0dXRlKG5ldHJ3I1JGQzIzOTYoZXhwYW5kKCI8YW1hdGNoPiIpKSwnZmlsZTovL1woLipcKScsJ1wxJywiIikpfGV4ZSAiYndpcGUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZWVzY2FwZShuZXRydyNSRkMyMzk2KGV4cGFuZCgiPGFtYXRjaD4iKSkpCi0gIGF1IEJ1ZlJlYWRDbWQgIGZpbGU6Ly9sb2NhbGhvc3QvKglleGUgInNpbGVudCBkb2F1IEJ1ZlJlYWRQcmUgIi5mbmFtZWVzY2FwZShuZXRydyNSRkMyMzk2KGV4cGFuZCgiPGFtYXRjaD4iKSkpfGV4ZSAnZSAnLmZuYW1lZXNjYXBlKHN1YnN0aXR1dGUobmV0cncjUkZDMjM5NihleHBhbmQoIjxhbWF0Y2g+IikpLCdmaWxlOi8vbG9jYWxob3N0L1woLipcKScsJ1wxJywiIikpfGV4ZSAiYndpcGUgIi5mbmFtZWVzY2FwZShzdWJzdGl0dXRlKGV4cGFuZCgiPGFtYXRjaD4iKSwnZmlsZTovL1woXGtcK0BcKVw9JywnJywnJykpfGV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZWVzY2FwZShuZXRydyNSRkMyMzk2KGV4cGFuZCgiPGFtYXRjaD4iKSkpCisgIGF1IEJ1ZlJlYWRDbWQgIGZpbGU6Ly8qCQljYWxsIG5ldHJ3I0ZpbGVVcmxSZWFkKGV4cGFuZCgiPGFtYXRjaD4iKSkKKyAgYXUgQnVmUmVhZENtZCAgZmlsZTovL2xvY2FsaG9zdC8qCWNhbGwgbmV0cncjRmlsZVVybFJlYWQoc3Vic3RpdHV0ZShleHBhbmQoIjxhbWF0Y2g+IikpLCdmaWxlOi8vbG9jYWxob3N0LycsJ2ZpbGU6Ly8vJywnJykKICBlbmRpZgogIGF1IEJ1ZlJlYWRDbWQgICBmdHA6Ly8qLHJjcDovLyosc2NwOi8vKixodHRwOi8vKixkYXY6Ly8qLGRhdnM6Ly8qLHJzeW5jOi8vKixzZnRwOi8vKglleGUgInNpbGVudCBkb2F1IEJ1ZlJlYWRQcmUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGNhbGwgbmV0cncjTnJlYWQoMixleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpCiAgYXUgRmlsZVJlYWRDbWQgIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGh0dHA6Ly8qLGRhdjovLyosZGF2czovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCWV4ZSAic2lsZW50IGRvYXUgRmlsZVJlYWRQcmUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGNhbGwgbmV0cncjTnJlYWQoMSxleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAic2lsZW50IGRvYXUgRmlsZVJlYWRQb3N0ICIuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKQpAQCAtMTAwLDExICsxMDMsMTEgQEAKICAgICIgc3RyaW5nIGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbm90IGNoZWNraW5nIHdvdWxkIGJyZWFrCiAgICAiIHRoaW5ncyBzdWNoIGFzIHRoZSBoZWxwIGNvbW1hbmQuCiAgICBpZiBhOmRpcm5hbWUgIT0gJycgJiYgaXNkaXJlY3RvcnkoYTpkaXJuYW1lKQotICAgIHNpbGVudCEgY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKGE6ZGlybmFtZSkKKyAgICBzaWwhIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhhOmRpcm5hbWUpCiAgICBlbmRpZgogICBlbHNlaWYgaXNkaXJlY3RvcnkoYTpkaXJuYW1lKQogIiAgIGVjaG9tc2cgImRpcm5hbWU8Ii5kaXJuYW1lLiI+IGlzZGlyIgotICAgc2lsZW50ISBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soYTpkaXJuYW1lKQorICAgc2lsISBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soYTpkaXJuYW1lKQogICBlbmRpZgogICAiIG5vdCBhIGRpcmVjdG9yeSwgaWdub3JlIGl0CiBlbmRmdW4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L25ldHJ3LnZpbSBiL3J1bnRpbWUvc3ludGF4L25ldHJ3LnZpbQppbmRleCBmNmZkNjZjLi4xNzk2ZmMxIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9uZXRydy52aW0KKysrIGIvcnVudGltZS9zeW50YXgvbmV0cncudmltCkBAIC04OCw3ICs4OCw3IEBACiAgaGkgZGVmYXVsdCBsaW5rIG5ldHJ3VGltZVNlcAluZXRyd0RhdGVTZXAKICBoaSBkZWZhdWx0IGxpbmsgbmV0cndDb21tYQluZXRyd0NvbW1lbnQKICBoaSBkZWZhdWx0IGxpbmsgbmV0cndIaWRlCW5ldHJ3Q29tbWVudAotIGhpIGRlZmF1bHQgbGluayBuZXRyd01hcmtGaWxlCUlkZW50aWZpZXIKKyBoaSBkZWZhdWx0IGxpbmsgbmV0cndNYXJrRmlsZQlEaWZmQ2hhbmdlCiAKICAiIHNwZWNpYWwgc3ludGF4IGhpZ2hsaWdodGluZyAoc2VlIDpoZSBnOm5ldHJ3X3NwZWNpYWxfc3ludGF4KQogIGhpIGRlZmF1bHQgbGluayBuZXRyd0JhawlOb25UZXh0CmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zaC52aW0gYi9ydW50aW1lL3N5bnRheC9zaC52aW0KaW5kZXggMjZkZjMyZC4uNDM3MGQ2NyAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvc2gudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3NoLnZpbQpAQCAtMiw4ICsyLDggQEAKICIgTGFuZ3VhZ2U6CQlzaGVsbCAoc2gpIEtvcm4gc2hlbGwgKGtzaCkgYmFzaCAoc2gpCiAiIE1haW50YWluZXI6CQlEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuICA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KICIgUHJldmlvdXMgTWFpbnRhaW5lcjoJTGVubmFydCBTY2h1bHR6IDxMZW5uYXJ0LlNjaHVsdHpAZWNtd2YuaW50PgotIiBMYXN0IENoYW5nZToJCUF1ZyAwNCwgMjAxMAotIiBWZXJzaW9uOgkJMTE0CisiIExhc3QgQ2hhbmdlOgkJRmViIDExLCAyMDExCisiIFZlcnNpb246CQkxMTUKICIgVVJMOgkJaHR0cDovL215c2l0ZS52ZXJpem9uLm5ldC9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjdmltbGlua3Nfc3ludGF4CiAiIEZvciBvcHRpb25zIGFuZCBzZXR0aW5ncywgcGxlYXNlIHVzZTogICAgICA6aGVscCBmdC1zaC1zeW50YXgKICIgVGhpcyBmaWxlIGluY2x1ZGVzIG1hbnkgaWRlYXMgZnJvbSA/cmljIEJydW5ldCAoZXJpYy5icnVuZXRAZW5zLmZyKQpAQCAtNDEwLDYgKzQxMCwxMCBAQAogIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyIyNwYXR0ZXJufSByZW1vdmUgbGFyZ2UgbGVmdCAgcGF0dGVybgogIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyJXBhdHRlcm59ICByZW1vdmUgc21hbGwgcmlnaHQgcGF0dGVybgogIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyJSVwYXR0ZXJufSByZW1vdmUgbGFyZ2UgcmlnaHQgcGF0dGVybgorIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyXnBhdHRlcm59ICBDYXNlIG1vZGlmaWNhdGlvbgorIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyXl5wYXR0ZXJufSBDYXNlIG1vZGlmaWNhdGlvbgorIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyLHBhdHRlcm59ICBDYXNlIG1vZGlmaWNhdGlvbgorIiAgICBrc2ggYmFzaCA6ICR7cGFyYW1ldGVyLCxwYXR0ZXJufSBDYXNlIG1vZGlmaWNhdGlvbgogc3luIGNsdXN0ZXIgc2hEZXJlZlBhdHRlcm5MaXN0CWNvbnRhaW5zPXNoRGVyZWZQYXR0ZXJuLHNoRGVyZWZTdHJpbmcKIHN5biBtYXRjaCBzaERlcmVmT3BFcnJvcgljb250YWluZWQJIjpbWzpwdW5jdDpdXSIKIHN5biBtYXRjaCAgc2hEZXJlZk9wCWNvbnRhaW5lZAkiOlw9Wy09P10iCW5leHRncm91cD1Ac2hEZXJlZlBhdHRlcm5MaXN0CkBAIC00MTcsNiArNDIxLDggQEAKIGlmIGV4aXN0cygiYjppc19iYXNoIikgfHwgZXhpc3RzKCJiOmlzX2tvcm5zaGVsbCIpCiAgc3luIG1hdGNoICBzaERlcmVmT3AJY29udGFpbmVkCSIjXHsxLDJ9IgluZXh0Z3JvdXA9QHNoRGVyZWZQYXR0ZXJuTGlzdAogIHN5biBtYXRjaCAgc2hEZXJlZk9wCWNvbnRhaW5lZAkiJVx7MSwyfSIJbmV4dGdyb3VwPUBzaERlcmVmUGF0dGVybkxpc3QKKyBzeW4gbWF0Y2ggIHNoRGVyZWZPcAljb250YWluZWQJIlxeXHsxLDJ9IgluZXh0Z3JvdXA9QHNoRGVyZWZQYXR0ZXJuTGlzdAorIHN5biBtYXRjaCAgc2hEZXJlZk9wCWNvbnRhaW5lZAkiLFx7MSwyfSIJbmV4dGdyb3VwPUBzaERlcmVmUGF0dGVybkxpc3QKICBzeW4gbWF0Y2ggIHNoRGVyZWZQYXR0ZXJuCWNvbnRhaW5lZAkiW157fV1cKyIJY29udGFpbnM9c2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRGVyZWZQYXR0ZXJuLHNoRGVyZWZTdHJpbmcsc2hDb21tYW5kU3ViLHNoRGVyZWZFc2NhcGUgbmV4dGdyb3VwPXNoRGVyZWZQYXR0ZXJuCiAgc3luIHJlZ2lvbiBzaERlcmVmUGF0dGVybgljb250YWluZWQJc3RhcnQ9InsiIGVuZD0ifSIJY29udGFpbnM9c2hEZXJlZixzaERlcmVmU2ltcGxlLHNoRGVyZWZTdHJpbmcsc2hDb21tYW5kU3ViIG5leHRncm91cD1zaERlcmVmUGF0dGVybgogIHN5biBtYXRjaCAgc2hEZXJlZkVzY2FwZQljb250YWluZWQJJ1wlKFxcXFxcKSpcXC4nCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90ZXgudmltIGIvcnVudGltZS9zeW50YXgvdGV4LnZpbQppbmRleCA5NWJmYzA1Li4zNjVhY2Y0IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC90ZXgudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3RleC52aW0KQEAgLTEsOCArMSw4IEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZToJVGVYCiAiIE1haW50YWluZXI6CURyLiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPE5kcmNoaXBPQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0+Ci0iIExhc3QgQ2hhbmdlOglTZXAgMTcsIDIwMTAgCi0iIFZlcnNpb246CTYwCisiIExhc3QgQ2hhbmdlOglEZWMgMDcsIDIwMTAgCisiIFZlcnNpb246CTY0CiAiIFVSTDoJCWh0dHA6Ly9teXNpdGUudmVyaXpvbi5uZXQvYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3N5bnRheAogIgogIiBOb3Rlczoge3t7MQpAQCAtODksMTggKzg5LDE3IEBACiAgc2V0bCBmZG09c3ludGF4CiBlbmRpZgogCi0iIChMYSlUZVgga2V5d29yZHM6IG9ubHkgdXNlIHRoZSBsZXR0ZXJzIGEtekEtWiB7e3sxCisiIChMYSlUZVgga2V5d29yZHM6IHVzZXMgdGhlIGNoYXJhY3RlcnMgMC05LGEteixBLVosMTkyLTI1NSBvbmx5Li4uIHt7ezEKICIgYnV0IF8gaXMgdGhlIG9ubHkgb25lIHRoYXQgY2F1c2VzIHByb2JsZW1zLgotaWYgdmVyc2lvbiA8IDYwMAotICBzZXQgaXNrPWEteixBLVoKLSAgaWYgYjp0ZXhfc3R5bGlzaAotICAgIHNldCBpc2srPUAKLSAgZW5kaWYKKyIgT25lIG1heSBvdmVycmlkZSB0aGlzIGlza2V5d29yZCBzZXR0aW5nIGJ5IHByb3ZpZGluZworIiBnOnRleF9pc2sKK2lmIGV4aXN0cygiZzp0ZXhfaXNrIikKKyBleGUgInNldGxvY2FsIGlzaz0iLmc6dGV4X2lzawogZWxzZQotICBzZXRsb2NhbCBpc2s9YS16LEEtWgotICBpZiBiOnRleF9zdHlsaXNoCi0gICAgc2V0bG9jYWwgaXNrKz1ACi0gIGVuZGlmCisgc2V0bG9jYWwgaXNrPTQ4LTU3LGEteixBLVosMTkyLTI1NQorZW5kaWYKK2lmIGI6dGV4X3N0eWxpc2gKKyAgc2V0bG9jYWwgaXNrKz1ALUAKIGVuZGlmCiAKICIgQ2x1c3RlcnM6IHt7ezEKQEAgLTM3MiwxOSArMzcxLDU0IEBACiAgaWYgaGFzKCJjb25jZWFsIikgJiYgJmVuYyA9PSAndXRmLTgnICYmIHM6dGV4X2NvbmNlYWwgPX4gJ20nCiAgIHN5biBtYXRjaCAgIHRleE1hdGhEZWxpbQljb250YWluZWQJCSJcXGxlZnRcXHtcPiIJc2tpcHdoaXRlIG5leHRncm91cD10ZXhNYXRoRGVsaW1TZXQxLHRleE1hdGhEZWxpbVNldDIsdGV4TWF0aERlbGltQmFkIGNvbnRhaW5zPXRleE1hdGhTeW1ib2wgY2NoYXI9ewogICBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW0JY29udGFpbmVkCQkiXFxyaWdodFxcfVw+Iglza2lwd2hpdGUgbmV4dGdyb3VwPXRleE1hdGhEZWxpbVNldDEsdGV4TWF0aERlbGltU2V0Mix0ZXhNYXRoRGVsaW1CYWQgY29udGFpbnM9dGV4TWF0aFN5bWJvbCBjY2hhcj19CisgIGxldCBzOnRleE1hdGhEZWxpbUxpc3Q9WworICAgICBcIFsnPCcgICAgICAgICAgICAsICc8J10gLAorICAgICBcIFsnPicgICAgICAgICAgICAsICc+J10gLAorICAgICBcIFsnKCcgICAgICAgICAgICAsICcoJ10gLAorICAgICBcIFsnKScgICAgICAgICAgICAsICcpJ10gLAorICAgICBcIFsnXFsnICAgICAgICAgICAsICdbJ10gLAorICAgICBcIFsnXScgICAgICAgICAgICAsICddJ10gLAorICAgICBcIFsnXFx7JyAgICAgICAgICAsICd7J10gLAorICAgICBcIFsnXFx9JyAgICAgICAgICAsICd9J10gLAorICAgICBcIFsnfCcgICAgICAgICAgICAsICd8J10gLAorICAgICBcIFsnXFx8JyAgICAgICAgICAsICfigJYnXSAsCisgICAgIFwgWydcXGJhY2tzbGFzaCcgICwgJ1wnXSAsCisgICAgIFwgWydcXGRvd25hcnJvdycgICwgJ+KGkyddICwKKyAgICAgXCBbJ1xcRG93bmFycm93JyAgLCAn4oeTJ10gLAorICAgICBcIFsnXFxsYW5nbGUnICAgICAsICc8J10gLAorICAgICBcIFsnXFxsYnJhY2UnICAgICAsICdbJ10gLAorICAgICBcIFsnXFxsY2VpbCcgICAgICAsICfijIgnXSAsCisgICAgIFwgWydcXGxmbG9vcicgICAgICwgJ+KMiiddICwKKyAgICAgXCBbJ1xcbGdyb3VwJyAgICAgLCAn4oyKJ10gLAorICAgICBcIFsnXFxsbW91c3RhY2hlJyAsICfijpsnXSAsCisgICAgIFwgWydcXHJhbmdsZScgICAgICwgJz4nXSAsCisgICAgIFwgWydcXHJicmFjZScgICAgICwgJ10nXSAsCisgICAgIFwgWydcXHJjZWlsJyAgICAgICwgJ+KMiSddICwKKyAgICAgXCBbJ1xccmZsb29yJyAgICAgLCAn4oyLJ10gLAorICAgICBcIFsnXFxyZ3JvdXAnICAgICAsICfijIsnXSAsCisgICAgIFwgWydcXHJtb3VzdGFjaGUnICwgJ+KOniddICwKKyAgICAgXCBbJ1xcdXBhcnJvdycgICAgLCAn4oaRJ10gLAorICAgICBcIFsnXFxVcGFycm93JyAgICAsICfihpEnXSAsCisgICAgIFwgWydcXHVwZG93bmFycm93JywgJ+KGlSddICwKKyAgICAgXCBbJ1xcVXBkb3duYXJyb3cnLCAn4oeVJ11dCisgIHN5biBtYXRjaCB0ZXhNYXRoRGVsaW0JJ1xcW2JCXWlnZ1w9W2xyXScgY29udGFpbmVkIG5leHRncm91cD10ZXhNYXRoRGVsaW1CYWQKKyAgZm9yIHRleG1hdGggaW4gczp0ZXhNYXRoRGVsaW1MaXN0CisgICBleGUgInN5biBtYXRjaCB0ZXhNYXRoRGVsaW0JJ1xcXFxbYkJdaWdnXFw9W2xyXVxcPSIudGV4bWF0aFswXS4iJwljb250YWluZWQgY29uY2VhbCBjY2hhcj0iLnRleG1hdGhbMV0KKyAgZW5kZm9yCisKICBlbHNlCiAgIHN5biBtYXRjaCAgIHRleE1hdGhEZWxpbQljb250YWluZWQJCSJcXFwobGVmdFx8cmlnaHRcKVw+Iglza2lwd2hpdGUgbmV4dGdyb3VwPXRleE1hdGhEZWxpbVNldDEsdGV4TWF0aERlbGltU2V0Mix0ZXhNYXRoRGVsaW1CYWQKKyAgc3luIG1hdGNoICAgdGV4TWF0aERlbGltCWNvbnRhaW5lZAkJIlxcW2JCXWlnZ1w9W2xyXVw9XD4iCXNraXB3aGl0ZSBuZXh0Z3JvdXA9dGV4TWF0aERlbGltU2V0MSx0ZXhNYXRoRGVsaW1TZXQyLHRleE1hdGhEZWxpbUJhZAorICBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW1TZXQyCWNvbnRhaW5lZAkiXFwiCQluZXh0Z3JvdXA9dGV4TWF0aERlbGltS2V5LHRleE1hdGhEZWxpbUJhZAorICBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW1TZXQxCWNvbnRhaW5lZAkiWzw+KClbXF18Ly5dXHxcXFt7fXxdIgorICBzeW4ga2V5d29yZCB0ZXhNYXRoRGVsaW1LZXkJY29udGFpbmVkCWJhY2tzbGFzaCAgICAgICBsY2VpbCAgICAgICAgICAgbFZlcnQgICAgICAgICAgIHJncm91cCAgICAgICAgICB1cGFycm93CisgIHN5biBrZXl3b3JkIHRleE1hdGhEZWxpbUtleQljb250YWluZWQJZG93bmFycm93ICAgICAgIGxmbG9vciAgICAgICAgICByYW5nbGUgICAgICAgICAgcm1vdXN0YWNoZSAgICAgIFVwYXJyb3cKKyAgc3luIGtleXdvcmQgdGV4TWF0aERlbGltS2V5CWNvbnRhaW5lZAlEb3duYXJyb3cgICAgICAgbGdyb3VwICAgICAgICAgIHJicmFjZSAgICAgICAgICBydmVydCAgICAgICAgICAgdXBkb3duYXJyb3cKKyAgc3luIGtleXdvcmQgdGV4TWF0aERlbGltS2V5CWNvbnRhaW5lZAlsYW5nbGUgICAgICAgICAgbG1vdXN0YWNoZSAgICAgIHJjZWlsICAgICAgICAgICByVmVydCAgICAgICAgICAgVXBkb3duYXJyb3cKKyAgc3luIGtleXdvcmQgdGV4TWF0aERlbGltS2V5CWNvbnRhaW5lZAlsYnJhY2UgICAgICAgICAgbHZlcnQgICAgICAgICAgIHJmbG9vcgogIGVuZGlmCi0gc3luIG1hdGNoICAgdGV4TWF0aERlbGltCWNvbnRhaW5lZAkJIlxcXChbYkJdaWdnXD1bbHJdXClcPiIJCQlza2lwd2hpdGUgbmV4dGdyb3VwPXRleE1hdGhEZWxpbVNldDEsdGV4TWF0aERlbGltU2V0Mix0ZXhNYXRoRGVsaW1CYWQKICBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW0JY29udGFpbmVkCQkiXFxcKGxlZnRcfHJpZ2h0XClhcnJvd1w+XHxcPFwoW2FBXXJyb3dcfGJyYWNlXClcPXZlcnRcPiIKICBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW0JY29udGFpbmVkCQkiXFxsZWZ0ZXFuXD4iCi0gc3luIG1hdGNoICAgdGV4TWF0aERlbGltU2V0Mgljb250YWluZWQJIlxcIgkJbmV4dGdyb3VwPXRleE1hdGhEZWxpbUtleSx0ZXhNYXRoRGVsaW1CYWQKLSBzeW4gbWF0Y2ggICB0ZXhNYXRoRGVsaW1TZXQxCWNvbnRhaW5lZAkiWzw+KClbXF18Ly5dXHxcXFt7fXxdIgotIHN5biBrZXl3b3JkIHRleE1hdGhEZWxpbUtleQljb250YWluZWQJYmFja3NsYXNoICAgICAgIGxjZWlsICAgICAgICAgICBsVmVydCAgICAgICAgICAgcmdyb3VwICAgICAgICAgIHVwYXJyb3cKLSBzeW4ga2V5d29yZCB0ZXhNYXRoRGVsaW1LZXkJY29udGFpbmVkCWRvd25hcnJvdyAgICAgICBsZmxvb3IgICAgICAgICAgcmFuZ2xlICAgICAgICAgIHJtb3VzdGFjaGUgICAgICBVcGFycm93Ci0gc3luIGtleXdvcmQgdGV4TWF0aERlbGltS2V5CWNvbnRhaW5lZAlEb3duYXJyb3cgICAgICAgbGdyb3VwICAgICAgICAgIHJicmFjZSAgICAgICAgICBydmVydCAgICAgICAgICAgdXBkb3duYXJyb3cKLSBzeW4ga2V5d29yZCB0ZXhNYXRoRGVsaW1LZXkJY29udGFpbmVkCWxhbmdsZSAgICAgICAgICBsbW91c3RhY2hlICAgICAgcmNlaWwgICAgICAgICAgIHJWZXJ0ICAgICAgICAgICBVcGRvd25hcnJvdwotIHN5biBrZXl3b3JkIHRleE1hdGhEZWxpbUtleQljb250YWluZWQJbGJyYWNlICAgICAgICAgIGx2ZXJ0ICAgICAgICAgICByZmxvb3IKIGVuZGlmCiAKICIgU3BlY2lhbCBUZVggY2hhcmFjdGVycyAgKCBcJCBcJiBcJSBcIyBceyBcfSBcXyBcUyBcUCApIDoge3t7MQpAQCAtNTIxLDYgKzU1NSw3IEBACiAgIiAobWFueSBvZiB0aGVzZSBzeW1ib2xzIHdlcmUgY29udHJpYnV0ZWQgYnkgQmrDtnJuIFdpbmNrbGVyKQogIGlmIHM6dGV4X2NvbmNlYWwgPX4gJ20nCiAgIGxldCBzOnRleE1hdGhMaXN0PVsKKyAgICBcIFsnfCcJCSwgJ+KAliddLAogICAgIFwgWydhbmdsZScJCSwgJ+KIoCddLAogICAgIFwgWydhcHByb3gnCQksICfiiYgnXSwKICAgICBcIFsnYXN0JwkJLCAn4oiXJ10sCkBAIC02MjQsNiArNjU5LDcgQEAKICAgICBcIFsnbGVzc2VxZ3RyJwksICfii5onXSwKICAgICBcIFsnbGVzc3NpbScJLCAn4omyJ10sCiAgICAgXCBbJ2xmbG9vcicJCSwgJ+KMiiddLAorICAgIFwgWydsbW91c3RhY2hlJyAgICAgLCAn4pWtJ10sCiAgICAgXCBbJ2xuZXFxJwkJLCAn4omoJ10sCiAgICAgXCBbJ2x0aW1lcycJCSwgJ+KLiSddLAogICAgIFwgWydtYXBzdG8nCQksICfihqYnXSwKQEAgLTY5NCw2ICs3MzAsNyBAQAogICAgIFwgWydyaWdodHNxdWlnYXJyb3cnLCAn4oadJ10sCiAgICAgXCBbJ3JpZ2h0dGhyZWV0aW1lcycsICfii4wnXSwKICAgICBcIFsncmlzaW5nZG90c2VxJwksICfiiZMnXSwKKyAgICBcIFsncm1vdXN0YWNoZScgICAgICwgJ+KVriddLAogICAgIFwgWydydGltZXMnCQksICfii4onXSwKICAgICBcIFsnc2VhcnJvdycJLCAn4oaYJ10sCiAgICAgXCBbJ3NldG1pbnVzJwksICfiiJYnXSwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0gYi9ydW50aW1lL3N5bnRheC92aW0udmltCmluZGV4IGE2ZjZlMzYuLjQ2YjM5MTkgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0KKysrIGIvcnVudGltZS9zeW50YXgvdmltLnZpbQpAQCAtMSw4ICsxLDggQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglWaW0gNy4zIHNjcmlwdAogIiBNYWludGFpbmVyOglEci4gQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxOZHJPY2hpcFNAUGNhbXBiZWxsQWZhbWlseS5NYml6PgotIiBMYXN0IENoYW5nZToJQXVndXN0IDIwLCAyMDEwCi0iIFZlcnNpb246CTcuMy0wNQorIiBMYXN0IENoYW5nZToJSmFuIDEwLCAyMDExCisiIFZlcnNpb246CTcuMy0wNwogIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBrZXl3b3JkIGxpc3RzOiB7e3sxCiAKICIgUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkIHt7ezIKQEAgLTU1MCw5ICs1NTAsOSBAQAogZW5kaWYKIAogIiBbLS0gbHVhIC0tXSB7e3szCi1sZXQgczpsdWFwYXRoPSBleHBhbmQoIjxzZmlsZT46cDpoIikuIi9sdWEudmltIgorbGV0IHM6bHVhcGF0aD0gZm5hbWVlc2NhcGUoZXhwYW5kKCI8c2ZpbGU+OnA6aCIpLiIvbHVhLnZpbSIpCiBpZiAhZmlsZXJlYWRhYmxlKHM6bHVhcGF0aCkKLSBsZXQgczpsdWFwYXRoPSBnbG9icGF0aCgmcnRwLCJzeW50YXgvbHVhLnZpbSIpCisgbGV0IHM6bHVhcGF0aD0gZm5hbWVlc2NhcGUoZ2xvYnBhdGgoJnJ0cCwic3ludGF4L2x1YS52aW0iKSkKIGVuZGlmCiBpZiAoZzp2aW1zeW5fZW1iZWQgPX4gJ2wnICYmIGhhcygibHVhIikpICYmIGZpbGVyZWFkYWJsZShzOmx1YXBhdGgpCiAgdW5sZXQhIGI6Y3VycmVudF9zeW50YXgKQEAgLTU3Miw5ICs1NzIsOSBAQAogdW5sZXQgczpsdWFwYXRoCiAKICIgWy0tIHBlcmwgLS1dIHt7ezMKLWxldCBzOnBlcmxwYXRoPSBleHBhbmQoIjxzZmlsZT46cDpoIikuIi9wZXJsLnZpbSIKK2xldCBzOnBlcmxwYXRoPSBmbmFtZWVzY2FwZShleHBhbmQoIjxzZmlsZT46cDpoIikuIi9wZXJsLnZpbSIpCiBpZiAhZmlsZXJlYWRhYmxlKHM6cGVybHBhdGgpCi0gbGV0IHM6cGVybHBhdGg9IGdsb2JwYXRoKCZydHAsInN5bnRheC9wZXJsLnZpbSIpCisgbGV0IHM6cGVybHBhdGg9IGZuYW1lZXNjYXBlKGdsb2JwYXRoKCZydHAsInN5bnRheC9wZXJsLnZpbSIpKQogZW5kaWYKIGlmIChnOnZpbXN5bl9lbWJlZCA9fiAncCcgJiYgaGFzKCJwZXJsIikpICYmIGZpbGVyZWFkYWJsZShzOnBlcmxwYXRoKQogIHVubGV0ISBiOmN1cnJlbnRfc3ludGF4CkBAIC01OTQsOSArNTk0LDkgQEAKIHVubGV0IHM6cGVybHBhdGgKIAogIiBbLS0gcnVieSAtLV0ge3t7MwotbGV0IHM6cnVieXBhdGg9IGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3J1YnkudmltIgorbGV0IHM6cnVieXBhdGg9IGZuYW1lZXNjYXBlKGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3J1YnkudmltIikKIGlmICFmaWxlcmVhZGFibGUoczpydWJ5cGF0aCkKLSBsZXQgczpydWJ5cGF0aD0gZ2xvYnBhdGgoJnJ0cCwic3ludGF4L3J1YnkudmltIikKKyBsZXQgczpydWJ5cGF0aD0gZm5hbWVlc2NhcGUoZ2xvYnBhdGgoJnJ0cCwic3ludGF4L3J1YnkudmltIikpCiBlbmRpZgogaWYgKGc6dmltc3luX2VtYmVkID1+ICdyJyAmJiBoYXMoInJ1YnkiKSkgJiYgZmlsZXJlYWRhYmxlKHM6cnVieXBhdGgpCiAgdW5sZXQhIGI6Y3VycmVudF9zeW50YXgKQEAgLTYxNSw5ICs2MTUsOSBAQAogdW5sZXQgczpydWJ5cGF0aAogCiAiIFstLSBweXRob24gLS1dIHt7ezMKLWxldCBzOnB5dGhvbnBhdGg9IGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3B5dGhvbi52aW0iCitsZXQgczpweXRob25wYXRoPSBmbmFtZWVzY2FwZShleHBhbmQoIjxzZmlsZT46cDpoIikuIi9weXRob24udmltIikKIGlmICFmaWxlcmVhZGFibGUoczpweXRob25wYXRoKQotIGxldCBzOnB5dGhvbnBhdGg9IGdsb2JwYXRoKCZydHAsInN5bnRheC9weXRob24udmltIikKKyBsZXQgczpweXRob25wYXRoPSBmbmFtZWVzY2FwZShnbG9icGF0aCgmcnRwLCJzeW50YXgvcHl0aG9uLnZpbSIpKQogZW5kaWYKIGlmIChnOnZpbXN5bl9lbWJlZCA9fiAnUCcgJiYgaGFzKCJweXRob24iKSkgJiYgZmlsZXJlYWRhYmxlKHM6cHl0aG9ucGF0aCkKICB1bmxldCEgYjpjdXJyZW50X3N5bnRheApAQCAtNjQ0LDkgKzY0NCw5IEBACiAgbGV0IHM6dHJ5dGNsPSAxCiBlbmRpZgogaWYgczp0cnl0Y2wKLSBsZXQgczp0Y2xwYXRoPSBleHBhbmQoIjxzZmlsZT46cDpoIikuIi90Y2wudmltIgorIGxldCBzOnRjbHBhdGg9IGZuYW1lZXNjYXBlKGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3RjbC52aW0iKQogIGlmICFmaWxlcmVhZGFibGUoczp0Y2xwYXRoKQotICBsZXQgczp0Y2xwYXRoPSBnbG9icGF0aCgmcnRwLCJzeW50YXgvdGNsLnZpbSIpCisgIGxldCBzOnRjbHBhdGg9IGZuYW1lZXNjYXBlKGdsb2JwYXRoKCZydHAsInN5bnRheC90Y2wudmltIikpCiAgZW5kaWYKICBpZiAoZzp2aW1zeW5fZW1iZWQgPX4gJ3QnICYmIGhhcygidGNsIikpICYmIGZpbGVyZWFkYWJsZShzOnRjbHBhdGgpCiAgIHVubGV0ISBiOmN1cnJlbnRfc3ludGF4CkBAIC02NzEsOSArNjcxLDkgQEAKIHVubGV0IHM6dHJ5dGNsCiAKICIgWy0tIG16c2NoZW1lIC0tXSB7e3szCi1sZXQgczptenNjaGVtZXBhdGg9IGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3NjaGVtZS52aW0iCitsZXQgczptenNjaGVtZXBhdGg9IGZuYW1lZXNjYXBlKGV4cGFuZCgiPHNmaWxlPjpwOmgiKS4iL3NjaGVtZS52aW0iKQogaWYgIWZpbGVyZWFkYWJsZShzOm16c2NoZW1lcGF0aCkKLSBsZXQgczptenNjaGVtZXBhdGg9IGdsb2JwYXRoKCZydHAsInN5bnRheC9zY2hlbWUudmltIikKKyBsZXQgczptenNjaGVtZXBhdGg9IGZuYW1lZXNjYXBlKGdsb2JwYXRoKCZydHAsInN5bnRheC9zY2hlbWUudmltIikpCiBlbmRpZgogaWYgKGc6dmltc3luX2VtYmVkID1+ICdtJyAmJiBoYXMoIm16c2NoZW1lIikpICYmIGZpbGVyZWFkYWJsZShzOm16c2NoZW1lcGF0aCkKICB1bmxldCEgYjpjdXJyZW50X3N5bnRheAo=