{"ok":true,"data":null,"error":null,"modules":{"TAccountSupport":"PG1vZHVsZSBuYW1lPSJUQWNjb3VudFN1cHBvcnQiPg0KDQoNCg0KDQoNCjx0ZW1wbGF0ZSBuYW1lPSJUQWNjb3VudFN1cHBvcnQiICA+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgo8c2VjdGlvbiBjbGFzcz0ic3B0IiBwbGFudGlsbGE9IlRBY2NvdW50U3VwcG9ydCI+CgogICAgPGRpdiBjbGFzcz0ic3B0LXJlaiI+CgogICAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIENPTFVNTkEgSVpRVUlFUkRBOiBFTCBFWFBFRElFTlRFIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY3VlcnBvIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1qcy1jYWIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1heXVkYSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWF5dWRhLWljb25vIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpoZWFkcGhvbmVzIj48L2ljb25pZnktaWNvbj48L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtYXl1ZGEtdHh0Ij4KICAgICAgICAgICAgICAgICAgICA8Yj7Cv05lY2VzaXRhcyBheXVkYT88L2I+CiAgICAgICAgICAgICAgICAgICAgPHA+TnVlc3RybyBlcXVpcG8gdGUgYXRpZW5kZSBjb24gY3VhbHF1aWVyIGR1ZGEsIGluY2lkZW5jaWEgbyBjb25zdWx0YSBzb2JyZSB0dXMgcGVkaWRvcy48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1heXVkYS1hY2Npb25lcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3B0LWJ0biBzcHQtYnRuLXByaW1hcmlvIHNwdC1qcy1hYnJpciIgaHJlZj0iamF2YXNjcmlwdDo7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Y2lyY2xlLXBsdXMiPjwvaWNvbmlmeS1pY29uPiBBYnJpciBleHBlZGllbnRlCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzcHQtYnRuIHNwdC1idG4tc2VjdW5kYXJpbyBzcHQtanMtY2hhdCIgaHJlZj0iamF2YXNjcmlwdDo7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6bWVzc2FnZS1jaXJjbGUiPjwvaWNvbmlmeS1pY29uPiBJbmljaWFyIGNoYXQKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNwdC1idG4gc3B0LWJ0bi1wbGFubyIgaHJlZj0iL2F5dWRhIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Ym9vay1vcGVuIj48L2ljb25pZnktaWNvbj4gQ2VudHJvIGRlIGF5dWRhCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIFZJU1RBIDE6IEVMIExJU1RBRE8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtanMtbGlzdGFkbyI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1jaWZyYXMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1jaWZyYSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtY2lmcmEtaWNvbm8gc3B0LXQtYXp1bCI+PGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Y2xvY2siPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS10eHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9InNwdC1qcy1jLWFiaWVydGFzIj7igJQ8L2I+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+QWJpZXJ0YXM8L3NtYWxsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q29uIHJlc3B1ZXN0YSBwZW5kaWVudGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY2lmcmEiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWNpZnJhLWljb25vIHNwdC10LXZlcmRlIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpjaXJjbGUtY2hlY2siPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS10eHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9InNwdC1qcy1jLXJlc3VlbHRhcyI+4oCUPC9iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlJlc3VlbHRhczwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FeHBlZGllbnRlcyBjZXJyYWRvcyBjb24gc29sdWNpw7NuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWNpZnJhIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS1pY29ubyBzcHQtdC1hbWJhciI+PGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6bWVzc2FnZS1zcXVhcmUiPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS10eHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9InNwdC1qcy1jLXNpbmxlZXIiPuKAlDwvYj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5TaW4gbGVlcjwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NZW5zYWplcyBkZSBzb3BvcnRlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWNpZnJhIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS1pY29ubyBzcHQtdC1ncmlzIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTppbmJveCI+PC9pY29uaWZ5LWljb24+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWNpZnJhLXR4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz0ic3B0LWpzLWMtdG90YWwiPuKAlDwvYj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5FeHBlZGllbnRlczwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXNkZSBxdWUgdGllbmVzIGN1ZW50YTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LXBlc3RhbmFzIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InNwdC1wZXN0YW5hIG9uIHNwdC1qcy1wZXN0YW5hIiBkYXRhLXBhbmVsPSJhYmllcnRhcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmluYm94Ij48L2ljb25pZnktaWNvbj4gQWJpZXJ0YXMKICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jdWVudGEgc3B0LWpzLW4tYWJpZXJ0YXMiPjA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJzcHQtcGVzdGFuYSBzcHQtanMtcGVzdGFuYSIgZGF0YS1wYW5lbD0iY2VycmFkYXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTphcmNoaXZlIj48L2ljb25pZnktaWNvbj4gQ2VycmFkYXMKICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jdWVudGEgc3B0LWpzLW4tY2VycmFkYXMiPjA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJzcHQtcGVzdGFuYSBzcHQtanMtcGVzdGFuYSIgZGF0YS1wYW5lbD0idG9kYXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpsYXllcnMiPjwvaWNvbmlmeS1pY29uPiBUb2RhcwogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWN1ZW50YSBzcHQtanMtbi10b2RhcyI+MDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1maWx0cm9zIGFjLWZpbHRyb3MiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYWMtYnVzY2FyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6c2VhcmNoIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InNlYXJjaCIgY2xhc3M9InNwdC1qcy1idXNjYXIiIHBsYWNlaG9sZGVyPSJCdXNjYXIgcG9yIGFzdW50bywgbsK6IGRlIGV4cGVkaWVudGUgbyBwZWRpZG/igKYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSJCdXNjYXIgZW4gdHVzIGNvbnN1bHRhcyI+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJhYy1zZWxlY3Qgc3B0LWpzLXRpcG8iIGFyaWEtbGFiZWw9IlRpcG8iPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlRvZG9zIGxvcyB0aXBvczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJpbmNpZGVuY2lhIj5JbmNpZGVuY2lhczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjb25zdWx0YSI+Q29uc3VsdGFzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iYWMtc2VsZWN0IHNwdC1qcy1lc3RhZG8iIGFyaWEtbGFiZWw9IkVzdGFkbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+VG9kb3MgbG9zIGVzdGFkb3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0id2FpdGluZyI+RW4gZXNwZXJhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImF0dGVuZGVkIj5FbiBjdXJzbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJzb2x2ZWQiPlJlc3VlbHRhczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjbG9zZWQiPkNlcnJhZGFzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImV4cGlyZWQiPkNhZHVjYWRhczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1jYXJkIHNwdC1qcy1saXN0YS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY2FyZC1jYWIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPk1pcyBleHBlZGllbnRlczwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5JbmNpZGVuY2lhcyBhYmllcnRhcyBkZXNkZSB1biBwZWRpZG8geSBjb25zdWx0YXMgZ2VuZXJhbGVzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC10YWJsYS1jYWphIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJzcHQtdGFibGEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk7CuiBkZSBleHBlZGllbnRlPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFzdW50bzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QZWRpZG88L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+w5psdGltYSByZXNwdWVzdGE8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RXN0YWRvPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz0ic3B0LWpzLWZpbGFzIj48L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtcGllIHNwdC1qcy1waWUiIGhpZGRlbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1qcy1jdWVudGEiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1jYXJkIHNwdC1qcy12YWNpbyIgaGlkZGVuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC12YWNpbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtdmFjaW8taWNvbm8iPjxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmluYm94Ij48L2ljb25pZnktaWNvbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPSJzcHQtanMtdmFjaW8tdGl0dWxvIj5ObyB0aWVuZXMgbmluZ3VuYSBpbmNpZGVuY2lhIGFiaWVydGE8L2I+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJzcHQtanMtdmFjaW8tdGV4dG8iPkN1YW5kbyBhYnJhcyB1bmEgaW5jaWRlbmNpYSBzb2JyZSB1biBwZWRpZG8gbyBub3MgaGFnYXMgdW5hIGNvbnN1bHRhLCBhcGFyZWNlcsOhIGFxdcOtIGNvbiBzdSBlc3RhZG8geSBzdXMgcmVzcHVlc3Rhcy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzcHQtYnRuIHNwdC1idG4tcHJpbWFyaW8gc3B0LWpzLWFicmlyIiBocmVmPSJqYXZhc2NyaXB0OjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Y2lyY2xlLXBsdXMiPjwvaWNvbmlmeS1pY29uPiBBYnJpciBleHBlZGllbnRlCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBWSVNUQSAyOiBMQSBGSUNIQSDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CiAgICAgICAgICAgIDxhcnRpY2xlIGNsYXNzPSJzcHQtY2FyZCBzcHQtZmljaGEgc3B0LWpzLWZpY2hhIiBoaWRkZW4+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1udW0iPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtdGlwbyBzcHQtanMtZi10aXBvIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1qcy1mLWNvZGUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzcHQtY29waWFyIHNwdC1qcy1jb3BpYXIiIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IkNvcGlhciBlbCBuw7ptZXJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Y29weSI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtZGF0b3Mgc3B0LWpzLWYtZGF0b3MiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1oaWxvIHNwdC1qcy1oaWxvIj48L2Rpdj4KICAgICAgICAgICAgPC9hcnRpY2xlPgoKICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSDilZDilZDilZDilZDilZDilZDilZDilZDilZAgQ09MVU1OQSBERVJFQ0hBOiBMQSBPUEVSQVRJVkEg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICAgIDxhc2lkZSBjbGFzcz0ic3B0LWxhZG8iPgoKICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1jYXJkIHNwdC1qcy1wZWRpZG8tY2FyZCIgaGlkZGVuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWxhZG8tY2FiIj4KICAgICAgICAgICAgICAgICAgICA8aDM+UGVkaWRvIHJlbGFjaW9uYWRvPC9oMz4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3B0LWVubGFjZSBzcHQtanMtcC12ZXIiIGhyZWY9IiMiPlZlciBwZWRpZG88L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1qcy1wLWFydGljdWxvcyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtanMtcC1maWxhcyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3B0LWJ0biBzcHQtYnRuLXNlY3VuZGFyaW8gc3B0LWpzLXAtc2VndWltaWVudG8iIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOnRydWNrIj48L2ljb25pZnktaWNvbj4gVmVyIHNlZ3VpbWllbnRvIGRlbCBlbnbDrW8KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1sYWRvLWNhYiI+PGgzPkNhbmFsZXMgZGUgYXRlbmNpw7NuPC9oMz48L2Rpdj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJzcHQtbGFkby1ub3RhIj5FbGlnZSBlbCBxdWUgbWVqb3Igc2UgYWRhcHRlIGEgdGkuPC9wPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWpzLWNhbmFsZXMiPjwvZGl2PgogICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0ic3B0LWNhcmQgc3B0LWpzLWZhcS1jYXJkIiBoaWRkZW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtbGFkby1jYWIiPgogICAgICAgICAgICAgICAgICAgIDxoMz5QcmVndW50YXMgZnJlY3VlbnRlczwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNwdC1lbmxhY2UiIGhyZWY9Ii9heXVkYSI+VmVyIHRvZGFzPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtZmFxIHNwdC1qcy1mYXEiPjwvZGl2PgogICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDwvYXNpZGU+CgogICAgPC9kaXY+CgogICAgCiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJzcHQtdHBsLWZpbGEiPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1leHAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtcmVmIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC10aXBvIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3B0LWNvbC1hc3VudG8iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1hc3VudG8iPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtdWx0aW1vIj48L3NwYW4+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3B0LWNlbGRhLXBlZGlkbyI+PC90ZD4KICAgICAgICAgICAgPHRkIGNsYXNzPSJzcHQtY2VsZGEtZmVjaGEiPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3B0LWNlbGRhLWVzdGFkbyI+PC90ZD4KICAgICAgICA8L3RyPgogICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJzcHQtdHBsLWRhdG8iPgogICAgICAgIDxkaXYgY2xhc3M9InNwdC1kYXRvIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1kYXRvLWljb25vIj48aWNvbmlmeS1pY29uPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1kYXRvLXR4dCI+CiAgICAgICAgICAgICAgICA8c21hbGw+PC9zbWFsbD4KICAgICAgICAgICAgICAgIDxiPjwvYj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJzcHQtdHBsLXAtZmlsYSI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWZpbGEiPgogICAgICAgICAgICA8c3Bhbj48L3NwYW4+CiAgICAgICAgICAgIDxiPjwvYj4KICAgICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0ic3B0LXRwbC1wLWFydGljdWxvIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtcHJvZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1wcm9kLXR4dCI+CiAgICAgICAgICAgICAgICA8Yj48L2I+CiAgICAgICAgICAgICAgICA8c21hbGw+PC9zbWFsbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgY2xhc3M9InNwdC10cGwtY2FuYWwiPgogICAgICAgIDxkaXYgY2xhc3M9InNwdC1jYW5hbCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtY2FuYWwtaWNvbm8iPjxpY29uaWZ5LWljb24+PC9pY29uaWZ5LWljb24+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWNhbmFsLXR4dCI+CiAgICAgICAgICAgICAgICA8Yj48L2I+CiAgICAgICAgICAgICAgICA8c21hbGw+PC9zbWFsbD4KICAgICAgICAgICAgICAgIDxlbT48L2VtPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgY2xhc3M9InNwdC10cGwtZmFxIj4KICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiPgogICAgICAgICAgICA8aWNvbmlmeS1pY29uIGNsYXNzPSJzcHQtZmFxLWkiIGljb249Imx1Y2lkZTpmaWxlLXRleHQiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICA8c3Bhbj48L3NwYW4+CiAgICAgICAgICAgIDxpY29uaWZ5LWljb24gY2xhc3M9InNwdC1mYXEteCIgaWNvbj0ibHVjaWRlOmNoZXZyb24tcmlnaHQiPjwvaWNvbmlmeS1pY29uPgogICAgICAgIDwvYT4KICAgIDwvdGVtcGxhdGU+Cgo8L3NlY3Rpb24+Cg0KDQoKPC90ZW1wbGF0ZT4NCg0KPHN0eWxlIG5hbWU9IlRBY2NvdW50U3VwcG9ydCI+Lyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgIFNPUE9SVEUg4oCUIGVsIMOhcmVhIGRlIGNsaWVudGUKICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIFNhbGUgZGUgbGEgbWFxdWV0YSBhcHJvYmFkYSAoYFBlbmRpbmdXb3Jrcy9tYXF1ZXRhcy9zb3BvcnRlLWNsaWVudGUqYCkuCgogICBMT1MgQ09MT1JFUyBTT04gTE9TIERFTCBFU0NBUEFSQVRFIChgLS1zZC0qYCksIE5PIExPUyBERUwgUEFORUwgVklFSk86CiAgIGVzdGEgcGFudGFsbGEgbGEgdmUgdW4gY29tcHJhZG9yLCB5IHVuIHNhbHRvIGRlIHZlcmRlIGEgYXp1bCBqdXN0byBhbAogICBlbnRyYXIgZW4gbGEgY3VlbnRhIHNlIG5vdGEuIFZhbiBDT04gUkVTUEFMRE8gZW4gZWwgcHVudG8gZGUgdXNvCiAgIC0tYHZhcigtLXNkLXRleHRvLCAjNDY1MTRhKWAtLSBwb3JxdWUgbG9zIGAtLXNkLSpgIGxvcyBzaXJ2ZQogICBgVFNlbGxlcnNVSWAgeSBlc3RhIHBhbnRhbGxhIHB1ZWRlIG1vbnRhcnNlIGVuIHVuIHBhbmVsIHF1ZSBubyBsYQogICBjYXJndWUuCgogICBUT0RPIENVRUxHQSBERSBgLnNwdGAuIEVuIGVsIHBhbmVsIGRlIGN1ZW50YSBjb252aXZlbiB2YXJpYXMgZmljaGFzCiAgIGFiaWVydGFzIGEgbGEgdmV6IGVuIGVsIG1pc21vIERPTTogdW5hIHJlZ2xhIHN1ZWx0YSAtLWBoMmAsIGAuY2FyZGAsCiAgIGBzZWxlY3RgLS0gZGVzY29sb2NhIGEgbGFzIHZlY2luYXMsIHkgZXNvIHlhIHNlIGhhIHBhZ2FkbyBlbgogICBgVE9yZGVyRGV0YWlsYCB5IGVuIGBUUmV0dXJuT3JkZXJgLiBBZGVtw6FzIGxhIHRpZW5kYSB0aWVuZSByZWdsYXMKICAgZ2xvYmFsZXMgYWdyZXNpdmFzIC0tdW5hIGZpamEgYGZvbnQ6IDEycHhgIGNvbiBsYSBmb3JtYSBjb3J0YSwgcXVlCiAgIGFycmFzYSBlbCB0YW1hw7FvIGhlcmVkYWRvIGRlIGN1YWxxdWllciBgc3BhbmAtLSB5IHNpbiBlbCBwcmVmaWpvIHNlCiAgIGN1ZWxhbi4KICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgouc3B0ICp7Ym94LXNpemluZzpib3JkZXItYm94fQoKLyogYGNvbnRhaW5lci10eXBlYCBFTiBMQSBSQcONWjogbG9zIGNvcnRlcyBkZSBsYSBjYWJlY2VyYSBjb23Dum4gc29uCiAgIGBAY29udGFpbmVyYCB5IG5vIGBAbWVkaWFgIC0tbGEgcGFudGFsbGEgdml2ZSBkZW50cm8gZGVsIHBhbmVsLCBjb24gc3UgbWVuw7oKICAgZGUgfjIyMHB4IHkgdW4gY2FycmlsIGNvbmZpZ3VyYWJsZSBlbiBBcGFyaWVuY2lhLCBhc8OtIHF1ZSBlbCBhbmNobyBkZSBsYQogICBWRU5UQU5BIG5vIGRpY2UgbmFkYSBkZWwgcXVlIGxlIHF1ZWRhLS0uIFNpbiBlc3RvLCBsYSBjYWJlY2VyYSBubyBzZQogICByZW9yZGVuYSBudW5jYSBhbCBlc3RyZWNoYXJzZS4gKi8KLnNwdHtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZX0KLnNwdC1yZWp7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIDMzMHB4O2dhcDoyMnB4O2FsaWduLWl0ZW1zOnN0YXJ0fQouc3B0LWN1ZXJwb3ttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoyMnB4fQouc3B0LWxhZG97ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MThweDtwb3NpdGlvbjpzdGlja3k7dG9wOjIwcHh9CgovKiDilIDilIAgTEFTIE1JR0FTIFkgTEEgQ0FCRUNFUkEgWUEgTk8gU0UgUElOVEFOIEFRVcONIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBFc3RhYmFuIGVuIGVzdGEgaG9qYSAtLWBzcHQtbWlnYXNgIGNvbiBzdSBtaWdhIGNvbm11dGFibGUgeSBgc3B0LWNhYmAgY29uIHVuCiAgIHTDrXR1bG8gZGUgMzBweC0tIHkgZXJhbiBlbCBmb3JtYXRvIGRlIEVTVEEgcGFudGFsbGEsIGRpc3RpbnRvIGRlbCBkZSBsYXMKICAgZGVtw6FzIHNlY2Npb25lcyBkZWwgcGFuZWwuIEFob3JhIGxhcyBwaW50YSBgQWNjb3VudEhlYWRlcmAgKGVsIGdlbWVsbyBKUywKICAgYHdpbmRvdy5BY2NvdW50SGVhZGVyYCkgY29uIGxhcyBjbGFzZXMgYGFjLSpgLCBjdXlhIGhvamEgdmlhamEgZW4KICAgYFRBY2NvdW50VUlgIChgVEFjY291bnRVSS9jc3MvVEFjY291bnRVSS5jc3NgKS4KCiAgIExvIMO6bmljbyBxdWUgaGFjZSBmYWx0YSBhcXXDrSBlcyBRVUlUQVJMRSBTVSBNQVJHRU4gSU5GRVJJT1I6IGxhIGNvbHVtbmEgZXMKICAgdW4gZmxleCBjb24gYGdhcDoyMnB4YCwgeSBjb24gbG9zIDE4cHggcXVlIHRyYWUgbGEgY2FiZWNlcmEgZGUgZsOhYnJpY2EKICAgcXVlZGFiYSBjYXNpIGVsIGRvYmxlIGRlIGh1ZWNvIGJham8gZWwgdMOtdHVsbyBxdWUgZW50cmUgY3VhbHF1aWVyIG90cm8gcGFyCiAgIGRlIGJsb3F1ZXMuICovCi5zcHQgLmFjLWNhYnttYXJnaW4tYm90dG9tOjB9CgovKiBFbCBgZm9udDppbmhlcml0YCBkZWwgcsOzdHVsbyAtLXVuIGA8c3Bhbj5gIGRlbnRybyBkZWwgYGgxYCBzYWxlIGEgMTJweCBwb3IgbGEKICAgcmVnbGEgZ2xvYmFsIGNvbiBzaG9ydGhhbmQtLSBTVUJJw5MgYSBsYSBob2phIGNvbcO6biwgcXVlIGVzIGRvbmRlIHZhbGUgcGFyYQogICB0b2RhcyBsYXMgZmljaGFzOiB2ZXIgbGEgbm90YSBlbiBgVEFjY291bnRVSS5jc3NgLiAqLwoKLyog4pSA4pSAIExhIHRhcmpldGEgZGUgYXl1ZGEuIFZhIEFSUklCQSwgbm8gYWwgcGllOiBlcyBsYSBwYXJ0ZSBkZSBsYQogICAgICBwYW50YWxsYSBxdWUgZXZpdGEgdW5hIGxsYW1hZGEuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBDb24gbWFyY28gYmxhbmNvLCBwZWRpZG8gcG9yIGVsIHVzdWFyaW8gZWwgMTAvMDkvMjAyNjogc2VwYXJhIGVsIGJsb3F1ZQogICB2ZXJkZSBkZWwgZm9uZG8gZGUgbGEgcGFudGFsbGEgc2luIGNhcmdhcmxvIGNvbiBvdHJhIGzDrW5lYSBkZSBjb2xvci4gKi8KLnNwdC1heXVkYXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O3BhZGRpbmc6MjBweCAyMnB4OwogIGJvcmRlcjo1cHggc29saWQgI2ZmZjtib3JkZXItcmFkaXVzOnZhcigtLXNkLXJhZGlvLDE0cHgpOwogIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjZjNmOWYzLCNlZWY2ZWUpfQouc3B0LWF5dWRhLWljb25ve2ZsZXg6MCAwIGF1dG87d2lkdGg6NTJweDtoZWlnaHQ6NTJweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7CiAgYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtdmVyZGUtYm9yZGUsI2NmZTNkMik7Y29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSk7Zm9udC1zaXplOjI1cHh9Ci5zcHQtYXl1ZGEtdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1heXVkYS10eHQgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxNS41cHg7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LWF5dWRhLXR4dCBwe21hcmdpbjozcHggMCAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO21heC13aWR0aDo1MmNofQouc3B0LWF5dWRhLWFjY2lvbmVze2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2dhcDo5cHg7ZmxleC13cmFwOndyYXB9CgovKiBCb3RvbmVzLiBgPGRpdj5gL2A8YT5gIHkgbm8gYDxidXR0b24+YCBkb25kZSBzZWEgdGFyamV0YTogbGEgaG9qYQogICBnbG9iYWwgbGxldmEgYC5UQ29tcG9uZW50RVM2IGJ1dHRvbntoZWlnaHQ6MjVweDtkaXNwbGF5OmZsZXh9YC4gKi8KLnNwdC1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjdweDtwYWRkaW5nOjlweCAxNHB4O2JvcmRlci1yYWRpdXM6MTBweDsKICBmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5zcHQtYnRuIGljb25pZnktaWNvbntmb250LXNpemU6MTZweH0KLnNwdC1idG4tcHJpbWFyaW97YmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTtjb2xvcjojZmZmfQouc3B0LWJ0bi1wcmltYXJpbzpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdC1idG4tc2VjdW5kYXJpb3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpO2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KLnNwdC1idG4tc2VjdW5kYXJpbzpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLWNsYXJvLCNlZWY2ZWUpfQouc3B0LWJ0bi1wbGFub3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tc2QtdGV4dG8sIzQ2NTE0YSk7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0LWJ0bi1wbGFubzpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUtYm9yZGUsI2NmZTNkMik7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQoKLyogVGFyamV0YSBnZW7DqXJpY2EgKi8KLnNwdC1jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1zZC1yYWRpbywxNHB4KTtiYWNrZ3JvdW5kOiNmZmY7CiAgYm94LXNoYWRvdzp2YXIoLS1zZC1zb21icmEsMCAycHggMTBweCByZ2JhKDIwLDQwLDI1LC4wNikpfQouc3B0LWNhcmQtY2Fie2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEwcHg7cGFkZGluZzoxN3B4IDE4cHggNHB4fQouc3B0LWNhcmQtY2FiICsgLnNwdC10YWJsYS1jYWphe21hcmdpbi10b3A6MTBweH0KLnNwdC1jYXJkLWNhYiBoM3ttYXJnaW46MDtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LWNhcmQtY2FiIHB7bWFyZ2luOjNweCAwIDA7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KLnNwdC1lbmxhY2V7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfQouc3B0LWVubGFjZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQoKLyogUMOtbGRvcmFzIGRlIGVzdGFkby4KICAgQ09OIEVMIFBSRUZJSk8gYC5zcHRgLCB5IG5vIHBvciBndXN0bzogbGEgZGUgbGEgZmljaGEgc2UgcGludGEgREVOVFJPIGRlbAogICB0w610dWxvIGRlIGxhIGNhYmVjZXJhIGNvbcO6biwgcXVlIGxlIHBvbmUgc3UgcHJvcGlvIHRhbWHDsW8gY29uCiAgIGAuYWMtY2FiLWVzdGFkb2AgLS11bmEgY2xhc2UsIGlndWFsIHF1ZSBlc3RhLS0sIGFzw60gcXVlIGEgaWd1YWwgZXNwZWNpZmljaWRhZAogICBnYW5hcsOtYSBsYSBob2phIHF1ZSBzZSBjYXJndWUgZGVzcHXDqXMuIENvbiBgLnNwdCAuc3B0LXBpbGRvcmFgICgwLDIsMCkgbWFuZGEKICAgZXN0YSwgcXVlIGVzIGxhIHF1ZSBzYWJlIGRlIHF1w6kgY29sb3IgdmEgY2FkYSBlc3RhZG8uICovCi5zcHQgLnNwdC1waWxkb3Jhe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzo1cHggMTFweDtib3JkZXItcmFkaXVzOjk5OXB4OwogIGZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5zcHQtcC1lc3BlcmF7YmFja2dyb3VuZDojZWZmNmZmO2NvbG9yOiMxZDRlZDh9Ci5zcHQtcC1jdXJzb3tiYWNrZ3JvdW5kOiNlZmY2ZmY7Y29sb3I6IzFkNGVkOH0KLnNwdC1wLW9re2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSk7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LXAtZ3Jpc3tiYWNrZ3JvdW5kOiNmMWYzZjI7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9CgovKiDilIDilIAgTEEgRklDSEEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5zcHQtZmljaGF7cGFkZGluZzoxOHB4IDIwcHggMjBweH0KLyogYHNwdC1maWNoYS10b3BgIC0tbGEgZmlsYSBkZSDCq1ZvbHZlciBhIHNvcG9ydGXCuyB5IGxhIHDDrWxkb3JhIGRlIGVzdGFkby0tIHkgZWwKICAgYGgyYCBkZWwgYXN1bnRvIHNlIGZ1ZXJvbiBhIGxhIGNhYmVjZXJhIGNvbcO6biAoYEFjY291bnRIZWFkZXJgLCBob2phIGVuCiAgIGBUQWNjb3VudFVJYCk6IGVsIGFzdW50byBlcyBlbCB0w610dWxvIGRlIGxhIHBhbnRhbGxhIHkgbGEgcMOtbGRvcmEgdmEgZGVudHJvCiAgIGRlIMOpbCwgY29tbyBlbiBsYSBmaWNoYSBkZSBwZWRpZG8uIEFxdcOtIGxhIGZpY2hhIGVtcGllemEgcG9yIHN1IG7Dum1lcm8uICovCi5zcHQtbnVte2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDttYXJnaW4tdG9wOjA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9Ci5zcHQtY29waWFye2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjJweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtkaXNwbGF5OmlubGluZS1mbGV4fQouc3B0LWNvcGlhcjpob3Zlcntjb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKX0KCi8qIExvcyBjdWF0cm8gZGF0b3MuIEljb25vIGVuIHN1IGNvbHVtbmEgeSBUT0RPIGVsIHRleHRvIGVuIGxhIHNlZ3VuZGE6CiAgIGFzw60gZWwgcsOzdHVsbyB5IGVsIHZhbG9yIGFycmFuY2FuIGVuIGxhIG1pc21hIHZlcnRpY2FsLiAqLwouc3B0LWRhdG9ze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsbWlubWF4KDAsMWZyKSk7Z2FwOjE0cHg7CiAgbWFyZ2luOjE2cHggMCA0cHg7cGFkZGluZzoxNHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCl9Ci5zcHQtZGF0b3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7bWluLXdpZHRoOjB9Ci5zcHQtZGF0by1pY29ub3tmbGV4OjAgMCBhdXRvO3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxN3B4fQouc3B0LWRhdG8tdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1kYXRvLXR4dCBzbWFsbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9Ci5zcHQtZGF0by10eHQgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7Zm9udC13ZWlnaHQ6NzAwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0KLnNwdC10LXZlcmRle2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSk7Y29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSl9Ci5zcHQtdC1henVse2JhY2tncm91bmQ6I2VmZjZmZjtjb2xvcjojMWQ0ZWQ4fQouc3B0LXQtYW1iYXJ7YmFja2dyb3VuZDojZmVmNmU3O2NvbG9yOiNjOThhMDZ9Ci5zcHQtdC1ncmlze2JhY2tncm91bmQ6I2YxZjNmMjtjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBFTCBISUxPOiBgVENoYXRgIFJFVkVTVElETywgTk8gVU4gQ0hBVCBOVUVWTwogICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgRWwgbWFyY2FkbyBkZSBhYmFqbyBlcyBFTCBRVUUgUElOVEEgYFRDaGF0YCAoYF9lc3F1ZWxldG9CdXJidWphcygpYCB5CiAgIGBfbWVzc2FnZSgpYCksIGNvcGlhZG8gdGFsIGN1YWwuIEFxdcOtIHNvbG8gc2UgbGUgY2FtYmlhIGVsIGNvbG9yOgogICB2aWVuZSBlbiBhenVsICgjM2I4MmY2IGVuIGVudmlhciwgZm9jbyB5IGJvcmRlcykgeSBlc3RhIHBhbnRhbGxhIGVzCiAgIHZlcmRlLgoKICAgVG9kbyB2YSBlc2NvcGFkbyBiYWpvIGAuc3B0YC4gVG9jYXIgYFRDaGF0LmNzc2AgZW4gc3Ugc2l0aW8gcmVwaW50YXLDrWEKICAgdGFtYmnDqW4gZWwgY2hhdCBkZSBsb3MgcGVkaWRvcywgZWwgZGUgbGFzIGRldm9sdWNpb25lcywgZWwgZGUgbG9zCiAgIHZhbGVzIHkgbGFzIG5vdGFzIGRlIEFETUlOLgogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KLnNwdC1oaWxve21hcmdpbi10b3A6MTZweH0KLnNwdCAuVENoYXR7d2lkdGg6MTAwJX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWNhamF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWxpc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDtwYWRkaW5nOjRweCA2cHggNHB4IDA7bWF4LWhlaWdodDpub25lfQoKLyog4pSA4pSAIEVMIEJMT1FVRSBERUwgTUVOU0FKRSBOTyBMTEVWQSBGT05ETyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgRWwgZm9uZG8gZXMgZGUgbGEgQlVSQlVKQSwgbm8gZGVsIGJsb3F1ZTogcGludMOhbmRvbG8gYXF1w60sIGVsIGNvbG9yIHNlCiAgIGV4dGVuZMOtYSBwb3IgZGV0csOhcyBkZWwgbm9tYnJlIGRlbCBhdXRvciB5IGRlbCBhdmF0YXIsIHkgdW4gbWVuc2FqZQogICBjb3J0byBxdWVkYWJhIGNvbiB1biByZWN0w6FuZ3VsbyBhenVsIGVub3JtZSBhbHJlZGVkb3IgZGUgZG9zIHBhbGFicmFzLgoKICAgSGF5IHF1ZSBub21icmFyIGAuaXMtbWluZWAgeSBgLmVzLWRlLWdydXBvYCBleHBsw61jaXRhbWVudGU6IGxhIGhvamEgZGUKICAgYFRDaGF0YCBsb3MgcGludGEgY29uIGAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZy5pcy1taW5lYCwgcXVlCiAgIEVNUEFUQSBlbiBlc3BlY2lmaWNpZGFkIGNvbiBlbCBzZWxlY3RvciBkZSBhcXXDrSAoY3VhdHJvIGNsYXNlcyBjYWRhCiAgIHVubykgeSBnYW5hIHBvciBpciBkZXNwdcOpcyBlbiBlbCBvcmRlbiBkZSBob2phcy4gTWVkaWRvOiBlbCBibG9xdWUKICAgc2Fsw61hIGByZ2IoMjM5LDI0NiwyNTUpYCBwZXNlIGEgdGVuZXIgYGJhY2tncm91bmQ6bm9uZWAuCgogICBFbCBhdmF0YXIgZXMgREVDT1JBVElWTyB5IHNhbGUgZGVsIENTUyAtLW5vIGRlIHVuIGRhdG8tLSBwYXJhIG5vIHRlbmVyCiAgIHF1ZSB0b2NhciBlbCBtYXJjYWRvIGRlbCBjb250cm9sLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLAouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmUsCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1tc2cuZXMtZGUtZ3J1cG97CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6NzQlO21hcmdpbjowO3BhZGRpbmc6MCAwIDAgNDZweDsKICAgIGJhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtib3gtc2hhZG93Om5vbmU7Cn0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZzo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyMnB4O3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHg7Ym9yZGVyLXJhZGl1czo1MCU7CiAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1jbGFybywjZWVmNmVlKSBjZW50ZXIvMThweCBuby1yZXBlYXQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKTsKICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIlMjMwNDcxM2EiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48cGF0aCBkPSJNMTEgMjBBNyA3IDAgMCAxIDkuOCA2LjFDMTUuNSA1IDE3IDQuNDggMTkgMmMxIDIgMiA0LjE4IDIgOCAwIDUuNS00Ljc4IDEwLTEwIDEwWiIvPjxwYXRoIGQ9Ik0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIvPjwvc3ZnPicpfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmV7bWFyZ2luLWxlZnQ6YXV0bztwYWRkaW5nOjAgNDZweCAwIDA7dGV4dC1hbGlnbjpyaWdodH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZy5pcy1taW5lOjpiZWZvcmV7bGVmdDphdXRvO3JpZ2h0OjA7YmFja2dyb3VuZC1jb2xvcjojZjFmM2YyO2JvcmRlci1jb2xvcjp2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTsKICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIlMjM2YjdhNzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjgiIHI9IjQiLz48cGF0aCBkPSJNNCAyMWE4IDggMCAwIDEgMTYgMCIvPjwvc3ZnPicpfQoKLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1ldGF7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OXB4O21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXNkLXRlbnVlLCM5M2EzOTkpfQoKLyog4pSA4pSAIEVOIE1JUyBQUk9QSU9TIE1FTlNBSkVTLCBFTCBOT01CUkUgU09CUkEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIEVzIGVsIGRlbCBxdWUgZXN0w6EgbWlyYW5kbyBsYSBwYW50YWxsYTogcmVwZXRpcmxvIGVuIGNhZGEgbMOtbmVhIG5vCiAgIGRpY2UgbmFkYSwgeSBoYWNlIGxhIGNhYmVjZXJhIE3DgVMgQU5DSEEgUVVFIExBIEJVUkJVSkEgLS0gZW4gdW4KICAgwqtob2xhwrsgc29icmVzYWzDrWEgMTUycHggcG9yIGxhIGl6cXVpZXJkYSB5IGVsIG5vbWJyZSBwYXJlY8OtYSBmbG90YXIKICAgZnVlcmEgZGUgc3UgbWVuc2FqZS4gQ29uIHNvbG8gbGEgaG9yYSwgbGEgY2FiZWNlcmEgY2FiZSB5IHF1ZWRhIGVuIGxhCiAgIHZlcnRpY2FsIGRlIGxhIGJ1cmJ1amEuCgogICBEZWwgbGFkbyBkZSBzb3BvcnRlIGVsIG5vbWJyZSBTw40gc2UgcXVlZGE6IHNhYmVyIHF1acOpbiB0ZSBhdGllbmRlIGVzCiAgIGp1c3RvIGxvIHF1ZSBzZSBxdWllcmUgbGVlciBhaMOtLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmUgLnRjaGF0LW1ldGEgc3Ryb25ne2Rpc3BsYXk6bm9uZX0KCi8qIFkgdW4gYW5jaG8gbcOtbmltbywgcGFyYSBxdWUgdW4gbWVuc2FqZSBkZSBkb3MgbGV0cmFzIG5vIHF1ZWRlIG3DoXMKICAgZXN0cmVjaG8gcXVlIHN1IHByb3BpYSBob3JhLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtYm9keXttaW4td2lkdGg6MTA0cHh9CgovKiDilIDilIAgRUwgTk9NQlJFLCBFTiBMQSBWRVJUSUNBTCBERSBTVSBNRU5TQUpFIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBMYSBjYWJlY2VyYSB0cmFlIHRyZXMgaHVlY29zIC0tYXV0b3IsIGZlY2hhIHkgYWNjaW9uZXMtLSB5IGxvcyBkb3MKICAgw7psdGltb3MgcHVlZGVuIHZlbmlyIFZBQ8ONT1MuIENvbiBganVzdGlmeS1jb250ZW50OmZsZXgtZW5kYCwgZXNvcwogICBodWVjb3MgdmFjw61vcyBzaWd1ZW4gY29udGFuZG8gY29uIHN1IGBnYXBgLCBhc8OtIHF1ZSBlbXB1amFiYW4gZWwKICAgbm9tYnJlIDE5cHggYSBsYSBpenF1aWVyZGEgZGVsIGJvcmRlIGRlIGxhIGJ1cmJ1amEgKG1lZGlkbyBlbiB1bgogICDCq2hvbGHCuyk6IGVsIG5vbWJyZSBxdWVkYWJhIGZsb3RhbmRvIGZ1ZXJhIGRlIHN1IG1lbnNhamUuCgogICBTZSBlc2NvbmRlbiBsb3MgdmFjw61vcyB5IGVsIG5vbWJyZSBjYWUgZG9uZGUgZGViZS4gTm8gc2UgdG9jYSBlbAogICBtYXJjYWRvIGRlbCBjb250cm9sOiBsb3MgcGludGEgw6lsIHkgcHVlZGUgcmVsbGVuYXJsb3MgZGVzcHXDqXMuICovCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1tZXRhIHNwYW46ZW1wdHl7ZGlzcGxheTpub25lfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmUgLnRjaGF0LW1ldGF7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbWV0YSBzdHJvbmd7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZy5pcy1taW5lIC50Y2hhdC1tZXRhIHN0cm9uZ3tjb2xvcjp2YXIoLS1zZC10aW50YSwjMTYyMTFhKX0KCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1ib2R5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjEycHggMTVweDtib3JkZXItcmFkaXVzOjE0cHg7CiAgZm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjY1O2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpOwogIGJhY2tncm91bmQ6I2Y0ZjZmYjtib3JkZXI6MXB4IHNvbGlkICNlNmViZjQ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7d2hpdGUtc3BhY2U6cHJlLWxpbmV9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1tc2cuaXMtbWluZSAudGNoYXQtYm9keXtiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLWNsYXJvLCNlZWY2ZWUpOwogIGJvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjE0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2NvbG9yOnZhcigtLXNkLXRpbnRhLCMxNjIxMWEpfQoKLyogQWRqdW50b3M6IGxvcyBtaXNtb3MgYC5hZGp1bnRvYCAvIGAuYWRqdW50by1pbWdgIGRlIFRDaGF0LiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50b3N7ZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLXRvcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50b3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OXB4O3BhZGRpbmc6N3B4IDExcHg7Ym9yZGVyLXJhZGl1czoxMHB4OwogIGJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO2ZvbnQtc2l6ZToxMi41cHh9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC5hZGp1bnRvOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLmFkanVudG8gYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7Zm9udC13ZWlnaHQ6NjAwfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50byBzbWFsbHtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtmb250LXNpemU6MTEuNXB4fQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50b3N7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50by1pbWd7ZGlzcGxheTppbmxpbmUtZmxleH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLmFkanVudG8taW1nIGltZ3tkaXNwbGF5OmJsb2NrO3dpZHRoOjY0cHg7aGVpZ2h0OjQ4cHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50by1pbWc6aG92ZXIgaW1ne2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKX0KCi8qIExhIGNhamEgZGUgZXNjcmliaXIuIENvbiBlbCBoaWxvIGRlbnRybyBkZSBzdSBwcm9waWEgY2FqYSwgZWwgcGllIHNlIHNlcGFyYQogICBjb24gdW5hIGzDrW5lYTogc2kgbm8sIGVsIMO6bHRpbW8gbWVuc2FqZSB5IGVsIGNhbXBvIGRlIGVzY3JpYmlyIHBhcmVjZW4gbG8KICAgbWlzbW8uICovCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEwcHg7cGFkZGluZy10b3A6MTRweDsKICBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KX0KLyog4pSA4pSAIEVMIENBTVBPIERFIEVTQ1JJQklSOiAzMHB4LCBZIENSRUNFIEFMIEVTQ1JJQklSIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBDb24gbG9zIDc4cHggZGUgb3JpZ2VuIHNlIGxsZXZhYmEgbcOhcyBhbHRvIHF1ZSBsYSBwcm9waWEgY29udmVyc2FjacOzbgogICAoMjIzIGNvbnRyYSAxOTgsIG1lZGlkbykuIEFycmFuY2EgZW4gdW5hIGzDrW5lYSB5IGxvIGVzdGlyYQogICBgX2F1dG9BbHRvKClgIGRlbCBjb250cm9sIHNlZ8O6biBzZSB0ZWNsZWEsIHF1ZSBlcyBsbyBxdWUgaGFjZSBxdWUgZWwKICAgaGlsbyB0ZW5nYSBzaXRpbyBjdWFuZG8gbm8gc2UgZXN0w6EgZXNjcmliaWVuZG8uCgogICBgaGVpZ2h0OjMwcHhgIGFkZW3DoXMgZGVsIG3DrW5pbW86IHVuIGA8dGV4dGFyZWE+YCBtaWRlIHBvciBzdSBhdHJpYnV0bwogICBgcm93c2AgLS1lbCBjb250cm9sIGxvIHBpbnRhIGNvbiAyLS0geSBzb2xvIGNvbiBgbWluLWhlaWdodGAgc2UgcXVlZGEKICAgZW4gZG9zIGzDrW5lYXMuIGByZXNpemU6bm9uZWAgcG9ycXVlIHF1aWVuIG1hbmRhIGVuIGVsIGFsdG8gZXMgZWwKICAgY29udGVuaWRvLCBubyB1biB0aXJhZG9yIHF1ZSBkZXNjdWFkcmEgbGEgZmljaGEgYWNvdGFkYS4gKi8KLyogYGZsZXg6MCAwIGF1dG9gIE5PIEVTIERFIEFET1JOTzogZWwgY2FtcG8gdmVuw61hIGNvbiBgZmxleDoxIDEgMjIwcHhgCiAgIC0tbWVkaWRvLS0geSBkZW50cm8gZGUgdW4gZmxleCBlbiBjb2x1bW5hIGVsIGBmbGV4LWJhc2lzYCBtYW5kYSBzb2JyZQogICBsYSBBTFRVUkEsIGFzw60gcXVlIHNlIHBsYW50YWJhIGVuIDE2MHB4IHBvciBtdWNobyBgaGVpZ2h0OjMwcHhgIHF1ZQogICBzZSBsZSBwdXNpZXJhLiBDb24gbGEgYmFzZSBlbiBgYXV0b2AsIHF1aWVuIGRlY2lkZSBlcyBgaGVpZ2h0YCwgeQogICBgX2F1dG9BbHRvKClgIGxvIHZhIHN1YmllbmRvIGFsIGVzY3JpYmlyLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtaW5wdXR7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDtoZWlnaHQ6MzBweDtyZXNpemU6bm9uZTtwYWRkaW5nOjZweCAxMnB4O2JvcmRlci1yYWRpdXM6MTBweDsKICBib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO2JhY2tncm91bmQ6I2ZmZjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1zZC10ZXh0bywjNDY1MTRhKTtvdXRsaW5lOjB9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tc2QtdGVudWUsIzkzYTM5OSl9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSk7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSg0LDExMyw1OCwuMTApfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtYWNjaW9uZXN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtoZWlnaHQ6YXV0b30KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWNsaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtoZWlnaHQ6YXV0bztwYWRkaW5nOjA7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lOwogIGNvbG9yOnZhcigtLXNkLXN1YXZlLCM2YjdhNzApO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXJ9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1jbGlwOmhvdmVye2NvbG9yOnZhcigtLXNkLXZlcmRlLCMwNDcxM2EpO2JhY2tncm91bmQ6bm9uZX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LXNlbmR7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtoZWlnaHQ6YXV0bztwYWRkaW5nOjExcHggMjBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjEwcHg7CiAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LXNlbmQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCl9CgovKiDilIDilIAgSElTVE9SSUFMIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwouc3B0LXRhYmxhe3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21hcmdpbi10b3A6MTJweH0KLnNwdC10YWJsYSB0aHt0ZXh0LWFsaWduOmxlZnQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCk7dGV4dC10cmFuc2Zvcm06bm9uZTsKICBwYWRkaW5nOjExcHggMTRweDtiYWNrZ3JvdW5kOnZhcigtLXNkLWNyZW1hLCNmN2ZhZjYpO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0LXRhYmxhIHRke3BhZGRpbmc6MTRweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTtmb250LXNpemU6MTNweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5zcHQtdGFibGEgdHI6bGFzdC1jaGlsZCB0ZHtib3JkZXItYm90dG9tOjB9Ci5zcHQtdGFibGEgdHI6aG92ZXIgdGR7YmFja2dyb3VuZDp2YXIoLS1zZC1jcmVtYSwjZjdmYWY2KX0KLnNwdC10YWJsYSAuc3B0LXJlZntmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSl9Ci5zcHQtdGlwb3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtwYWRkaW5nOjNweCA4cHg7Ym9yZGVyLXJhZGl1czo2cHh9Ci5zcHQtdGlwby1pbmN7YmFja2dyb3VuZDojZmVmNmU3O2NvbG9yOiM5NjY5MGF9Ci5zcHQtdGlwby1jb257YmFja2dyb3VuZDojZWVmNmVlO2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KCi8qIOKUgOKUgCBDT0xVTU5BIERFUkVDSEEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5zcHQtbGFkbyAuc3B0LWNhcmR7cGFkZGluZzoxN3B4IDE4cHggMThweH0KLnNwdC1sYWRvIGgze21hcmdpbjowO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCl9Ci5zcHQtbGFkby1jYWJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEycHh9Ci5zcHQtcHJvZHtkaXNwbGF5OmZsZXg7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxNHB4fQouc3B0LXByb2QtdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1wcm9kLXR4dCBie2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1zZC10aW50YSwjMTYyMTFhKTtmb250LXdlaWdodDo3MDB9Ci5zcHQtcHJvZC10eHQgc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KLnNwdC1maWxhe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEwcHg7cGFkZGluZzo4cHggMDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTtmb250LXNpemU6MTIuNXB4fQouc3B0LWZpbGEgc3Bhbntjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KLnNwdC1maWxhIGJ7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7Zm9udC13ZWlnaHQ6NjAwO3RleHQtYWxpZ246cmlnaHR9Ci5zcHQtbGFkbyAuc3B0LWJ0bnt3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fQoKLyogQ2FuYWxlczogaWNvbm8gZW4gc3UgY29sdW1uYSwgdG9kbyBlbCB0ZXh0byBlbiBsYSBzZWd1bmRhLiAqLwouc3B0LWNhbmFse2Rpc3BsYXk6ZmxleDtnYXA6MTJweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmc6MTFweCAwO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0LWNhbmFsOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXRvcDowfQouc3B0LWNhbmFsLWljb25ve2ZsZXg6MCAwIGF1dG87d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXItcmFkaXVzOjlweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjE4cHh9Ci5zcHQtY2FuYWwtdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1jYW5hbC10eHQgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXNkLXRpbnRhLCMxNjIxMWEpO2ZvbnQtd2VpZ2h0OjcwMH0KLnNwdC1jYW5hbC10eHQgc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1zZC10ZXh0bywjNDY1MTRhKTt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Ci5zcHQtY2FuYWwtdHh0IGVte2Rpc3BsYXk6YmxvY2s7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTttYXJnaW4tdG9wOjFweH0KLnNwdC1jYW5hbCAuc3B0LWJ0bnt3aWR0aDphdXRvO21hcmdpbjoycHggMCAwO3BhZGRpbmc6NnB4IDEycHg7Zm9udC1zaXplOjEycHh9Cgouc3B0LWZhcXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufQouc3B0LWZhcSBhe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7cGFkZGluZzoxMXB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7CiAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6dmFyKC0tc2QtdGV4dG8sIzQ2NTE0YSk7Zm9udC1zaXplOjEyLjVweH0KLnNwdC1mYXEgYTpmaXJzdC1jaGlsZHtib3JkZXItdG9wOjB9Ci5zcHQtZmFxIGEgLnNwdC1mYXEtaXtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtmb250LXNpemU6MTZweDtmbGV4OjAgMCBhdXRvfQouc3B0LWZhcSBhIHNwYW57ZmxleDoxO21pbi13aWR0aDowfQouc3B0LWZhcSBhIC5zcHQtZmFxLXh7Y29sb3I6dmFyKC0tc2QtdGVudWUsIzkzYTM5OSk7Zm9udC1zaXplOjE1cHg7ZmxleDowIDAgYXV0b30KCkBtZWRpYSAobWF4LXdpZHRoOjExMDBweCl7CiAgLnNwdC1yZWp7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcil9CiAgLnNwdC1sYWRve3Bvc2l0aW9uOnN0YXRpY30KICAuc3B0LWRhdG9ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0KfQoKLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgIEVMIExJU1RBRE8gICgvYWNjb3VudC9zdXBwb3J0KQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi8qIOKUgOKUgCBMYXMgY3VhdHJvIGNpZnJhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU29uIGA8ZGl2PmAgeSBubyBgPGJ1dHRvbj5gOiBubyBzZSBwdWxzYW4gLS1kaWNlbiBjw7NtbyBlc3TDoSBsYQogICBjdWVudGEgZGUgdW4gdmlzdGF6byB5IHBhcmEgZmlsdHJhciBlc3TDoSBsYSBiYXJyYSBkZSBhYmFqby0tIHkKICAgYWRlbcOhcyBsYSBob2phIGdsb2JhbCBhcGxhc3RhIGN1YWxxdWllciBgPGJ1dHRvbj5gIGEgMjVweCBkZSBhbHRvLgogICBJY29ubyBlbiBzdSBjb2x1bW5hIHkgdG9kbyBlbCB0ZXh0byBlbiBsYSBzZWd1bmRhLiAqLwouc3B0LWNpZnJhc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LG1pbm1heCgwLDFmcikpO2dhcDoxMnB4fQouc3B0LWNpZnJhe2Rpc3BsYXk6ZmxleDtnYXA6MTJweDtwYWRkaW5nOjE2cHggMTdweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpOwogIGJvcmRlci1yYWRpdXM6dmFyKC0tc2QtcmFkaW8sMTRweCk7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6dmFyKC0tc2Qtc29tYnJhLDAgMnB4IDEwcHggcmdiYSgyMCw0MCwyNSwuMDYpKX0KLnNwdC1jaWZyYS1pY29ub3tmbGV4OjAgMCBhdXRvO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToyMHB4fQouc3B0LWNpZnJhLXR4dHtmbGV4OjE7bWluLXdpZHRoOjB9Ci5zcHQtY2lmcmEtdHh0IGJ7ZGlzcGxheTpibG9jaztmb250LXNpemU6MjJweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7bGluZS1oZWlnaHQ6MS4xNX0KLnNwdC1jaWZyYS10eHQgc21hbGx7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO2ZvbnQtd2VpZ2h0OjYwMH0KLnNwdC1jaWZyYS10eHQgc3BhbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS4zNTtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KX0KCi8qIOKUgOKUgCBMYSBiYXJyYSBkZSBmaWx0cm9zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwovKiBMYSBiYXJyYSBlcyBgLmFjLWZpbHRyb3NgIChUQWNjb3VudFVJKTogYXF1w60gc29sbyBsYSBjYWphIHF1ZSBsYSBlbnZ1ZWx2ZS4gKi8KLnNwdC1maWx0cm9ze3BhZGRpbmc6MTBweCAxMnB4OwogIGJvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1zZC1yYWRpbywxNHB4KTtiYWNrZ3JvdW5kOiNmZmZ9CgovKiDilIDilIAgTGFzIHBlc3Rhw7FhczogYWJpZXJ0YXMgLyBjZXJyYWRhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLnNwdC1wZXN0YW5hc3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcH0KLnNwdC1wZXN0YW5he2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7aGVpZ2h0OmF1dG87cGFkZGluZzoxMHB4IDE2cHg7Ym9yZGVyLXJhZGl1czoxMHB4OwogIGJvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7YmFja2dyb3VuZDojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDsKICBjb2xvcjp2YXIoLS1zZC10ZXh0bywjNDY1MTRhKTtjdXJzb3I6cG9pbnRlcn0KLnNwdC1wZXN0YW5hIGljb25pZnktaWNvbntmb250LXNpemU6MTZweH0KLnNwdC1wZXN0YW5hOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KLnNwdC1wZXN0YW5hLm9ue2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSk7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLXZlcmRlLWJvcmRlLCNjZmUzZDIpO2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdC1wZXN0YW5hIC5zcHQtY3VlbnRhe3BhZGRpbmc6MXB4IDdweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO2ZvbnQtc2l6ZToxMS41cHh9Ci5zcHQtcGVzdGFuYS5vbiAuc3B0LWN1ZW50YXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLXZlcmRlLWJvcmRlLCNjZmUzZDIpfQoKLyog4pSA4pSAIExhIGZpbGEgZGVsIGxpc3RhZG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIExhIMO6bHRpbWEgcmVzcHVlc3RhIHZhIGVuIGxhIGZpbGEsIG5vIGVzY29uZGlkYSBlbiBsYSBmaWNoYTogZXMgbG8KICAgw7puaWNvIHF1ZSBxdWllcmUgc2FiZXIgcXVpZW4gZW50cmEgYXF1w60gLS1zaSBhbGd1aWVuIGVzdMOhIG1pcmFuZG8KICAgbG8gc3V5by0tLiAqLwouc3B0LXRhYmxhIHRkIC5zcHQtYXN1bnRve2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLXNkLXRpbnRhLCMxNjIxMWEpfQouc3B0LXRhYmxhIHRkIC5zcHQtdWx0aW1ve2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCk7CiAgb3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0NmNofQouc3B0LXRhYmxhIC5zcHQtc2lubGVlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4O21hcmdpbi1sZWZ0OjdweDtwYWRkaW5nOjFweCA3cHg7Ym9yZGVyLXJhZGl1czo5OTlweDsKICBiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLCMwNDcxM2EpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7dmVydGljYWwtYWxpZ246bWlkZGxlfQoKLyog4pSA4pSAIFBpZSBkZSBsYSBsaXN0YSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLnNwdC1waWV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtwYWRkaW5nOjEzcHggMTZweDsKICBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLXNkLXN1YXZlLCM2YjdhNzApfQoKLyog4pSA4pSAIFNpbiBuYWRhIHF1ZSBlbnNlw7FhciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgTm8gZXMgdW4gY2FydGVsIGRlIGVycm9yOiBlcyBsYSBwYW50YWxsYSBxdWUgbcOhcyBzZSB2ZSwgcG9ycXVlIGxvCiAgIG5vcm1hbCBlcyBOTyB0ZW5lciBpbmNpZGVuY2lhcy4gQXPDrSBxdWUgZGljZSBxdcOpIHNlIHB1ZWRlIGhhY2VyLiAqLwouc3B0LXZhY2lve2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2dhcDo5cHg7cGFkZGluZzo0NHB4IDI0cHh9Ci5zcHQtdmFjaW8taWNvbm97d2lkdGg6NjJweDtoZWlnaHQ6NjJweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7CiAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1jbGFybywjZWVmNmVlKTtjb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTtmb250LXNpemU6MjlweH0KLnNwdC12YWNpbyBie2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdC12YWNpbyBwe21hcmdpbjowO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXNkLXN1YXZlLCM2YjdhNzApO21heC13aWR0aDo0NmNofQouc3B0LXZhY2lvIC5zcHQtYnRue21hcmdpbi10b3A6NnB4fQoKQG1lZGlhIChtYXgtd2lkdGg6MTEwMHB4KXsKICAuc3B0LWNpZnJhc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9Cn0KCi8qIOKUgOKUgCBRdWUgY2VkYSBTT0xPIGVsIGFzdW50byDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU2luIGVzdG8sIMKrSU5DLTIwMjYtMDg5N8K7IHkgwqtBQy0yMDI2LTEwNDU4wrsgc2UgcGFydGVuIGVuIHRyZXMKICAgbMOtbmVhcyB5IGxhIGZpbGEgc2UgZGVzY3VhZHJhIGVudGVyYTogY2FkYSBjZWxkYSBkZWNpZGUgcG9yIHN1CiAgIGN1ZW50YSBkw7NuZGUgcm9tcGVyLiBFbCBhc3VudG8gZXMgbGEgw7puaWNhIGNvbHVtbmEgcXVlIHB1ZWRlIGNlZGVyCiAgIC0teSBzdSDDumx0aW1hIHJlc3B1ZXN0YSB5YSB2YSBjb24gcHVudG9zIHN1c3BlbnNpdm9zLS0uCgogICBZIHBvciBlc28gbWlzbW8gbGEgdGFibGEgc2UgcXVlZMOzIGVuIENJTkNPIGNvbHVtbmFzOiBjb24gc2lldGUgeQogICB0b2RvIHNpbiBwYXJ0aXIsIHNlIHNhbMOtYSBkZSBsYSB0YXJqZXRhIHkgc2UgbWV0w61hIGRlYmFqbyBkZSBsYQogICBjb2x1bW5hIGRlIGxhIGRlcmVjaGEuIEVsIHRpcG8gdmEgY29uIGVsIG7Dum1lcm8sIHkgbGEgZmlsYSBlbnRlcmEKICAgZXMgZWwgZW5sYWNlLCBhc8OtIHF1ZSBsYSBjb2x1bW5hIGRlIMKrVmVywrsgc29icmEuICovCi5zcHQtdGFibGEgdGQsIC5zcHQtdGFibGEgdGh7d2hpdGUtc3BhY2U6bm93cmFwfQouc3B0LXRhYmxhIHRkLnNwdC1jb2wtYXN1bnRve3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoxMDAlfQouc3B0LXRhYmxhIHRkLnNwdC1jb2wtYXN1bnRvIC5zcHQtYXN1bnRve3doaXRlLXNwYWNlOm5vcm1hbH0KCi8qIFJlZCBkZSBzZWd1cmlkYWQ6IHNpIGF1biBhc8OtIG5vIGNhYmUsIHNjcm9sbGVhIEVMTEEsIG5vIGxhIHDDoWdpbmEuICovCi5zcHQtdGFibGEtY2FqYXtvdmVyZmxvdy14OmF1dG99CgovKiBFbCBuw7ptZXJvIHkgc3UgdGlwbywgdW5vIGRlYmFqbyBkZWwgb3RybyBlbiBsYSBtaXNtYSBjZWxkYS4gKi8KLnNwdC10YWJsYSAuc3B0LWV4cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0KLnNwdC10YWJsYSB0Ym9keSB0cntjdXJzb3I6cG9pbnRlcn0KCi8qIExhIMO6bHRpbWEgY29sdW1uYSwgY29uIGFpcmUgY29udHJhIGVsIGJvcmRlIGRlIGxhIHRhcmpldGEuICovCi5zcHQtdGFibGEgdGQ6bGFzdC1jaGlsZCwgLnNwdC10YWJsYSB0aDpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MThweDt0ZXh0LWFsaWduOnJpZ2h0fQoKLyog4pSA4pSAIExvIHF1ZSBlbCBjb21wb25lbnRlIHVzYSB5IGxhIG1hcXVldGEgbm8gdGVuw61hIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLnNwdC1sYWRvLW5vdGF7bWFyZ2luOi02cHggMCAxMHB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9CgoKLyogTGEgZmlsYSBkZWwgbGlzdGFkbywgY3VhbmRvIGVsIGNsaWVudGUgdGllbmUgYWxnbyBzaW4gbGVlci4gKi8KLnNwdC10YWJsYSB0ci5zcHQtbnVldmEgdGR7YmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1jbGFybywjZWVmNmVlKX0KLnNwdC10YWJsYSB0ci5zcHQtbnVldmE6aG92ZXIgdGR7YmFja2dyb3VuZDojZTZmMWU2fQoKLyogTWllbnRyYXMgY2FyZ2FuIGxvcyBkYXRvczogbmkgdGFibGEgdmFjw61hIG5pIHNhbHRvIGRlIGFsdHVyYS4gKi8KLnNwdC1jYXJnYW5kb3twYWRkaW5nOjM0cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtmb250LXNpemU6MTNweH0KCi8qIOKUgOKUgCBFTCBBSVJFIEVOVFJFIEJMT1FVRVMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIEVuIGxhIG1hcXVldGEgbGFzIGNpZnJhcywgbGFzIHBlc3Rhw7FhcywgbG9zIGZpbHRyb3MgeSBsYSBsaXN0YSBlcmFuCiAgIGhpam9zIERJUkVDVE9TIGRlIGAuc3B0LWN1ZXJwb2AsIHF1ZSBsb3Mgc2VwYXJhIGNvbiBzdSBgZ2FwYC4gQXF1w60gdmFuCiAgIGVudnVlbHRvcyBlbiBgLnNwdC1qcy1saXN0YWRvYCBwYXJhIHBvZGVyIGNhbWJpYXIgZGUgdmlzdGEsIHkgZXNlCiAgIGVudm9sdG9yaW8gZXMgVU4gc29sbyBoaWpvIGRlbCBmbGV4OiBkZW50cm8gbm8gaGFiw61hIGBnYXBgIG5pbmd1bm8geQogICB0b2RvIHNhbMOtYSBwZWdhZG8sIHNpbiB1biBzb2xvIG1hcmdlbi4KCiAgIFNlIGxlIGRhIGVsIG1pc21vIHJlcGFydG8gZW4gdmV6IGRlIHJlcGFydGlyIG3DoXJnZW5lcyBwb3IgYmxvcXVlOgogICBjb24gYG1hcmdpbi1ib3R0b21gIGVuIGNhZGEgdW5vLCBlbCDDumx0aW1vIGRlamEgdW4gaHVlY28gc29icmFudGUgYWwKICAgZmluYWwgZGUgbGEgY29sdW1uYSB5IGhheSBxdWUgaXIgcXVpdMOhbmRvbG8gYSBtYW5vLiAqLwouc3B0LWpzLWxpc3RhZG8sCi5zcHQtanMtZmljaGF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0KLnNwdC1qcy1saXN0YWRve2dhcDoyMnB4fQoKLyogTGEgZmljaGEgZXMgdW5hIHRhcmpldGE6IHN1IGBnYXBgIGVzIGVsIGRlIGRlbnRybywgbcOhcyBhcHJldGFkby4gKi8KLnNwdC1qcy1maWNoYXtnYXA6MH0KCi8qIFkgbGEgY29sdW1uYSBlbnRlcmEgcmVzcGlyYSBwb3IgZGViYWpvOiBwZWdhZGEgYWwgcGllIGRlbCBzaXRpbyBzZQogICBsZWUgY29tbyBzaSBmYWx0YXJhIGNvbnRlbmlkby4gKi8KLnNwdHtwYWRkaW5nLWJvdHRvbToyOHB4fQoKLyog4pSA4pSAIEVMIEJPVMOTTiDCq0NFTlRSTyBERSBBWVVEQcK7IFNBTMONQSBNT1JBRE8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIEVzIHVuIGA8YSBocmVmPSIvYXl1ZGEiPmAgZGUgdmVyZGFkIC0tdGllbmUgcXVlIHNlcmxvOiBzZSBhYnJlIGVuIG90cmEKICAgcGVzdGHDsWEgY29uIGVsIGJvdMOzbiBkZXJlY2hvLS0geSBsYSBob2phIGdsb2JhbCBwaW50YSBgYTp2aXNpdGVkYCBlbgogICBtb3JhZG8sIGJvcmRlIGluY2x1aWRvLiBgZ2V0Q29tcHV0ZWRTdHlsZWAgc29icmUgZWwgZW5sYWNlIHNpbiB2aXNpdGFyCiAgIG5vIGxvIGVuc2XDsWEsIGFzw60gcXVlIHNvbG8gc2UgdmUgZW4gbGEgcGFudGFsbGEgZGUgcXVpZW4geWEgZW50csOzLgogICBFcyBsYSBtaXNtYSByZWdsYSBxdWUgeWEgbW9yZGnDsyBlbiBsYXMgdGFyamV0YXMtZW5sYWNlLiAqLwouc3B0IGEuc3B0LWJ0biwKLnNwdCBhLnNwdC1idG46dmlzaXRlZHtjb2xvcjp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCk7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0IGEuc3B0LWJ0bi1wcmltYXJpbywKLnNwdCBhLnNwdC1idG4tcHJpbWFyaW86dmlzaXRlZHtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0KLnNwdCBhLnNwdC1idG4tc2VjdW5kYXJpbywKLnNwdCBhLnNwdC1idG4tc2VjdW5kYXJpbzp2aXNpdGVke2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KCi8qIOKUgOKUgCBMT1MgRU5MQUNFUyBERSBMQSBDT0xVTU5BLCBFTiBNQUdFTlRBIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBMYXMgcHJlZ3VudGFzIGZyZWN1ZW50ZXMgc2Fsw61hbiByb3NhczogZWwgcGFuZWwgZGUgY3VlbnRhIHBpbnRhCiAgIGBhOnZpc2l0ZWRgIGNvbiBzdSBwcm9waW8gY29sb3IsIHkgY29tbyBzb24gYDxhPmAgZGUgdmVyZGFkIC0teSBoYXkKICAgcXVlIGRlamFybG9zIGFzw60tLSBoYWLDrWEgcXVlIGRlY2lybG8gYXF1w60sIGVuIGxhcyBkb3MgZm9ybWFzLiBFcyBsYQogICBtaXNtYSByZWdsYSBxdWUgeWEgbW9yZGnDsyBlbiBsYXMgdGFyamV0YXMtZW5sYWNlIGRlbCBjYXTDoWxvZ28sIHkgbm8KICAgc2UgdmUgY29uIGBnZXRDb21wdXRlZFN0eWxlYCBzb2JyZSB1biBlbmxhY2Ugc2luIHZpc2l0YXIuICovCi5zcHQgLnNwdC1mYXEgYSwKLnNwdCAuc3B0LWZhcSBhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tc2QtdGV4dG8sIzQ2NTE0YSl9Ci5zcHQgLnNwdC1mYXEgYTpob3Zlcntjb2xvcjp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCl9Ci5zcHQgLnNwdC1lbmxhY2UsCi5zcHQgLnNwdC1lbmxhY2U6dmlzaXRlZHtjb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKX0KCi8qIExhIHJlc3B1ZXN0YSBkZSB1bmEgcHJlZ3VudGEsIGRlbnRybyBkZWwgb3ZlcmxheS4gKi8KLnNwdC1mYXEtcmVzcHVlc3Rhe3BhZGRpbmc6NHB4IDJweDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuNjU7CiAgY29sb3I6dmFyKC0tc2QtdGV4dG8sIzQ2NTE0YSk7d2hpdGUtc3BhY2U6cHJlLWxpbmU7bWF4LXdpZHRoOjcwY2h9CgovKiDilIDilIAgRUwgSElMTywgQ09OIEFMVFVSQSBGSUpBIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBTaW4gZWxsYSwgbGEgY29udmVyc2FjacOzbiBjcmVjZSBjb24gY2FkYSBtZW5zYWplIHkgbGEgY2FqYSBkZSBlc2NyaWJpcgogICBzZSB2YSBhbCBmb25kbyBkZSBsYSBww6FnaW5hOiBhbCB2aWfDqXNpbW8gbWVuc2FqZSBoYXkgcXVlIGJhamFyIGhhc3RhCiAgIGFiYWpvIHBhcmEgY29udGVzdGFyLCB5IGVsIHTDrXR1bG8gZGVsIGV4cGVkaWVudGUgeWEgbm8gc2UgdmUuCgogICBDb24gYWx0byBmaWpvLCBlbCBxdWUgc2Nyb2xsZWEgZXMgZWwgaGlsbzogbGEgY2FiZWNlcmEgZGVsIGV4cGVkaWVudGUKICAgeSBsYSBjYWphIGRlIGVzY3JpYmlyIHNlIHF1ZWRhbiBzaWVtcHJlIGEgbGEgdmlzdGEsIHF1ZSBlcyBjb21vIHNlIGxlZQogICB1biBjaGF0LiBFbCBkZXNwbGF6YW1pZW50byB2YSBlbiBgLnRjaGF0LWxpc3RgIC0tZWwgY3VlcnBvLS0geSBubyBlbgogICBsYSBjYWphLCBwb3JxdWUgZWwgcGllIGNvbiBlbCBjb21wb3NlciBubyBkZWJlIG1vdmVyc2UuICovCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1saXN0ewogICAgb3ZlcmZsb3cteTphdXRvOwogICAgc2Nyb2xsLWJlaGF2aW9yOnNtb290aDsKfQoKLyog4pSA4pSAIEVMIENIQVQsIDMwMHB4IEZJSk9TIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBBbHR1cmEgZmlqYSB5IHB1bnRvOiBuaSBjYWxjdWxhZGEsIG5pIG1lZGlkYSwgbmkgZGVwZW5kaWVudGUgZGUgbGEKICAgdmVudGFuYS4gTG8gcXVlIGNyZWNlIGVzIGVsIG7Dum1lcm8gZGUgbWVuc2FqZXMsIHkgcGFyYSBlc28gZXN0w6EgZWwKICAgZGVzcGxhemFtaWVudG8gZGVsIHByb3BpbyBoaWxvLgoKICAgTG9zIDMwMHB4IHNvbiBkZWwgQ09NUE9ORU5URTogZGVudHJvLCBlbCBwaWUgZGUgZXNjcmliaXIgc2UgcXVlZGEgY29uCiAgIGxvIHN1eW8geSBlbCByZXN0byBlcyBjb252ZXJzYWNpw7NuLiBBc8OtIGxhIGZpY2hhIG1pZGUgc2llbXByZSBsbwogICBtaXNtbywgc2UgYWJyYSBjb24gZG9zIG1lbnNhamVzIG8gY29uIGN1YXJlbnRhLgoKICAgYG1pbi1oZWlnaHQ6MGAgZW4gdG9kYSBsYSBjYWRlbmE6IHVuIGhpam8gZmxleCBubyBiYWphIGRlIHN1IGNvbnRlbmlkbwogICBwb3IgZGVmZWN0byAoYG1pbi1oZWlnaHQ6YXV0b2ApLCB5IGJhc3RhIGNvbiBxdWUgdW5vIHNlIG9sdmlkZSBwYXJhCiAgIHF1ZSBlbCBoaWxvIHNlIG5pZWd1ZSBhIGVuY29nZXIgeSBsb3MgMzAwcHggc2UgZGVzYm9yZGVuIHBvciBhYmFqby4gKi8KLnNwdC1oaWxve2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Cgouc3B0LWhpbG8gLlRDaGF0ewogICAgaGVpZ2h0OjMwMHB4OwogICAgbWluLWhlaWdodDowOwogICAgZGlzcGxheTpmbGV4OwogICAgZmxleC1kaXJlY3Rpb246Y29sdW1uOwp9Cgouc3B0LWhpbG8gLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1jYWphe2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDowO21heC1oZWlnaHQ6bm9uZX0KCi8qIExhIGNvbnZlcnNhY2nDs24gZXMgbGEgcXVlIGNlZGU7IGVsIHBpZSBkZSBlc2NyaWJpciwgbm86IGVzIGxvIHF1ZSBzZQogICBlc3TDoSB1c2FuZG8uICovCi5zcHQtaGlsbyAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWxpc3R7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0OjB9Ci5zcHQtaGlsbyAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWZvcm17ZmxleDowIDAgYXV0b30KCi8qIExBIEZJQ0hBIE5PIExMRVZBIEFMVFVSQTogbGEgw7puaWNhIG1lZGlkYSBmaWphIGVzIGxhIGRlbCBjaGF0LCB5IGxvIGRlbcOhcwogICBjcmVjZSBjb24gc3UgY29udGVuaWRvLiBIdWJvIHVuYSBhbHR1cmEgY2FsY3VsYWRhIGVuIEpTIHBhcmEgcXVlIGxhIGZpY2hhCiAgIGN1cGllcmEgZW4gbGEgdmVudGFuYSwgeSBzZSByZXRpcsOzIHBvcnF1ZSBzZSBwaWRpw7MgZmlqYS4gKi8KCi8qIFkgbGEgYmFycmEgZGUgZGVzcGxhemFtaWVudG8sIGRpc2NyZXRhOiBsYSBkZWwgc2lzdGVtYSBzb2JyZSBmb25kbwogICBjbGFybyBjb3J0YSBsYSBjb2x1bW5hIGVuIGRvcy4gKi8KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjhweH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iewogICAgYmFja2dyb3VuZDp2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTtib3JkZXItcmFkaXVzOjRweH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyewogICAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KCi8qIOKUgOKUgCBFTCBNQUdFTlRBIERFIGBhIHNwYW5gIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBNZWRpZG8gZW4gbGEgcGFudGFsbGEsIG5vIGRlZHVjaWRvOiBsYSBob2phIGdsb2JhbCBsbGV2YQoKICAgICAgIGEsIC5saW5rLCBhOmFjdGl2ZSwgYTpmb2N1cywgYTp2aXNpdGVkLCBhIHNwYW4g4oaSICM5MTBjODgKCiAgIHkgcGludGEgZWwgU1BBTiwgbm8gc29sbyBlbCBlbmxhY2UuIFBvciBlc28gbGFzIHByZWd1bnRhcyBmcmVjdWVudGVzCiAgIHNhbMOtYW4gbW9yYWRhcyBhdW5xdWUgYGdldENvbXB1dGVkU3R5bGVgIHNvYnJlIGVsIGA8YT5gIGRpZXJhIGVsIGdyaXMKICAgY29ycmVjdG86IGVsIGNvbG9yIG5vIGxvIGhlcmVkYWJhbiwgbG8gdGVuw61hbiBwdWVzdG8uCgogICBTZSBhcnJlZ2xhIGVuIHVuIHNpdGlvIHkgcGFyYSB0b2RhIGxhIHBhbnRhbGxhOiBkZW50cm8gZGUgYC5zcHRgLCBlbAogICB0ZXh0byBkZSB1biBlbmxhY2UgaGVyZWRhIGRlIHN1IGVubGFjZS4gVmFsZSBwYXJhIGxhcyBtaWdhcywgbG9zCiAgIGJvdG9uZXMgLS1xdWUgbGxldmFuIGljb25vIHkgdGV4dG8gZW4gc3BhbnMtLSB5IGxhcyBwcmVndW50YXMuICovCi5zcHQgYSBzcGFuLAouc3B0IGE6dmlzaXRlZCBzcGFuLAouc3B0IGE6aG92ZXIgc3BhbiwKLnNwdCBhOmZvY3VzIHNwYW57Y29sb3I6aW5oZXJpdH0KCi8qIOKUgOKUgCBFTCBPVkVSTEFZIERFIMKrQUJSSVIgRVhQRURJRU5URcK7IE5PIFNFIFBJTlRBIEFRVcONIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBFc3RhYmEgZW4gZXN0YSBob2phLCB5IGFzw60gc29sbyB2YWzDrWEgY3VhbmRvIGVsIGZvcm11bGFyaW8gc2UgYWJyw61hCiAgIGRlc2RlIGVzdGEgcGFudGFsbGE6IGVsIG1pc21vIG92ZXJsYXkgYWJpZXJ0byBkZXNkZSBsYSBmaWNoYSBkZSB1bgogICBwZWRpZG8gc2Fsw61hIGNvbiBlbCBib3TDs24gbmVncm8gZGVsIHNpdGlvLiBWaXZlIGVuCiAgIGBUU3VwcG9ydFRpY2tldEZvcm0vY3NzYCwgcXVlIGVzIGVsIGNvbXBvbmVudGUgcXVlIG1vbnRhIGVsIG92ZXJsYXkgeQogICB2aWFqYSBjb24gbGFzIHRyZXMgcGFudGFsbGFzIHF1ZSBsbyBhYnJlbi4gKi8KCi8qIEVOIEVMIFRFTMOJRk9OTyAoMjQvMDkvMjAyNikuIEVsIGF2aXNvIMKrwr9OZWNlc2l0YXMgYXl1ZGE/wrsgZXJhIHVuYSBmaWxhIC0taWNvbm8sCiAgIHRleHRvIHkgZG9zIGJvdG9uZXMtLSBxdWUgYSAzNjBweCBkZWphYmEgZWwgdGV4dG8gZW4gdW5hIHBhbGFicmEgcG9yIGzDrW5lYSB5CiAgIHNhY2FiYSBsb3MgYm90b25lcyBkZSBsYSBwYW50YWxsYSAobGEgcMOhZ2luYSBtZWTDrWEgNjExcHgpLiBFbCB0ZXh0byByZXNwaXJhCiAgIGp1bnRvIGFsIGljb25vIHkgbG9zIGJvdG9uZXMgYmFqYW4sIGNhZGEgdW5vIGEgc3UgYW5jaG8uICovCkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgLnNwdC1heXVkYSB7IGZsZXgtd3JhcDogd3JhcDsgcGFkZGluZzogMTZweDsgZ2FwOiAxMnB4OyB9CiAgICAuc3B0LWF5dWRhLXR4dCB7IGZsZXg6IDEgMSAxODBweDsgfQogICAgLnNwdC1heXVkYS1hY2Npb25lcyB7IGZsZXg6IDEgMSAxMDAlOyB9CiAgICAuc3B0LWF5dWRhLWFjY2lvbmVzID4gKiB7IGZsZXg6IDEgMSBhdXRvOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfQp9Cg0KDQo8L3N0eWxlPg0KDQo8c2NyaXB0IG5hbWU9IlRBY2NvdW50U3VwcG9ydCIgPi8qKgogKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICogIFNPUE9SVEUg4oCUIGVsIMOhcmVhIGRlIGNsaWVudGUKICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAqCiAqIFBpZGUgYC9hY2NvdW50L3N1cHBvcnQvZGF0YWAgeSBwaW50YS4gTGEgZmljaGEgZGUgdW4gZXhwZWRpZW50ZSBlcyBsYSBNSVNNQQogKiBwYW50YWxsYSBlbiBvdHJhIHZpc3RhLCBubyBvdHJvIGNvbXBvbmVudGUuCiAqCiAqIEVMIE1BUkNBRE8gTk8gRVNUw4EgQVFVw406IHZpdmUgZW4gZWwgYC5waHBgLCBlbiBgPHRlbXBsYXRlPmAsIHkgYXF1w60gc29sbyBzZQogKiBjbG9uYSB5IHNlIHJlbGxlbmEuIE5pIHVuYSBjYWRlbmEgZGUgcGxhbnRpbGxhIGNvbiBIVE1MIGRlbnRybyAtLSBlcyBsYSByZWdsYQogKiBkZWwgcHJveWVjdG8sIHkgZXMgbG8gcXVlIHBlcm1pdGUgbGVlciBsYSBwYW50YWxsYSBzaW4gZWplY3V0YXJsYS4KICoKICog4pSA4pSAIEVMIEhJTE8gRVMgYFRDaGF0YCwgTk8gVU4gQ0hBVCBERSBFU1RBIFBBTlRBTExBIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogKgogKiBFbCBjb250cm9sIHlhIHRyYWUgYnVyYnVqYXMsIGFkanVudG9zIGNvbiBiYW5kZWphLCBtaW5pYXR1cmFzLCB2aXNvciB5CiAqIGVkaWNpw7NuLCB5IGhhYmxhIGNvbiBgL2NoYXQve3RpcG99L3tpZH1gLCBxdWUgZXMgZWwgZW5kcG9pbnQgdW5pdmVyc2FsLiBBcXXDrQogKiBzb2xvIHNlIGluc3RhbmNpYSB5IHNlIGxlIGNhbWJpYSBlbCBjb2xvciBkZXNkZSBlbCBDU1MsIGVzY29wYWRvIGJham8gYC5zcHRgLgogKgogKiDilIDilIAgRUwgRklMVFJBRE8gRVMgREUgRVNURSBMQURPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogKgogKiBMb3MgZXhwZWRpZW50ZXMgZGUgVU5BIHBlcnNvbmEgY2FiZW4gZW50ZXJvcyBlbiB1bmEgcmVzcHVlc3RhLCBhc8OtIHF1ZQogKiBlc2NyaWJpciBlbiBlbCBidXNjYWRvciByZXNwb25kZSBhbCBpbnN0YW50ZSBlbiB2ZXogZGUgZXNwZXJhciB1bmEgdnVlbHRhIGFsCiAqIHNlcnZpZG9yIHBvciBjYWRhIHRlY2xhLiBFbCBkw61hIHF1ZSBhbGd1aWVuIGFjdW11bGUgY2llbnRvcyBoYWJyw6EgcXVlCiAqIHBhZ2luYXI7IGhhc3RhIGFow60sIGVzdG8gZXMgbG8gY29ycmVjdG8uCiAqCiAqIOKUgOKUgCBqUXVlcnkgMy43LjEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqCiAqIEVsIHByb3llY3RvIHBhc8OzIGEgMy43LjEgeSBxdWl0w7MgYGpxdWVyeS1taWdyYXRlYCAoMTAvMDkvMjAyNiksIGFzw60gcXVlIGFxdcOtCiAqIFPDjSBoYXkgYC5wcm9wKClgLCBgZS5rZXlgIHkgZGVsZWdhY2nDs24gZGUgYGNoYW5nZWAgcXVlIGZ1bmNpb25hIC0tIGxvIHF1ZQogKiBkdXJhbnRlIGHDsW9zIG5vIHNlIHBvZMOtYSB1c2FyIHkgc2lndWUgZXNjcml0byBlbiBgQ0xBVURFLm1kYCB5IGVuIG11Y2hvcwogKiBjb21lbnRhcmlvcyBkZSBjb21wb25lbnRlcyB2aWVqb3MuIExvIHF1ZSBzZSBmdWUgY29uIGVsIGNhbWJpbyBlcwogKiBgJC5ldmVudC5wcm9wc2AsIHF1ZSB0dW1iYWJhIGBUVXBsb2FkZXJgIC0teSBjb24gw6lsIENVQUxRVUlFUiBwYW50YWxsYSBjb24KICogaGlsby0tIGFsIGNvbnN0cnVpcnNlLgogKi8KY2xhc3MgVEFjY291bnRTdXBwb3J0IGV4dGVuZHMgVENvbXBvbmVudEVTNiB7CgogICAgY29uc3RydWN0b3IocGFyYW1zID0ge30pIHsKCiAgICAgICAgc3VwZXIoeyB0aXRsZTogJ1NvcG9ydGUnLCAuLi5wYXJhbXMgfSk7CgogICAgICAgIHRoaXMuX2V4cGVkaWVudGVzID0gW107CiAgICAgICAgdGhpcy5fcGFuZWwgICAgICAgPSAnYWJpZXJ0YXMnOwogICAgICAgIHRoaXMuX2ZpbHRyb3MgICAgID0geyB0ZXh0bzogJycsIHRpcG86ICcnLCBlc3RhZG86ICcnIH07CiAgICAgICAgdGhpcy5fY2hhdCAgICAgICAgPSBudWxsOwogICAgICAgIHRoaXMuX2ZpY2hhICAgICAgID0gbnVsbDsKCiAgICAgICAgdGhpcy5fZW5nYW5jaGFyKCk7CgogICAgICAgIC8qIExBIENBQkVDRVJBLCBBTlRFUyBERSBQRURJUiBOQURBOiBlcyBtYXJjYWRvIGZpam8gLS1jYW1pbm8sIHTDrXR1bG8geQogICAgICAgICAgIGVsIGJvdMOzbiBkZSBhYnJpciBleHBlZGllbnRlLS0geSBhc8OtIGxhIHBhbnRhbGxhIG5vIGFycmFuY2Egc2luCiAgICAgICAgICAgdMOtdHVsbyBtaWVudHJhcyBsbGVnYSBsYSByZXNwdWVzdGEuIFNpIHNlIGVudHJhIGRpcmVjdG8gYSB1bmEgZmljaGEsCiAgICAgICAgICAgYF9kZUxhVXJsKClgIGxhIHJlcGludGEgYWwgcmVjaWJpciBsb3MgZGF0b3MuICovCiAgICAgICAgdGhpcy5fY2FiZWNlcmFMaXN0YWRvKCk7CgogICAgICAgIHRoaXMuY2FyZ2FyKCk7CgoKICAgICAgICAvKiBZIHNpIHNlIGhhIGVudHJhZG8gcG9yIGVsIGVubGFjZSBkZSB1biBjb3JyZW8gbyBkZSB1bmEgbm90aWZpY2FjacOzbgogICAgICAgICAgIC0tYC9hY2NvdW50L3N1cHBvcnQvaW5jaWRlbmNpYS8xMmAsIHF1ZSBlbCBjb250cm9sYWRvciBjb252aWVydGUgZW4KICAgICAgICAgICBgP3JvdXRlPXN1cHBvcnQmaWQ9aW5jaWRlbmNpYS0xMmAtLSwgc2UgYWJyZSBlc2EgZmljaGEuICovCiAgICAgICAgdGhpcy5fZGVMYVVybCgpOwogICAgfQoKICAgIC8qKiBDbG9uYSB1biBgPHRlbXBsYXRlPmAgZGVsIGAucGhwYDogc3UgY29udGVuaWRvIHZpdmUgZW4gYC5jb250ZW50YC4gKi8KICAgIF9wbGFudGlsbGEoY2xhc2UpIHsKICAgICAgICBjb25zdCB0ID0gdGhpcy5odG1sLmZpbmQoJ3RlbXBsYXRlLicgKyBjbGFzZSkuZ2V0KDApOwogICAgICAgIHJldHVybiB0ID8gJCh0LmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpLmZpcnN0RWxlbWVudENoaWxkKSA6ICQoKTsKICAgIH0KCiAgICAvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgICAqICBFTkdBTkNIRVMKICAgICAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqLwoKICAgIF9lbmdhbmNoYXIoKSB7CgogICAgICAgIGNvbnN0IHlvID0gdGhpczsKCiAgICAgICAgdGhpcy5odG1sLm9uKCdjbGljaycsICcuc3B0LWpzLXBlc3RhbmEnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHlvLl9wYW5lbCA9ICQodGhpcykuYXR0cignZGF0YS1wYW5lbCcpIHx8ICdhYmllcnRhcyc7CiAgICAgICAgICAgIHlvLmh0bWwuZmluZCgnLnNwdC1qcy1wZXN0YW5hJykucmVtb3ZlQ2xhc3MoJ29uJyk7CiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ29uJyk7CiAgICAgICAgICAgIHlvLl9waW50YXJGaWxhcygpOwogICAgICAgIH0pOwoKICAgICAgICAvKiBga2V5dXBgIHkgbm8gYGNoYW5nZWA6IGVsIGJ1c2NhZG9yIHRpZW5lIHF1ZSByZXNwb25kZXIgc2Vnw7puIHNlCiAgICAgICAgICAgZXNjcmliZSwgcXVlIGVzIGRlIGxvIHF1ZSBzaXJ2ZSB0ZW5lcmxvIGVuIGVsIGNsaWVudGUuICovCiAgICAgICAgdGhpcy5odG1sLm9uKCdrZXl1cCcsICcuc3B0LWpzLWJ1c2NhcicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgeW8uX2ZpbHRyb3MudGV4dG8gPSAoJCh0aGlzKS52YWwoKSB8fCAnJykudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB5by5fcGludGFyRmlsYXMoKTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5odG1sLm9uKCdjaGFuZ2UnLCAnLnNwdC1qcy10aXBvJywgICBmdW5jdGlvbiAoKSB7IHlvLl9maWx0cm9zLnRpcG8gICA9ICQodGhpcykudmFsKCkgfHwgJyc7IHlvLl9waW50YXJGaWxhcygpOyB9KTsKICAgICAgICB0aGlzLmh0bWwub24oJ2NoYW5nZScsICcuc3B0LWpzLWVzdGFkbycsIGZ1bmN0aW9uICgpIHsgeW8uX2ZpbHRyb3MuZXN0YWRvID0gJCh0aGlzKS52YWwoKSB8fCAnJzsgeW8uX3BpbnRhckZpbGFzKCk7IH0pOwoKICAgICAgICAvKiBMYSBmaWxhIGVudGVyYSBlcyBlbCBlbmxhY2U6IHBvciBlc28gbm8gaGF5IGNvbHVtbmEgZGUgwqtWZXLCuy4gKi8KICAgICAgICB0aGlzLmh0bWwub24oJ2NsaWNrJywgJy5zcHQtanMtZmlsYXMgdHInLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGNvbnN0IHRpcG8gPSAkKHRoaXMpLmF0dHIoJ2RhdGEtdGlwbycpOwogICAgICAgICAgICBjb25zdCBpZCAgID0gcGFyc2VJbnQoJCh0aGlzKS5hdHRyKCdkYXRhLWlkJyksIDEwKTsKICAgICAgICAgICAgaWYgKHRpcG8gJiYgaWQpIHlvLmFicmlyRmljaGEodGlwbywgaWQpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmh0bWwub24oJ2NsaWNrJywgJy5zcHQtanMtdm9sdmVyJywgKCkgPT4gdGhpcy52ZXJMaXN0YWRvKCkpOwogICAgICAgIHRoaXMuaHRtbC5vbignY2xpY2snLCAnLnNwdC1qcy1hYnJpcicsICAoKSA9PiB0aGlzLmFicmlyTnVldmEoKSk7CiAgICAgICAgdGhpcy5odG1sLm9uKCdjbGljaycsICcuc3B0LWpzLWNoYXQnLCAgICgpID0+IHRoaXMuYWJyaXJDaGF0KCkpOwogICAgICAgIHRoaXMuaHRtbC5vbignY2xpY2snLCAnLnNwdC1qcy1jb3BpYXInLCAoKSA9PiB0aGlzLl9jb3BpYXIoKSk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgTE9TIERBVE9TCiAgICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCiAgICBjYXJnYXIoKSB7CgogICAgICAgIGNvbnN0IHlvID0gdGhpczsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZmlsYXMnKS5odG1sKCc8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzcHQtY2FyZ2FuZG8iPkNhcmdhbmRvIHR1cyBleHBlZGllbnRlc+KApjwvdGQ+PC90cj4nKTsKCiAgICAgICAgVE5ldENvbS5HRVQoJy9hY2NvdW50L3N1cHBvcnQvZGF0YScsIHt9LCBmdW5jdGlvbiAocmVzcCkgewoKICAgICAgICAgICAgY29uc3QgZCA9IChyZXNwICYmIHJlc3AuZGF0YSkgPyByZXNwLmRhdGEgOiByZXNwOwoKICAgICAgICAgICAgaWYgKCFkIHx8ICFkLmV4cGVkaWVudGVzKSB7CiAgICAgICAgICAgICAgICB5by5odG1sLmZpbmQoJy5zcHQtanMtZmlsYXMnKS5odG1sKCc8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzcHQtY2FyZ2FuZG8iPk5vIGhlbW9zIHBvZGlkbyBjYXJnYXIgdHVzIGV4cGVkaWVudGVzLjwvdGQ+PC90cj4nKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgeW8uX2V4cGVkaWVudGVzID0gZC5leHBlZGllbnRlcyB8fCBbXTsKCiAgICAgICAgICAgIHlvLl9waW50YXJDaWZyYXMoZC5jaWZyYXMgfHwge30pOwogICAgICAgICAgICB5by5fcGludGFyQ2FuYWxlcyhkLmNhbmFsZXMgfHwge30pOwogICAgICAgICAgICB5by5fcGludGFyRmFxKGQuZmFxIHx8IFtdKTsKICAgICAgICAgICAgeW8uX3BpbnRhckZpbGFzKCk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgRUwgTElTVEFETwogICAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgogICAgX3BpbnRhckNpZnJhcyhjKSB7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtYy1hYmllcnRhcycpLnRleHQoYy5hYmllcnRhcyB8fCAwKTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1jLXJlc3VlbHRhcycpLnRleHQoYy5yZXN1ZWx0YXMgfHwgMCk7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtYy1zaW5sZWVyJykudGV4dChjLnNpbkxlZXIgfHwgMCk7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtYy10b3RhbCcpLnRleHQoYy50b3RhbCB8fCAwKTsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtbi1hYmllcnRhcycpLnRleHQoYy5hYmllcnRhcyB8fCAwKTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1uLWNlcnJhZGFzJykudGV4dChjLmNlcnJhZGFzIHx8IDApOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLW4tdG9kYXMnKS50ZXh0KGMudG90YWwgfHwgMCk7CiAgICB9CgogICAgLyoqIExvIHF1ZSBwYXNhIGxvcyBmaWx0cm9zIHkgbGEgcGVzdGHDsWEgcHVlc3RhLiAqLwogICAgX3Zpc2libGVzKCkgewoKICAgICAgICBjb25zdCBmID0gdGhpcy5fZmlsdHJvczsKICAgICAgICBjb25zdCBwID0gdGhpcy5fcGFuZWw7CgogICAgICAgIHJldHVybiB0aGlzLl9leHBlZGllbnRlcy5maWx0ZXIoZnVuY3Rpb24gKGUpIHsKCiAgICAgICAgICAgIGNvbnN0IGFiaWVydG8gPSBlLmVzdGFkby5jb2RlID09PSAnd2FpdGluZycgfHwgZS5lc3RhZG8uY29kZSA9PT0gJ2F0dGVuZGVkJzsKCiAgICAgICAgICAgIGlmIChwID09PSAnYWJpZXJ0YXMnICYmICFhYmllcnRvKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmIChwID09PSAnY2VycmFkYXMnICYmIGFiaWVydG8pICByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICBpZiAoZi50aXBvICAgJiYgZS50aXBvICE9PSBmLnRpcG8pICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKGYuZXN0YWRvICYmIGUuZXN0YWRvLmNvZGUgIT09IGYuZXN0YWRvKSByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICBpZiAoZi50ZXh0bykgewogICAgICAgICAgICAgICAgY29uc3Qgc2FjbyA9IFtlLmNvZGUsIGUuYXN1bnRvLCAoZS5wZWRpZG8gPyBlLnBlZGlkby5yZWYgOiAnJyksIChlLnZlbmRlZG9yIHx8ICcnKV0KICAgICAgICAgICAgICAgICAgICAuam9pbignICcpLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgaWYgKHNhY28uaW5kZXhPZihmLnRleHRvKSA9PT0gLTEpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICB9CgogICAgX3BpbnRhckZpbGFzKCkgewoKICAgICAgICBjb25zdCBmaWxhcyAgPSB0aGlzLl92aXNpYmxlcygpOwogICAgICAgIGNvbnN0ICRkb25kZSA9IHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWZpbGFzJykuZW1wdHkoKTsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtdmFjaW8nKS5nZXQoMCkuaGlkZGVuICAgICAgPSBmaWxhcy5sZW5ndGggPiAwOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWxpc3RhLWNhcmQnKS5nZXQoMCkuaGlkZGVuID0gZmlsYXMubGVuZ3RoID09PSAwOwoKICAgICAgICBpZiAoIWZpbGFzLmxlbmd0aCkgewogICAgICAgICAgICB0aGlzLl90ZXh0b0RlbFZhY2lvKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsYXMubGVuZ3RoOyBpKyspICRkb25kZS5hcHBlbmQodGhpcy5fZmlsYShmaWxhc1tpXSkpOwoKICAgICAgICBjb25zdCAkcGllID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtcGllJyk7CiAgICAgICAgJHBpZS5nZXQoMCkuaGlkZGVuID0gZmFsc2U7CiAgICAgICAgJHBpZS5maW5kKCcuc3B0LWpzLWN1ZW50YScpLnRleHQoCiAgICAgICAgICAgIGZpbGFzLmxlbmd0aCA9PT0gdGhpcy5fZXhwZWRpZW50ZXMubGVuZ3RoCiAgICAgICAgICAgICAgICA/IGZpbGFzLmxlbmd0aCArIChmaWxhcy5sZW5ndGggPT09IDEgPyAnIGV4cGVkaWVudGUnIDogJyBleHBlZGllbnRlcycpCiAgICAgICAgICAgICAgICA6IGZpbGFzLmxlbmd0aCArICcgZGUgJyArIHRoaXMuX2V4cGVkaWVudGVzLmxlbmd0aCArICcgZXhwZWRpZW50ZXMnCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVMIFZBQ8ONTyBESUNFIFBPUiBRVcOJIEVTVMOBIFZBQ8ONTy4KICAgICAqCiAgICAgKiBObyBlcyBsbyBtaXNtbyBubyB0ZW5lciBuYWRhIHF1ZSBoYWJlciBmaWx0cmFkbyBoYXN0YSBxdWVkYXJzZSBzaW4KICAgICAqIG5hZGE6IGNvbiBlbCBtaXNtbyB0ZXh0byBwYXJhIGxvcyBkb3MgY2Fzb3MsIHF1aWVuIGFjYWJhIGRlIGVzY3JpYmlyIGVuCiAgICAgKiBlbCBidXNjYWRvciBjcmVlIHF1ZSBoYSBwZXJkaWRvIHN1cyBleHBlZGllbnRlcy4KICAgICAqLwogICAgX3RleHRvRGVsVmFjaW8oKSB7CgogICAgICAgIGNvbnN0IGZpbHRyYW5kbyA9IHRoaXMuX2ZpbHRyb3MudGV4dG8gfHwgdGhpcy5fZmlsdHJvcy50aXBvIHx8IHRoaXMuX2ZpbHRyb3MuZXN0YWRvOwoKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy12YWNpby10aXR1bG8nKS50ZXh0KAogICAgICAgICAgICBmaWx0cmFuZG8gPyAnTmluZ8O6biBleHBlZGllbnRlIGNvaW5jaWRlIGNvbiBsYSBiw7pzcXVlZGEnCiAgICAgICAgICAgICAgICAgICAgICA6ICh0aGlzLl9wYW5lbCA9PT0gJ2NlcnJhZGFzJyA/ICdObyB0aWVuZXMgZXhwZWRpZW50ZXMgY2VycmFkb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdObyB0aWVuZXMgbmluZ3VuYSBpbmNpZGVuY2lhIGFiaWVydGEnKQogICAgICAgICk7CgogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLXZhY2lvLXRleHRvJykudGV4dCgKICAgICAgICAgICAgZmlsdHJhbmRvID8gJ1BydWViYSBjb24gb3RybyB0ZXh0bywgbyBxdWl0YSBsb3MgZmlsdHJvcyBwYXJhIHZlcmxvcyB0b2Rvcy4nCiAgICAgICAgICAgICAgICAgICAgICA6ICdDdWFuZG8gYWJyYXMgdW5hIGluY2lkZW5jaWEgc29icmUgdW4gcGVkaWRvIG8gbm9zIGhhZ2FzIHVuYSBjb25zdWx0YSwgYXBhcmVjZXLDoSBhcXXDrSBjb24gc3UgZXN0YWRvIHkgc3VzIHJlc3B1ZXN0YXMuJwogICAgICAgICk7CiAgICB9CgogICAgX2ZpbGEoZSkgewoKICAgICAgICBjb25zdCAkZiA9IHRoaXMuX3BsYW50aWxsYSgnc3B0LXRwbC1maWxhJyk7CgogICAgICAgICRmLmF0dHIoJ2RhdGEtaWQnLCBlLmlkKS5hdHRyKCdkYXRhLXRpcG8nLCBlLnRpcG8pOwoKICAgICAgICBpZiAoZS5zaW5MZWVyKSAkZi5hZGRDbGFzcygnc3B0LW51ZXZhJyk7CgogICAgICAgICRmLmZpbmQoJy5zcHQtcmVmJykudGV4dChlLmNvZGUpOwogICAgICAgICRmLmZpbmQoJy5zcHQtdGlwbycpCiAgICAgICAgICAgIC50ZXh0KGUudGlwbyA9PT0gJ2luY2lkZW5jaWEnID8gJ0luY2lkZW5jaWEnIDogJ0NvbnN1bHRhJykKICAgICAgICAgICAgLmFkZENsYXNzKGUudGlwbyA9PT0gJ2luY2lkZW5jaWEnID8gJ3NwdC10aXBvLWluYycgOiAnc3B0LXRpcG8tY29uJyk7CgogICAgICAgICRmLmZpbmQoJy5zcHQtYXN1bnRvJykudGV4dChlLmFzdW50byk7CgogICAgICAgIGlmIChlLnNpbkxlZXIpICRmLmZpbmQoJy5zcHQtYXN1bnRvJykuYXBwZW5kKHRoaXMuX21hcmNhTnVldmEoKSk7CgogICAgICAgICRmLmZpbmQoJy5zcHQtdWx0aW1vJykudGV4dChlLnVsdGltby50ZXh0byB8fCAnJyk7CiAgICAgICAgJGYuZmluZCgnLnNwdC1jZWxkYS1wZWRpZG8nKS50ZXh0KGUucGVkaWRvID8gZS5wZWRpZG8ucmVmIDogJ+KAlCcpOwogICAgICAgICRmLmZpbmQoJy5zcHQtY2VsZGEtZmVjaGEnKS50ZXh0KGUudWx0aW1vLmZlY2hhIHx8ICfigJQnKTsKICAgICAgICAkZi5maW5kKCcuc3B0LWNlbGRhLWVzdGFkbycpLmFwcGVuZCh0aGlzLl9waWxkb3JhKGUuZXN0YWRvKSk7CgogICAgICAgIHJldHVybiAkZjsKICAgIH0KCiAgICBfbWFyY2FOdWV2YSgpIHsKICAgICAgICByZXR1cm4gJCgnPHNwYW4gY2xhc3M9InNwdC1zaW5sZWVyIj48L3NwYW4+JykudGV4dCgnbnVldm8nKTsKICAgIH0KCiAgICBfcGlsZG9yYShlc3RhZG8pIHsKICAgICAgICByZXR1cm4gJCgnPHNwYW4gY2xhc3M9InNwdC1waWxkb3JhIj48L3NwYW4+JykKICAgICAgICAgICAgLmFkZENsYXNzKCdzcHQtcC0nICsgKGVzdGFkby50b25vIHx8ICdncmlzJykpCiAgICAgICAgICAgIC50ZXh0KGVzdGFkby5sYWJlbCk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgTEEgQ09MVU1OQSBERVJFQ0hBCiAgICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCiAgICAvKioKICAgICAqIExPUyBDQU5BTEVTIERFIExBIFBMQVRBRk9STUEsIG5vIGxvcyBkZWwgYWdyaWN1bHRvci4KICAgICAqCiAgICAgKiBTYWxlbiBkZSBsYSBmaWNoYSBkZSBsYSBjYXNhIChgQ29yZVxFbnRlcnByaXNlYCksIGFzw60gcXVlIGVsIGTDrWEgcXVlCiAgICAgKiBjYW1iaWUgZWwgaG9yYXJpbyBvIGVsIHRlbMOpZm9ubyBubyBoYXkgcXVlIGJ1c2NhcmxvcyBwb3IgbGFzIHBhbnRhbGxhcy4KICAgICAqIFkgc2UgcGludGEgc29sbyBsbyBxdWUgaGF5OiB1biBjYW5hbCBjb24gZWwgaHVlY28gdmFjw61vIGVzIHBlb3IgcXVlIG5vCiAgICAgKiBvZnJlY2VybG8sIHBvcnF1ZSBhbGd1aWVuIGxvIGludGVudGEuCiAgICAgKi8KICAgIF9waW50YXJDYW5hbGVzKGMpIHsKCiAgICAgICAgY29uc3QgJGRvbmRlID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtY2FuYWxlcycpLmVtcHR5KCk7CiAgICAgICAgY29uc3QgZmlsYXMgID0gW107CgogICAgICAgIGlmIChjLmNoYXQgJiYgYy5jaGF0LmFjdGl2bykgewogICAgICAgICAgICBmaWxhcy5wdXNoKFsnbHVjaWRlOm1lc3NhZ2Utc3F1YXJlJywgJ3NwdC10LXZlcmRlJywgJ0NoYXQgZW4gbMOtbmVhJywgJycsIGMuY2hhdC5kZXRhbGxlIHx8ICcnLCB0cnVlXSk7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBob3Jhc0NvcnJlbyA9IHBhcnNlSW50KGMuZW1haWxfaG9yYXMgfHwgMCwgMTApOwogICAgICAgIGlmIChjLmVtYWlsKSAgICBmaWxhcy5wdXNoKFsnbHVjaWRlOm1haWwnLCAgJ3NwdC10LWF6dWwnLCAnQ29ycmVvIGVsZWN0csOzbmljbycsIGMuZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcmFzQ29ycmVvID4gMCA/ICdUZSBjb250ZXN0YW1vcyBlbiAnICsgaG9yYXNDb3JyZW8gKyAnIGgnIDogJycsIGZhbHNlXSk7CiAgICAgICAgaWYgKGMudGVsZWZvbm8pIGZpbGFzLnB1c2goWydsdWNpZGU6cGhvbmUnLCAnc3B0LXQtZ3JpcycsICdUZWzDqWZvbm8nLCBjLnRlbGVmb25vLCBjLmhvcmFyaW8gfHwgJycsIGZhbHNlXSk7CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsYXMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgIGNvbnN0IGYgID0gZmlsYXNbaV07CiAgICAgICAgICAgIGNvbnN0ICRjID0gdGhpcy5fcGxhbnRpbGxhKCdzcHQtdHBsLWNhbmFsJyk7CgogICAgICAgICAgICAkYy5maW5kKCcuc3B0LWNhbmFsLWljb25vJykuYWRkQ2xhc3MoZlsxXSkuZmluZCgnaWNvbmlmeS1pY29uJykuYXR0cignaWNvbicsIGZbMF0pOwogICAgICAgICAgICAkYy5maW5kKCdiJykudGV4dChmWzJdKTsKCiAgICAgICAgICAgIGlmIChmWzNdKSAkYy5maW5kKCdzbWFsbCcpLnRleHQoZlszXSk7IGVsc2UgJGMuZmluZCgnc21hbGwnKS5yZW1vdmUoKTsKICAgICAgICAgICAgaWYgKGZbNF0pICRjLmZpbmQoJ2VtJykudGV4dChmWzRdKTsgICAgZWxzZSAkYy5maW5kKCdlbScpLnJlbW92ZSgpOwoKICAgICAgICAgICAgLyogRWwgY2hhdCBsbGV2YSBzdSBib3TDs246IGVzIGVsIMO6bmljbyBjYW5hbCBxdWUgc2UgYWJyZSBkZXNkZSBhcXXDrQogICAgICAgICAgICAgICBtaXNtbywgeSBzaW4gw6lsIGxhIGZpbGEgc29sbyBkaWNlIHF1ZSBleGlzdGUuICovCiAgICAgICAgICAgIGlmIChmWzVdKSB7CiAgICAgICAgICAgICAgICAkYy5maW5kKCcuc3B0LWNhbmFsLXR4dCcpLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAkKCc8YSBjbGFzcz0ic3B0LWJ0biBzcHQtYnRuLXNlY3VuZGFyaW8gc3B0LWpzLWNoYXQiIGhyZWY9ImphdmFzY3JpcHQ6OyI+PC9hPicpLnRleHQoJ0luaWNpYXIgY2hhdCcpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZG9uZGUuYXBwZW5kKCRjKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWNhbmFsZXMnKS5nZXQoMCkuaGlkZGVuID0gZmlsYXMubGVuZ3RoID09PSAwOwogICAgfQoKICAgIC8qKgogICAgICogTEFTIFBSRUdVTlRBUyBGUkVDVUVOVEVTLCBkZSBsYSBheXVkYSBwdWJsaWNhZGEuCiAgICAgKgogICAgICogTGEgdGFyamV0YSBuYWNlIG9jdWx0YSB5IHNvbG8gc2UgZW5zZcOxYSBzaSBoYXkgYWxndW5hOiB1biBibG9xdWUKICAgICAqIMKrUHJlZ3VudGFzIGZyZWN1ZW50ZXPCuyB2YWPDrW8gb2N1cGEgZWwgc2l0aW8gZGUgbGEgY29sdW1uYSBzaW4gZGVjaXIKICAgICAqIG5hZGEsIHkgZW4gdW5hIGluc3RhbGFjacOzbiByZWNpw6luIHB1ZXN0YSBlcyBsbyBub3JtYWwuCiAgICAgKi8KICAgIF9waW50YXJGYXEobGlzdGEpIHsKCiAgICAgICAgY29uc3QgJGNhcmQgPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1mYXEtY2FyZCcpOwoKICAgICAgICAkY2FyZC5nZXQoMCkuaGlkZGVuID0gIWxpc3RhLmxlbmd0aDsKCiAgICAgICAgaWYgKCFsaXN0YS5sZW5ndGgpIHJldHVybjsKCiAgICAgICAgY29uc3QgJGRvbmRlID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZmFxJykuZW1wdHkoKTsKICAgICAgICBjb25zdCB5byAgICAgPSB0aGlzOwoKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RhLmxlbmd0aDsgaSsrKSB7CgogICAgICAgICAgICBjb25zdCAkZiA9IHRoaXMuX3BsYW50aWxsYSgnc3B0LXRwbC1mYXEnKTsKCiAgICAgICAgICAgICRmLmZpbmQoJ3NwYW4nKS50ZXh0KGxpc3RhW2ldLnEpOwoKICAgICAgICAgICAgLyogTGEgcmVzcHVlc3RhIHlhIHZpZW5lIGNvbiBsYSBwcmVndW50YTogZW5zZcOxYXJsYSBhcXXDrSBhaG9ycmEgZWwKICAgICAgICAgICAgICAgdmlhamUgYSBgL2F5dWRhYCBwYXJhIGxhcyBjaW5jbyBxdWUgbcOhcyBzZSBwcmVndW50YW4uICovCiAgICAgICAgICAgICRmLm9uKCdjbGljaycsIChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgeW8uX3ZlclJlc3B1ZXN0YShpdGVtKTsgfTsKICAgICAgICAgICAgfSkobGlzdGFbaV0pKTsKCiAgICAgICAgICAgICRkb25kZS5hcHBlbmQoJGYpOwogICAgICAgIH0KICAgIH0KCiAgICAvKiogTGEgcmVzcHVlc3RhLCBlbiBlbCBvdmVybGF5IGRlbCBwcm95ZWN0by4gKi8KICAgIF92ZXJSZXNwdWVzdGEoaXRlbSkgewoKICAgICAgICBpZiAodHlwZW9mIFRPdmVybGF5V2luICE9PSAnZnVuY3Rpb24nKSByZXR1cm47CgogICAgICAgIGNvbnN0IGN1ZXJwbyA9ICQoJzxkaXYgY2xhc3M9InNwdC1mYXEtcmVzcHVlc3RhIj48L2Rpdj4nKS50ZXh0KGl0ZW0uYSk7CgogICAgICAgIFRPdmVybGF5V2luLmNyZWF0ZSh7CiAgICAgICAgICAgIHRpdGxlOiBUT3ZlcmxheVdpbi5jYWJlY2VyYSh7CiAgICAgICAgICAgICAgICBpY29uOiAnbHVjaWRlOmNpcmNsZS1oZWxwJywKICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnEsCiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ0RlIGxhcyBwcmVndW50YXMgZnJlY3VlbnRlcyBkZSBBZ3JvQ2FsaWEnCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjb250ZW50OiBjdWVycG8sCiAgICAgICAgICAgIGNsb3NlSWNvbjogdHJ1ZQogICAgICAgIH0pLnNob3coKTsKICAgIH0KCiAgICAvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgICAqICBMQSBGSUNIQQogICAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgogICAgYWJyaXJGaWNoYSh0aXBvLCBpZCkgewoKICAgICAgICBjb25zdCB5byA9IHRoaXM7CgogICAgICAgIFROZXRDb20uR0VUKCcvYWNjb3VudC9zdXBwb3J0LycgKyB0aXBvICsgJy8nICsgaWQgKyAnL2RhdGEnLCB7fSwgZnVuY3Rpb24gKHJlc3ApIHsKCiAgICAgICAgICAgIGNvbnN0IGQgPSAocmVzcCAmJiByZXNwLmRhdGEpID8gcmVzcC5kYXRhIDogcmVzcDsKCiAgICAgICAgICAgIGlmICghZCB8fCAhZC5pZCkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBUTm90aWZ5ID09PSAnZnVuY3Rpb24nKSBUTm90aWZ5LnRvYXN0KCdObyBoZW1vcyBlbmNvbnRyYWRvIGVzZSBleHBlZGllbnRlJyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHlvLl9maWNoYSA9IGQ7CiAgICAgICAgICAgIHlvLl9waW50YXJGaWNoYShkKTsKICAgICAgICAgICAgeW8uX3ZlckZpY2hhKCk7CgogICAgICAgICAgICAvKiBMYSBVUkwgYWNvbXBhw7FhIGEgbG8gcXVlIHNlIGVzdMOhIHZpZW5kbywgcGFyYSBxdWUgcmVjYXJnYXIgbwogICAgICAgICAgICAgICBjb21wYXJ0aXIgZWwgZW5sYWNlIGxsZXZlIGFsIG1pc21vIHNpdGlvLiAqLwogICAgICAgICAgICAvKiBTaW4gYXBpbGFyIGxhIG1pc21hIGRpcmVjY2nDs24gZG9zIHZlY2VzOiBhbCBlbnRyYXIgcG9yIGVsbGEsIGVsCiAgICAgICAgICAgICAgIG1lbsO6IHlhIGxhIGhhIGVzY3JpdG8uICovCiAgICAgICAgICAgIGNvbnN0IGRlc3Rpbm8gPSAnL2FjY291bnQvc3VwcG9ydC8nICsgdGlwbyArICcvJyArIGlkOwoKICAgICAgICAgICAgaWYgKHdpbmRvdy5oaXN0b3J5ICYmIGhpc3RvcnkucHVzaFN0YXRlICYmIGxvY2F0aW9uLnBhdGhuYW1lICE9PSBkZXN0aW5vKSB7CiAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGlzTWVudTogdHJ1ZSB9LCAnJywgZGVzdGlubyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBfcGludGFyRmljaGEoZCkgewoKICAgICAgICAvKiBQUklNRVJPIExBIENBQkVDRVJBOiBlbCBhc3VudG8geSBsYSBww61sZG9yYSBkZSBlc3RhZG8gdml2ZW4gREVOVFJPIGRlCiAgICAgICAgICAgZWxsYSAtLXN1cyBodWVjb3MgbG9zIG1vbnRhIGBfY2FiZWNlcmFGaWNoYSgpYC0tIGFzw60gcXVlIGVzY3JpYmlyCiAgICAgICAgICAgYW50ZXMgbm8gcGludGFyw61hIG5hZGEuICovCiAgICAgICAgdGhpcy5fY2FiZWNlcmFGaWNoYShkKTsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZi1hc3VudG8nKS50ZXh0KGQuYXN1bnRvKTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1mLWNvZGUnKS50ZXh0KGQuY29kZSk7CgogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWYtdGlwbycpCiAgICAgICAgICAgIC50ZXh0KGQudGlwbyA9PT0gJ2luY2lkZW5jaWEnID8gJ0luY2lkZW5jaWEnIDogJ0NvbnN1bHRhJykKICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzcHQtdGlwby1pbmMgc3B0LXRpcG8tY29uJykKICAgICAgICAgICAgLmFkZENsYXNzKGQudGlwbyA9PT0gJ2luY2lkZW5jaWEnID8gJ3NwdC10aXBvLWluYycgOiAnc3B0LXRpcG8tY29uJyk7CgogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWYtZXN0YWRvJykKICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3NwdC1waWxkb3JhIHNwdC1qcy1mLWVzdGFkbyBzcHQtcC0nICsgKGQuZXN0YWRvLnRvbm8gfHwgJ2dyaXMnKSkKICAgICAgICAgICAgLnRleHQoZC5lc3RhZG8ubGFyZ28gfHwgZC5lc3RhZG8ubGFiZWwpOwoKICAgICAgICB0aGlzLl9waW50YXJEYXRvcyhkKTsKICAgICAgICB0aGlzLl9waW50YXJQZWRpZG8oZC5wZWRpZG8pOwogICAgICAgIHRoaXMuX21vbnRhckNoYXQoZC5jYW5hbCk7CiAgICB9CgogICAgX3BpbnRhckRhdG9zKGQpIHsKCiAgICAgICAgY29uc3QgJGRvbmRlID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZi1kYXRvcycpLmVtcHR5KCk7CgogICAgICAgIGNvbnN0IGRhdG9zID0gW107CgogICAgICAgIGlmIChkLnBlZGlkbykgZGF0b3MucHVzaChbJ2x1Y2lkZTpwYWNrYWdlJywgJ3NwdC10LXZlcmRlJywgJ1BlZGlkbycsIGQucGVkaWRvLnJlZl0pOwoKICAgICAgICBkYXRvcy5wdXNoKFsnbHVjaWRlOmNhbGVuZGFyLWRheXMnLCAnc3B0LXQtYXp1bCcsICdGZWNoYSBkZSBhcGVydHVyYScsIGQuYWJpZXJ0YV0pOwoKICAgICAgICBpZiAoZC5wcmlvcmlkYWQpIGRhdG9zLnB1c2goWydsdWNpZGU6Y2lyY2xlLWFsZXJ0JywgJ3NwdC10LWFtYmFyJywgJ1ByaW9yaWRhZCcsIGQucHJpb3JpZGFkXSk7CiAgICAgICAgaWYgKGQudmVuZGVkb3IpICBkYXRvcy5wdXNoKFsnbHVjaWRlOmJ1aWxkaW5nLTInLCAgICdzcHQtdC1ncmlzJywgICdWZW5kZWRvcicsICBkLnZlbmRlZG9yXSk7CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0b3MubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgIGNvbnN0ICRkID0gdGhpcy5fcGxhbnRpbGxhKCdzcHQtdHBsLWRhdG8nKTsKCiAgICAgICAgICAgICRkLmZpbmQoJy5zcHQtZGF0by1pY29ubycpLmFkZENsYXNzKGRhdG9zW2ldWzFdKS5maW5kKCdpY29uaWZ5LWljb24nKS5hdHRyKCdpY29uJywgZGF0b3NbaV1bMF0pOwogICAgICAgICAgICAkZC5maW5kKCdzbWFsbCcpLnRleHQoZGF0b3NbaV1bMl0pOwogICAgICAgICAgICAkZC5maW5kKCdiJykudGV4dChkYXRvc1tpXVszXSk7CgogICAgICAgICAgICAkZG9uZGUuYXBwZW5kKCRkKTsKICAgICAgICB9CiAgICB9CgogICAgX3BpbnRhclBlZGlkbyhwKSB7CgogICAgICAgIGNvbnN0ICRjYXJkID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtcGVkaWRvLWNhcmQnKTsKCiAgICAgICAgaWYgKCFwKSB7ICRjYXJkLmdldCgwKS5oaWRkZW4gPSB0cnVlOyByZXR1cm47IH0KCiAgICAgICAgJGNhcmQuZ2V0KDApLmhpZGRlbiA9IGZhbHNlOwogICAgICAgICRjYXJkLmZpbmQoJy5zcHQtanMtcC12ZXInKS5hdHRyKCdocmVmJywgcC5lbmxhY2UpOwogICAgICAgICRjYXJkLmZpbmQoJy5zcHQtanMtcC1zZWd1aW1pZW50bycpLmF0dHIoJ2hyZWYnLCBwLnNlZ3VpbWllbnRvIHx8IHAuZW5sYWNlKTsKCiAgICAgICAgY29uc3QgJGFydHMgPSAkY2FyZC5maW5kKCcuc3B0LWpzLXAtYXJ0aWN1bG9zJykuZW1wdHkoKTsKCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAocC5hcnRpY3Vsb3MgfHwgW10pLmxlbmd0aDsgaSsrKSB7CgogICAgICAgICAgICBjb25zdCAkYSA9IHRoaXMuX3BsYW50aWxsYSgnc3B0LXRwbC1wLWFydGljdWxvJyk7CgogICAgICAgICAgICAkYS5maW5kKCdiJykudGV4dChwLmFydGljdWxvc1tpXS5ub21icmUpOwogICAgICAgICAgICAkYS5maW5kKCdzbWFsbCcpLnRleHQocC5hcnRpY3Vsb3NbaV0uY2FudGlkYWQgKyAocC5hcnRpY3Vsb3NbaV0uY2FudGlkYWQgPT09IDEgPyAnIHVuaWRhZCcgOiAnIHVuaWRhZGVzJykpOwoKICAgICAgICAgICAgJGFydHMuYXBwZW5kKCRhKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0ICRmaWxhcyA9ICRjYXJkLmZpbmQoJy5zcHQtanMtcC1maWxhcycpLmVtcHR5KCk7CiAgICAgICAgY29uc3QgZmlsYXMgID0gWwogICAgICAgICAgICBbJ1BlZGlkbycsIHAucmVmXSwKICAgICAgICAgICAgWydGZWNoYScsIHAuZmVjaGFdLAogICAgICAgICAgICBbJ0ltcG9ydGUnLCBwLnRvdGFsXSwKICAgICAgICAgICAgWydFc3RhZG8nLCBwLmVzdGFkb10KICAgICAgICBdOwoKICAgICAgICBpZiAocC52ZW5kZWRvcikgZmlsYXMuc3BsaWNlKDEsIDAsIFsnVmVuZGVkb3InLCBwLnZlbmRlZG9yXSk7CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsYXMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgIGNvbnN0ICRmID0gdGhpcy5fcGxhbnRpbGxhKCdzcHQtdHBsLXAtZmlsYScpOwoKICAgICAgICAgICAgJGYuZmluZCgnc3BhbicpLnRleHQoZmlsYXNbaV1bMF0pOwogICAgICAgICAgICAkZi5maW5kKCdiJykudGV4dChmaWxhc1tpXVsxXSk7CgogICAgICAgICAgICAkZmlsYXMuYXBwZW5kKCRmKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBFTCBISUxPLgogICAgICoKICAgICAqIGBUQ2hhdGAgY29uIGVsIGNhbmFsIGRlbCBleHBlZGllbnRlLiBgc2lkZTogJ21pbmUnYCBwb3JxdWUgZXN0byBlcyBlbAogICAgICogcGFuZWwgZGVsIENMSUVOVEUgLS1jb24gYCdzdGFmZidgIHN1cyBwcm9waW9zIG1lbnNhamVzIHNhbGRyw61hbiBlbiBlbAogICAgICogbGFkbyBkZSBzb3BvcnRlLS0sIHkgYGFsbG93R3JvdXA6IGZhbHNlYCBwYXJhIHF1ZSB1biBzZWd1bmRvIGFnZW50ZSBubwogICAgICogcm9tcGEgbG9zIGRvcyBiYW5kb3MgZGUgbGEgY29udmVyc2FjacOzbi4KICAgICAqLwogICAgX21vbnRhckNoYXQoY2FuYWwpIHsKCiAgICAgICAgaWYgKHR5cGVvZiBUQ2hhdCAhPT0gJ2Z1bmN0aW9uJyB8fCAhY2FuYWwpIHJldHVybjsKCiAgICAgICAgY29uc3QgJGh1ZWNvID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtaGlsbycpLmVtcHR5KCk7CgogICAgICAgIHRoaXMuX2NoYXQgPSBUQ2hhdC5jcmVhdGUoewogICAgICAgICAgICBlbmRwb2ludDogJy9jaGF0JywKICAgICAgICAgICAgY2hhbm5lbDogY2FuYWwsCiAgICAgICAgICAgIHNpZGU6ICdtaW5lJywKICAgICAgICAgICAgYWxsb3dHcm91cDogZmFsc2UsCiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnRXNjcmliZSB0dSBtZW5zYWplIGFxdcOt4oCmJywKICAgICAgICAgICAgZW1wdHlNZXNzYWdlOiAnVG9kYXbDrWEgbm8gaGF5IG1lbnNhamVzIGVuIGVzdGUgZXhwZWRpZW50ZS4nLAogICAgICAgICAgICBzZW5kTGFiZWw6ICdFbnZpYXIgbWVuc2FqZScKICAgICAgICB9KTsKCiAgICAgICAgJGh1ZWNvLmFwcGVuZCh0aGlzLl9jaGF0Lmh0bWwpOwogICAgfQoKICAgIC8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICAgICogIExBIENBQkVDRVJBIOKAlCBVTkEgUEFSQSBMQVMgRE9TIFZJU1RBUwogICAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgogICAgLyoqCiAgICAgKiBFTCBMSVNUQURPOiDCq01pIGN1ZW50YSDigLogU29wb3J0ZcK7LgogICAgICoKICAgICAqIExhIHBpbnRhIGB3aW5kb3cuQWNjb3VudEhlYWRlcmAsIHF1ZSBlcyBlbCBmb3JtYXRvIGRlIFRPREFTIGxhcyBmaWNoYXMgZGUKICAgICAqIGxhIGN1ZW50YSAoaG9qYSBlbiBgVEFjY291bnRVSWAsIHF1ZSB2aWFqYSBjb24gZWwgcGFuZWwpLiBTZSByZXBpbnRhCiAgICAgKiBlbnRlcmEgYWwgY2FtYmlhciBkZSB2aXN0YSBlbiB2ZXogZGUgZXNjb25kZXJzZTogZWwgY2FtaW5vIGVzIGRpc3RpbnRvIGVuCiAgICAgKiBjYWRhIHVuYSwgeSBlc2NvbmRlciBkb3MgY2FiZWNlcmFzIGVzIHRlbmVyIGRvcy4KICAgICAqCiAgICAgKiBFbCBib3TDs24gcHJpbmNpcGFsIGVzIGVsIGRlIHNpZW1wcmUgLS1hYnJpciB1biBleHBlZGllbnRlLS0geSBjb25zZXJ2YSBzdQogICAgICogZ2FuY2hvIGBzcHQtanMtYWJyaXJgOiBlbCBjbGljIHNlIGVzY3VjaGEgcG9yIGRlbGVnYWNpw7NuIHNvYnJlCiAgICAgKiBgdGhpcy5odG1sYCwgYXPDrSBxdWUgc2lndWUgcmVzcG9uZGllbmRvIHJlY2nDqW4gcGludGFkby4KICAgICAqLwogICAgX2NhYmVjZXJhTGlzdGFkbygpIHsKCiAgICAgICAgaWYgKCF3aW5kb3cuQWNjb3VudEhlYWRlcikgcmV0dXJuOwoKICAgICAgICBjb25zdCBhY2Npb25lcyA9ICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFjLWJ0biBhYy1idG4tLXByaW5jaXBhbCBzcHQtanMtYWJyaXIiPicKICAgICAgICAgICAgICAgICAgICAgICArICc8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpjaXJjbGUtcGx1cyI+PC9pY29uaWZ5LWljb24+IEFicmlyIGV4cGVkaWVudGUnCiAgICAgICAgICAgICAgICAgICAgICAgKyAnPC9idXR0b24+JzsKCiAgICAgICAgQWNjb3VudEhlYWRlci5tb3VudCh0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1jYWInKSwgewogICAgICAgICAgICBwYXRoOiBbWydTb3BvcnRlJ11dLAogICAgICAgICAgICB0aXRsZTogJ1NvcG9ydGUnLAogICAgICAgICAgICBzdWJ0aXRsZTogJ0NvbnN1bHRhIGVsIGVzdGFkbyBkZSB0dXMgaW5jaWRlbmNpYXMsIGhhYmxhIGNvbiBudWVzdHJvIGVxdWlwbyB5IGVuY3VlbnRyYSByZXNwdWVzdGFzLicsCiAgICAgICAgICAgIGFjdGlvbnM6IGFjY2lvbmVzLAogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogTEEgRklDSEE6IMKrTWkgY3VlbnRhIOKAuiBTb3BvcnRlIOKAuiBTUC0yMDI2LTAxNMK7LgogICAgICoKICAgICAqIEVsIFTDjVRVTE8gRVMgRUwgQVNVTlRPIC0tbG8gcXVlIGVsIGNsaWVudGUgZXNjcmliacOzLCBxdWUgZXMgY29tbyBsbGFtYSBhCiAgICAgKiBzdSBwcm9ibGVtYS0tIHkgZWwgbsO6bWVybyB2YSBlbiBlbCBjYW1pbm8sIHF1ZSBlcyBkb25kZSBzZSBidXNjYS4gRGVudHJvCiAgICAgKiB2YW4gbG9zIGh1ZWNvcyBkZSBzaWVtcHJlLCB2YWPDrW9zOiBgc3B0LWpzLWYtYXN1bnRvYCBwYXJhIGVsIGFzdW50byB5CiAgICAgKiBgc3B0LWpzLWYtZXN0YWRvYCBwYXJhIGxhIHDDrWxkb3JhLCBxdWUgcmVsbGVuYSBgX3BpbnRhckZpY2hhKClgIGp1c3RvCiAgICAgKiBkZXNwdcOpcyBjb24gZWwgdG9ubyBxdWUgdHJhaWdhIGVsIGVzdGFkby4KICAgICAqLwogICAgX2NhYmVjZXJhRmljaGEoZCkgewoKICAgICAgICBpZiAoIXdpbmRvdy5BY2NvdW50SGVhZGVyKSByZXR1cm47CgogICAgICAgIGNvbnN0IGFjY2lvbmVzID0gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWMtYnRuIHNwdC1qcy12b2x2ZXIiPicKICAgICAgICAgICAgICAgICAgICAgICArICc8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTphcnJvdy1sZWZ0Ij48L2ljb25pZnktaWNvbj4gVm9sdmVyIGEgc29wb3J0ZScKICAgICAgICAgICAgICAgICAgICAgICArICc8L2J1dHRvbj4nOwoKICAgICAgICBjb25zdCB0aXBvID0gZC50aXBvID09PSAnaW5jaWRlbmNpYScgPyAnSW5jaWRlbmNpYScgOiAnQ29uc3VsdGEnOwoKICAgICAgICBBY2NvdW50SGVhZGVyLm1vdW50KHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWNhYicpLCB7CiAgICAgICAgICAgIHBhdGg6IFsKICAgICAgICAgICAgICAgIFsnU29wb3J0ZScsICdzdXBwb3J0J10sCiAgICAgICAgICAgICAgICBbZC5jb2RlIHx8IHRpcG9dLAogICAgICAgICAgICBdLAogICAgICAgICAgICB0aXRsZUh0bWw6ICc8c3BhbiBjbGFzcz0ic3B0LWpzLWYtYXN1bnRvIj48L3NwYW4+JywKICAgICAgICAgICAgc3VidGl0bGU6IGQuYWJpZXJ0YSA/ICh0aXBvICsgJyBhYmllcnRhIGVsICcgKyBkLmFiaWVydGEpIDogdGlwbywKICAgICAgICAgICAgYmFkZ2U6ICc8c3BhbiBjbGFzcz0ic3B0LXBpbGRvcmEgc3B0LWpzLWYtZXN0YWRvIj48L3NwYW4+JywKICAgICAgICAgICAgYWN0aW9uczogYWNjaW9uZXMsCiAgICAgICAgfSk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgTEFTIERPUyBWSVNUQVMKICAgICAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqLwoKICAgIC8qKgogICAgICogTEEgRklDSEEgU0UgUVVFREEgU09MQS4KICAgICAqCiAgICAgKiBEZW50cm8gZGUgdW4gZXhwZWRpZW50ZSBzb2JyYSBsYSB0YXJqZXRhIMKrwr9OZWNlc2l0YXMgYXl1ZGE/wrs6IHlhIHNlIGVzdMOhCiAgICAgKiBFTiBlbCBzb3BvcnRlLCBoYWJsYW5kbyBjb24gZWwgZXF1aXBvLiBMbyBxdWUgaGFjZSBmYWx0YSBlcyBlbCBhc3VudG8gZGVsCiAgICAgKiBleHBlZGllbnRlIHkgbGEgc2FsaWRhIGhhY2lhIGF0csOhczsgbG8gZGVtw6FzIGVzIHJ1aWRvIHF1ZSBlbXB1amEgbGEKICAgICAqIGNvbnZlcnNhY2nDs24gaGFjaWEgYWJham8uCiAgICAgKgogICAgICogTEEgQ0FCRUNFUkEgTk8gU0UgT0NVTFRBLCBTRSBSRVBJTlRBOiBlcyBsYSBtaXNtYSBkZSBsYXMgZG9zIHZpc3RhcywgeSBlbgogICAgICogbGEgZmljaGEgZGljZSBlbCBhc3VudG8geSBlbCBjYW1pbm8gZGUgdnVlbHRhLiBMbyBoYWNlIGBfcGludGFyRmljaGEoKWAsCiAgICAgKiBxdWUgZXMgcXVpZW4gdGllbmUgbG9zIGRhdG9zLgogICAgICovCiAgICBfdmVyRmljaGEoKSB7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtbGlzdGFkbycpLmdldCgwKS5oaWRkZW4gPSB0cnVlOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWZpY2hhJykuZ2V0KDApLmhpZGRlbiAgID0gZmFsc2U7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtYXl1ZGEnKS5nZXQoMCkuaGlkZGVuICAgICAgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRWwgY29udHJhdG8gZGUgYFRNZW51YDogcGVkaXIgYC9hY2NvdW50L3N1cHBvcnRgIGNvbiBsYSBwYW50YWxsYSB5YQogICAgICogbW9udGFkYSAtLWVsIGNhbWlubyBkZSBtaWdhcyBkZXNkZSB1biBleHBlZGllbnRlLCBvIMKrYXRyw6FzwrstLSBlcyBwZWRpciBlbAogICAgICogbGlzdGFkby4gU2kgeWEgc2UgZXN0w6EgZW4gw6lsLCBubyBzZSByZWNhcmdhIG5hZGEuCiAgICAgKi8KICAgIHNob3dSb290KCkgewoKICAgICAgICBpZiAodGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZmljaGEnKS5nZXQoMCkuaGlkZGVuKSByZXR1cm47CgogICAgICAgIHRoaXMudmVyTGlzdGFkbygpOwogICAgfQoKICAgIHZlckxpc3RhZG8oKSB7CgogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWZpY2hhJykuZ2V0KDApLmhpZGRlbiAgID0gdHJ1ZTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1saXN0YWRvJykuZ2V0KDApLmhpZGRlbiA9IGZhbHNlOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWF5dWRhJykuZ2V0KDApLmhpZGRlbiAgICAgID0gZmFsc2U7CgogICAgICAgIC8qIFkgbGEgY2FiZWNlcmEgdnVlbHZlIGEgc2VyIGxhIGRlbCBsaXN0YWRvOiBjYW1pbm8gc2luIGVsIGV4cGVkaWVudGUsCiAgICAgICAgICAgdMOtdHVsbyDCq1NvcG9ydGXCuyB5IGVsIGJvdMOzbiBkZSBhYnJpciB1bm8gbnVldm8uICovCiAgICAgICAgdGhpcy5fY2FiZWNlcmFMaXN0YWRvKCk7CgogICAgICAgIC8qIExhIHRhcmpldGEgZGVsIHBlZGlkbyBlcyBkZSBsYSBmaWNoYTogZGVqYXJsYSBwdWVzdGEgZW4gZWwgbGlzdGFkbwogICAgICAgICAgIGVuc2XDsWFyw61hIGVsIHBlZGlkbyBkZSBsYSDDumx0aW1hIGluY2lkZW5jaWEgbWlyYWRhIGFsIGxhZG8gZGUgdW5hCiAgICAgICAgICAgbGlzdGEgcXVlIGhhYmxhIGRlIHRvZGFzLiAqLwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLXBlZGlkby1jYXJkJykuZ2V0KDApLmhpZGRlbiA9IHRydWU7CgogICAgICAgIGlmICh3aW5kb3cuaGlzdG9yeSAmJiBoaXN0b3J5LnB1c2hTdGF0ZSAmJiBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJy9hY2NvdW50L3N1cHBvcnQnKSB7CiAgICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsgaXNNZW51OiB0cnVlIH0sICcnLCAnL2FjY291bnQvc3VwcG9ydCcpOwogICAgICAgIH0KCiAgICAgICAgLyogTG8gbGXDrWRvIGNhbWJpYSBhbCBhYnJpciB1biBleHBlZGllbnRlLCBhc8OtIHF1ZSBsYSBsaXN0YSB2dWVsdmUKICAgICAgICAgICBmcmVzY2E6IHNpIG5vLCBlbCBkaXN0aW50aXZvIGRlIMKrbnVldm/CuyBzZWd1aXLDrWEgcHVlc3RvLiAqLwogICAgICAgIHRoaXMuY2FyZ2FyKCk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgUElFWkFTCiAgICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCiAgICAvKioKICAgICAqIExPIFFVRSBWRU5HQSBFTiBMQSBVUkwuCiAgICAgKgogICAgICogRG9zIGNhc29zLCB5IGxvcyBkb3MgbGxlZ2FuIGRlIGZ1ZXJhIGRlIGVzdGEgcGFudGFsbGE6CiAgICAgKgogICAgICogICDCtyBgP2lkPWluY2lkZW5jaWEtMTJgIOKAlCBlbCBlbmxhY2UgZGUgdW4gY29ycmVvIG8gZGUgdW5hIG5vdGlmaWNhY2nDs24sCiAgICAgKiAgICAgcXVlIGVsIGNvbnRyb2xhZG9yIGNvbnZpZXJ0ZSBkZXNkZSBgL2FjY291bnQvc3VwcG9ydC9pbmNpZGVuY2lhLzEyYC4KICAgICAqICAgwrcgYD9vcmRlcj0xMDk3NDdgIOKAlCDCq0NvbnRhY3RhciBzb3BvcnRlwrsgZGVzZGUgdW4gcGVkaWRvLiBBYnJlIGVsCiAgICAgKiAgICAgZm9ybXVsYXJpbyBDT04gZXNlIHBlZGlkbyBwdWVzdG8sIHF1ZSBlcyBsbyBxdWUgbG8gY29udmllcnRlIGVuIHVuYQogICAgICogICAgIGluY2lkZW5jaWEgeSBubyBlbiB1bmEgY29uc3VsdGEgc3VlbHRhLiBTaW4gZXN0bywgZWwgY2xpZW50ZSB0ZW5kcsOtYQogICAgICogICAgIHF1ZSBidXNjYXIgZW50cmUgbG9zIHN1eW9zIGVsIHBlZGlkbyBkZWwgcXVlIHZpZW5lIGRlIGhhYmxhci4KICAgICAqLwogICAgX2RlTGFVcmwoKSB7CgogICAgICAgIGNvbnN0IGJ1c2NhID0gbG9jYXRpb24uc2VhcmNoIHx8ICcnOwoKICAgICAgICAvKiBMQSBESVJFQ0NJw5NOIENPTVBMRVRBOiBgL2FjY291bnQvc3VwcG9ydC9pbmNpZGVuY2lhLzEyYC4gRWwgcGFuZWwgeWEKICAgICAgICAgICBuYXZlZ2EgYXPDrSAoYFRNZW51YCBjb24gYGJhc2VQYXRoYCk7IGVsIGA/aWQ9aW5jaWRlbmNpYS0xMmAgZGUgYW50ZXMKICAgICAgICAgICBzZSBzaWd1ZSBlbnRlbmRpZW5kbyBwb3IgbG9zIGVubGFjZXMgcXVlIHlhIGVzdMOpbiBlbnZpYWRvcy4gKi8KICAgICAgICBjb25zdCBtID0gbG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL1wvYWNjb3VudFwvc3VwcG9ydFwvKGluY2lkZW5jaWF8Y29uc3VsdGEpXC8oXGQrKS8pCiAgICAgICAgICAgICAgIHx8IGJ1c2NhLm1hdGNoKC9bPyZdaWQ9KGluY2lkZW5jaWF8Y29uc3VsdGEpLShcZCspLyk7CgogICAgICAgIGlmIChtKSB7CgogICAgICAgICAgICAvKiBTRSBBUlJBTkNBIEVOIExBIEZJQ0hBLCBzaW4gZW5zZcOxYXIgZWwgbGlzdGFkbyBtaWVudHJhcyBsbGVnYW4gc3VzCiAgICAgICAgICAgICAgIGRhdG9zOiBzZSB2ZcOtYSBsYSBsaXN0YSB1biBpbnN0YW50ZSB5IGx1ZWdvIGVsIGV4cGVkaWVudGUgZW5jaW1hLAogICAgICAgICAgICAgICBlbCBtaXNtbyBwZXN0YcOxZW8gcXVlIHRlbsOtYW4gbGFzIGRlbcOhcyBmaWNoYXMgZGVsIHBhbmVsLiAqLwogICAgICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1saXN0YWRvJykuZ2V0KDApLmhpZGRlbiA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWF5dWRhJykuZ2V0KDApLmhpZGRlbiA9IHRydWU7CgogICAgICAgICAgICB0aGlzLmFicmlyRmljaGEobVsxXSwgcGFyc2VJbnQobVsyXSwgMTApKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgcCA9IGJ1c2NhLm1hdGNoKC9bPyZdb3JkZXI9KFxkKykvKTsKCiAgICAgICAgaWYgKHApIHRoaXMuYWJyaXJOdWV2YShwYXJzZUludChwWzFdLCAxMCkpOwogICAgfQoKICAgIC8qKgogICAgICogQUJSSVIgVU4gRVhQRURJRU5URS4KICAgICAqCiAgICAgKiBFTCBPVkVSTEFZIE5PIFNFIE1PTlRBIEFRVcONOiBsbyBtb250YSBgU3VwcG9ydFRpY2tldEZvcm1gLCBlbCBhYnJpZG9yCiAgICAgKiBjb23Dum4gcXVlIHRyYWUgYFRTdXBwb3J0VGlja2V0Rm9ybWAuIEVsIG1pc21vIGZvcm11bGFyaW8gc2FsZSBkZXNkZSBsYQogICAgICogZmljaGEgZGUgdW4gcGVkaWRvIHkgZGVzZGUgwqtNaXMgcGVkaWRvc8K7LCB5IGNvbiB0cmVzIGNvcGlhcyBkZWwgbW9udGFqZQogICAgICogaGFicsOtYSB0cmVzIGlkZWFzIGRlIHF1w6kgcGFzYSBhbCBjcmVhciB1bmEgaW5jaWRlbmNpYS4KICAgICAqCiAgICAgKiBMbyDDum5pY28gcHJvcGlvIGRlIGVzdGEgcGFudGFsbGEgZXMgZWwgREVTUFXDiVM6IGFxdcOtIHlhIGVzdGFtb3MgZW4KICAgICAqIFNvcG9ydGUsIGFzw60gcXVlIHNlIHJlZnJlc2NhIGVsIGxpc3RhZG8geSBzZSBlbnRyYSBlbiBsbyByZWNpw6luIGFiaWVydG8KICAgICAqIHNpbiByZWNhcmdhciBsYSBww6FnaW5hIC0tZGVqYXJsZSBlbiBlbCBsaXN0YWRvIGxlIG9ibGlnYXLDrWEgYSBidXNjYXIgc3UKICAgICAqIHByb3BpbyBleHBlZGllbnRlIGVudHJlIGxvcyBkZW3DoXMganVzdG8gZGVzcHXDqXMgZGUgY3JlYXJsby0tLgogICAgICovCiAgICBhYnJpck51ZXZhKGlkUGVkaWRvKSB7CgogICAgICAgIGNvbnN0IHlvID0gdGhpczsKCiAgICAgICAgaWYgKCF3aW5kb3cuU3VwcG9ydFRpY2tldEZvcm0pIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBUTm90aWZ5ID09PSAnZnVuY3Rpb24nICYmIFROb3RpZnkudG9hc3QpIFROb3RpZnkudG9hc3QoJ05vIGhlbW9zIHBvZGlkbyBhYnJpciBlbCBmb3JtdWxhcmlvJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5TdXBwb3J0VGlja2V0Rm9ybS5vcGVuKHsKICAgICAgICAgICAgb3JkZXJJZDogaWRQZWRpZG8gfHwgMCwKICAgICAgICAgICAgb25DcmVhdGVkOiBmdW5jdGlvbiAocikgewogICAgICAgICAgICAgICAgeW8uY2FyZ2FyKCk7CiAgICAgICAgICAgICAgICBpZiAoci50aXBvKSB5by5hYnJpckZpY2hhKHIudGlwbywgci5pZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIEVMIENIQVQgREUgU0lFTVBSRSwgbm8gdW5vIG51ZXZvLgogICAgICoKICAgICAqIEVsIGJhZGdlIGZsb3RhbnRlIHlhIGVzdMOhIG1vbnRhZG8gZW4gdG9kYSBsYSB0aWVuZGEgeSBzZSBkZWphIGEgbWFubyBlbgogICAgICogYHdpbmRvdy5fX3NvcENoYXRgLiBBYnJpciBhcXXDrSB1biBzZWd1bmRvIGNoYXQgZGVqYXLDrWEgYWwgY2xpZW50ZSBjb24KICAgICAqIGRvcyBjb252ZXJzYWNpb25lcyBkaXN0aW50YXMgY29uIGVsIG1pc21vIHNvcG9ydGUuCiAgICAgKi8KICAgIGFicmlyQ2hhdCgpIHsKCiAgICAgICAgaWYgKHdpbmRvdy5fX3NvcENoYXQgJiYgdHlwZW9mIHdpbmRvdy5fX3NvcENoYXQuYWJyaXIgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgd2luZG93Ll9fc29wQ2hhdC5hYnJpcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAodHlwZW9mIFROb3RpZnkgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgVE5vdGlmeS50b2FzdCgnRWwgY2hhdCBubyBlc3TDoSBkaXNwb25pYmxlIGFob3JhIG1pc21vLiBBYnJlIHVuYSBpbmNpZGVuY2lhIHkgdGUgY29udGVzdGFtb3MuJyk7CiAgICAgICAgfQogICAgfQoKICAgIF9jb3BpYXIoKSB7CgogICAgICAgIGNvbnN0IHRleHRvID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZi1jb2RlJykudGV4dCgpOwoKICAgICAgICBpZiAoIXRleHRvKSByZXR1cm47CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0byk7CgogICAgICAgICAgICBpZiAodHlwZW9mIFROb3RpZnkgPT09ICdmdW5jdGlvbicpIFROb3RpZnkudG9hc3QoJ07Dum1lcm8gY29waWFkbzogJyArIHRleHRvKTsKCiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAvKiBTaW4gcG9ydGFwYXBlbGVzIG5vIHNlIGhhY2UgbmFkYTogZWwgbsO6bWVybyBlc3TDoSBhIGxhIHZpc3RhIHkgc2UKICAgICAgICAgICAgICAgcHVlZGUgc2VsZWNjaW9uYXIuIExvIHF1ZSBubyBwdWVkZSBlcyB0aXJhciBsYSBwYW50YWxsYS4gKi8KICAgICAgICB9CiAgICB9Cn0KCi8qIFNpbiBlc3RvIGxhIHBhbnRhbGxhIHNhbGUgRU4gQkxBTkNPIHkgc2luIGVycm9yIGRlIHNlcnZpZG9yOiBlbCBjYXJnYWRvcgogICBkZXRlY3RhIGxhcyBjbGFzZXMgcG9yIGxhcyBjbGF2ZXMgbnVldmFzIGRlIGB3aW5kb3dgLCB5IHVuYSBjbGFzZSBkZWNsYXJhZGEKICAgZGVudHJvIGRlIHVuIG3Ds2R1bG8gbm8gY3VlbGdhIGRlIGB3aW5kb3dgIHNvbGEuICovCndpbmRvdy5UQWNjb3VudFN1cHBvcnQgPSBUQWNjb3VudFN1cHBvcnQ7Cg0KDQo8L3NjcmlwdD4NCg0KPC9tb2R1bGU+DQoNCg==","TSupportTicketForm":"PG1vZHVsZSBuYW1lPSJUU3VwcG9ydFRpY2tldEZvcm0iPg0KDQoNCg0KDQoNCjx0ZW1wbGF0ZSBuYW1lPSJUU3VwcG9ydFRpY2tldEZvcm0iICA+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgoNCg0KCjwvdGVtcGxhdGU+DQoNCjxzdHlsZSBuYW1lPSJUU3VwcG9ydFRpY2tldEZvcm0iPi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogKiAgRUwgT1ZFUkxBWSBERSDCq0FCUklSIEVYUEVESUVOVEXCuywgRU4gVkVSREUKICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAqCiAqIFZpdsOtYSBlbiBgVEFjY291bnRTdXBwb3J0LmNzc2AsIHkgYWjDrSBzb2xvIHNlcnbDrWEgY3VhbmRvIGVsIG92ZXJsYXkgc2UgYWJyw61hCiAqIGRlc2RlIGxhIHNlY2Npw7NuIGRlIFNvcG9ydGU6IGVsIG1pc21vIGZvcm11bGFyaW8gYWJpZXJ0byBkZXNkZSB1biBwZWRpZG8KICogc2Fsw61hIGNvbiBlbCBib3TDs24gbmVncm8gZGVsIHNpdGlvLiBWaWFqYSBjb24gZWwgY29tcG9uZW50ZSBxdWUgbW9udGEgZWwKICogb3ZlcmxheSwgcXVlIGVzIGRvbmRlIHRpZW5lIHF1ZSBlc3Rhci4KICoKICogTGFzIGNsYXNlcyBOTyBzZSBjYW1iaWFuIC0tYGJ0bi1zZWNvbmRhcnlgIGVsIHF1ZSBjaWVycmEgeSBgYnRuLXByaW1hcnlgIGVsCiAqIHF1ZSBlc2NyaWJlLCBxdWUgZXMgbGEgcmVnbGEgZGVsIHByb3llY3RvLS06IGxvIHF1ZSBjYW1iaWEgZXMgY8OzbW8gc2UgcGludGFuCiAqIGFxdcOtLiBZIHNlIGVzY29wYSBiYWpvIGAuc3Atb3ZlcmxheWAsIHF1ZSBlcyBsYSBjbGFzZSBxdWUgbGUgcG9uZSBlbCBhYnJpZG9yOgogKiBlbCBvdmVybGF5IGN1ZWxnYSBkZWwgYm9keSwgYXPDrSBxdWUgc2luIGVsbGEgZXN0byBwaW50YXLDrWEgZGUgdmVyZGUgbG9zCiAqIGJvdG9uZXMgZGUgdG9kYSBsYSBww6FnaW5hLgogKgogKiDilIDilIAgWSBFTCBGT05ETyBWQSBDT04gYCFpbXBvcnRhbnRgLCBRVUUgTk8gRVMgVU4gREVTQ1VJRE8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqCiAqIEVsIGJ1bmRsZSBkZWwgc2l0aW8gKGBib290LSouY3NzYCkgZGVjbGFyYQogKiBgLmJ0bi1wcmltYXJ5e2JhY2tncm91bmQ6IzFlMjkzYiAhaW1wb3J0YW50fWAuIFVuIGAhaW1wb3J0YW50YCBnYW5hIGEKICogY3VhbHF1aWVyIGVzcGVjaWZpY2lkYWQsIGFzw60gcXVlIGVzdGEgcmVnbGEgLS10YWwgY29tbyBlc3RhYmEgZXNjcml0YSBlbgogKiBgVEFjY291bnRTdXBwb3J0LmNzc2AtLSBhcGxpY2FiYSBlbCBCT1JERSB2ZXJkZSB5IG5vIGVsIGZvbmRvOiBlbCBib3TDs24KICogc2Fsw61hIGF6dWwgcGl6YXJyYSBjb24gdW4gZmlsbyB2ZXJkZSwgbWVkaWRvIGNvbiBgZ2V0Q29tcHV0ZWRTdHlsZWAgZWwKICogMTIvMDkvMjAyNiwgeSBlbCBjb21lbnRhcmlvIGRlIGFxdWVsbGEgaG9qYSBkZWPDrWEgcXVlIGVyYSB2ZXJkZSBkZXNkZSBlbAogKiBkw61hIHF1ZSBzZSBlc2NyaWJpw7MuIFNlIGNvbXBlbnNhIGFxdcOtLCBhY290YWRvIGFsIG92ZXJsYXk7IGxvIHF1ZSBoYXkgcXVlCiAqIHF1aXRhciBhbGfDum4gZMOtYSBlcyBlbCBgIWltcG9ydGFudGAgZGVsIGJ1bmRsZSwgbm8gZXN0YSBsw61uZWEuICovCi5zcC1vdmVybGF5IC5idG4tcHJpbWFyeXsKICAgIGJhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTsKICAgIGNvbG9yOiNmZmY7Cn0KLnNwLW92ZXJsYXkgLmJ0bi1wcmltYXJ5OmhvdmVyewogICAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCk7Cn0KLnNwLW92ZXJsYXkgLlRGb3JtIGlucHV0OmZvY3VzLAouc3Atb3ZlcmxheSAuVEZvcm0gdGV4dGFyZWE6Zm9jdXN7CiAgICBib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSk7CiAgICBib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDQsMTEzLDU4LC4xMCk7Cn0KDQoNCjwvc3R5bGU+DQoNCjxzY3JpcHQgbmFtZT0iVFN1cHBvcnRUaWNrZXRGb3JtIiA+LyoqCiAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogKiAgQUJSSVIgVU4gRVhQRURJRU5URSBERSBTT1BPUlRFIOKAlCB1biBzb2xvIGFicmlkb3IgcGFyYSBsb3MgdHJlcyBzaXRpb3MKICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAqCiAqIMKrU29saWNpdGFyIGF5dWRhwrsgZXN0w6EgZW4gbGEgZmljaGEgZGUgdW4gcGVkaWRvLCBlbiBlbCBsaXN0YWRvIGRlIMKrTWlzCiAqIHBlZGlkb3PCuyB5IGVuIGxhIHNlY2Npw7NuIGRlIFNvcG9ydGUuIEVuIGxvcyB0cmVzIGhhY2UgbG8gbWlzbW8sIHkgbG8gaGFjZQogKiBBUVXDjS4KICoKICog4pSA4pSAIEVMIE9WRVJMQVkgU0UgQUJSRSBET05ERSBFU1TDgSBFTCBVU1VBUklPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogKgogKiBBbnRlcyBsYSBmaWNoYSB5IGVsIGxpc3RhZG8gbmF2ZWdhYmFuIGEgYD9yb3V0ZT1zdXBwb3J0Jm9yZGVyPXtpZH1gIHkgZXJhIGxhCiAqIHNlY2Npw7NuIGRlIFNvcG9ydGUgbGEgcXVlIGFicsOtYSBlbCBmb3JtdWxhcmlvIGFsIG1vbnRhcnNlLiBFbCBjbGllbnRlIHB1bHNhYmEKICogwqtTb2xpY2l0YXIgYXl1ZGHCuyB5IGxhIHBhbnRhbGxhIHNlIGxlIGliYTogcGVyZMOtYSBkZSB2aXN0YSBlbCBwZWRpZG8gLS1sYXMKICogbMOtbmVhcywgZWwgZW52w61vLCBlbCBuw7ptZXJvLS0ganVzdG8gY3VhbmRvIHRlbsOtYSBxdWUgY29udGFyIHF1w6kgaGFiw61hIHBhc2FkbwogKiBjb24gw6lsLiBBaG9yYSBlbCBmb3JtdWxhcmlvIHNhbGUgZW5jaW1hIGRlbCBwZWRpZG8sIHkgYSBsYSBzZWNjacOzbiBkZSBTb3BvcnRlCiAqIHNlIHZhIERFU1BVw4lTLCBjb24gZWwgZXhwZWRpZW50ZSB5YSBhYmllcnRvIHkgc3UgaGlsbyBkZWxhbnRlLgogKgogKiDilIDilIAgTk8gSEFZIE1BUkNBRE8sIFkgTk8gRVMgVU4gREVTQ1VJRE8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqCiAqIEVsIGZvcm11bGFyaW8gbG8gZGVjbGFyYSBlbCBzZXJ2aWRvciBjb24gZWwgRFNMIChgL2FjY291bnQvc3VwcG9ydC9mb3JtYCk6CiAqIGFzdW50bywgZWwgcGVkaWRvIC0tcXVlIGRlY2lkZSBlbCB0aXBvOiBjb24gcGVkaWRvIGVzIHVuYSBJTkNJREVOQ0lBLCBzaW4gw6lsCiAqIHVuYSBDT05TVUxUQS0tIHkgZWwgbWVuc2FqZS4gQXPDrSBoZXJlZGEgdmFsaWRhY2nDs24sIGVycm9yZXMgcG9yIGNhbXBvIHkgZWwKICogZ3VhcmRhZG8gZGUgYFRGb3JtYCBzaW4gZXNjcmliaXIgbmkgdW4gYDxpbnB1dD5gLiBMbyDDum5pY28gcXVlIHZpdmUgYXF1w60gZXMKICogZWwgY29tcG9ydGFtaWVudG8uCiAqLwp3aW5kb3cuU3VwcG9ydFRpY2tldEZvcm0gPSB7CgogICAgLyoqCiAgICAgKiBFTlNFw5FBIEVMIEZPUk1VTEFSSU8gRU4gVU4gT1ZFUkxBWS4KICAgICAqCiAgICAgKiAgIG9yZGVySWQgICAgZWwgcGVkaWRvIGRlbCBxdWUgc2UgaGFibGE7IHNpbiDDqWwgc2FsZSB1bmEgY29uc3VsdGEgZ2VuZXJhbAogICAgICogICBzdWJ0aXRsZSAgIGVsIHN1YnTDrXR1bG8gZGUgbGEgY2FiZWNlcmE7IGhheSB1biBkZWZlY3RvIHJhem9uYWJsZQogICAgICogICBvbkNyZWF0ZWQgIHF1w6kgaGFjZXIgY29uIGVsIGV4cGVkaWVudGUgcmVjacOpbiBhYmllcnRvLiBTaW4gZXN0byBzZSB2YSBhCiAgICAgKiAgICAgICAgICAgICAgbGEgc2VjY2nDs24gZGUgU29wb3J0ZSwgcXVlIGVzIGxvIHF1ZSBlc3BlcmEgcXVpZW4gbG8gYWJyacOzCiAgICAgKiAgICAgICAgICAgICAgZGVzZGUgdW4gcGVkaWRvCiAgICAgKi8KICAgIG9wZW46IGZ1bmN0aW9uIChvcGNpb25lcykgewoKICAgICAgICBjb25zdCBvICAgPSBvcGNpb25lcyB8fCB7fTsKICAgICAgICBjb25zdCB5byAgPSB0aGlzOwogICAgICAgIGNvbnN0IHVybCA9ICcvYWNjb3VudC9zdXBwb3J0L2Zvcm0nICsgKG8ub3JkZXJJZCA/ICgnP29yZGVyPScgKyBlbmNvZGVVUklDb21wb25lbnQoby5vcmRlcklkKSkgOiAnJyk7CgogICAgICAgIFROZXRDb20uR0VUKHVybCwge30sIGZ1bmN0aW9uIChyZXNwKSB7CgogICAgICAgICAgICBjb25zdCBkID0gKHJlc3AgJiYgcmVzcC5kYXRhKSA/IHJlc3AuZGF0YSA6IHJlc3A7CgogICAgICAgICAgICBpZiAoIWQgfHwgIWQudHlwZSkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBUTm90aWZ5ID09PSAnZnVuY3Rpb24nICYmIFROb3RpZnkudG9hc3QpIFROb3RpZnkudG9hc3QoJ05vIGhlbW9zIHBvZGlkbyBhYnJpciBlbCBmb3JtdWxhcmlvJyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBURm9ybS5jcmVhdGUoZCk7CgogICAgICAgICAgICAvKiBMYSBjYWJlY2VyYSB2YSBjb24gZWwgaGVscGVyIGRlbCBwcm95ZWN0byAtLWljb25vLCB0w610dWxvIHkKICAgICAgICAgICAgICAgc3VidMOtdHVsbywgVE9ETyBhIGxhIGl6cXVpZXJkYS0tLCB5IGVsIHN1YnTDrXR1bG8gZGljZSBkZSBxdcOpIHZhCiAgICAgICAgICAgICAgIGxhIHZlbnRhbmEgY29uIGRhdG9zIHJlYWxlcyBlbiB2ZXogZGUgcmVwZXRpciBlbCB0w610dWxvLiAqLwogICAgICAgICAgICBjb25zdCBvdmVybGF5ID0gVE92ZXJsYXlXaW4uY3JlYXRlKHsKICAgICAgICAgICAgICAgIHRpdGxlOiBUT3ZlcmxheVdpbi5jYWJlY2VyYSh7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2x1Y2lkZTpoZWFkcGhvbmVzJywKICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0FicmlyIGV4cGVkaWVudGUgZGUgc29wb3J0ZScsCiAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IG8uc3VidGl0bGUgfHwgJ0NvbiB1biBwZWRpZG8gZXMgdW5hIGluY2lkZW5jaWE7IHNpbiDDqWwsIHVuYSBjb25zdWx0YSBnZW5lcmFsLicKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgY29udGVudDogZm9ybSwKICAgICAgICAgICAgICAgIGNsb3NlSWNvbjogdHJ1ZQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8qIEVsIG92ZXJsYXkgc2UgbW9udGEgRlVFUkEgZGUgbGEgcGFudGFsbGEgcXVlIGxvIGFicmUgLS1jdWVsZ2EgZGVsCiAgICAgICAgICAgICAgIGJvZHktLSwgYXPDrSBxdWUgZWwgQ1NTIGRlIGVzYSBwYW50YWxsYSBubyBsZSBhbGNhbnphLiBDb24gc3UKICAgICAgICAgICAgICAgcHJvcGlhIGNsYXNlIHPDrTogZXMgbG8gcXVlIGRlamEgcG9uZXIgZWwgYm90w7NuIHByaW5jaXBhbCBlbgogICAgICAgICAgICAgICB2ZXJkZSwgcG9ycXVlIGVsIGBidG4tcHJpbWFyeWAgZGVsIHNpdGlvIGVzIG5lZ3JvIHkgYXF1w60KICAgICAgICAgICAgICAgZGVzZW50b25hLiBMYSBob2phIHZpYWphIGNvbiBFU1RFIGNvbXBvbmVudGUsIG5vIGNvbiBsYSBzZWNjacOzbgogICAgICAgICAgICAgICBkZSBTb3BvcnRlOiBzaSBubywgZWwgb3ZlcmxheSBhYmllcnRvIGRlc2RlIHVuIHBlZGlkbyBzYWxkcsOtYSBjb24KICAgICAgICAgICAgICAgb3RybyBjb2xvciBxdWUgZWwgbWlzbW8gb3ZlcmxheSBhYmllcnRvIGRlc2RlIFNvcG9ydGUuICovCiAgICAgICAgICAgIG92ZXJsYXkuaHRtbC5hZGRDbGFzcygnc3Atb3ZlcmxheScpOwoKICAgICAgICAgICAgLyog4pSA4pSAIEVMIEVWRU5UTyBFUyBgb25TdWJtaXRgLCBOTyBgc3VibWl0dGVkYCDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgICAgICAgICAgICAgQ29tcHJvYmFkbyBlbiBgVEZvcm0uanNgOiBhbCBndWFyZGFyIGVtaXRlIGBvblNhdmVgIChjb24gZWwKICAgICAgICAgICAgICAgcGF5bG9hZCBxdWUgc2UgbWFuZMOzKSB5IGRlc3B1w6lzIGBvblN1Ym1pdGAgKGNvbiBsYSBSRVNQVUVTVEEgZGVsCiAgICAgICAgICAgICAgIHNlcnZpZG9yKS4gTm8gZXhpc3RlIG5pbmfDum4gYHN1Ym1pdHRlZGAgLS0gZW5nYW5jaGFkbyBhaMOtLCBlbAogICAgICAgICAgICAgICBmb3JtdWxhcmlvIGd1YXJkYWJhLCBkZWPDrWEgwqtEYXRvcyBlbnZpYWRvcyBjb3JyZWN0YW1lbnRlwrsgeSBsYQogICAgICAgICAgICAgICB2ZW50YW5hIHNlIHF1ZWRhYmEgYWJpZXJ0YSBjb21vIHNpIG5vIGh1YmllcmEgcGFzYWRvIG5hZGEuCgogICAgICAgICAgICAgICBgb25TdWJtaXRgIHNlIGRpc3BhcmEgVEFNQknDiU4gY3VhbmRvIGVsIGd1YXJkYWRvIGZhbGxhLCBhc8OtIHF1ZQogICAgICAgICAgICAgICBoYXkgcXVlIG1pcmFyIGxhIHJlc3B1ZXN0YSBhbnRlcyBkZSBjZXJyYXI6IGNlcnJhbmRvIGEgY2llZ2FzIHNlCiAgICAgICAgICAgICAgIHRpcmEgZWwgZm9ybXVsYXJpbyAtLXkgbG8gZXNjcml0by0tIGp1c3RvIGN1YW5kbyBlbCBjbGllbnRlCiAgICAgICAgICAgICAgIG5lY2VzaXRhIGNvcnJlZ2lyIHVuIGNhbXBvLiAqLwogICAgICAgICAgICBmb3JtLm9uKCdvblN1Ym1pdCcsIGZ1bmN0aW9uIChldiwgcmVzcHVlc3RhKSB7CgogICAgICAgICAgICAgICAgY29uc3QgciA9IChyZXNwdWVzdGEgJiYgcmVzcHVlc3RhLmRhdGEpID8gcmVzcHVlc3RhLmRhdGEgOiByZXNwdWVzdGE7CgogICAgICAgICAgICAgICAgaWYgKCFyZXNwdWVzdGEgfHwgcmVzcHVlc3RhLm9rID09PSBmYWxzZSB8fCAhciB8fCAhci5pZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIG92ZXJsYXkuY2xvc2UoKTsKCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFROb3RpZnkgPT09ICdmdW5jdGlvbicgJiYgVE5vdGlmeS50b2FzdCkgewogICAgICAgICAgICAgICAgICAgIFROb3RpZnkudG9hc3QoJ0V4cGVkaWVudGUgYWJpZXJ0bzogJyArIChyLmNvZGUgfHwgJycpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8ub25DcmVhdGVkID09PSAnZnVuY3Rpb24nKSB7IG8ub25DcmVhdGVkKHIpOyByZXR1cm47IH0KCiAgICAgICAgICAgICAgICB5by50b1NlY3Rpb24ocik7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgb3ZlcmxheS5zaG93KCk7CiAgICAgICAgfSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQSBMQSBTRUNDScOTTiBERSBTT1BPUlRFLCBDT04gRUwgRVhQRURJRU5URSBBQklFUlRPLgogICAgICoKICAgICAqIExhIFVSTCBsYSBjb21wb25lIGVsIFNFUlZJRE9SIChgZW5sYWNlYCwgcXVlIGVzCiAgICAgKiBgL2FjY291bnQvc3VwcG9ydC97dGlwb30ve2lkfWApIHkgZXNhIHJ1dGEgcmVkaXJpZ2UgYWwgcGFuZWwgY29uCiAgICAgKiBgP3JvdXRlPXN1cHBvcnQmaWQ9e3RpcG99LXtpZH1gOiB1biBzb2xvIHNpdGlvIGRlY2lkZSBjw7NtbyBzZSBlbmxhemEgdW4KICAgICAqIGV4cGVkaWVudGUsIHkgZXMgZWwgbWlzbW8gcXVlIHVzYW4gbG9zIGNvcnJlb3MgeSBsYXMgbm90aWZpY2FjaW9uZXMuCiAgICAgKi8KICAgIHRvU2VjdGlvbjogZnVuY3Rpb24gKHIpIHsKICAgICAgICAvKiBQb3IgZWwgbWVuw7osIHNpbiByZWNhcmdhciBlbCBwYW5lbCAodmVyIGBBY2NvdW50TmF2YCkuICovCiAgICAgICAgQWNjb3VudE5hdi5nbygociAmJiByLmVubGFjZSkgPyByLmVubGFjZSA6ICcvYWNjb3VudC9zdXBwb3J0Jyk7CiAgICB9Cn07Cg0KDQo8L3NjcmlwdD4NCg0KPC9tb2R1bGU+DQoNCg=="},"moduleProps":{"TAccountSupport":[],"TSupportTicketForm":[]},"meta":{"component":"TAccountSupport","execution_time_ms":0,"performance":[],"timestamp":1790285371,"is_initial_load":true}}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ---- Boundary ----