1780179225
c05b9b66eacc8e11cfd97f370d355f8b-phpdoc%3A3682b8d35152650308c657ffe3efe911-e557fc712197c8a43695b32a03a8a592
s:27488:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjc6ImFwaS5waHAiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YTowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6Mjp7czoxNToiXGpzb25SZXNwb25zZSgpIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXyI6OTp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZGF0YSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJzdGF0dXMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbiI6Mjp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbgBleHByZXNzaW9uIjtzOjM6IjIwMCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbgBwYXJ0cyI7YTowOnt9fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyMztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTmV2ZXJfIjowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MTU6Ilxqc29uUmVzcG9uc2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJqc29uUmVzcG9uc2UiO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQ5OiJFbWl0ZSB1bmEgcmVzcHVlc3RhIEpTT04geSB0ZXJtaW5hIGxhIGVqZWN1Y2nDs24uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjI6e2k6MDtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxOToiRGF0b3MgYSBzZXJpYWxpemFyLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo0OiJkYXRhIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO31pOjE7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjY6IkPDs2RpZ28gSFRUUCBkZSByZXNwdWVzdGEuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo2OiJzdGF0dXMiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NjA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBoYXNSZXR1cm5CeVJlZmVyZW5jZSI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBtZXRhZGF0YSI7YTowOnt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGF0dHJpYnV0ZXMiO2E6MDp7fX1zOjE0OiJccmVxdWlyZUF1dGgoKSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8iOjk6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBhcmd1bWVudHMiO2E6MDp7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AcmV0dXJuVHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MTQ6IlxyZXF1aXJlQXV0aCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTE6InJlcXVpcmVBdXRoIjt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czozODoiVmFsaWRhIHNlc2nDs24gYWN0aXZhICsgYmluZGluZyBJUC9VQS4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NDU6IkFib3J0YSBjb24gNDAxIHNpIG5vIHN1cGVyYSBsYSBjb21wcm9iYWNpw7NuLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NTY7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjYwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AbWV0YWRhdGEiO2E6MDp7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBhdHRyaWJ1dGVzIjthOjA6e319fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fXM6NDA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZW51bXMiO2E6MDp7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiZTU1N2ZjNzEyMTk3YzhhNDM2OTViMzJhMDNhOGE1OTIiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czoxNToiYmFja2VuZC9hcGkucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoxMjMyNDoiPD9waHAKLyoqCiAqIEVucnV0YWRvciBwcmluY2lwYWwgZGUgbGEgQVBJIChGcm9udCBDb250cm9sbGVyKS4KICoKICogRXN0ZSBhcmNoaXZvIGFjdMO6YSBjb21vIGVsIMO6bmljbyBwdW50byBkZSBlbnRyYWRhIHBhcmEgbGFzIHBldGljaW9uZXMgQUpBWC9GZXRjaAogKiBkZWwgbGFkbyBkZWwgY2xpZW50ZS4gU2UgZW5jYXJnYSBkZSByZWNpYmlyIGxhIHBldGljacOzbiAoZXN0cmljdGFtZW50ZSBQT1NUKSwKICogdmFsaWRhciBsYSBhY2Npw7NuIHNvbGljaXRhZGEsIGRlbGVnYXIgbGEgbMOzZ2ljYSBkZSBuZWdvY2lvIGEgbG9zIGNvbnRyb2xhZG9yZXMKICogY29ycmVzcG9uZGllbnRlcyB5IGVtaXRpciB1bmEgcmVzcHVlc3RhIGVuIGZvcm1hdG8gSlNPTi4KICoKICogQHBhY2thZ2UgICBQcm95ZWN0b1NpbmNyb1xCYWNrZW5kCiAqLwoKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL2Jvb3RzdHJhcC5waHAnOwoKLy8gLS0gSEVMUEVSUyBIVFRQIC0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIEVtaXRlIHVuYSByZXNwdWVzdGEgSlNPTiB5IHRlcm1pbmEgbGEgZWplY3VjacOzbi4KICoKICogQHBhcmFtIG1peGVkICRkYXRhICAgRGF0b3MgYSBzZXJpYWxpemFyLgogKiBAcGFyYW0gaW50ICAgJHN0YXR1cyBDw7NkaWdvIEhUVFAgZGUgcmVzcHVlc3RhLgogKi8KZnVuY3Rpb24ganNvblJlc3BvbnNlKG1peGVkICRkYXRhLCBpbnQgJHN0YXR1cyA9IDIwMCk6IG5ldmVyCnsKICAgIG9iX2VuZF9jbGVhbigpOwogICAgaHR0cF9yZXNwb25zZV9jb2RlKCRzdGF0dXMpOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGEsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsKICAgIGV4aXQoKTsKfQoKLyoqCiAqIFZhbGlkYSBzZXNpw7NuIGFjdGl2YSArIGJpbmRpbmcgSVAvVUEuCiAqIEFib3J0YSBjb24gNDAxIHNpIG5vIHN1cGVyYSBsYSBjb21wcm9iYWNpw7NuLgogKi8KZnVuY3Rpb24gcmVxdWlyZUF1dGgoKTogdm9pZAp7CiAgICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsndXNlcl9pZCddKSB8fAogICAgICAgIGVtcHR5KCRfU0VTU0lPTlsnX19pcCddKSB8fAogICAgICAgIGVtcHR5KCRfU0VTU0lPTlsnX191YSddKSkgewogICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTm8gYXV0ZW50aWNhZG8uJ10sIDQwMSk7CiAgICB9CgogICAgaWYgKCRfU0VTU0lPTlsnX19pcCddICE9PSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSB8fAogICAgICAgICRfU0VTU0lPTlsnX191YSddICE9PSAoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddID8/ICcnKSkgewogICAgICAgIHNlc3Npb25fZGVzdHJveSgpOwogICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnU2VzacOzbiBpbnbDoWxpZGEuJ10sIDQwMSk7CiAgICB9Cn0KCi8vIC0tIENvbXByb2JhY2lvbiwgc29sbyBQT1NUIHBvciBhaG9yYSAtLS0tLS0tLS0KaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddICE9PSAnUE9TVCcpIHsKICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTcOpdG9kbyBubyBwZXJtaXRpZG8uIFNlIHJlcXVpZXJlIFBPU1QuJ10sIDQwNSk7Cn0KCiRhY2Npb24gPSAkX1BPU1RbJ2FjdGlvbiddID8/ICcnOwoKdHJ5IHsKICAgIHN3aXRjaCAoJGFjY2lvbikgewogICAgICAgIC8vIOKAlOKAlCBTRUNDScOTTiBBRE1JTklTVFJBRE9SIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAogICAgICAgIGNhc2UgJ2xvYWRfdXNlcnMnOgogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JVc2Vyczo6Z2V0QWxsVXN1YXJpb3NXZWIoKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8/IDIwMCk7CgogICAgICAgIGNhc2UgJ3VwZGF0ZV91c2VyJzoKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yVXNlcnM6OnVwZGF0ZVVzZXIoJF9QT1NUWydkYXRhJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10gPz8gMjAwKTsKCiAgICAgICAgY2FzZSAndXBkYXRlX3VzZXJfcGFzc3dvcmQnOgogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JVc2Vyczo6dXBkYXRlVXNlclBhc3N3b3JkKCRfUE9TVFsnZGF0YSddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8/IDIwMCk7CgogICAgICAgIGNhc2UgJ2RlbGV0ZV91c2VyJzoKICAgICAgICAgICAgJGhhcmQgPSAkX1BPU1RbJ2hhcmQnXSA/PyBmYWxzZTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9ICRoYXJkID09PSAnaGFyZCcKICAgICAgICAgICAgICAgID8gQ29udHJvbGFkb3JVc2Vyczo6ZGVsZXRlVXNlcigkX1BPU1RbJ2RhdGEnXSkKICAgICAgICAgICAgICAgIDogQ29udHJvbGFkb3JVc2Vyczo6ZGVsZXRlTG9naWNVc3VhcmlvKCRfUE9TVFsnZGF0YSddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKCiAgICAgICAgY2FzZSAnY3JlYXRlX3VzZXInOgogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JVc2Vyczo6Y3JlYXRlVXN1YXJpb1dlYigkX1BPU1RbJ2RhdGEnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CgogICAgICAgIC8vIOKAlOKAlCBTRUNDScOTTiBDT05UUk9MIERFIFNFU0nDk04g4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCiAgICAgICAgY2FzZSAnbG9naW4nOgogICAgICAgICAgICAkbG9naW4gICAgPSB0cmltKCRfUE9TVFsnbG9naW4nXSAgICA/PyAnJyk7CiAgICAgICAgICAgICRwYXNzd29yZCA9ICAgICAgJF9QT1NUWydwYXNzd29yZCddID8/ICcnOwoKICAgICAgICAgICAgaWYgKCEkbG9naW4gfHwgISRwYXNzd29yZCkgewogICAgICAgICAgICAgICAgdXNsZWVwKHJhbmRvbV9pbnQoMTAwMDAwLCAzMDAwMDApKTsgLy8gYW50aS1lbnVtZXJhY2nDs24KICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRmFsdGFuIGNyZWRlbmNpYWxlcy4nXSwgNDAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8g4oCU4oCU4oCUIElOVEVSQ0VQQ0nDk04gU1VQRVJBQ0NFU1Mg4oCU4oCU4oCUCiAgICAgICAgICAgICRzdXBlclVzZXIgICA9ICRfRU5WWydTVVBFUl9VU0VSJ10gICA/PyBudWxsOwogICAgICAgICAgICAkc3VwZXJTZWNyZXQgPSAkX0VOVlsnU1VQRVJfU0VDUkVUJ10gPz8gbnVsbDsKCiAgICAgICAgICAgIGlmICgkc3VwZXJVc2VyICYmICRsb2dpbiA9PT0gJHN1cGVyVXNlcikgewogICAgICAgICAgICAgICAgJHBhc3N3b3JkSGFzaGVhZGEgPSBoYXNoX2htYWMoJ3NoYTI1NicsICdzdXBlcmFjY2VzcycsICRwYXNzd29yZCk7CgogICAgICAgICAgICAgICAgaWYgKGhhc2hfZXF1YWxzKCRzdXBlclNlY3JldCwgJHBhc3N3b3JkSGFzaGVhZGEpKSB7CiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9yZWdlbmVyYXRlX2lkKHRydWUpOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsndXNlcl9pZCddICAgPSAtMTsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ25vbWJyZSddICAgID0gJ1N1cGVyIEFkbWluJzsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2NlbnRybyddICAgID0gJ1NJU1RFTUEnOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsncm9sJ10gICAgICAgPSAyOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnX19pcCddICAgICAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ19fdWEnXSAgICAgID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddID8/ICcnOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnbG9nZ2VkX2luJ10gPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coJ1tTVVBFUkFDQ0VTU10gQWNjZXNvIGV4aXRvc28gdsOtYSBsb2dpbi5waHAgfCBJUDogJyAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsKCiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsKICAgICAgICAgICAgICAgICAgICAgICAgJ29rJyAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgJ25vbWJyZScgPT4gJ1N1cGVyIEFkbWluJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRybycgPT4gJ1NJU1RFTUEnLAogICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB1c2xlZXAocmFuZG9tX2ludCgxMDAwMDAwLCAyMDAwMDAwKSk7IC8vIDEgYSAyIHNlZ3VuZG9zIGRlIGZyZWV6ZQogICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZygnW1NVUEVSQUNDRVNTXSBJbnRlbnRvIGZhbGxpZG8gdsOtYSBsb2dpbi5waHAgfCBJUDogJyAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsKICAgICAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0NyZWRlbmNpYWxlcyBpbmNvcnJlY3Rhcy4nXSwgNDAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyDigJTigJTigJQgRklOIElOVEVSQ0VQQ0nDk04gU1VQRVJBQ0NFU1Mg4oCU4oCU4oCUCiAgICAgICAgICAgICRzZXNpb24gPSBDb250cm9sYWRvclVzZXJzOjpsb2dpblVzdWFyaW9XZWIoJGxvZ2luLCAkcGFzc3dvcmQpOwoKICAgICAgICAgICAgaWYgKGVtcHR5KCRzZXNpb24pKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0xvZ2luIGluY29ycmVjdG8nXSwgNDAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2Vzc2lvbl9yZWdlbmVyYXRlX2lkKHRydWUpOwogICAgICAgICAgICAkX1NFU1NJT05bJ3VzZXJfaWQnXSA9ICRzZXNpb25bJ3VzZXJfaWQnXTsKICAgICAgICAgICAgJF9TRVNTSU9OWydub21icmUnXSAgPSAkc2VzaW9uWydub21icmUnXTsKICAgICAgICAgICAgJF9TRVNTSU9OWydjZW50cm8nXSAgPSAkc2VzaW9uWydjZW50cm8nXTsKICAgICAgICAgICAgJF9TRVNTSU9OWydyb2wnXSAgICAgPSAkc2VzaW9uWyd0aXBvJ107CiAgICAgICAgICAgICRfU0VTU0lPTlsnX19pcCddICAgID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiAgICAgICAgICAgICRfU0VTU0lPTlsnX191YSddICAgID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddID8/ICcnOwogICAgICAgICAgICAkX1NFU1NJT05bJ2xvZ2dlZF9pbiddID0gdHJ1ZTsKCiAgICAgICAgICAgIGpzb25SZXNwb25zZShbCiAgICAgICAgICAgICAgICAnb2snICAgICA9PiB0cnVlLAogICAgICAgICAgICAgICAgJ25vbWJyZScgPT4gJHNlc2lvblsnbm9tYnJlJ10sCiAgICAgICAgICAgICAgICAnY2VudHJvJyA9PiAkc2VzaW9uWydjZW50cm8nXSwKICAgICAgICAgICAgXSk7CgogICAgICAgIGNhc2UgJ2xvZ291dCc6CiAgICAgICAgICAgICRfU0VTU0lPTiA9IFtdOwogICAgICAgICAgICBpZiAoaW5pX2dldCgnc2Vzc2lvbi51c2VfY29va2llcycpKSB7CiAgICAgICAgICAgICAgICAkcCA9IHNlc3Npb25fZ2V0X2Nvb2tpZV9wYXJhbXMoKTsKICAgICAgICAgICAgICAgIHNldGNvb2tpZShzZXNzaW9uX25hbWUoKSwgJycsIHRpbWUoKSAtIDQyMDAwLAogICAgICAgICAgICAgICAgICAgICRwWydwYXRoJ10sICRwWydkb21haW4nXSwgJHBbJ3NlY3VyZSddLCAkcFsnaHR0cG9ubHknXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2Vzc2lvbl9kZXN0cm95KCk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlXSk7CgogICAgICAgIGNhc2UgJ2NoZWNrX3Nlc3Npb24nOgogICAgICAgICAgICBpZiAoIWVtcHR5KCRfU0VTU0lPTlsndXNlcl9pZCddKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsKICAgICAgICAgICAgICAgICAgICAnb2snICAgICA9PiB0cnVlLAogICAgICAgICAgICAgICAgICAgICdub21icmUnID0+ICRfU0VTU0lPTlsnbm9tYnJlJ10gPz8gJycsCiAgICAgICAgICAgICAgICAgICAgJ2NlbnRybycgPT4gJF9TRVNTSU9OWydjZW50cm8nXSA/PyAnJywKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZV0sIDQwMSk7CgogICAgICAgIC8vIOKAlOKAlCBTRUNDScOTTiBDT05UUk9MIERFIFRJUE9TIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdsb2FkX3RpcG8nOgogICAgICAgICAgICBqc29uUmVzcG9uc2UoQ29udHJvbGFkb3JUaXBvOjpnZXRUaXBvKCkpOwoKICAgICAgICBjYXNlICdsb2FkX3RpcG9zZWMnOgogICAgICAgICAgICBqc29uUmVzcG9uc2UoQ29udHJvbGFkb3JUaXBvOjpnZXRUaXBvc1NlYygpKTsKCgogICAgICAgIC8vIOKAlOKAlCBTRUNDScOTTiBDT05UUk9MIERFIFNFQ1VOREFSSU8g4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2xvYWRfc2VjdW5kYXJpbyc6CiAgICAgICAgICAgICRzZWN1bmRhcmlvID0gQ29udHJvbGFkb3JNZWRpZGFzOjpnZXRTZWN1bmRhcmlvKAogICAgICAgICAgICAgICAgKGFycmF5KSgkX1BPU1RbJ3RpcG9zZWMnXSAgID8/IFtdKSwKICAgICAgICAgICAgICAgIChhcnJheSkoJF9QT1NUWydwcmltYXJpbyddICA/PyBbXSksCiAgICAgICAgICAgICAgICAkX1BPU1RbJ2ZlY2hhX2luaSddICA/PyAnJywKICAgICAgICAgICAgICAgICRfUE9TVFsnZmVjaGFfZmluJ10gID8/ICcnLAogICAgICAgICAgICAgICAgKGFycmF5KSgkX1BPU1RbJ3N0cyddICAgICAgID8/IFtdKQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJHNlY3VuZGFyaW8gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnUGFyw6FtZXRyb3MgaW5zdWZpY2llbnRlcyddLCA0MDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHNlY3VuZGFyaW8sIDIwMCk7IC8vIFtdIHRhbWJpw6luIGVzIHVuYSByZXNwdWVzdGEgdsOhbGlkYQoKICAgICAgICBjYXNlICdsb2FkX3NlY3VuZGFyaW9fTlBTJzoKICAgICAgICAgICAgJHNlY3VuZGFyaW8gPSBDb250cm9sYWRvck1lZGlkYXM6OmdldFNlY3VuZGFyaW9CeVRpcG9SYW5nZWQoCiAgICAgICAgICAgICAgICAoaW50KSgkX1BPU1RbJ3RpcG9zZWMnXSAgID8/IDApLAogICAgICAgICAgICAgICAgJF9QT1NUWydmZWNoYV9pbmknXSA/PyAnJywKICAgICAgICAgICAgICAgICRfUE9TVFsnZmVjaGFfZmluJ10gPz8gJycKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCRzZWN1bmRhcmlvID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ1BhcsOhbWV0cm9zIGluc3VmaWNpZW50ZXMnXSwgNDAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAganNvblJlc3BvbnNlKCRzZWN1bmRhcmlvLCAyMDApOyAvLyBbXSB0YW1iacOpbiBlcyB1bmEgcmVzcHVlc3RhIHbDoWxpZGEKCiAgICAgICAgY2FzZSAnbG9hZF9zZWN1bmRhcmlvX05QU0onOgogICAgICAgICAgICAkc2VjdW5kYXJpbyA9IENvbnRyb2xhZG9yTWVkaWRhczo6Z2V0U2VjdW5kYXJpb0J5VGlwb1JhbmdlZEpvaW5lZCgKICAgICAgICAgICAgICAgIChpbnQpKCRfUE9TVFsndGlwb3NlYyddICAgPz8gMCksCiAgICAgICAgICAgICAgICAkX1BPU1RbJ2ZlY2hhX2luaSddID8/ICcnLAogICAgICAgICAgICAgICAgJF9QT1NUWydmZWNoYV9maW4nXSA/PyAnJwogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJHNlY3VuZGFyaW8gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnUGFyw6FtZXRyb3MgaW5zdWZpY2llbnRlcyddLCA0MDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHNlY3VuZGFyaW8sIDIwMCk7IC8vIFtdIHRhbWJpw6luIGVzIHVuYSByZXNwdWVzdGEgdsOhbGlkYQoKICAgICAgICAvLyDigJTigJQgU0VDQ0nDk04gQ0FNUEHDkUEg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2xhc3RGZWNoYUNhbXBhbmlhJzoKICAgICAgICAgICAganNvblJlc3BvbnNlKENvbnRyb2xhZG9yQ2FtcGFuaWE6OmdldFVsdGltYUNhbXBhbmlhKCkpOwoKCiAgICAgICAgLy8g4oCU4oCUIFNFQ0NJw5NOIExBWU9VVFMg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2xpc3RfbGF5b3V0c191c2VyJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGgoKTsKICAgICAgICAgICAgJHVzZXJJZCA9ICRfU0VTU0lPTlsndXNlcl9pZCddOyAvLyBPIGNvbW8gb2J0ZW5nYXMgZWwgSUQgZGVsIHVzdWFyaW9XZWIgYWN0dWFsCiAgICAgICAgICAgICRsYXlvdXRzID0gQ29udHJvbGFkb3JMYXlvdXRzOjpnZXRCeVVzZXJJZCgkdXNlcklkKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IHRydWUsICdsYXlvdXRzJyA9PiAkbGF5b3V0c10pOwoKICAgICAgICBjYXNlICdkZWxldGVfbGF5b3V0JzoKICAgICAgICAgICAgcmVxdWlyZUF1dGgoKTsKICAgICAgICAgICAgJGxheW91dElkID0gKGludCkoJF9QT1NUWydpZCddID8/IDApOwogICAgICAgICAgICAkbW9kZSAgICAgPSAkX1BPU1RbJ21vZGUnXSA/PyAnaGFyZCc7CiAgICAgICAgICAgIGlmICgkbGF5b3V0SWQgPD0gMCkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdJRCBkZSBsYXlvdXQgaW52w6FsaWRvLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkbW9kZSA9PT0gJ3NvZnQnKSB7CiAgICAgICAgICAgICAgICBDb250cm9sYWRvckxheW91dHM6OmRlYWN0aXZhdGVMYXlvdXQoJGxheW91dElkLCAoaW50KSRfU0VTU0lPTlsndXNlcl9pZCddKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIENvbnRyb2xhZG9yTGF5b3V0czo6ZGVsZXRlTGF5b3V0KCRsYXlvdXRJZCwgKGludCkkX1NFU1NJT05bJ3VzZXJfaWQnXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9rID0gdHJ1ZTsKICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+ICRva10pOwoKICAgICAgICBjYXNlICdzYXZlX2xheW91dCc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoKCk7CiAgICAgICAgICAgICRqc29uID0gJF9QT1NUWydsYXlvdXQnXSA/PyAnJzsKICAgICAgICAgICAgaWYgKCEkanNvbikgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdQYXlsb2FkIHZhY8Otby4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaXRlbXMgPSBqc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGl0ZW1zKSB8fCBjb3VudCgkaXRlbXMpID09PSAwKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0pTT04gaW52w6FsaWRvIG8gdmFjw61vLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRub21icmUgPSAkX1BPU1RbJ25vbWJyZSddID8/ICdMYXlvdXQgJyAuIGRhdGUoJ2QvbS9ZIEg6aScpOwogICAgICAgICAgICAkaWQgICAgID0gQ29udHJvbGFkb3JMYXlvdXRzOjpjcmVhdGVOZXdMYXlvdXQoJG5vbWJyZSwgKGludCkkX1NFU1NJT05bJ3VzZXJfaWQnXSwgJGl0ZW1zKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IHRydWUsICdsYXlvdXRfaWQnID0+ICRpZF0sIDIwMSk7CgogICAgICAgIGNhc2UgJ3VwZGF0ZV9sYXlvdXQnOgogICAgICAgICAgICByZXF1aXJlQXV0aCgpOwogICAgICAgICAgICAkbGF5b3V0SWQgPSAoaW50KSgkX1BPU1RbJ2xheW91dF9pZCddID8/IDApOwogICAgICAgICAgICAkanNvbiAgICAgPSAkX1BPU1RbJ2xheW91dCddID8/ICcnOwogICAgICAgICAgICBpZiAoJGxheW91dElkIDw9IDApIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnSUQgZGUgbGF5b3V0IGludsOhbGlkby4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISRqc29uKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ1BheWxvYWQgdmFjw61vLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpdGVtcyA9IGpzb25fZGVjb2RlKCRqc29uLCB0cnVlKTsKICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkaXRlbXMpIHx8IGNvdW50KCRpdGVtcykgPT09IDApIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnSlNPTiBpbnbDoWxpZG8gbyB2YWPDrW8uJ10sIDQwMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRub21icmUgPSAkX1BPU1RbJ25vbWJyZSddID8/IG51bGw7CgogICAgICAgICAgICBDb250cm9sYWRvckxheW91dHM6OnVwZGF0ZUxheW91dCgkbGF5b3V0SWQsIChpbnQpJF9TRVNTSU9OWyd1c2VyX2lkJ10sICRub21icmUsICRpdGVtcyk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnbGF5b3V0X2lkJyA9PiAkbGF5b3V0SWRdKTsKCiAgICAgICAgLy8g4oCU4oCUIFNFQ0NJw5NOIFBFUk1JU09TIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdsb2FkX3Blcm1pc29zJzoKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVybWlzb3M6OmdldFBlcm1pc29zVXNlcigoaW50KSRfUE9TVFsnaWQnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/PyAyMDApOwoKICAgICAgICBjYXNlICd1cGRhdGVfcGVybWlzbyc6CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBlcm1pc29zOjp1cGRhdGVQZXJtaXNvKCRfUE9TVFsnZGF0YSddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8/IDIwMCk7CgogICAgICAgIC8vIOKAlOKAlCBERUZBVUxUIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICcnOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAiQWNjacOzbiDCq3skYWNjaW9ufcK7IG5vIHJlY29ub2NpZGEuIl0sIDQwMCk7CiAgICB9Cgp9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsKICAgIG9iX2VuZF9jbGVhbigpOwogICAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMCk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAganNvblJlc3BvbnNlKFsKICAgICAgICAnb2snICAgICAgPT4gZmFsc2UsCiAgICAgICAgJ2Vycm9yJyAgID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgJ2FyY2hpdm8nID0+IGJhc2VuYW1lKCRlLT5nZXRGaWxlKCkpLAogICAgICAgICdsaW5lYScgICA9PiAkZS0+Z2V0TGluZSgpCiAgICBdLCA1MDApOwp9IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo0OToiRW5ydXRhZG9yIHByaW5jaXBhbCBkZSBsYSBBUEkgKEZyb250IENvbnRyb2xsZXIpLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyOTk6IkVzdGUgYXJjaGl2byBhY3TDumEgY29tbyBlbCDDum5pY28gcHVudG8gZGUgZW50cmFkYSBwYXJhIGxhcyBwZXRpY2lvbmVzIEFKQVgvRmV0Y2gKZGVsIGxhZG8gZGVsIGNsaWVudGUuIFNlIGVuY2FyZ2EgZGUgcmVjaWJpciBsYSBwZXRpY2nDs24gKGVzdHJpY3RhbWVudGUgUE9TVCksCnZhbGlkYXIgbGEgYWNjacOzbiBzb2xpY2l0YWRhLCBkZWxlZ2FyIGxhIGzDs2dpY2EgZGUgbmVnb2NpbyBhIGxvcyBjb250cm9sYWRvcmVzCmNvcnJlc3BvbmRpZW50ZXMgeSBlbWl0aXIgdW5hIHJlc3B1ZXN0YSBlbiBmb3JtYXRvIEpTT04uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMjoiUHJveWVjdG9TaW5jcm9cQmFja2VuZCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NTY7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG1ldGFkYXRhIjthOjA6e319";