@jsenv/terminal-recorder 1.4.5 → 1.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -746,4 +746,4 @@
746
746
  e.HTMLSerializeHandler = h;
747
747
  })(), r;
748
748
  })());
749
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU2VyaWFsaXplQWRkb24vc3JjL2Jyb3dzZXIvQ29sb3JDb250cmFzdENhY2hlLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9icm93c2VyL3NlcnZpY2VzL1RoZW1lU2VydmljZS50cyIsIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL0NvbG9yLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vTGlmZWN5Y2xlLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vTXVsdGlLZXlNYXAudHMiLCJ3ZWJwYWNrOi8vU2VyaWFsaXplQWRkb24vc3JjL2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnkudHMiLCJ3ZWJwYWNrOi8vU2VyaWFsaXplQWRkb24vc3JjL2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlcy50cyIsIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi9zcmMvU2VyaWFsaXplQWRkb24udHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS9wYWNrYWdlcy9yZWxhdGVkL3Rlc3Qvd2VicGFjazovU2VyaWFsaXplQWRkb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiZmlsZTovLy9Vc2Vycy9kYW1pZW4ubWFpbGxhcmQvZGV2L3BlcnNvL2pzZW52LWNvcmUvcGFja2FnZXMvcmVsYXRlZC90ZXN0L3dlYnBhY2s6L1NlcmlhbGl6ZUFkZG9uL3NyYy9icm93c2VyL0NvbG9yQ29udHJhc3RDYWNoZS50cyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3BhY2thZ2VzL3JlbGF0ZWQvdGVzdC93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvYnJvd3Nlci9zZXJ2aWNlcy9UaGVtZVNlcnZpY2UudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS9wYWNrYWdlcy9yZWxhdGVkL3Rlc3Qvd2VicGFjazovU2VyaWFsaXplQWRkb24vc3JjL2NvbW1vbi9Db2xvci50cyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3BhY2thZ2VzL3JlbGF0ZWQvdGVzdC93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL0V2ZW50RW1pdHRlci50cyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3BhY2thZ2VzL3JlbGF0ZWQvdGVzdC93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL0xpZmVjeWNsZS50cyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3BhY2thZ2VzL3JlbGF0ZWQvdGVzdC93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL011bHRpS2V5TWFwLnRzIiwiZmlsZTovLy9Vc2Vycy9kYW1pZW4ubWFpbGxhcmQvZGV2L3BlcnNvL2pzZW52LWNvcmUvcGFja2FnZXMvcmVsYXRlZC90ZXN0L3dlYnBhY2s6L1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vc2VydmljZXMvU2VydmljZVJlZ2lzdHJ5LnRzIiwiZmlsZTovLy9Vc2Vycy9kYW1pZW4ubWFpbGxhcmQvZGV2L3BlcnNvL2pzZW52LWNvcmUvcGFja2FnZXMvcmVsYXRlZC90ZXN0L3dlYnBhY2s6L1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vc2VydmljZXMvU2VydmljZXMudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS9wYWNrYWdlcy9yZWxhdGVkL3Rlc3Qvd2VicGFjazovU2VyaWFsaXplQWRkb24vd2VicGFjay9ib290c3RyYXAiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS9wYWNrYWdlcy9yZWxhdGVkL3Rlc3Qvd2VicGFjazovU2VyaWFsaXplQWRkb24vc3JjL1NlcmlhbGl6ZUFkZG9uLnRzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJfY29sb3IiLCJUd29LZXlNYXAiLCJfY3NzIiwic2V0Q3NzIiwiYmciLCJmZyIsInZhbHVlIiwic2V0IiwiZ2V0Q3NzIiwiZ2V0Iiwic2V0Q29sb3IiLCJnZXRDb2xvciIsImNsZWFyIiwiREVGQVVMVF9GT1JFR1JPVU5EIiwiY3NzIiwidG9Db2xvciIsIkRFRkFVTFRfQkFDS0dST1VORCIsIkRFRkFVTFRfQ1VSU09SIiwiREVGQVVMVF9DVVJTT1JfQUNDRU5UIiwiREVGQVVMVF9TRUxFQ1RJT04iLCJyZ2JhIiwiREVGQVVMVF9BTlNJX0NPTE9SUyIsIk9iamVjdCIsImZyZWV6ZSIsImNvbG9ycyIsInYiLCJpIiwiciIsImciLCJiIiwicHVzaCIsImNoYW5uZWxzIiwidG9Dc3MiLCJ0b1JnYmEiLCJjIiwiVGhlbWVTZXJ2aWNlIiwiRGlzcG9zYWJsZSIsIl9jb2xvcnMiLCJjb25zdHJ1Y3RvciIsInN1cGVyIiwiX29wdGlvbnNTZXJ2aWNlIiwiX2NvbnRyYXN0Q2FjaGUiLCJDb2xvckNvbnRyYXN0Q2FjaGUiLCJfaGFsZkNvbnRyYXN0Q2FjaGUiLCJfb25DaGFuZ2VDb2xvcnMiLCJyZWdpc3RlciIsIkV2ZW50RW1pdHRlciIsIm9uQ2hhbmdlQ29sb3JzIiwiZXZlbnQiLCJmb3JlZ3JvdW5kIiwiYmFja2dyb3VuZCIsImN1cnNvciIsImN1cnNvckFjY2VudCIsInNlbGVjdGlvbkZvcmVncm91bmQiLCJ1bmRlZmluZWQiLCJzZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQiLCJzZWxlY3Rpb25CYWNrZ3JvdW5kT3BhcXVlIiwiY29sb3IiLCJibGVuZCIsInNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50Iiwic2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kT3BhcXVlIiwiYW5zaSIsInNsaWNlIiwiY29udHJhc3RDYWNoZSIsImhhbGZDb250cmFzdENhY2hlIiwiX3VwZGF0ZVJlc3RvcmVDb2xvcnMiLCJfc2V0VGhlbWUiLCJyYXdPcHRpb25zIiwidGhlbWUiLCJvblNwZWNpZmljT3B0aW9uQ2hhbmdlIiwicGFyc2VDb2xvciIsInNlbGVjdGlvbkJhY2tncm91bmQiLCJzZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmQiLCJOVUxMX0NPTE9SIiwiaXNPcGFxdWUiLCJvcGFjaXR5IiwiYmxhY2siLCJyZWQiLCJncmVlbiIsInllbGxvdyIsImJsdWUiLCJtYWdlbnRhIiwiY3lhbiIsIndoaXRlIiwiYnJpZ2h0QmxhY2siLCJicmlnaHRSZWQiLCJicmlnaHRHcmVlbiIsImJyaWdodFllbGxvdyIsImJyaWdodEJsdWUiLCJicmlnaHRNYWdlbnRhIiwiYnJpZ2h0Q3lhbiIsImJyaWdodFdoaXRlIiwiZXh0ZW5kZWRBbnNpIiwiY29sb3JDb3VudCIsIk1hdGgiLCJtaW4iLCJsZW5ndGgiLCJmaXJlIiwicmVzdG9yZUNvbG9yIiwic2xvdCIsIl9yZXN0b3JlQ29sb3IiLCJfcmVzdG9yZUNvbG9ycyIsIm1vZGlmeUNvbG9ycyIsImNhbGxiYWNrIiwiY3NzU3RyaW5nIiwiZmFsbGJhY2siLCJJT3B0aW9uc1NlcnZpY2UiLCIkciIsIiRnIiwiJGIiLCIkYSIsInJnYiIsInRvUGFkZGVkSGV4IiwicyIsInRvU3RyaW5nIiwiY29udHJhc3RSYXRpbyIsImwxIiwibDIiLCJhIiwicm91bmQiLCJ0b0NoYW5uZWxzIiwiZmdSIiwiZmdHIiwiZmdCIiwiYmdSIiwiYmdHIiwiYmdCIiwiZW5zdXJlQ29udHJhc3RSYXRpbyIsInJhdGlvIiwicmVzdWx0Iiwib3BhcXVlIiwicmdiYUNvbG9yIiwibXVsdGlwbHlPcGFjaXR5IiwiZmFjdG9yIiwidG9Db2xvclJHQiIsIiRjdHgiLCIkbGl0bXVzQ29sb3IiLCJjYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImN0eCIsImdldENvbnRleHQiLCJ3aWxsUmVhZEZyZXF1ZW50bHkiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJjcmVhdGVMaW5lYXJHcmFkaWVudCIsIm1hdGNoIiwicGFyc2VJbnQiLCJyZXBlYXQiLCJyZ2JhTWF0Y2giLCJwYXJzZUZsb2F0IiwiRXJyb3IiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsImdldEltYWdlRGF0YSIsImRhdGEiLCJyZWxhdGl2ZUx1bWluYW5jZTIiLCJycyIsImdzIiwiYnMiLCJwb3ciLCJyZWxhdGl2ZUx1bWluYW5jZSIsInJlZHVjZUx1bWluYW5jZSIsImJnUmdiYSIsImZnUmdiYSIsImNyIiwibWF4IiwiY2VpbCIsImluY3JlYXNlTHVtaW5hbmNlIiwiYmdMIiwiZmdMIiwicmVzdWx0QSIsInJlc3VsdEFSYXRpbyIsInJlc3VsdEIiLCJfbGlzdGVuZXJzIiwiX2Rpc3Bvc2VkIiwiX2V2ZW50IiwibGlzdGVuZXIiLCJkaXNwb3NlIiwic3BsaWNlIiwiYXJnMSIsImFyZzIiLCJxdWV1ZSIsImNhbGwiLCJjbGVhckxpc3RlbmVycyIsImZyb20iLCJ0byIsImUiLCJoYW5kbGVyIiwiZGlzcG9zZUFycmF5IiwiZGlzcG9zYWJsZXMiLCJkIiwiX2Rpc3Bvc2FibGVzIiwiX2lzRGlzcG9zZWQiLCJ1bnJlZ2lzdGVyIiwiaW5kZXgiLCJpbmRleE9mIiwiX3ZhbHVlIiwiZiIsImFycmF5IiwiX2RhdGEiLCJmaXJzdCIsInNlY29uZCIsInRoaXJkIiwiZm91cnRoIiwiRElfVEFSR0VUIiwiRElfREVQRU5ERU5DSUVTIiwic2VydmljZVJlZ2lzdHJ5IiwiTWFwIiwiY3RvciIsImlkIiwiaGFzIiwiZGVjb3JhdG9yIiwidGFyZ2V0Iiwia2V5IiwiYXJndW1lbnRzIiwic3RvcmVTZXJ2aWNlRGVwZW5kZW5jeSIsIkxvZ0xldmVsRW51bSIsIklCdWZmZXJTZXJ2aWNlIiwiY3JlYXRlRGVjb3JhdG9yIiwiSUNvcmVNb3VzZVNlcnZpY2UiLCJJQ29yZVNlcnZpY2UiLCJJQ2hhcnNldFNlcnZpY2UiLCJJSW5zdGFudGlhdGlvblNlcnZpY2UiLCJJTG9nU2VydmljZSIsIklPc2NMaW5rU2VydmljZSIsIklVbmljb2RlU2VydmljZSIsIklEZWNvcmF0aW9uU2VydmljZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjb25zdHJhaW4iLCJsb3ciLCJoaWdoIiwiQmFzZVNlcmlhbGl6ZUhhbmRsZXIiLCJfYnVmZmVyIiwic2VyaWFsaXplIiwicmFuZ2UiLCJleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbiIsImNlbGwxIiwiZ2V0TnVsbENlbGwiLCJjZWxsMiIsIm9sZENlbGwiLCJzdGFydFJvdyIsInN0YXJ0IiwieSIsImVuZFJvdyIsImVuZCIsInN0YXJ0Q29sdW1uIiwieCIsImVuZENvbHVtbiIsIl9iZWZvcmVTZXJpYWxpemUiLCJyb3ciLCJsaW5lIiwiZ2V0TGluZSIsInN0YXJ0TGluZUNvbHVtbiIsImVuZExpbmVDb2x1bW4iLCJjb2wiLCJnZXRDZWxsIiwiX25leHRDZWxsIiwiY29uc29sZSIsIndhcm4iLCJfcm93RW5kIiwiX2FmdGVyU2VyaWFsaXplIiwiX3NlcmlhbGl6ZVN0cmluZyIsImNlbGwiLCJpc0xhc3RSb3ciLCJyb3dzIiwiZXF1YWxGZyIsImdldEZnQ29sb3JNb2RlIiwiZ2V0RmdDb2xvciIsImVxdWFsQmciLCJnZXRCZ0NvbG9yTW9kZSIsImdldEJnQ29sb3IiLCJlcXVhbEZsYWdzIiwiaXNJbnZlcnNlIiwiaXNCb2xkIiwiaXNVbmRlcmxpbmUiLCJpc092ZXJsaW5lIiwiaXNCbGluayIsImlzSW52aXNpYmxlIiwiaXNJdGFsaWMiLCJpc0RpbSIsImlzU3RyaWtldGhyb3VnaCIsIlN0cmluZ1NlcmlhbGl6ZUhhbmRsZXIiLCJidWZmZXIiLCJfdGVybWluYWwiLCJfcm93SW5kZXgiLCJfYWxsUm93cyIsIkFycmF5IiwiX2FsbFJvd1NlcGFyYXRvcnMiLCJfY3VycmVudFJvdyIsIl9udWxsQ2VsbENvdW50IiwiX2N1cnNvclN0eWxlIiwiX2N1cnNvclN0eWxlUm93IiwiX2N1cnNvclN0eWxlQ29sIiwiX2JhY2tncm91bmRDZWxsIiwiX2ZpcnN0Um93IiwiX2xhc3RDdXJzb3JSb3ciLCJfbGFzdEN1cnNvckNvbCIsIl9sYXN0Q29udGVudEN1cnNvclJvdyIsIl9sYXN0Q29udGVudEN1cnNvckNvbCIsIl90aGlzUm93TGFzdENoYXIiLCJfdGhpc1Jvd0xhc3RTZWNvbmRDaGFyIiwiX25leHRSb3dGaXJzdENoYXIiLCJyb3dTZXBhcmF0b3IiLCJjdXJyZW50TGluZSIsIm5leHRMaW5lIiwiaXNXcmFwcGVkIiwidGhpc1Jvd0xhc3RDaGFyIiwidGhpc1Jvd0xhc3RTZWNvbmRDaGFyIiwibmV4dFJvd0ZpcnN0Q2hhciIsImlzTmV4dFJvd0ZpcnN0Q2hhckRvdWJsZVdpZHRoIiwiZ2V0V2lkdGgiLCJpc1ZhbGlkIiwiZ2V0Q2hhcnMiLCJfZGlmZlN0eWxlIiwic2dyU2VxIiwiZmdDaGFuZ2VkIiwiYmdDaGFuZ2VkIiwiZmxhZ3NDaGFuZ2VkIiwiaXNBdHRyaWJ1dGVEZWZhdWx0IiwiaXNGZ1JHQiIsImlzRmdQYWxldHRlIiwiaXNCZ1JHQiIsImlzQmdQYWxldHRlIiwiaXNFbXB0eUNlbGwiLCJqb2luIiwicm93RW5kIiwiY29udGVudCIsInJlYWxDdXJzb3JSb3ciLCJiYXNlWSIsImN1cnNvclkiLCJyZWFsQ3Vyc29yQ29sIiwiY3Vyc29yWCIsIm1vdmVSaWdodCIsIm9mZnNldCIsImN1ckF0dHJEYXRhIiwiX2NvcmUiLCJfaW5wdXRIYW5kbGVyIiwiX2N1ckF0dHJEYXRhIiwiYWN0aXZhdGUiLCJ0ZXJtaW5hbCIsIl9zZXJpYWxpemVCdWZmZXJCeVNjcm9sbGJhY2siLCJzY3JvbGxiYWNrIiwibWF4Um93cyIsImNvcnJlY3RSb3dzIiwiX3NlcmlhbGl6ZUJ1ZmZlckJ5UmFuZ2UiLCJjb2xzIiwiX3NlcmlhbGl6ZUJ1ZmZlckFzSFRNTCIsIm9wdGlvbnMiLCJhY3RpdmUiLCJIVE1MU2VyaWFsaXplSGFuZGxlciIsIm9ubHlTZWxlY3Rpb24iLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb25Qb3NpdGlvbiIsIl9zZXJpYWxpemVNb2RlcyIsIm1vZGVzIiwiYXBwbGljYXRpb25DdXJzb3JLZXlzTW9kZSIsImFwcGxpY2F0aW9uS2V5cGFkTW9kZSIsImJyYWNrZXRlZFBhc3RlTW9kZSIsImluc2VydE1vZGUiLCJvcmlnaW5Nb2RlIiwicmV2ZXJzZVdyYXBhcm91bmRNb2RlIiwic2VuZEZvY3VzTW9kZSIsIndyYXBhcm91bmRNb2RlIiwibW91c2VUcmFja2luZ01vZGUiLCJub3JtYWwiLCJleGNsdWRlQWx0QnVmZmVyIiwidHlwZSIsImFsdGVybmF0ZSIsImV4Y2x1ZGVNb2RlcyIsInNlcmlhbGl6ZUFzSFRNTCIsIl9vcHRpb25zIiwiX2h0bWxDb250ZW50IiwiX3RoZW1lU2VydmljZSIsIl9hbnNpQ29sb3JzIiwiX3BhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwiaW5jbHVkZUdsb2JhbEJhY2tncm91bmQiLCJnbG9iYWxTdHlsZURlZmluaXRpb25zIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiX2dldEhleENvbG9yIiwiaXNGZyIsIm1hcCIsImZnSGV4Q29sb3IiLCJiZ0hleENvbG9yIiwic3R5bGVEZWZpbml0aW9ucyIsInQiLCJTZXJpYWxpemVBZGRvbiIsIndpbmRvdyIsIm4iLCJsIiwiaCIsInUiLCJfIiwiQyIsIm8iLCJmb3J3YXJkRXZlbnQiLCJydW5BbmRTdWJzY3JpYmUiLCJNdXRhYmxlRGlzcG9zYWJsZSIsInRvRGlzcG9zYWJsZSIsImdldERpc3Bvc2VBcnJheURpc3Bvc2FibGUiLCJGb3VyS2V5TWFwIiwiZ2V0U2VydmljZURlcGVuZGVuY2llcyIsIlRSQUNFIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiT0ZGIl0sIm1hcHBpbmdzIjoiQ1dBQSxBWEFBLFNBQTJDQSxDV0FBbU0sQ0FBQSxBWEFNbE0sRVdBQStZLENBQUEsQVhDMUIsaUJBQVo5WSxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUF3QixlQUFJRCxJQUU1QkQsRUFBcUIsZUFBSUMsR0FDMUIsQ0FURCxDQVNHSyxNQUFNLEkscUhDRlQsZUFFQSx5Q0FDVSxLQUFBQyxPQUFtRSxJQUFJLEVBQUFDLFVBQ3ZFLEtBQUFDLEtBQWlFLElBQUksRUFBQUQsU0FzQi9FLENBcEJTLE1BQUFFLENBQU9DLEVBQVlDLEVBQVlDLEdBQ3BDUCxLQUFLRyxLQUFLSyxJQUFJSCxFQUFJQyxFQUFJQyxFQUN4QixDQUVPLE1BQUFFLENBQU9KLEVBQVlDLEdBQ3hCLE9BQU9OLEtBQUtHLEtBQUtPLElBQUlMLEVBQUlDLEVBQzNCLENBRU8sUUFBQUssQ0FBU04sRUFBWUMsRUFBWUMsR0FDdENQLEtBQUtDLE9BQU9PLElBQUlILEVBQUlDLEVBQUlDLEVBQzFCLENBRU8sUUFBQUssQ0FBU1AsRUFBWUMsR0FDMUIsT0FBT04sS0FBS0MsT0FBT1MsSUFBSUwsRUFBSUMsRUFDN0IsQ0FFTyxLQUFBTyxHQUNMYixLQUFLQyxPQUFPWSxRQUNaYixLQUFLRyxLQUFLVSxPQUNaLEUsd2hCQzNCRixlQUdBLFNBQ0EsU0FDQSxTQUNBLFFBV01DLEVBQXFCLEVBQUFDLElBQUlDLFFBQVEsV0FDakNDLEVBQXFCLEVBQUFGLElBQUlDLFFBQVEsV0FDakNFLEVBQWlCLEVBQUFILElBQUlDLFFBQVEsV0FDN0JHLEVBQXdCLEVB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QjhKLENBQUEsQ0FBS2tHLGVBQUEsTUFBcUI3SyxDQUFBLENBQVFuRixJQUFBLENBQUssbUNBRXBDbUYsQzs7TUFJWDtNQUVVcUosVUFBVTFFLENBQUEsRUFBbUI2TSxDQUFBLEVBQXNCeFIsQ0FBQSxFQUFhdEYsQ0FBQTtRQUd4RSxJQUQ4QyxNQUFwQmlLLENBQUEsQ0FBS2dJLFFBQUEsSUFFN0I7UUFJRixNQUFNc0YsQ0FBQSxHQUFrQyxPQUFwQnROLENBQUEsQ0FBS2tJLFFBQUE7VUFFbkJwUyxDQUFBLEdBQW1CLEtBQUtxUyxVQUFBLENBQVduSSxDQUFBLEVBQU02TSxDQUFBO1FBRzNDL1csQ0FBQSxLQUNGLEtBQUs0USxXQUFBLElBQTJDLE1BQTVCNVEsQ0FBQSxDQUFpQnNFLE1BQUEsR0FDbkMsa0JBQ0EseUJBQTBCdEUsQ0FBQSxDQUFpQmdULElBQUEsQ0FBSyxPQUFPLE9BS3pELEtBQUtwQyxXQUFBLElBREg0RyxDQUFBLEdBQ2tCLE1BRUF0TixDQUFBLENBQUtrSSxRQUFBLEVBRTdCO01BQUE7TUFFVW5ELGlCQUFBO1FBQ1IsT0FBTyxLQUFLOEcsWUFDZDtNQUFBO0lBQUE7SUFqSkY3TCxDQUFBLENBQUF1SyxvQkFBQSxHQUFBMkMsQyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlNlcmlhbGl6ZUFkZG9uXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlNlcmlhbGl6ZUFkZG9uXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSUNvbG9yQ29udHJhc3RDYWNoZSB9IGZyb20gJ2Jyb3dzZXIvVHlwZXMnO1xuaW1wb3J0IHsgSUNvbG9yIH0gZnJvbSAnY29tbW9uL1R5cGVzJztcbmltcG9ydCB7IFR3b0tleU1hcCB9IGZyb20gJ2NvbW1vbi9NdWx0aUtleU1hcCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xvckNvbnRyYXN0Q2FjaGUgaW1wbGVtZW50cyBJQ29sb3JDb250cmFzdENhY2hlIHtcbiAgcHJpdmF0ZSBfY29sb3I6IFR3b0tleU1hcDwvKiBiZyAqL251bWJlciwgLyogZmcgKi9udW1iZXIsIElDb2xvciB8IG51bGw+ID0gbmV3IFR3b0tleU1hcCgpO1xuICBwcml2YXRlIF9jc3M6IFR3b0tleU1hcDwvKiBiZyAqL251bWJlciwgLyogZmcgKi9udW1iZXIsIHN0cmluZyB8IG51bGw+ID0gbmV3IFR3b0tleU1hcCgpO1xuXG4gIHB1YmxpYyBzZXRDc3MoYmc6IG51bWJlciwgZmc6IG51bWJlciwgdmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9jc3Muc2V0KGJnLCBmZywgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldENzcyhiZzogbnVtYmVyLCBmZzogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Nzcy5nZXQoYmcsIGZnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb2xvcihiZzogbnVtYmVyLCBmZzogbnVtYmVyLCB2YWx1ZTogSUNvbG9yIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbG9yLnNldChiZywgZmcsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2xvcihiZzogbnVtYmVyLCBmZzogbnVtYmVyKTogSUNvbG9yIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yLmdldChiZywgZmcpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbG9yLmNsZWFyKCk7XG4gICAgdGhpcy5fY3NzLmNsZWFyKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgQ29sb3JDb250cmFzdENhY2hlIH0gZnJvbSAnYnJvd3Nlci9Db2xvckNvbnRyYXN0Q2FjaGUnO1xuaW1wb3J0IHsgSVRoZW1lU2VydmljZSB9IGZyb20gJ2Jyb3dzZXIvc2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgSUNvbG9yQ29udHJhc3RDYWNoZSwgSUNvbG9yU2V0LCBSZWFkb25seUNvbG9yU2V0IH0gZnJvbSAnYnJvd3Nlci9UeXBlcyc7XG5pbXBvcnQgeyBjaGFubmVscywgY29sb3IsIGNzcywgTlVMTF9DT0xPUiB9IGZyb20gJ2NvbW1vbi9Db2xvcic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdjb21tb24vRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7IERpc3Bvc2FibGUgfSBmcm9tICdjb21tb24vTGlmZWN5Y2xlJztcbmltcG9ydCB7IElPcHRpb25zU2VydmljZSwgSVRoZW1lIH0gZnJvbSAnY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IEFsbENvbG9ySW5kZXgsIElDb2xvciwgU3BlY2lhbENvbG9ySW5kZXggfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG5pbnRlcmZhY2UgSVJlc3RvcmVDb2xvclNldCB7XG4gIGZvcmVncm91bmQ6IElDb2xvcjtcbiAgYmFja2dyb3VuZDogSUNvbG9yO1xuICBjdXJzb3I6IElDb2xvcjtcbiAgYW5zaTogSUNvbG9yW107XG59XG5cblxuY29uc3QgREVGQVVMVF9GT1JFR1JPVU5EID0gY3NzLnRvQ29sb3IoJyNmZmZmZmYnKTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORCA9IGNzcy50b0NvbG9yKCcjMDAwMDAwJyk7XG5jb25zdCBERUZBVUxUX0NVUlNPUiA9IGNzcy50b0NvbG9yKCcjZmZmZmZmJyk7XG5jb25zdCBERUZBVUxUX0NVUlNPUl9BQ0NFTlQgPSBjc3MudG9Db2xvcignIzAwMDAwMCcpO1xuY29uc3QgREVGQVVMVF9TRUxFQ1RJT04gPSB7XG4gIGNzczogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKScsXG4gIHJnYmE6IDB4RkZGRkZGNERcbn07XG5cbi8vIEFuIElJRkUgdG8gZ2VuZXJhdGUgREVGQVVMVF9BTlNJX0NPTE9SUy5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOU0lfQ09MT1JTID0gT2JqZWN0LmZyZWV6ZSgoKCkgPT4ge1xuICBjb25zdCBjb2xvcnMgPSBbXG4gICAgLy8gZGFyazpcbiAgICBjc3MudG9Db2xvcignIzJlMzQzNicpLFxuICAgIGNzcy50b0NvbG9yKCcjY2MwMDAwJyksXG4gICAgY3NzLnRvQ29sb3IoJyM0ZTlhMDYnKSxcbiAgICBjc3MudG9Db2xvcignI2M0YTAwMCcpLFxuICAgIGNzcy50b0NvbG9yKCcjMzQ2NWE0JyksXG4gICAgY3NzLnRvQ29sb3IoJyM3NTUwN2InKSxcbiAgICBjc3MudG9Db2xvcignIzA2OTg5YScpLFxuICAgIGNzcy50b0NvbG9yKCcjZDNkN2NmJyksXG4gICAgLy8gYnJpZ2h0OlxuICAgIGNzcy50b0NvbG9yKCcjNTU1NzUzJyksXG4gICAgY3NzLnRvQ29sb3IoJyNlZjI5MjknKSxcbiAgICBjc3MudG9Db2xvcignIzhhZTIzNCcpLFxuICAgIGNzcy50b0NvbG9yKCcjZmNlOTRmJyksXG4gICAgY3NzLnRvQ29sb3IoJyM3MjlmY2YnKSxcbiAgICBjc3MudG9Db2xvcignI2FkN2ZhOCcpLFxuICAgIGNzcy50b0NvbG9yKCcjMzRlMmUyJyksXG4gICAgY3NzLnRvQ29sb3IoJyNlZWVlZWMnKVxuICBdO1xuXG4gIC8vIEZpbGwgaW4gdGhlIHJlbWFpbmluZyAyNDAgQU5TSSBjb2xvcnMuXG4gIC8vIEdlbmVyYXRlIGNvbG9ycyAoMTYtMjMxKVxuICBjb25zdCB2ID0gWzB4MDAsIDB4NWYsIDB4ODcsIDB4YWYsIDB4ZDcsIDB4ZmZdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDIxNjsgaSsrKSB7XG4gICAgY29uc3QgciA9IHZbKGkgLyAzNikgJSA2IHwgMF07XG4gICAgY29uc3QgZyA9IHZbKGkgLyA2KSAlIDYgfCAwXTtcbiAgICBjb25zdCBiID0gdltpICUgNl07XG4gICAgY29sb3JzLnB1c2goe1xuICAgICAgY3NzOiBjaGFubmVscy50b0NzcyhyLCBnLCBiKSxcbiAgICAgIHJnYmE6IGNoYW5uZWxzLnRvUmdiYShyLCBnLCBiKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgZ3JleXMgKDIzMi0yNTUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgIGNvbnN0IGMgPSA4ICsgaSAqIDEwO1xuICAgIGNvbG9ycy5wdXNoKHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MoYywgYywgYyksXG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEoYywgYywgYylcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb2xvcnM7XG59KSgpKTtcblxuZXhwb3J0IGNsYXNzIFRoZW1lU2VydmljZSBleHRlbmRzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJVGhlbWVTZXJ2aWNlIHtcbiAgcHVibGljIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgX2NvbG9yczogSUNvbG9yU2V0O1xuICBwcml2YXRlIF9jb250cmFzdENhY2hlOiBJQ29sb3JDb250cmFzdENhY2hlID0gbmV3IENvbG9yQ29udHJhc3RDYWNoZSgpO1xuICBwcml2YXRlIF9oYWxmQ29udHJhc3RDYWNoZTogSUNvbG9yQ29udHJhc3RDYWNoZSA9IG5ldyBDb2xvckNvbnRyYXN0Q2FjaGUoKTtcbiAgcHJpdmF0ZSBfcmVzdG9yZUNvbG9ycyE6IElSZXN0b3JlQ29sb3JTZXQ7XG5cbiAgcHVibGljIGdldCBjb2xvcnMoKTogUmVhZG9ubHlDb2xvclNldCB7IHJldHVybiB0aGlzLl9jb2xvcnM7IH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNoYW5nZUNvbG9ycyA9IHRoaXMucmVnaXN0ZXIobmV3IEV2ZW50RW1pdHRlcjxSZWFkb25seUNvbG9yU2V0PigpKTtcbiAgcHVibGljIHJlYWRvbmx5IG9uQ2hhbmdlQ29sb3JzID0gdGhpcy5fb25DaGFuZ2VDb2xvcnMuZXZlbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQElPcHRpb25zU2VydmljZSBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zU2VydmljZTogSU9wdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9jb2xvcnMgPSB7XG4gICAgICBmb3JlZ3JvdW5kOiBERUZBVUxUX0ZPUkVHUk9VTkQsXG4gICAgICBiYWNrZ3JvdW5kOiBERUZBVUxUX0JBQ0tHUk9VTkQsXG4gICAgICBjdXJzb3I6IERFRkFVTFRfQ1VSU09SLFxuICAgICAgY3Vyc29yQWNjZW50OiBERUZBVUxUX0NVUlNPUl9BQ0NFTlQsXG4gICAgICBzZWxlY3Rpb25Gb3JlZ3JvdW5kOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQ6IERFRkFVTFRfU0VMRUNUSU9OLFxuICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZTogY29sb3IuYmxlbmQoREVGQVVMVF9CQUNLR1JPVU5ELCBERUZBVUxUX1NFTEVDVElPTiksXG4gICAgICBzZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRUcmFuc3BhcmVudDogREVGQVVMVF9TRUxFQ1RJT04sXG4gICAgICBzZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRPcGFxdWU6IGNvbG9yLmJsZW5kKERFRkFVTFRfQkFDS0dST1VORCwgREVGQVVMVF9TRUxFQ1RJT04pLFxuICAgICAgYW5zaTogREVGQVVMVF9BTlNJX0NPTE9SUy5zbGljZSgpLFxuICAgICAgY29udHJhc3RDYWNoZTogdGhpcy5fY29udHJhc3RDYWNoZSxcbiAgICAgIGhhbGZDb250cmFzdENhY2hlOiB0aGlzLl9oYWxmQ29udHJhc3RDYWNoZVxuICAgIH07XG4gICAgdGhpcy5fdXBkYXRlUmVzdG9yZUNvbG9ycygpO1xuICAgIHRoaXMuX3NldFRoZW1lKHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMudGhlbWUpO1xuXG4gICAgdGhpcy5yZWdpc3Rlcih0aGlzLl9vcHRpb25zU2VydmljZS5vblNwZWNpZmljT3B0aW9uQ2hhbmdlKCdtaW5pbXVtQ29udHJhc3RSYXRpbycsICgpID0+IHRoaXMuX2NvbnRyYXN0Q2FjaGUuY2xlYXIoKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZSgndGhlbWUnLCAoKSA9PiB0aGlzLl9zZXRUaGVtZSh0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnRoZW1lKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRlcm1pbmFsJ3MgdGhlbWUuXG4gICAqIEBwYXJhbSB0aGVtZSBUaGUgIHRoZW1lIHRvIHVzZS4gSWYgYSBwYXJ0aWFsIHRoZW1lIGlzIHByb3ZpZGVkIHRoZW4gZGVmYXVsdFxuICAgKiBjb2xvcnMgd2lsbCBiZSB1c2VkIHdoZXJlIGNvbG9ycyBhcmUgbm90IGRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zZXRUaGVtZSh0aGVtZTogSVRoZW1lID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLl9jb2xvcnM7XG4gICAgY29sb3JzLmZvcmVncm91bmQgPSBwYXJzZUNvbG9yKHRoZW1lLmZvcmVncm91bmQsIERFRkFVTFRfRk9SRUdST1VORCk7XG4gICAgY29sb3JzLmJhY2tncm91bmQgPSBwYXJzZUNvbG9yKHRoZW1lLmJhY2tncm91bmQsIERFRkFVTFRfQkFDS0dST1VORCk7XG4gICAgY29sb3JzLmN1cnNvciA9IHBhcnNlQ29sb3IodGhlbWUuY3Vyc29yLCBERUZBVUxUX0NVUlNPUik7XG4gICAgY29sb3JzLmN1cnNvckFjY2VudCA9IHBhcnNlQ29sb3IodGhlbWUuY3Vyc29yQWNjZW50LCBERUZBVUxUX0NVUlNPUl9BQ0NFTlQpO1xuICAgIGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBwYXJzZUNvbG9yKHRoZW1lLnNlbGVjdGlvbkJhY2tncm91bmQsIERFRkFVTFRfU0VMRUNUSU9OKTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZSA9IGNvbG9yLmJsZW5kKGNvbG9ycy5iYWNrZ3JvdW5kLCBjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50KTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBwYXJzZUNvbG9yKHRoZW1lLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZCwgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCk7XG4gICAgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZE9wYXF1ZSA9IGNvbG9yLmJsZW5kKGNvbG9ycy5iYWNrZ3JvdW5kLCBjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQpO1xuICAgIGNvbG9ycy5zZWxlY3Rpb25Gb3JlZ3JvdW5kID0gdGhlbWUuc2VsZWN0aW9uRm9yZWdyb3VuZCA/IHBhcnNlQ29sb3IodGhlbWUuc2VsZWN0aW9uRm9yZWdyb3VuZCwgTlVMTF9DT0xPUikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbG9ycy5zZWxlY3Rpb25Gb3JlZ3JvdW5kID09PSBOVUxMX0NPTE9SKSB7XG4gICAgICBjb2xvcnMuc2VsZWN0aW9uRm9yZWdyb3VuZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZWxlY3Rpb24gY29sb3IgaXMgb3BhcXVlLCBibGVuZCBpdCB3aXRoIGJhY2tncm91bmQgd2l0aCAwLjMgb3BhY2l0eVxuICAgICAqIElzc3VlICMyNzM3XG4gICAgICovXG4gICAgaWYgKGNvbG9yLmlzT3BhcXVlKGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQpKSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gMC4zO1xuICAgICAgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCA9IGNvbG9yLm9wYWNpdHkoY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCwgb3BhY2l0eSk7XG4gICAgfVxuICAgIGlmIChjb2xvci5pc09wYXF1ZShjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQpKSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gMC4zO1xuICAgICAgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50ID0gY29sb3Iub3BhY2l0eShjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQsIG9wYWNpdHkpO1xuICAgIH1cbiAgICBjb2xvcnMuYW5zaSA9IERFRkFVTFRfQU5TSV9DT0xPUlMuc2xpY2UoKTtcbiAgICBjb2xvcnMuYW5zaVswXSA9IHBhcnNlQ29sb3IodGhlbWUuYmxhY2ssIERFRkFVTFRfQU5TSV9DT0xPUlNbMF0pO1xuICAgIGNvbG9ycy5hbnNpWzFdID0gcGFyc2VDb2xvcih0aGVtZS5yZWQsIERFRkFVTFRfQU5TSV9DT0xPUlNbMV0pO1xuICAgIGNvbG9ycy5hbnNpWzJdID0gcGFyc2VDb2xvcih0aGVtZS5ncmVlbiwgREVGQVVMVF9BTlNJX0NPTE9SU1syXSk7XG4gICAgY29sb3JzLmFuc2lbM10gPSBwYXJzZUNvbG9yKHRoZW1lLnllbGxvdywgREVGQVVMVF9BTlNJX0NPTE9SU1szXSk7XG4gICAgY29sb3JzLmFuc2lbNF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJsdWUsIERFRkFVTFRfQU5TSV9DT0xPUlNbNF0pO1xuICAgIGNvbG9ycy5hbnNpWzVdID0gcGFyc2VDb2xvcih0aGVtZS5tYWdlbnRhLCBERUZBVUxUX0FOU0lfQ09MT1JTWzVdKTtcbiAgICBjb2xvcnMuYW5zaVs2XSA9IHBhcnNlQ29sb3IodGhlbWUuY3lhbiwgREVGQVVMVF9BTlNJX0NPTE9SU1s2XSk7XG4gICAgY29sb3JzLmFuc2lbN10gPSBwYXJzZUNvbG9yKHRoZW1lLndoaXRlLCBERUZBVUxUX0FOU0lfQ09MT1JTWzddKTtcbiAgICBjb2xvcnMuYW5zaVs4XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0QmxhY2ssIERFRkFVTFRfQU5TSV9DT0xPUlNbOF0pO1xuICAgIGNvbG9ycy5hbnNpWzldID0gcGFyc2VDb2xvcih0aGVtZS5icmlnaHRSZWQsIERFRkFVTFRfQU5TSV9DT0xPUlNbOV0pO1xuICAgIGNvbG9ycy5hbnNpWzEwXSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0R3JlZW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbMTBdKTtcbiAgICBjb2xvcnMuYW5zaVsxMV0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodFllbGxvdywgREVGQVVMVF9BTlNJX0NPTE9SU1sxMV0pO1xuICAgIGNvbG9ycy5hbnNpWzEyXSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0Qmx1ZSwgREVGQVVMVF9BTlNJX0NPTE9SU1sxMl0pO1xuICAgIGNvbG9ycy5hbnNpWzEzXSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0TWFnZW50YSwgREVGQVVMVF9BTlNJX0NPTE9SU1sxM10pO1xuICAgIGNvbG9ycy5hbnNpWzE0XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0Q3lhbiwgREVGQVVMVF9BTlNJX0NPTE9SU1sxNF0pO1xuICAgIGNvbG9ycy5hbnNpWzE1XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0V2hpdGUsIERFRkFVTFRfQU5TSV9DT0xPUlNbMTVdKTtcbiAgICBpZiAodGhlbWUuZXh0ZW5kZWRBbnNpKSB7XG4gICAgICBjb25zdCBjb2xvckNvdW50ID0gTWF0aC5taW4oY29sb3JzLmFuc2kubGVuZ3RoIC0gMTYsIHRoZW1lLmV4dGVuZGVkQW5zaS5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xvckNvdW50OyBpKyspIHtcbiAgICAgICAgY29sb3JzLmFuc2lbaSArIDE2XSA9IHBhcnNlQ29sb3IodGhlbWUuZXh0ZW5kZWRBbnNpW2ldLCBERUZBVUxUX0FOU0lfQ09MT1JTW2kgKyAxNl0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBDbGVhciBvdXIgdGhlIGNhY2hlXG4gICAgdGhpcy5fY29udHJhc3RDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuX2hhbGZDb250cmFzdENhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5fdXBkYXRlUmVzdG9yZUNvbG9ycygpO1xuICAgIHRoaXMuX29uQ2hhbmdlQ29sb3JzLmZpcmUodGhpcy5jb2xvcnMpO1xuICB9XG5cbiAgcHVibGljIHJlc3RvcmVDb2xvcihzbG90PzogQWxsQ29sb3JJbmRleCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc3RvcmVDb2xvcihzbG90KTtcbiAgICB0aGlzLl9vbkNoYW5nZUNvbG9ycy5maXJlKHRoaXMuY29sb3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVDb2xvcihzbG90OiBBbGxDb2xvckluZGV4IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgLy8gdW5zZXQgc2xvdCByZXN0b3JlcyBhbGwgYW5zaSBjb2xvcnNcbiAgICBpZiAoc2xvdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9jb2xvcnMuYW5zaVtpXSA9IHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaVtpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzbG90KSB7XG4gICAgICBjYXNlIFNwZWNpYWxDb2xvckluZGV4LkZPUkVHUk9VTkQ6XG4gICAgICAgIHRoaXMuX2NvbG9ycy5mb3JlZ3JvdW5kID0gdGhpcy5fcmVzdG9yZUNvbG9ycy5mb3JlZ3JvdW5kO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3BlY2lhbENvbG9ySW5kZXguQkFDS0dST1VORDpcbiAgICAgICAgdGhpcy5fY29sb3JzLmJhY2tncm91bmQgPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmJhY2tncm91bmQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTcGVjaWFsQ29sb3JJbmRleC5DVVJTT1I6XG4gICAgICAgIHRoaXMuX2NvbG9ycy5jdXJzb3IgPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmN1cnNvcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9jb2xvcnMuYW5zaVtzbG90XSA9IHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaVtzbG90XTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW9kaWZ5Q29sb3JzKGNhbGxiYWNrOiAoY29sb3JzOiBJQ29sb3JTZXQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjYWxsYmFjayh0aGlzLl9jb2xvcnMpO1xuICAgIC8vIEFzc3VtZSB0aGUgY2hhbmdlIGhhcHBlbmVkXG4gICAgdGhpcy5fb25DaGFuZ2VDb2xvcnMuZmlyZSh0aGlzLmNvbG9ycyk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVSZXN0b3JlQ29sb3JzKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc3RvcmVDb2xvcnMgPSB7XG4gICAgICBmb3JlZ3JvdW5kOiB0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZCxcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kLFxuICAgICAgY3Vyc29yOiB0aGlzLl9jb2xvcnMuY3Vyc29yLFxuICAgICAgYW5zaTogdGhpcy5fY29sb3JzLmFuc2kuc2xpY2UoKVxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDb2xvcihcbiAgY3NzU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGZhbGxiYWNrOiBJQ29sb3Jcbik6IElDb2xvciB7XG4gIGlmIChjc3NTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY3NzLnRvQ29sb3IoY3NzU3RyaW5nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxsYmFjaztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSUNvbG9yLCBJQ29sb3JSR0IgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG5sZXQgJHIgPSAwO1xubGV0ICRnID0gMDtcbmxldCAkYiA9IDA7XG5sZXQgJGEgPSAwO1xuXG5leHBvcnQgY29uc3QgTlVMTF9DT0xPUjogSUNvbG9yID0ge1xuICBjc3M6ICcjMDAwMDAwMDAnLFxuICByZ2JhOiAwXG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwiY2hhbm5lbHNcIiAoaW5kaXZpZHVhbCBjb2xvciBjaGFubmVscyBhcyBudW1iZXJzKS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBjaGFubmVscyB7XG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NzcyhyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYCMke3RvUGFkZGVkSGV4KHIpfSR7dG9QYWRkZWRIZXgoZyl9JHt0b1BhZGRlZEhleChiKX0ke3RvUGFkZGVkSGV4KGEpfWA7XG4gICAgfVxuICAgIHJldHVybiBgIyR7dG9QYWRkZWRIZXgocil9JHt0b1BhZGRlZEhleChnKX0ke3RvUGFkZGVkSGV4KGIpfWA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9SZ2JhKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlciA9IDB4RkYpOiBudW1iZXIge1xuICAgIC8vIE5vdGU6IFRoZSBhZ2dyZWdhdGVkIG51bWJlciBpcyBSR0JBMzIgKEJFKSwgdGh1cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gQUJHUjMyXG4gICAgLy8gb24gTEUgc3lzdGVtcywgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIGZvciBkaXJlY3QgMzItYml0IGJ1ZmZlciB3cml0ZXMuXG4gICAgLy8gPj4+IDAgZm9yY2VzIGFuIHVuc2lnbmVkIGludFxuICAgIHJldHVybiAociA8PCAyNCB8IGcgPDwgMTYgfCBiIDw8IDggfCBhKSA+Pj4gMDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbG9yKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE/OiBudW1iZXIpOiBJQ29sb3Ige1xuICAgIHJldHVybiB7XG4gICAgICBjc3M6IGNoYW5uZWxzLnRvQ3NzKHIsIGcsIGIsIGEpLFxuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKHIsIGcsIGIsIGEpXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIGBJQ29sb3JgLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIGNvbG9yIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGJsZW5kKGJnOiBJQ29sb3IsIGZnOiBJQ29sb3IpOiBJQ29sb3Ige1xuICAgICRhID0gKGZnLnJnYmEgJiAweEZGKSAvIDI1NTtcbiAgICBpZiAoJGEgPT09IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNzczogZmcuY3NzLFxuICAgICAgICByZ2JhOiBmZy5yZ2JhXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmZ1IgPSAoZmcucmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGZnRyA9IChmZy5yZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgZmdCID0gKGZnLnJnYmEgPj4gOCkgJiAweEZGO1xuICAgIGNvbnN0IGJnUiA9IChiZy5yZ2JhID4+IDI0KSAmIDB4RkY7XG4gICAgY29uc3QgYmdHID0gKGJnLnJnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmcucmdiYSA+PiA4KSAmIDB4RkY7XG4gICAgJHIgPSBiZ1IgKyBNYXRoLnJvdW5kKChmZ1IgLSBiZ1IpICogJGEpO1xuICAgICRnID0gYmdHICsgTWF0aC5yb3VuZCgoZmdHIC0gYmdHKSAqICRhKTtcbiAgICAkYiA9IGJnQiArIE1hdGgucm91bmQoKGZnQiAtIGJnQikgKiAkYSk7XG4gICAgY29uc3QgY3NzID0gY2hhbm5lbHMudG9Dc3MoJHIsICRnLCAkYik7XG4gICAgY29uc3QgcmdiYSA9IGNoYW5uZWxzLnRvUmdiYSgkciwgJGcsICRiKTtcbiAgICByZXR1cm4geyBjc3MsIHJnYmEgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc09wYXF1ZShjb2xvcjogSUNvbG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjb2xvci5yZ2JhICYgMHhGRikgPT09IDB4RkY7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5zdXJlQ29udHJhc3RSYXRpbyhiZzogSUNvbG9yLCBmZzogSUNvbG9yLCByYXRpbzogbnVtYmVyKTogSUNvbG9yIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZXN1bHQgPSByZ2JhLmVuc3VyZUNvbnRyYXN0UmF0aW8oYmcucmdiYSwgZmcucmdiYSwgcmF0aW8pO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbm5lbHMudG9Db2xvcihcbiAgICAgIChyZXN1bHQgPj4gMjQgJiAweEZGKSxcbiAgICAgIChyZXN1bHQgPj4gMTYgJiAweEZGKSxcbiAgICAgIChyZXN1bHQgPj4gOCAgJiAweEZGKVxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3BhcXVlKGNvbG9yOiBJQ29sb3IpOiBJQ29sb3Ige1xuICAgIGNvbnN0IHJnYmFDb2xvciA9IChjb2xvci5yZ2JhIHwgMHhGRikgPj4+IDA7XG4gICAgWyRyLCAkZywgJGJdID0gcmdiYS50b0NoYW5uZWxzKHJnYmFDb2xvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MoJHIsICRnLCAkYiksXG4gICAgICByZ2JhOiByZ2JhQ29sb3JcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9wYWNpdHkoY29sb3I6IElDb2xvciwgb3BhY2l0eTogbnVtYmVyKTogSUNvbG9yIHtcbiAgICAkYSA9IE1hdGgucm91bmQob3BhY2l0eSAqIDB4RkYpO1xuICAgIFskciwgJGcsICRiXSA9IHJnYmEudG9DaGFubmVscyhjb2xvci5yZ2JhKTtcbiAgICByZXR1cm4ge1xuICAgICAgY3NzOiBjaGFubmVscy50b0NzcygkciwgJGcsICRiLCAkYSksXG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYiwgJGEpXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseU9wYWNpdHkoY29sb3I6IElDb2xvciwgZmFjdG9yOiBudW1iZXIpOiBJQ29sb3Ige1xuICAgICRhID0gY29sb3IucmdiYSAmIDB4RkY7XG4gICAgcmV0dXJuIG9wYWNpdHkoY29sb3IsICgkYSAqIGZhY3RvcikgLyAweEZGKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbG9yUkdCKGNvbG9yOiBJQ29sb3IpOiBJQ29sb3JSR0Ige1xuICAgIHJldHVybiBbKGNvbG9yLnJnYmEgPj4gMjQpICYgMHhGRiwgKGNvbG9yLnJnYmEgPj4gMTYpICYgMHhGRiwgKGNvbG9yLnJnYmEgPj4gOCkgJiAweEZGXTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwiY3NzXCIgKHN0cmluZzogJyNyZ2InLCAnI3JnYmEnLCAnI3JyZ2diYicsXG4gKiAnI3JyZ2diYmFhJykuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgY3NzIHtcbiAgLy8gQXR0ZW1wdCB0byBzZXQgZ2V0IHRoZSBzaGFyZWQgY2FudmFzIGNvbnRleHRcbiAgbGV0ICRjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZDtcbiAgbGV0ICRsaXRtdXNDb2xvcjogQ2FudmFzR3JhZGllbnQgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHJ1biBpbiB0aGUgZmlyc3Qgd2luZG93LCBzbyBkb2N1bWVudCBzaG91bGQgYmUgY29ycmVjdFxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IDE7XG4gICAgY2FudmFzLmhlaWdodCA9IDE7XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywge1xuICAgICAgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgJGN0eCA9IGN0eDtcbiAgICAgICRjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2NvcHknO1xuICAgICAgJGxpdG11c0NvbG9yID0gJGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAxLCAxKTtcbiAgICB9XG4gIH1cbiAgY2F0Y2gge1xuICAgIC8vIG5vb3BcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGNzcyBzdHJpbmcgdG8gYW4gSUNvbG9yLCB0aGlzIHNob3VsZCBoYW5kbGUgYWxsIHZhbGlkIENTUyBjb2xvciBzdHJpbmdzIGFuZCB3aWxsXG4gICAqIHRocm93IGlmIGl0J3MgaW52YWxpZC4gVGhlIGlkZWFsIGZvcm1hdCB0byB1c2UgaXMgYCNycmdnYmJbYWFdYCBhcyBpdCdzIHRoZSBmYXN0ZXN0IHRvIHBhcnNlLlxuICAgKlxuICAgKiBPbmx5IGAjcmdiW2FdYCwgYCNycmdnYmJbYWFdYCwgYHJnYigpYCBhbmQgYHJnYmEoKWAgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIHdoZW4gcnVuIGluIGEgTm9kZVxuICAgKiBlbnZpcm9ubWVudC5cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbG9yKGNzczogc3RyaW5nKTogSUNvbG9yIHtcbiAgICAvLyBGb3JtYXRzOiAjcmdiW2FdIGFuZCAjcnJnZ2JiW2FhXVxuICAgIGlmIChjc3MubWF0Y2goLyNbXFxkYS1mXXszLDh9L2kpKSB7XG4gICAgICBzd2l0Y2ggKGNzcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSA0OiB7IC8vICNyZ2JcbiAgICAgICAgICAkciA9IHBhcnNlSW50KGNzcy5zbGljZSgxLCAyKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkZyA9IHBhcnNlSW50KGNzcy5zbGljZSgyLCAzKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkYiA9IHBhcnNlSW50KGNzcy5zbGljZSgzLCA0KS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICByZXR1cm4gY2hhbm5lbHMudG9Db2xvcigkciwgJGcsICRiKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDU6IHsgLy8gI3JnYmFcbiAgICAgICAgICAkciA9IHBhcnNlSW50KGNzcy5zbGljZSgxLCAyKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkZyA9IHBhcnNlSW50KGNzcy5zbGljZSgyLCAzKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkYiA9IHBhcnNlSW50KGNzcy5zbGljZSgzLCA0KS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkYSA9IHBhcnNlSW50KGNzcy5zbGljZSg0LCA1KS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICByZXR1cm4gY2hhbm5lbHMudG9Db2xvcigkciwgJGcsICRiLCAkYSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA3OiAvLyAjcnJnZ2JiXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNzcyxcbiAgICAgICAgICAgIHJnYmE6IChwYXJzZUludChjc3Muc2xpY2UoMSksIDE2KSA8PCA4IHwgMHhGRikgPj4+IDBcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIDk6IC8vICNycmdnYmJhYVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjc3MsXG4gICAgICAgICAgICByZ2JhOiBwYXJzZUludChjc3Muc2xpY2UoMSksIDE2KSA+Pj4gMFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9ybWF0czogcmdiKCkgb3IgcmdiYSgpXG4gICAgY29uc3QgcmdiYU1hdGNoID0gY3NzLm1hdGNoKC9yZ2JhP1xcKFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqKCxcXHMqKDB8MXxcXGQ/XFwuKFxcZCspKVxccyopP1xcKS8pO1xuICAgIGlmIChyZ2JhTWF0Y2gpIHtcbiAgICAgICRyID0gcGFyc2VJbnQocmdiYU1hdGNoWzFdKTtcbiAgICAgICRnID0gcGFyc2VJbnQocmdiYU1hdGNoWzJdKTtcbiAgICAgICRiID0gcGFyc2VJbnQocmdiYU1hdGNoWzNdKTtcbiAgICAgICRhID0gTWF0aC5yb3VuZCgocmdiYU1hdGNoWzVdID09PSB1bmRlZmluZWQgPyAxIDogcGFyc2VGbG9hdChyZ2JhTWF0Y2hbNV0pKSAqIDB4RkYpO1xuICAgICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoJHIsICRnLCAkYiwgJGEpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBjb250ZXh0IGlzIGF2YWlsYWJsZSBmb3IgY2FudmFzLWJhc2VkIGNvbG9yIHBhcnNpbmdcbiAgICBpZiAoISRjdHggfHwgISRsaXRtdXNDb2xvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MudG9Db2xvcjogVW5zdXBwb3J0ZWQgY3NzIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBjb2xvciB1c2luZyBjYW52YXMgZmlsbFN0eWxlXG4gICAgLy8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHlsZXNcbiAgICAkY3R4LmZpbGxTdHlsZSA9ICRsaXRtdXNDb2xvcjtcbiAgICAkY3R4LmZpbGxTdHlsZSA9IGNzcztcbiAgICBpZiAodHlwZW9mICRjdHguZmlsbFN0eWxlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MudG9Db2xvcjogVW5zdXBwb3J0ZWQgY3NzIGZvcm1hdCcpO1xuICAgIH1cblxuICAgICRjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG4gICAgWyRyLCAkZywgJGIsICRhXSA9ICRjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29sb3IgaXMgbm9uLXRyYW5zcGFyZW50IGFzIGNvbG9yIGh1ZSBnZXRzIGxvc3Qgd2hlbiBkcmF3biB0byB0aGUgY2FudmFzXG4gICAgaWYgKCRhICE9PSAweEZGKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nzcy50b0NvbG9yOiBVbnN1cHBvcnRlZCBjc3MgZm9ybWF0Jyk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCB0aGUgY29sb3IgZnJvbSB0aGUgY2FudmFzJyBmaWxsU3R5bGUgcHJvcGVydHkgd2hpY2ggZXhwb3NlcyB0aGUgY29sb3IgdmFsdWUgaW4gcmdiYSgpXG4gICAgLy8gZm9ybWF0XG4gICAgLy8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI3NlcmlhbGlzYXRpb24tb2YtYS1jb2xvclxuICAgIHJldHVybiB7XG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYiwgJGEpLFxuICAgICAgY3NzXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwicmdiXCIgKG51bWJlcjogMHhycmdnYmIpLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIHJnYiB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWxhdGl2ZSBsdW1pbmFuY2Ugb2YgYW4gUkdCIGNvbG9yLCB0aGlzIGlzIHVzZWZ1bCBpbiBkZXRlcm1pbmluZyB0aGUgY29udHJhc3QgcmF0aW9cbiAgICogYmV0d2VlbiB0d28gY29sb3JzLlxuICAgKiBAcGFyYW0gcmdiIFRoZSBjb2xvciB0byB1c2UuXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZShyZ2I6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlbGF0aXZlTHVtaW5hbmNlMihcbiAgICAgIChyZ2IgPj4gMTYpICYgMHhGRixcbiAgICAgIChyZ2IgPj4gOCApICYgMHhGRixcbiAgICAgIChyZ2IgICAgICApICYgMHhGRik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcmVsYXRpdmUgbHVtaW5hbmNlIG9mIGFuIFJHQiBjb2xvciwgdGhpcyBpcyB1c2VmdWwgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbnRyYXN0IHJhdGlvXG4gICAqIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAgICogQHBhcmFtIHIgVGhlIHJlZCBjaGFubmVsICgweDAwIHRvIDB4RkYpLlxuICAgKiBAcGFyYW0gZyBUaGUgZ3JlZW4gY2hhbm5lbCAoMHgwMCB0byAweEZGKS5cbiAgICogQHBhcmFtIGIgVGhlIGJsdWUgY2hhbm5lbCAoMHgwMCB0byAweEZGKS5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlTHVtaW5hbmNlMihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBycyA9IHIgLyAyNTU7XG4gICAgY29uc3QgZ3MgPSBnIC8gMjU1O1xuICAgIGNvbnN0IGJzID0gYiAvIDI1NTtcbiAgICBjb25zdCByciA9IHJzIDw9IDAuMDM5MjggPyBycyAvIDEyLjkyIDogTWF0aC5wb3coKHJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgY29uc3QgcmcgPSBncyA8PSAwLjAzOTI4ID8gZ3MgLyAxMi45MiA6IE1hdGgucG93KChncyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGNvbnN0IHJiID0gYnMgPD0gMC4wMzkyOCA/IGJzIC8gMTIuOTIgOiBNYXRoLnBvdygoYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICByZXR1cm4gcnIgKiAwLjIxMjYgKyByZyAqIDAuNzE1MiArIHJiICogMC4wNzIyO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9ucyB3aGVyZSB0aGUgc291cmNlIHR5cGUgaXMgXCJyZ2JhXCIgKG51bWJlcjogMHhycmdnYmJhYSkuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgcmdiYSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBibGVuZChiZzogbnVtYmVyLCBmZzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAkYSA9IChmZyAmIDB4RkYpIC8gMHhGRjtcbiAgICBpZiAoJGEgPT09IDEpIHtcbiAgICAgIHJldHVybiBmZztcbiAgICB9XG4gICAgY29uc3QgZmdSID0gKGZnID4+IDI0KSAmIDB4RkY7XG4gICAgY29uc3QgZmdHID0gKGZnID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgZmdCID0gKGZnID4+IDgpICYgMHhGRjtcbiAgICBjb25zdCBiZ1IgPSAoYmcgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBiZ0cgPSAoYmcgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmcgPj4gOCkgJiAweEZGO1xuICAgICRyID0gYmdSICsgTWF0aC5yb3VuZCgoZmdSIC0gYmdSKSAqICRhKTtcbiAgICAkZyA9IGJnRyArIE1hdGgucm91bmQoKGZnRyAtIGJnRykgKiAkYSk7XG4gICAgJGIgPSBiZ0IgKyBNYXRoLnJvdW5kKChmZ0IgLSBiZ0IpICogJGEpO1xuICAgIHJldHVybiBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYik7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBmb3JlZ3JvdW5kIGNvbG9yIGFuZCBhIGJhY2tncm91bmQgY29sb3IsIGVpdGhlciBpbmNyZWFzZSBvciByZWR1Y2UgdGhlIGx1bWluYW5jZSBvZiB0aGVcbiAgICogZm9yZWdyb3VuZCBjb2xvciB1bnRpbCB0aGUgc3BlY2lmaWVkIGNvbnRyYXN0IHJhdGlvIGlzIG1ldC4gSWYgcHVyZSB3aGl0ZSBvciBibGFjayBpcyBoaXRcbiAgICogd2l0aG91dCB0aGUgY29udHJhc3QgcmF0aW8gYmVpbmcgbWV0LCBnbyB0aGUgb3RoZXIgZGlyZWN0aW9uIHVzaW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIHRoZVxuICAgKiBmb3JlZ3JvdW5kIGNvbG9yIGFuZCB0YWtlIGVpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIHJlc3VsdCBkZXBlbmRpbmcgb24gd2hpY2ggaGFzIHRoZSBoaWdoZXJcbiAgICogY29udHJhc3QgcmF0aW8uXG4gICAqXG4gICAqIGB1bmRlZmluZWRgIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGNvbnRyYXN0IHJhdGlvIGlzIGFscmVhZHkgbWV0LlxuICAgKlxuICAgKiBAcGFyYW0gYmdSZ2JhIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGluIHJnYmEgZm9ybWF0LlxuICAgKiBAcGFyYW0gZmdSZ2JhIFRoZSBmb3JlZ3JvdW5kIGNvbG9yIGluIHJnYmEgZm9ybWF0LlxuICAgKiBAcGFyYW0gcmF0aW8gVGhlIGNvbnRyYXN0IHJhdGlvIHRvIGFjaGlldmUuXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZW5zdXJlQ29udHJhc3RSYXRpbyhiZ1JnYmE6IG51bWJlciwgZmdSZ2JhOiBudW1iZXIsIHJhdGlvOiBudW1iZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJnTCA9IHJnYi5yZWxhdGl2ZUx1bWluYW5jZShiZ1JnYmEgPj4gOCk7XG4gICAgY29uc3QgZmdMID0gcmdiLnJlbGF0aXZlTHVtaW5hbmNlKGZnUmdiYSA+PiA4KTtcbiAgICBjb25zdCBjciA9IGNvbnRyYXN0UmF0aW8oYmdMLCBmZ0wpO1xuICAgIGlmIChjciA8IHJhdGlvKSB7XG4gICAgICBpZiAoZmdMIDwgYmdMKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdEEgPSByZWR1Y2VMdW1pbmFuY2UoYmdSZ2JhLCBmZ1JnYmEsIHJhdGlvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QVJhdGlvID0gY29udHJhc3RSYXRpbyhiZ0wsIHJnYi5yZWxhdGl2ZUx1bWluYW5jZShyZXN1bHRBID4+IDgpKTtcbiAgICAgICAgaWYgKHJlc3VsdEFSYXRpbyA8IHJhdGlvKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0QiA9IGluY3JlYXNlTHVtaW5hbmNlKGJnUmdiYSwgZmdSZ2JhLCByYXRpbyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0QlJhdGlvID0gY29udHJhc3RSYXRpbyhiZ0wsIHJnYi5yZWxhdGl2ZUx1bWluYW5jZShyZXN1bHRCID4+IDgpKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0QVJhdGlvID4gcmVzdWx0QlJhdGlvID8gcmVzdWx0QSA6IHJlc3VsdEI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdEE7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHRBID0gaW5jcmVhc2VMdW1pbmFuY2UoYmdSZ2JhLCBmZ1JnYmEsIHJhdGlvKTtcbiAgICAgIGNvbnN0IHJlc3VsdEFSYXRpbyA9IGNvbnRyYXN0UmF0aW8oYmdMLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UocmVzdWx0QSA+PiA4KSk7XG4gICAgICBpZiAocmVzdWx0QVJhdGlvIDwgcmF0aW8pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0QiA9IHJlZHVjZUx1bWluYW5jZShiZ1JnYmEsIGZnUmdiYSwgcmF0aW8pO1xuICAgICAgICBjb25zdCByZXN1bHRCUmF0aW8gPSBjb250cmFzdFJhdGlvKGJnTCwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlKHJlc3VsdEIgPj4gOCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0QVJhdGlvID4gcmVzdWx0QlJhdGlvID8gcmVzdWx0QSA6IHJlc3VsdEI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0QTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWR1Y2VMdW1pbmFuY2UoYmdSZ2JhOiBudW1iZXIsIGZnUmdiYTogbnVtYmVyLCByYXRpbzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBUaGlzIGlzIGEgbmFpdmUgYnV0IGZhc3QgYXBwcm9hY2ggdG8gcmVkdWNpbmcgbHVtaW5hbmNlIGFzIGNvbnZlcnRpbmcgdG9cbiAgICAvLyBIU0wgYW5kIGJhY2sgaXMgZXhwZW5zaXZlXG4gICAgY29uc3QgYmdSID0gKGJnUmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGJnRyA9IChiZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGZnUiA9IChmZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBsZXQgZmdHID0gKGZnUmdiYSA+PiAxNikgJiAweEZGO1xuICAgIGxldCBmZ0IgPSAoZmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB3aGlsZSAoY3IgPCByYXRpbyAmJiAoZmdSID4gMCB8fCBmZ0cgPiAwIHx8IGZnQiA+IDApKSB7XG4gICAgICAvLyBSZWR1Y2UgYnkgMTAlIHVudGlsIHRoZSByYXRpbyBpcyBoaXRcbiAgICAgIGZnUiAtPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoZmdSICogMC4xKSk7XG4gICAgICBmZ0cgLT0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGZnRyAqIDAuMSkpO1xuICAgICAgZmdCIC09IE1hdGgubWF4KDAsIE1hdGguY2VpbChmZ0IgKiAwLjEpKTtcbiAgICAgIGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB9XG4gICAgcmV0dXJuIChmZ1IgPDwgMjQgfCBmZ0cgPDwgMTYgfCBmZ0IgPDwgOCB8IDB4RkYpID4+PiAwO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGluY3JlYXNlTHVtaW5hbmNlKGJnUmdiYTogbnVtYmVyLCBmZ1JnYmE6IG51bWJlciwgcmF0aW86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gVGhpcyBpcyBhIG5haXZlIGJ1dCBmYXN0IGFwcHJvYWNoIHRvIGluY3JlYXNpbmcgbHVtaW5hbmNlIGFzIGNvbnZlcnRpbmcgdG9cbiAgICAvLyBIU0wgYW5kIGJhY2sgaXMgZXhwZW5zaXZlXG4gICAgY29uc3QgYmdSID0gKGJnUmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGJnRyA9IChiZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGZnUiA9IChmZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBsZXQgZmdHID0gKGZnUmdiYSA+PiAxNikgJiAweEZGO1xuICAgIGxldCBmZ0IgPSAoZmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB3aGlsZSAoY3IgPCByYXRpbyAmJiAoZmdSIDwgMHhGRiB8fCBmZ0cgPCAweEZGIHx8IGZnQiA8IDB4RkYpKSB7XG4gICAgICAvLyBJbmNyZWFzZSBieSAxMCUgdW50aWwgdGhlIHJhdGlvIGlzIGhpdFxuICAgICAgZmdSID0gTWF0aC5taW4oMHhGRiwgZmdSICsgTWF0aC5jZWlsKCgyNTUgLSBmZ1IpICogMC4xKSk7XG4gICAgICBmZ0cgPSBNYXRoLm1pbigweEZGLCBmZ0cgKyBNYXRoLmNlaWwoKDI1NSAtIGZnRykgKiAwLjEpKTtcbiAgICAgIGZnQiA9IE1hdGgubWluKDB4RkYsIGZnQiArIE1hdGguY2VpbCgoMjU1IC0gZmdCKSAqIDAuMSkpO1xuICAgICAgY3IgPSBjb250cmFzdFJhdGlvKHJnYi5yZWxhdGl2ZUx1bWluYW5jZTIoZmdSLCBmZ0csIGZnQiksIHJnYi5yZWxhdGl2ZUx1bWluYW5jZTIoYmdSLCBiZ0csIGJnQikpO1xuICAgIH1cbiAgICByZXR1cm4gKGZnUiA8PCAyNCB8IGZnRyA8PCAxNiB8IGZnQiA8PCA4IHwgMHhGRikgPj4+IDA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9DaGFubmVscyh2YWx1ZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiBbKHZhbHVlID4+IDI0KSAmIDB4RkYsICh2YWx1ZSA+PiAxNikgJiAweEZGLCAodmFsdWUgPj4gOCkgJiAweEZGLCB2YWx1ZSAmIDB4RkZdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BhZGRlZEhleChjOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzID0gYy50b1N0cmluZygxNik7XG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAnMCcgKyBzIDogcztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb250cmFzdCByYXRpbyBiZXR3ZWVuIHR3byByZWxhdGl2ZSBsdW1pbmFuY2UgdmFsdWVzLlxuICogQHBhcmFtIGwxIFRoZSBmaXJzdCByZWxhdGl2ZSBsdW1pbmFuY2UuXG4gKiBAcGFyYW0gbDIgVGhlIGZpcnN0IHJlbGF0aXZlIGx1bWluYW5jZS5cbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyYXN0UmF0aW8obDE6IG51bWJlciwgbDI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChsMSA8IGwyKSB7XG4gICAgcmV0dXJuIChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG4gIH1cbiAgcmV0dXJuIChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSAnY29tbW9uL1R5cGVzJztcblxuaW50ZXJmYWNlIElMaXN0ZW5lcjxULCBVID0gdm9pZD4ge1xuICAoYXJnMTogVCwgYXJnMjogVSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50PFQsIFUgPSB2b2lkPiB7XG4gIChsaXN0ZW5lcjogKGFyZzE6IFQsIGFyZzI6IFUpID0+IGFueSk6IElEaXNwb3NhYmxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudEVtaXR0ZXI8VCwgVSA9IHZvaWQ+IHtcbiAgZXZlbnQ6IElFdmVudDxULCBVPjtcbiAgZmlyZShhcmcxOiBULCBhcmcyOiBVKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRFbWl0dGVyPFQsIFUgPSB2b2lkPiBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXI8VCwgVT4ge1xuICBwcml2YXRlIF9saXN0ZW5lcnM6IElMaXN0ZW5lcjxULCBVPltdID0gW107XG4gIHByaXZhdGUgX2V2ZW50PzogSUV2ZW50PFQsIFU+O1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgZXZlbnQoKTogSUV2ZW50PFQsIFU+IHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50KSB7XG4gICAgICB0aGlzLl9ldmVudCA9IChsaXN0ZW5lcjogKGFyZzE6IFQsIGFyZzI6IFUpID0+IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSB7XG4gICAgICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9saXN0ZW5lcnNbaV0gPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZmlyZShhcmcxOiBULCBhcmcyOiBVKTogdm9pZCB7XG4gICAgY29uc3QgcXVldWU6IElMaXN0ZW5lcjxULCBVPltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXVlLnB1c2godGhpcy5fbGlzdGVuZXJzW2ldKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgcXVldWVbaV0uY2FsbCh1bmRlZmluZWQsIGFyZzEsIGFyZzIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkRXZlbnQ8VD4oZnJvbTogSUV2ZW50PFQ+LCB0bzogSUV2ZW50RW1pdHRlcjxUPik6IElEaXNwb3NhYmxlIHtcbiAgcmV0dXJuIGZyb20oZSA9PiB0by5maXJlKGUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFuZFN1YnNjcmliZTxUPihldmVudDogSUV2ZW50PFQ+LCBoYW5kbGVyOiAoZTogVCB8IHVuZGVmaW5lZCkgPT4gYW55KTogSURpc3Bvc2FibGUge1xuICBoYW5kbGVyKHVuZGVmaW5lZCk7XG4gIHJldHVybiBldmVudChlID0+IGhhbmRsZXIoZSkpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIHRoYXQgY2FuIGJlIGV4dGVuZGVkIHRvIHByb3ZpZGUgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiBhblxuICogb2JqZWN0IGFuZCBpdHMgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByb3RlY3RlZCBfZGlzcG9zYWJsZXM6IElEaXNwb3NhYmxlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9pc0Rpc3Bvc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QsIHRyaWdnZXJpbmcgdGhlIGBkaXNwb3NlYCBtZXRob2Qgb24gYWxsIHJlZ2lzdGVyZWQgSURpc3Bvc2FibGVzLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBkIG9mIHRoaXMuX2Rpc3Bvc2FibGVzKSB7XG4gICAgICBkLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBkaXNwb3NhYmxlIG9iamVjdC5cbiAgICogQHBhcmFtIGQgVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBkaXNwb3NhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBJRGlzcG9zYWJsZT4oZDogVCk6IFQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLnB1c2goZCk7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSBkaXNwb3NhYmxlIG9iamVjdCBpZiBpdCBoYXMgYmVlbiByZWdpc3RlcmVkLCBpZiBub3QgZG9cbiAgICogbm90aGluZy5cbiAgICogQHBhcmFtIGQgVGhlIGRpc3Bvc2FibGUgdG8gdW5yZWdpc3Rlci5cbiAgICovXG4gIHB1YmxpYyB1bnJlZ2lzdGVyPFQgZXh0ZW5kcyBJRGlzcG9zYWJsZT4oZDogVCk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGlzcG9zYWJsZXMuaW5kZXhPZihkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTXV0YWJsZURpc3Bvc2FibGU8VCBleHRlbmRzIElEaXNwb3NhYmxlPiBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfdmFsdWU/OiBUO1xuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIGlmIGl0IGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQgPyB1bmRlZmluZWQgOiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSwgZGlzcG9zaW5nIG9mIHRoZSBvbGQgdmFsdWUgaWYgaXQgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLl9pc0Rpc3Bvc2VkIHx8IHZhbHVlID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZT8uZGlzcG9zZSgpO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzdG9yZWQgdmFsdWUgYW5kIGRpc3Bvc2VzIG9mIHRoZSBwcmV2aW91c2x5IHN0b3JlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWU/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXAgYSBmdW5jdGlvbiBpbiBhIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGUoZjogKCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgcmV0dXJuIHsgZGlzcG9zZTogZiB9O1xufVxuXG4vKipcbiAqIERpc3Bvc2Ugb2YgYWxsIGRpc3Bvc2FibGVzIGluIGFuIGFycmF5IGFuZCBzZXQgaXRzIGxlbmd0aCB0byAwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZUFycmF5KGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZCBvZiBkaXNwb3NhYmxlcykge1xuICAgIGQuZGlzcG9zZSgpO1xuICB9XG4gIGRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3Bvc2FibGUgdGhhdCB3aWxsIGRpc3Bvc2Ugb2YgYW4gYXJyYXkgb2YgZGlzcG9zYWJsZXMgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3Bvc2VBcnJheURpc3Bvc2FibGUoYXJyYXk6IElEaXNwb3NhYmxlW10pOiBJRGlzcG9zYWJsZSB7XG4gIHJldHVybiB7IGRpc3Bvc2U6ICgpID0+IGRpc3Bvc2VBcnJheShhcnJheSkgfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuZXhwb3J0IGNsYXNzIFR3b0tleU1hcDxURmlyc3QgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRTZWNvbmQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRWYWx1ZT4ge1xuICBwcml2YXRlIF9kYXRhOiB7IFtiZzogc3RyaW5nIHwgbnVtYmVyXTogeyBbZmc6IHN0cmluZyB8IG51bWJlcl06IFRWYWx1ZSB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkIH0gPSB7fTtcblxuICBwdWJsaWMgc2V0KGZpcnN0OiBURmlyc3QsIHNlY29uZDogVFNlY29uZCwgdmFsdWU6IFRWYWx1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZGF0YVtmaXJzdF0pIHtcbiAgICAgIHRoaXMuX2RhdGFbZmlyc3RdID0ge307XG4gICAgfVxuICAgIHRoaXMuX2RhdGFbZmlyc3QgYXMgc3RyaW5nIHwgbnVtYmVyXSFbc2Vjb25kXSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQpOiBUVmFsdWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhW2ZpcnN0IGFzIHN0cmluZyB8IG51bWJlcl0gPyB0aGlzLl9kYXRhW2ZpcnN0IGFzIHN0cmluZyB8IG51bWJlcl0hW3NlY29uZF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YSA9IHt9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGb3VyS2V5TWFwPFRGaXJzdCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVFNlY29uZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVFRoaXJkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBURm91cnRoIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBUVmFsdWU+IHtcbiAgcHJpdmF0ZSBfZGF0YTogVHdvS2V5TWFwPFRGaXJzdCwgVFNlY29uZCwgVHdvS2V5TWFwPFRUaGlyZCwgVEZvdXJ0aCwgVFZhbHVlPj4gPSBuZXcgVHdvS2V5TWFwKCk7XG5cbiAgcHVibGljIHNldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQsIHRoaXJkOiBUVGhpcmQsIGZvdXJ0aDogVEZvdXJ0aCwgdmFsdWU6IFRWYWx1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZGF0YS5nZXQoZmlyc3QsIHNlY29uZCkpIHtcbiAgICAgIHRoaXMuX2RhdGEuc2V0KGZpcnN0LCBzZWNvbmQsIG5ldyBUd29LZXlNYXAoKSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEuZ2V0KGZpcnN0LCBzZWNvbmQpIS5zZXQodGhpcmQsIGZvdXJ0aCwgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQsIHRoaXJkOiBUVGhpcmQsIGZvdXJ0aDogVEZvdXJ0aCk6IFRWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGZpcnN0LCBzZWNvbmQpPy5nZXQodGhpcmQsIGZvdXJ0aCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YS5jbGVhcigpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICpcbiAqIFRoaXMgd2FzIGhlYXZpbHkgaW5zcGlyZWQgZnJvbSBtaWNyb3NvZnQvdnNjb2RlJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gc3lzdGVtIChNSVQpLlxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuaW1wb3J0IHsgSVNlcnZpY2VJZGVudGlmaWVyIH0gZnJvbSAnY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VzJztcblxuY29uc3QgRElfVEFSR0VUID0gJ2RpJHRhcmdldCc7XG5jb25zdCBESV9ERVBFTkRFTkNJRVMgPSAnZGkkZGVwZW5kZW5jaWVzJztcblxuZXhwb3J0IGNvbnN0IHNlcnZpY2VSZWdpc3RyeTogTWFwPHN0cmluZywgSVNlcnZpY2VJZGVudGlmaWVyPGFueT4+ID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZURlcGVuZGVuY2llcyhjdG9yOiBhbnkpOiB7IGlkOiBJU2VydmljZUlkZW50aWZpZXI8YW55PiwgaW5kZXg6IG51bWJlciwgb3B0aW9uYWw6IGJvb2xlYW4gfVtdIHtcbiAgcmV0dXJuIGN0b3JbRElfREVQRU5ERU5DSUVTXSB8fCBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcjxUPihpZDogc3RyaW5nKTogSVNlcnZpY2VJZGVudGlmaWVyPFQ+IHtcbiAgaWYgKHNlcnZpY2VSZWdpc3RyeS5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIHNlcnZpY2VSZWdpc3RyeS5nZXQoaWQpITtcbiAgfVxuXG4gIGNvbnN0IGRlY29yYXRvcjogYW55ID0gZnVuY3Rpb24gKHRhcmdldDogRnVuY3Rpb24sIGtleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdASVNlcnZpY2VOYW1lLWRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIHRvIGRlY29yYXRlIGEgcGFyYW1ldGVyJyk7XG4gICAgfVxuXG4gICAgc3RvcmVTZXJ2aWNlRGVwZW5kZW5jeShkZWNvcmF0b3IsIHRhcmdldCwgaW5kZXgpO1xuICB9O1xuXG4gIGRlY29yYXRvci50b1N0cmluZyA9ICgpID0+IGlkO1xuXG4gIHNlcnZpY2VSZWdpc3RyeS5zZXQoaWQsIGRlY29yYXRvcik7XG4gIHJldHVybiBkZWNvcmF0b3I7XG59XG5cbmZ1bmN0aW9uIHN0b3JlU2VydmljZURlcGVuZGVuY3koaWQ6IEZ1bmN0aW9uLCB0YXJnZXQ6IEZ1bmN0aW9uLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICgodGFyZ2V0IGFzIGFueSlbRElfVEFSR0VUXSA9PT0gdGFyZ2V0KSB7XG4gICAgKHRhcmdldCBhcyBhbnkpW0RJX0RFUEVOREVOQ0lFU10ucHVzaCh7IGlkLCBpbmRleCB9KTtcbiAgfSBlbHNlIHtcbiAgICAodGFyZ2V0IGFzIGFueSlbRElfREVQRU5ERU5DSUVTXSA9IFt7IGlkLCBpbmRleCB9XTtcbiAgICAodGFyZ2V0IGFzIGFueSlbRElfVEFSR0VUXSA9IHRhcmdldDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyBJRXZlbnQsIElFdmVudEVtaXR0ZXIgfSBmcm9tICdjb21tb24vRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7IElCdWZmZXIsIElCdWZmZXJTZXQgfSBmcm9tICdjb21tb24vYnVmZmVyL1R5cGVzJztcbmltcG9ydCB7IElEZWNQcml2YXRlTW9kZXMsIElDb3JlTW91c2VFdmVudCwgQ29yZU1vdXNlRW5jb2RpbmcsIElDb3JlTW91c2VQcm90b2NvbCwgQ29yZU1vdXNlRXZlbnRUeXBlLCBJQ2hhcnNldCwgSVdpbmRvd09wdGlvbnMsIElNb2RlcywgSUF0dHJpYnV0ZURhdGEsIFNjcm9sbFNvdXJjZSwgSURpc3Bvc2FibGUsIElDb2xvciwgQ3Vyc29yU3R5bGUsIEN1cnNvckluYWN0aXZlU3R5bGUsIElPc2NMaW5rRGF0YSB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICdjb21tb24vc2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IElEZWNvcmF0aW9uT3B0aW9ucywgSURlY29yYXRpb24sIElMaW5rSGFuZGxlciwgSVdpbmRvd3NQdHksIElMb2dnZXIgfSBmcm9tICdAeHRlcm0veHRlcm0nO1xuXG5leHBvcnQgY29uc3QgSUJ1ZmZlclNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUJ1ZmZlclNlcnZpY2U+KCdCdWZmZXJTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElCdWZmZXJTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgY29sczogbnVtYmVyO1xuICByZWFkb25seSByb3dzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGJ1ZmZlcjogSUJ1ZmZlcjtcbiAgcmVhZG9ubHkgYnVmZmVyczogSUJ1ZmZlclNldDtcbiAgaXNVc2VyU2Nyb2xsaW5nOiBib29sZWFuO1xuICBvblJlc2l6ZTogSUV2ZW50PHsgY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIgfT47XG4gIG9uU2Nyb2xsOiBJRXZlbnQ8bnVtYmVyPjtcbiAgc2Nyb2xsKGVyYXNlQXR0cjogSUF0dHJpYnV0ZURhdGEsIGlzV3JhcHBlZD86IGJvb2xlYW4pOiB2b2lkO1xuICBzY3JvbGxMaW5lcyhkaXNwOiBudW1iZXIsIHN1cHByZXNzU2Nyb2xsRXZlbnQ/OiBib29sZWFuLCBzb3VyY2U/OiBTY3JvbGxTb3VyY2UpOiB2b2lkO1xuICByZXNpemUoY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIpOiB2b2lkO1xuICByZXNldCgpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgSUNvcmVNb3VzZVNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUNvcmVNb3VzZVNlcnZpY2U+KCdDb3JlTW91c2VTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElDb3JlTW91c2VTZXJ2aWNlIHtcbiAgYWN0aXZlUHJvdG9jb2w6IHN0cmluZztcbiAgYWN0aXZlRW5jb2Rpbmc6IHN0cmluZztcbiAgYXJlTW91c2VFdmVudHNBY3RpdmU6IGJvb2xlYW47XG4gIGFkZFByb3RvY29sKG5hbWU6IHN0cmluZywgcHJvdG9jb2w6IElDb3JlTW91c2VQcm90b2NvbCk6IHZvaWQ7XG4gIGFkZEVuY29kaW5nKG5hbWU6IHN0cmluZywgZW5jb2Rpbmc6IENvcmVNb3VzZUVuY29kaW5nKTogdm9pZDtcbiAgcmVzZXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBtb3VzZSBldmVudCB0byBiZSBzZW50LlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IHBhc3NlZCBhbGwgcHJvdG9jb2wgcmVzdHJpY3Rpb25zIGFuZCBhIHJlcG9ydFxuICAgKiB3YXMgc2VudCwgb3RoZXJ3aXNlIGZhbHNlLiBUaGUgcmV0dXJuIHZhbHVlIG1heSBiZSB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyXG4gICAqIHRoZSBkZWZhdWx0IGV2ZW50IGFjdGlvbiBpbiB0aGUgYm93c2VyIGNvbXBvbmVudCBzaG91bGQgYmUgb21pdHRlZC5cbiAgICpcbiAgICogTm90ZTogVGhlIG1ldGhvZCB3aWxsIGNoYW5nZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIGV2ZW50IG9iamVjdFxuICAgKiB0byBmdWxsZmlsbCBwcm90b2NvbCBhbmQgZW5jb2RpbmcgcmVzdHJpY3Rpb25zLlxuICAgKi9cbiAgdHJpZ2dlck1vdXNlRXZlbnQoZXZlbnQ6IElDb3JlTW91c2VFdmVudCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV2ZW50IHRvIGFubm91bmNlIGNoYW5nZXMgaW4gbW91c2UgdHJhY2tpbmcuXG4gICAqL1xuICBvblByb3RvY29sQ2hhbmdlOiBJRXZlbnQ8Q29yZU1vdXNlRXZlbnRUeXBlPjtcblxuICAvKipcbiAgICogSHVtYW4gcmVhZGFibGUgdmVyc2lvbiBvZiBtb3VzZSBldmVudHMuXG4gICAqL1xuICBleHBsYWluRXZlbnRzKGV2ZW50czogQ29yZU1vdXNlRXZlbnRUeXBlKTogeyBbZXZlbnQ6IHN0cmluZ106IGJvb2xlYW4gfTtcbn1cblxuZXhwb3J0IGNvbnN0IElDb3JlU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJQ29yZVNlcnZpY2U+KCdDb3JlU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJQ29yZVNlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5pdGlhbGx5IHRoZSBjdXJzb3Igd2lsbCBub3QgYmUgdmlzaWJsZSB1bnRpbCB0aGUgZmlyc3QgdGltZSB0aGUgdGVybWluYWxcbiAgICogaXMgZm9jdXNlZC5cbiAgICovXG4gIGlzQ3Vyc29ySW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIGlzQ3Vyc29ySGlkZGVuOiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IG1vZGVzOiBJTW9kZXM7XG4gIHJlYWRvbmx5IGRlY1ByaXZhdGVNb2RlczogSURlY1ByaXZhdGVNb2RlcztcblxuICByZWFkb25seSBvbkRhdGE6IElFdmVudDxzdHJpbmc+O1xuICByZWFkb25seSBvblVzZXJJbnB1dDogSUV2ZW50PHZvaWQ+O1xuICByZWFkb25seSBvbkJpbmFyeTogSUV2ZW50PHN0cmluZz47XG4gIHJlYWRvbmx5IG9uUmVxdWVzdFNjcm9sbFRvQm90dG9tOiBJRXZlbnQ8dm9pZD47XG5cbiAgcmVzZXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVHJpZ2dlcnMgdGhlIG9uRGF0YSBldmVudCBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdGhhdCBpcyBiZWluZyBlbWl0dGVkLlxuICAgKiBAcGFyYW0gd2FzVXNlcklucHV0IFdoZXRoZXIgdGhlIGRhdGEgb3JpZ2luYXRlZCBmcm9tIHRoZSB1c2VyIChhcyBvcHBvc2VkIHRvXG4gICAqIHJlc3VsdGluZyBmcm9tIHBhcnNpbmcgaW5jb21pbmcgZGF0YSkuIFdoZW4gdHJ1ZSB0aGlzIHdpbGwgYWxzbzpcbiAgICogLSBTY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgYnVmZmVyIGlmIG9wdGlvbiBzY3JvbGxPblVzZXJJbnB1dCBpcyB0cnVlLlxuICAgKiAtIEZpcmUgdGhlIGBvblVzZXJJbnB1dGAgZXZlbnQgKHNvIHNlbGVjdGlvbiBjYW4gYmUgY2xlYXJlZCkuXG4gICAqL1xuICB0cmlnZ2VyRGF0YUV2ZW50KGRhdGE6IHN0cmluZywgd2FzVXNlcklucHV0PzogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBvbkJpbmFyeSBldmVudCBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdGhhdCBpcyBiZWluZyBlbWl0dGVkLlxuICAgKi9cbiAgdHJpZ2dlckJpbmFyeUV2ZW50KGRhdGE6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBJQ2hhcnNldFNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUNoYXJzZXRTZXJ2aWNlPignQ2hhcnNldFNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUNoYXJzZXRTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgY2hhcnNldDogSUNoYXJzZXQgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGdsZXZlbDogbnVtYmVyO1xuXG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgRyBsZXZlbCBvZiB0aGUgdGVybWluYWwuXG4gICAqIEBwYXJhbSBnXG4gICAqL1xuICBzZXRnTGV2ZWwoZzogbnVtYmVyKTogdm9pZDtcblxuICAvKipcbiAgICogU2V0IHRoZSBjaGFyc2V0IGZvciB0aGUgZ2l2ZW4gRyBsZXZlbCBvZiB0aGUgdGVybWluYWwuXG4gICAqIEBwYXJhbSBnXG4gICAqIEBwYXJhbSBjaGFyc2V0XG4gICAqL1xuICBzZXRnQ2hhcnNldChnOiBudW1iZXIsIGNoYXJzZXQ6IElDaGFyc2V0IHwgdW5kZWZpbmVkKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZUlkZW50aWZpZXI8VD4ge1xuICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICB0eXBlOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCcmFuZGVkU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xufVxuXG50eXBlIEdldExlYWRpbmdOb25TZXJ2aWNlQXJnczxUQXJncyBleHRlbmRzIGFueVtdPiA9IFRBcmdzIGV4dGVuZHMgW10gPyBbXVxuICA6IFRBcmdzIGV4dGVuZHMgWy4uLmluZmVyIFRGaXJzdCwgaW5mZXIgVExhc3RdID8gVExhc3QgZXh0ZW5kcyBJQnJhbmRlZFNlcnZpY2UgPyBHZXRMZWFkaW5nTm9uU2VydmljZUFyZ3M8VEZpcnN0PiA6IFRBcmdzXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IGNvbnN0IElJbnN0YW50aWF0aW9uU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJSW5zdGFudGlhdGlvblNlcnZpY2U+KCdJbnN0YW50aWF0aW9uU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJSW5zdGFudGlhdGlvblNlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICBzZXRTZXJ2aWNlPFQ+KGlkOiBJU2VydmljZUlkZW50aWZpZXI8VD4sIGluc3RhbmNlOiBUKTogdm9pZDtcbiAgZ2V0U2VydmljZTxUPihpZDogSVNlcnZpY2VJZGVudGlmaWVyPFQ+KTogVCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlSW5zdGFuY2U8Q3RvciBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSwgUiBleHRlbmRzIEluc3RhbmNlVHlwZTxDdG9yPj4odDogQ3RvciwgLi4uYXJnczogR2V0TGVhZGluZ05vblNlcnZpY2VBcmdzPENvbnN0cnVjdG9yUGFyYW1ldGVyczxDdG9yPj4pOiBSO1xufVxuXG5leHBvcnQgZW51bSBMb2dMZXZlbEVudW0ge1xuICBUUkFDRSA9IDAsXG4gIERFQlVHID0gMSxcbiAgSU5GTyA9IDIsXG4gIFdBUk4gPSAzLFxuICBFUlJPUiA9IDQsXG4gIE9GRiA9IDVcbn1cblxuZXhwb3J0IGNvbnN0IElMb2dTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElMb2dTZXJ2aWNlPignTG9nU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IGxvZ0xldmVsOiBMb2dMZXZlbEVudW07XG5cbiAgdHJhY2UobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGluZm8obWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgSU9wdGlvbnNTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElPcHRpb25zU2VydmljZT4oJ09wdGlvbnNTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElPcHRpb25zU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSByYXcgb3B0aW9ucyBvYmplY3QsIHRoaXMgaXMgYW4gaW50ZXJuYWwtb25seSBmYXN0IHBhdGggZm9yIGFjY2Vzc2luZ1xuICAgKiBzaW5nbGUgb3B0aW9ucyB3aXRob3V0IGFueSB2YWxpZGF0aW9uIGFzIHdlIHRydXN0IFR5cGVTY3JpcHQgdG8gZW5mb3JjZSBjb3JyZWN0IHVzYWdlXG4gICAqIGludGVybmFsbHkuXG4gICAqL1xuICByZWFkb25seSByYXdPcHRpb25zOiBSZXF1aXJlZDxJVGVybWluYWxPcHRpb25zPjtcblxuICAvKipcbiAgICogT3B0aW9ucyBhcyBleHBvc2VkIHRocm91Z2ggdGhlIHB1YmxpYyBBUEksIHRoaXMgcHJvcGVydHkgdXNlcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHdpdGhcbiAgICogdmFsaWRhdGlvbiB3aGljaCBtYWtlcyBpdCBzYWZlciBidXQgc2xvd2VyLiB7QGxpbmsgcmF3T3B0aW9uc30gc2hvdWxkIGJlIHVzZWQgZm9yIHByZXR0eSBtdWNoXG4gICAqIGFsbCBpbnRlcm5hbCB1c2FnZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPElUZXJtaW5hbE9wdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB3aGVuIGFueSBvcHRpb24gY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uT3B0aW9uQ2hhbmdlOiBJRXZlbnQ8a2V5b2YgSVRlcm1pbmFsT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIHdoZW4gYSBzcGVjaWZpYyBvcHRpb24gY2hhbmdlcywgdGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGlzXG4gICAqIHByZWZlcnJlZCBvdmVyIHtAbGluayBvbk9wdGlvbkNoYW5nZX0gd2hlbiBvbmx5IGEgc2luZ2xlIG9wdGlvbiBpcyBiZWluZyBsaXN0ZW5lZCB0by5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgb25TcGVjaWZpY09wdGlvbkNoYW5nZTxUIGV4dGVuZHMga2V5b2YgSVRlcm1pbmFsT3B0aW9ucz4oa2V5OiBULCBsaXN0ZW5lcjogKGFyZzE6IFJlcXVpcmVkPElUZXJtaW5hbE9wdGlvbnM+W1RdKSA9PiBhbnkpOiBJRGlzcG9zYWJsZTtcblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciBmb3Igd2hlbiBhIHNldCBvZiBzcGVjaWZpYyBvcHRpb25zIGNoYW5nZSwgdGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZFxuICAgKiB0aGF0IGlzIHByZWZlcnJlZCBvdmVyIHtAbGluayBvbk9wdGlvbkNoYW5nZX0gd2hlbiBtdWx0aXBsZSBvcHRpb25zIGFyZSBiZWluZyBsaXN0ZW5lZCB0byBhbmRcbiAgICogaGFuZGxlZCB0aGUgc2FtZSB3YXkuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIG9uTXVsdGlwbGVPcHRpb25DaGFuZ2Uoa2V5czogKGtleW9mIElUZXJtaW5hbE9wdGlvbnMpW10sIGxpc3RlbmVyOiAoKSA9PiBhbnkpOiBJRGlzcG9zYWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgRm9udFdlaWdodCA9ICdub3JtYWwnIHwgJ2JvbGQnIHwgJzEwMCcgfCAnMjAwJyB8ICczMDAnIHwgJzQwMCcgfCAnNTAwJyB8ICc2MDAnIHwgJzcwMCcgfCAnODAwJyB8ICc5MDAnIHwgbnVtYmVyO1xuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAndHJhY2UnIHwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnb2ZmJztcblxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWxPcHRpb25zIHtcbiAgYWxsb3dQcm9wb3NlZEFwaT86IGJvb2xlYW47XG4gIGFsbG93VHJhbnNwYXJlbmN5PzogYm9vbGVhbjtcbiAgYWx0Q2xpY2tNb3Zlc0N1cnNvcj86IGJvb2xlYW47XG4gIGNvbHM/OiBudW1iZXI7XG4gIGNvbnZlcnRFb2w/OiBib29sZWFuO1xuICBjdXJzb3JCbGluaz86IGJvb2xlYW47XG4gIGN1cnNvclN0eWxlPzogQ3Vyc29yU3R5bGU7XG4gIGN1cnNvcldpZHRoPzogbnVtYmVyO1xuICBjdXJzb3JJbmFjdGl2ZVN0eWxlPzogQ3Vyc29ySW5hY3RpdmVTdHlsZTtcbiAgY3VzdG9tR2x5cGhzPzogYm9vbGVhbjtcbiAgZGlzYWJsZVN0ZGluPzogYm9vbGVhbjtcbiAgZG9jdW1lbnRPdmVycmlkZT86IGFueSB8IG51bGw7XG4gIGRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzPzogYm9vbGVhbjtcbiAgZmFzdFNjcm9sbE1vZGlmaWVyPzogJ25vbmUnIHwgJ2FsdCcgfCAnY3RybCcgfCAnc2hpZnQnO1xuICBmYXN0U2Nyb2xsU2Vuc2l0aXZpdHk/OiBudW1iZXI7XG4gIGZvbnRTaXplPzogbnVtYmVyO1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICBmb250V2VpZ2h0PzogRm9udFdlaWdodDtcbiAgZm9udFdlaWdodEJvbGQ/OiBGb250V2VpZ2h0O1xuICBpZ25vcmVCcmFja2V0ZWRQYXN0ZU1vZGU/OiBib29sZWFuO1xuICBsZXR0ZXJTcGFjaW5nPzogbnVtYmVyO1xuICBsaW5lSGVpZ2h0PzogbnVtYmVyO1xuICBsaW5rSGFuZGxlcj86IElMaW5rSGFuZGxlciB8IG51bGw7XG4gIGxvZ0xldmVsPzogTG9nTGV2ZWw7XG4gIGxvZ2dlcj86IElMb2dnZXIgfCBudWxsO1xuICBtYWNPcHRpb25Jc01ldGE/OiBib29sZWFuO1xuICBtYWNPcHRpb25DbGlja0ZvcmNlc1NlbGVjdGlvbj86IGJvb2xlYW47XG4gIG1pbmltdW1Db250cmFzdFJhdGlvPzogbnVtYmVyO1xuICByZXNjYWxlT3ZlcmxhcHBpbmdHbHlwaHM/OiBib29sZWFuO1xuICByaWdodENsaWNrU2VsZWN0c1dvcmQ/OiBib29sZWFuO1xuICByb3dzPzogbnVtYmVyO1xuICBzY3JlZW5SZWFkZXJNb2RlPzogYm9vbGVhbjtcbiAgc2Nyb2xsYmFjaz86IG51bWJlcjtcbiAgc2Nyb2xsT25Vc2VySW5wdXQ/OiBib29sZWFuO1xuICBzY3JvbGxTZW5zaXRpdml0eT86IG51bWJlcjtcbiAgc21vb3RoU2Nyb2xsRHVyYXRpb24/OiBudW1iZXI7XG4gIHRhYlN0b3BXaWR0aD86IG51bWJlcjtcbiAgdGhlbWU/OiBJVGhlbWU7XG4gIHdpbmRvd3NNb2RlPzogYm9vbGVhbjtcbiAgd2luZG93c1B0eT86IElXaW5kb3dzUHR5O1xuICB3aW5kb3dPcHRpb25zPzogSVdpbmRvd09wdGlvbnM7XG4gIHdvcmRTZXBhcmF0b3I/OiBzdHJpbmc7XG4gIG92ZXJ2aWV3UnVsZXJXaWR0aD86IG51bWJlcjtcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGNhbmNlbEV2ZW50czogYm9vbGVhbjtcbiAgdGVybU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGhlbWUge1xuICBmb3JlZ3JvdW5kPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGN1cnNvckFjY2VudD86IHN0cmluZztcbiAgc2VsZWN0aW9uRm9yZWdyb3VuZD86IHN0cmluZztcbiAgc2VsZWN0aW9uQmFja2dyb3VuZD86IHN0cmluZztcbiAgc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBibGFjaz86IHN0cmluZztcbiAgcmVkPzogc3RyaW5nO1xuICBncmVlbj86IHN0cmluZztcbiAgeWVsbG93Pzogc3RyaW5nO1xuICBibHVlPzogc3RyaW5nO1xuICBtYWdlbnRhPzogc3RyaW5nO1xuICBjeWFuPzogc3RyaW5nO1xuICB3aGl0ZT86IHN0cmluZztcbiAgYnJpZ2h0QmxhY2s/OiBzdHJpbmc7XG4gIGJyaWdodFJlZD86IHN0cmluZztcbiAgYnJpZ2h0R3JlZW4/OiBzdHJpbmc7XG4gIGJyaWdodFllbGxvdz86IHN0cmluZztcbiAgYnJpZ2h0Qmx1ZT86IHN0cmluZztcbiAgYnJpZ2h0TWFnZW50YT86IHN0cmluZztcbiAgYnJpZ2h0Q3lhbj86IHN0cmluZztcbiAgYnJpZ2h0V2hpdGU/OiBzdHJpbmc7XG4gIGV4dGVuZGVkQW5zaT86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgSU9zY0xpbmtTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElPc2NMaW5rU2VydmljZT4oJ09zY0xpbmtTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElPc2NMaW5rU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGluayB0byB0aGUgc2VydmljZSwgcmV0dXJuaW5nIHRoZSBsaW5rIElELiBUaGUgbGluayBkYXRhIGlzIG1hbmFnZWQgYnkgdGhpc1xuICAgKiBzZXJ2aWNlIGFuZCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhpcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpcyB0cmltbWVkIG9mZiB0aGUgYnVmZmVyLlxuICAgKi9cbiAgcmVnaXN0ZXJMaW5rKGxpbmtEYXRhOiBJT3NjTGlua0RhdGEpOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBZGRzIGEgbGluZSB0byBhIGxpbmsgaWYgbmVlZGVkLlxuICAgKi9cbiAgYWRkTGluZVRvTGluayhsaW5rSWQ6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEdldCB0aGUgbGluayBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGxpbmsgSUQuICovXG4gIGdldExpbmtEYXRhKGxpbmtJZDogbnVtYmVyKTogSU9zY0xpbmtEYXRhIHwgdW5kZWZpbmVkO1xufVxuXG4vKlxuICogV2lkdGggYW5kIEdyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgcHJvcGVydGllcyBvZiBhIGNoYXJhY3RlciBhcyBhIGJpdCBtYXNrLlxuICpcbiAqIGJpdCAwOiBzaG91bGRKb2luIC0gc2hvdWxkIGNvbWJpbmUgd2l0aCBwcmVjZWRpbmcgY2hhcmFjdGVyLlxuICogYml0IDEuLjI6IHdjd2lkdGggLSBzZWUgVW5pY29kZUNoYXJXaWR0aC5cbiAqIGJpdCAzLi4zMTogY2xhc3Mgb2YgY2hhcmFjdGVyIChjdXJyZW50bHkgb25seSA0IGJpdHMgYXJlIHVzZWQpLlxuICogICBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lZCBncmFwaGVtZSBjbHVzdGVyaW5nIC0gaS5lLiB3aGljaCBjb2RlcG9pbnRzXG4gKiAgIGFyZSB0byBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGNvbXBvdW5kIGNoYXJhY3Rlci5cbiAqXG4gKiBVc2UgdGhlIFVuaWNvZGVTZXJ2aWNlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eVZhbHVlIHRvIGNyZWF0ZSBhXG4gKiBVbmljb2RlQ2hhclByb3BlcnRpZXM7IHVzZSBleHRyYWN0U2hvdWxkSm9pbiwgZXh0cmFjdFdpZHRoLCBhbmRcbiAqIGV4dHJhY3RDaGFyS2luZCB0byBleHRyYWN0IHRoZSBjb21wb25lbnRzLlxuICovXG5leHBvcnQgdHlwZSBVbmljb2RlQ2hhclByb3BlcnRpZXMgPSBudW1iZXI7XG5cbi8qKlxuICogV2lkdGggaW4gY29sdW1ucyBvZiBhIGNoYXJhY3Rlci5cbiAqIEluIGEgQ0pLIGNvbnRleHQsIFwiaGFsZi13aWR0aFwiIGNoYXJhY3RlcnMgKHN1Y2ggYXMgTGF0aW4pIGFyZSB3aWR0aCAxLFxuICogd2hpbGUgXCJmdWxsLXdpZHRoXCIgY2hhcmFjdGVycyAoc3VjaCBhcyBLYW5qaSkgYXJlIDIgY29sdW1ucyB3aWRlLlxuICogQ29tYmluaW5nIGNoYXJhY3RlcnMgKHN1Y2ggYXMgYWNjZW50cykgYXJlIHdpZHRoIDAuXG4gKi9cbmV4cG9ydCB0eXBlIFVuaWNvZGVDaGFyV2lkdGggPSAwIHwgMSB8IDI7XG5cbmV4cG9ydCBjb25zdCBJVW5pY29kZVNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SVVuaWNvZGVTZXJ2aWNlPignVW5pY29kZVNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSVVuaWNvZGVTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG4gIC8qKiBSZWdpc3RlciBhbiBVbmljb2RlIHZlcnNpb24gcHJvdmlkZXIuICovXG4gIHJlZ2lzdGVyKHByb3ZpZGVyOiBJVW5pY29kZVZlcnNpb25Qcm92aWRlcik6IHZvaWQ7XG4gIC8qKiBSZWdpc3RlcmVkIFVuaWNvZGUgdmVyc2lvbnMuICovXG4gIHJlYWRvbmx5IHZlcnNpb25zOiBzdHJpbmdbXTtcbiAgLyoqIEN1cnJlbnRseSBhY3RpdmUgdmVyc2lvbi4gKi9cbiAgYWN0aXZlVmVyc2lvbjogc3RyaW5nO1xuICAvKiogRXZlbnQgdHJpZ2dlcmVkLCB3aGVuIGFjdGl2YXRlIHZlcnNpb24gY2hhbmdlZC4gKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2U6IElFdmVudDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBVbmljb2RlIHZlcnNpb24gZGVwZW5kZW50XG4gICAqL1xuICB3Y3dpZHRoKGNvZGVwb2ludDogbnVtYmVyKTogVW5pY29kZUNoYXJXaWR0aDtcbiAgZ2V0U3RyaW5nQ2VsbFdpZHRoKHM6IHN0cmluZyk6IG51bWJlcjtcbiAgLyoqXG4gICAqIFJldHVybiBjaGFyYWN0ZXIgd2lkdGggYW5kIHR5cGUgZm9yIGdyYXBoZW1lIGNsdXN0ZXJpbmcuXG4gICAqIElmIHByZWNlZGluZyAhPSAwLCBpdCBpcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyO1xuICAgKiBpbiB0aGF0IGNhc2UgdGhlIHJlc3VsdCBzcGVjaWZpZXMgaWYgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGpvaW5lZC5cbiAgICovXG4gIGNoYXJQcm9wZXJ0aWVzKGNvZGVwb2ludDogbnVtYmVyLCBwcmVjZWRpbmc6IFVuaWNvZGVDaGFyUHJvcGVydGllcyk6IFVuaWNvZGVDaGFyUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVW5pY29kZVZlcnNpb25Qcm92aWRlciB7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgd2N3aWR0aCh1Y3M6IG51bWJlcik6IFVuaWNvZGVDaGFyV2lkdGg7XG4gIGNoYXJQcm9wZXJ0aWVzKGNvZGVwb2ludDogbnVtYmVyLCBwcmVjZWRpbmc6IFVuaWNvZGVDaGFyUHJvcGVydGllcyk6IFVuaWNvZGVDaGFyUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IElEZWNvcmF0aW9uU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJRGVjb3JhdGlvblNlcnZpY2U+KCdEZWNvcmF0aW9uU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJRGVjb3JhdGlvblNlcnZpY2UgZXh0ZW5kcyBJRGlzcG9zYWJsZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuICByZWFkb25seSBkZWNvcmF0aW9uczogSXRlcmFibGVJdGVyYXRvcjxJSW50ZXJuYWxEZWNvcmF0aW9uPjtcbiAgcmVhZG9ubHkgb25EZWNvcmF0aW9uUmVnaXN0ZXJlZDogSUV2ZW50PElJbnRlcm5hbERlY29yYXRpb24+O1xuICByZWFkb25seSBvbkRlY29yYXRpb25SZW1vdmVkOiBJRXZlbnQ8SUludGVybmFsRGVjb3JhdGlvbj47XG4gIHJlZ2lzdGVyRGVjb3JhdGlvbihkZWNvcmF0aW9uT3B0aW9uczogSURlY29yYXRpb25PcHRpb25zKTogSURlY29yYXRpb24gfCB1bmRlZmluZWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGEgY2FsbGJhY2sgb3ZlciB0aGUgZGVjb3JhdGlvbiBhdCBhIGNlbGwgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpLiBUaGlzIHVzZXMgYSBjYWxsYmFja1xuICAgKiBpbnN0ZWFkIG9mIGFuIGl0ZXJhdG9yIGFzIGl0J3MgdHlwaWNhbGx5IHVzZWQgaW4gaG90IGNvZGUgcGF0aHMuXG4gICAqL1xuICBmb3JFYWNoRGVjb3JhdGlvbkF0Q2VsbCh4OiBudW1iZXIsIGxpbmU6IG51bWJlciwgbGF5ZXI6ICdib3R0b20nIHwgJ3RvcCcgfCB1bmRlZmluZWQsIGNhbGxiYWNrOiAoZGVjb3JhdGlvbjogSUludGVybmFsRGVjb3JhdGlvbikgPT4gdm9pZCk6IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcm5hbERlY29yYXRpb24gZXh0ZW5kcyBJRGVjb3JhdGlvbiB7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IElEZWNvcmF0aW9uT3B0aW9ucztcbiAgcmVhZG9ubHkgYmFja2dyb3VuZENvbG9yUkdCOiBJQ29sb3IgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGZvcmVncm91bmRDb2xvclJHQjogSUNvbG9yIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBvblJlbmRlckVtaXR0ZXI6IElFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+O1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKlxuICogKEVYUEVSSU1FTlRBTCkgVGhpcyBBZGRvbiBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuICovXG5cbmltcG9ydCB0eXBlIHsgSUJ1ZmZlciwgSUJ1ZmZlckNlbGwsIElCdWZmZXJSYW5nZSwgSVRlcm1pbmFsQWRkb24sIFRlcm1pbmFsIH0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcbmltcG9ydCB0eXBlIHsgSUhUTUxTZXJpYWxpemVPcHRpb25zLCBTZXJpYWxpemVBZGRvbiBhcyBJU2VyaWFsaXplQXBpLCBJU2VyaWFsaXplT3B0aW9ucywgSVNlcmlhbGl6ZVJhbmdlIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLXNlcmlhbGl6ZSc7XG5pbXBvcnQgeyBERUZBVUxUX0FOU0lfQ09MT1JTIH0gZnJvbSAnYnJvd3Nlci9zZXJ2aWNlcy9UaGVtZVNlcnZpY2UnO1xuaW1wb3J0IHsgSUF0dHJpYnV0ZURhdGEsIElDb2xvciB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5cbmZ1bmN0aW9uIGNvbnN0cmFpbih2YWx1ZTogbnVtYmVyLCBsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KGxvdywgTWF0aC5taW4odmFsdWUsIGhpZ2gpKTtcbn1cblxuLy8gVE9ETzogUmVmaW5lIHRoaXMgdGVtcGxhdGUgY2xhc3MgbGF0ZXJcbmFic3RyYWN0IGNsYXNzIEJhc2VTZXJpYWxpemVIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9idWZmZXI6IElCdWZmZXJcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplKHJhbmdlOiBJQnVmZmVyUmFuZ2UsIGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgLy8gd2UgbmVlZCB0d28gb2YgdGhlbSB0byBmbGlwIGJldHdlZW4gb2xkIGFuZCBuZXcgY2VsbFxuICAgIGNvbnN0IGNlbGwxID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gICAgY29uc3QgY2VsbDIgPSB0aGlzLl9idWZmZXIuZ2V0TnVsbENlbGwoKTtcbiAgICBsZXQgb2xkQ2VsbCA9IGNlbGwxO1xuXG4gICAgY29uc3Qgc3RhcnRSb3cgPSByYW5nZS5zdGFydC55O1xuICAgIGNvbnN0IGVuZFJvdyA9IHJhbmdlLmVuZC55O1xuICAgIGNvbnN0IHN0YXJ0Q29sdW1uID0gcmFuZ2Uuc3RhcnQueDtcbiAgICBjb25zdCBlbmRDb2x1bW4gPSByYW5nZS5lbmQueDtcblxuICAgIHRoaXMuX2JlZm9yZVNlcmlhbGl6ZShlbmRSb3cgLSBzdGFydFJvdywgc3RhcnRSb3csIGVuZFJvdyk7XG5cbiAgICBmb3IgKGxldCByb3cgPSBzdGFydFJvdzsgcm93IDw9IGVuZFJvdzsgcm93KyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLl9idWZmZXIuZ2V0TGluZShyb3cpO1xuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRMaW5lQ29sdW1uID0gcm93ID09PSByYW5nZS5zdGFydC55ID8gc3RhcnRDb2x1bW4gOiAwO1xuICAgICAgICBjb25zdCBlbmRMaW5lQ29sdW1uID0gcm93ID09PSByYW5nZS5lbmQueSA/IGVuZENvbHVtbjogbGluZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGNvbCA9IHN0YXJ0TGluZUNvbHVtbjsgY29sIDwgZW5kTGluZUNvbHVtbjsgY29sKyspIHtcbiAgICAgICAgICBjb25zdCBjID0gbGluZS5nZXRDZWxsKGNvbCwgb2xkQ2VsbCA9PT0gY2VsbDEgPyBjZWxsMiA6IGNlbGwxKTtcbiAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ2FuJ3QgZ2V0IGNlbGwgYXQgcm93PSR7cm93fSwgY29sPSR7Y29sfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX25leHRDZWxsKGMsIG9sZENlbGwsIHJvdywgY29sKTtcbiAgICAgICAgICBvbGRDZWxsID0gYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fcm93RW5kKHJvdywgcm93ID09PSBlbmRSb3cpO1xuICAgIH1cblxuICAgIHRoaXMuX2FmdGVyU2VyaWFsaXplKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplU3RyaW5nKGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dENlbGwoY2VsbDogSUJ1ZmZlckNlbGwsIG9sZENlbGw6IElCdWZmZXJDZWxsLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHsgfVxuICBwcm90ZWN0ZWQgX3Jvd0VuZChyb3c6IG51bWJlciwgaXNMYXN0Um93OiBib29sZWFuKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIF9iZWZvcmVTZXJpYWxpemUocm93czogbnVtYmVyLCBzdGFydFJvdzogbnVtYmVyLCBlbmRSb3c6IG51bWJlcik6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBfYWZ0ZXJTZXJpYWxpemUoKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIF9zZXJpYWxpemVTdHJpbmcoZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24/OiBib29sZWFuKTogc3RyaW5nIHsgcmV0dXJuICcnOyB9XG59XG5cbmZ1bmN0aW9uIGVxdWFsRmcoY2VsbDE6IElCdWZmZXJDZWxsIHwgSUF0dHJpYnV0ZURhdGEsIGNlbGwyOiBJQnVmZmVyQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2VsbDEuZ2V0RmdDb2xvck1vZGUoKSA9PT0gY2VsbDIuZ2V0RmdDb2xvck1vZGUoKVxuICAgICYmIGNlbGwxLmdldEZnQ29sb3IoKSA9PT0gY2VsbDIuZ2V0RmdDb2xvcigpO1xufVxuXG5mdW5jdGlvbiBlcXVhbEJnKGNlbGwxOiBJQnVmZmVyQ2VsbCB8IElBdHRyaWJ1dGVEYXRhLCBjZWxsMjogSUJ1ZmZlckNlbGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNlbGwxLmdldEJnQ29sb3JNb2RlKCkgPT09IGNlbGwyLmdldEJnQ29sb3JNb2RlKClcbiAgICAmJiBjZWxsMS5nZXRCZ0NvbG9yKCkgPT09IGNlbGwyLmdldEJnQ29sb3IoKTtcbn1cblxuZnVuY3Rpb24gZXF1YWxGbGFncyhjZWxsMTogSUJ1ZmZlckNlbGwgfCBJQXR0cmlidXRlRGF0YSwgY2VsbDI6IElCdWZmZXJDZWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBjZWxsMS5pc0ludmVyc2UoKSA9PT0gY2VsbDIuaXNJbnZlcnNlKClcbiAgICAmJiBjZWxsMS5pc0JvbGQoKSA9PT0gY2VsbDIuaXNCb2xkKClcbiAgICAmJiBjZWxsMS5pc1VuZGVybGluZSgpID09PSBjZWxsMi5pc1VuZGVybGluZSgpXG4gICAgJiYgY2VsbDEuaXNPdmVybGluZSgpID09PSBjZWxsMi5pc092ZXJsaW5lKClcbiAgICAmJiBjZWxsMS5pc0JsaW5rKCkgPT09IGNlbGwyLmlzQmxpbmsoKVxuICAgICYmIGNlbGwxLmlzSW52aXNpYmxlKCkgPT09IGNlbGwyLmlzSW52aXNpYmxlKClcbiAgICAmJiBjZWxsMS5pc0l0YWxpYygpID09PSBjZWxsMi5pc0l0YWxpYygpXG4gICAgJiYgY2VsbDEuaXNEaW0oKSA9PT0gY2VsbDIuaXNEaW0oKVxuICAgICYmIGNlbGwxLmlzU3RyaWtldGhyb3VnaCgpID09PSBjZWxsMi5pc1N0cmlrZXRocm91Z2goKTtcbn1cblxuY2xhc3MgU3RyaW5nU2VyaWFsaXplSGFuZGxlciBleHRlbmRzIEJhc2VTZXJpYWxpemVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBfcm93SW5kZXg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2FsbFJvd3M6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfYWxsUm93U2VwYXJhdG9yczogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBwcml2YXRlIF9jdXJyZW50Um93OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfbnVsbENlbGxDb3VudDogbnVtYmVyID0gMDtcblxuICAvLyB3ZSBjYW4gc2VlIGEgZnVsbCBjb2xvcmVkIGNlbGwgYW5kIGEgbnVsbCBjZWxsIHRoYXQgb25seSBoYXZlIGJhY2tncm91bmQgdGhlIHNhbWUgc3R5bGVcbiAgLy8gYnV0IHRoZSBpbmZvcm1hdGlvbiBpc24ndCBwcmVzZXJ2ZWQgYnkgbnVsbCBjZWxsIGl0c2VsZlxuICAvLyBzbyB3ZWUgbmVlZCB0byByZWNvcmQgaXQgd2hlbiByZXF1aXJlZC5cbiAgcHJpdmF0ZSBfY3Vyc29yU3R5bGU6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG5cbiAgLy8gd2hlcmUgZXhhY3QgdGhlIGN1cnNvciBzdHlsZXMgY29tZXMgZnJvbVxuICAvLyBiZWNhdXNlIHdlIGNhbid0IGNvcHkgdGhlIGNlbGwgZGlyZWN0bHlcbiAgLy8gc28gd2UgcmVtZW1iZXIgd2hlcmUgdGhlIGNvbnRlbnQgY29tZXMgZnJvbSBpbnN0ZWFkXG4gIHByaXZhdGUgX2N1cnNvclN0eWxlUm93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9jdXJzb3JTdHlsZUNvbDogbnVtYmVyID0gMDtcblxuICAvLyB0aGlzIGlzIGEgbnVsbCBjZWxsIGZvciByZWZlcmVuY2UgZm9yIGNoZWNraW5nIHdoZXRoZXIgYmFja2dyb3VuZCBpcyBlbXB0eSBvciBub3RcbiAgcHJpdmF0ZSBfYmFja2dyb3VuZENlbGw6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG5cbiAgcHJpdmF0ZSBfZmlyc3RSb3c6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RDdXJzb3JSb3c6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RDdXJzb3JDb2w6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RDb250ZW50Q3Vyc29yUm93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q29udGVudEN1cnNvckNvbDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWZmZXI6IElCdWZmZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVybWluYWw6IFRlcm1pbmFsXG4gICkge1xuICAgIHN1cGVyKGJ1ZmZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2JlZm9yZVNlcmlhbGl6ZShyb3dzOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fYWxsUm93cyA9IG5ldyBBcnJheTxzdHJpbmc+KHJvd3MpO1xuICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gc3RhcnQ7XG4gICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHN0YXJ0O1xuICAgIHRoaXMuX2ZpcnN0Um93ID0gc3RhcnQ7XG4gIH1cblxuICBwcml2YXRlIF90aGlzUm93TGFzdENoYXI6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gIHByaXZhdGUgX3RoaXNSb3dMYXN0U2Vjb25kQ2hhcjogSUJ1ZmZlckNlbGwgPSB0aGlzLl9idWZmZXIuZ2V0TnVsbENlbGwoKTtcbiAgcHJpdmF0ZSBfbmV4dFJvd0ZpcnN0Q2hhcjogSUJ1ZmZlckNlbGwgPSB0aGlzLl9idWZmZXIuZ2V0TnVsbENlbGwoKTtcbiAgcHJvdGVjdGVkIF9yb3dFbmQocm93OiBudW1iZXIsIGlzTGFzdFJvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIGlmIHRoZXJlIGlzIGNvbG9yZnVsIGVtcHR5IGNlbGwgYXQgbGluZSBlbmQsIHdoZSBtdXN0IHBhZCBpdCBiYWNrLCBvciB0aGUgdGhlIGNvbG9yIGJsb2NrXG4gICAgLy8gd2lsbCBtaXNzaW5nXG4gICAgaWYgKHRoaXMuX251bGxDZWxsQ291bnQgPiAwICYmICFlcXVhbEJnKHRoaXMuX2N1cnNvclN0eWxlLCB0aGlzLl9iYWNrZ3JvdW5kQ2VsbCkpIHtcbiAgICAgIC8vIHVzZSBjbGVhciByaWdodCB0byBzZXQgYmFja2dyb3VuZC5cbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gYFxcdTAwMWJbJHt0aGlzLl9udWxsQ2VsbENvdW50fVhgO1xuICAgIH1cblxuICAgIGxldCByb3dTZXBhcmF0b3IgPSAnJztcblxuICAgIC8vIGhhbmRsZSByb3cgc2VwYXJhdG9yXG4gICAgaWYgKCFpc0xhc3RSb3cpIHtcbiAgICAgIC8vIEVuYWJsZSBCQ0VcbiAgICAgIGlmIChyb3cgLSB0aGlzLl9maXJzdFJvdyA+PSB0aGlzLl90ZXJtaW5hbC5yb3dzKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5nZXRMaW5lKHRoaXMuX2N1cnNvclN0eWxlUm93KT8uZ2V0Q2VsbCh0aGlzLl9jdXJzb3JTdHlsZUNvbCwgdGhpcy5fYmFja2dyb3VuZENlbGwpO1xuICAgICAgfVxuXG4gICAgICAvLyBGZXRjaCBjdXJyZW50IGxpbmVcbiAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93KSE7XG4gICAgICAvLyBGZXRjaCBuZXh0IGxpbmVcbiAgICAgIGNvbnN0IG5leHRMaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93ICsgMSkhO1xuXG4gICAgICBpZiAoIW5leHRMaW5lLmlzV3JhcHBlZCkge1xuICAgICAgICAvLyBqdXN0IGluc2VydCB0aGUgbGluZSBicmVha1xuICAgICAgICByb3dTZXBhcmF0b3IgPSAnXFxyXFxuJztcbiAgICAgICAgLy8gd2Ugc2VuZGVkIHRoZSBlbnRlclxuICAgICAgICB0aGlzLl9sYXN0Q3Vyc29yUm93ID0gcm93ICsgMTtcbiAgICAgICAgdGhpcy5fbGFzdEN1cnNvckNvbCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dTZXBhcmF0b3IgPSAnJztcbiAgICAgICAgY29uc3QgdGhpc1Jvd0xhc3RDaGFyID0gY3VycmVudExpbmUuZ2V0Q2VsbChjdXJyZW50TGluZS5sZW5ndGggLSAxLCB0aGlzLl90aGlzUm93TGFzdENoYXIpITtcbiAgICAgICAgY29uc3QgdGhpc1Jvd0xhc3RTZWNvbmRDaGFyID0gY3VycmVudExpbmUuZ2V0Q2VsbChjdXJyZW50TGluZS5sZW5ndGggLSAyLCB0aGlzLl90aGlzUm93TGFzdFNlY29uZENoYXIpITtcbiAgICAgICAgY29uc3QgbmV4dFJvd0ZpcnN0Q2hhciA9IG5leHRMaW5lLmdldENlbGwoMCwgdGhpcy5fbmV4dFJvd0ZpcnN0Q2hhcikhO1xuICAgICAgICBjb25zdCBpc05leHRSb3dGaXJzdENoYXJEb3VibGVXaWR0aCA9IG5leHRSb3dGaXJzdENoYXIuZ2V0V2lkdGgoKSA+IDE7XG5cbiAgICAgICAgLy8gdmFsaWRhdGUgd2hldGhlciB0aGlzIGxpbmUgd3JhcCBpcyBldmVyIHBvc3NpYmxlXG4gICAgICAgIC8vIHdoaWNoIG1lYW4gd2hldGhlciBjdXJzb3IgY2FuIHBsYWNlZCBhdCBhIG92ZXJmbG93IHBvc2l0aW9uICh4ID09PSByb3cpIG5hdHVyYWxseVxuICAgICAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyB5b3UgbXVzdCBvdXRwdXQgY2hhcmFjdGVyIHRvIGNhdXNlIG92ZXJmbG93LCBjb250cm9sIHNlcXVlbmNlIGNhbid0IGRvIHRoaXNcbiAgICAgICAgICBuZXh0Um93Rmlyc3RDaGFyLmdldENoYXJzKCkgJiZcbiAgICAgICAgICAgIGlzTmV4dFJvd0ZpcnN0Q2hhckRvdWJsZVdpZHRoID8gdGhpcy5fbnVsbENlbGxDb3VudCA8PSAxIDogdGhpcy5fbnVsbENlbGxDb3VudCA8PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGNoYXJhY3RlciBjYW4ndCBiZSBudWxsLFxuICAgICAgICAgICAgLy8geW91IGNhbid0IHVzZSBjb250cm9sIHNlcXVlbmNlIHRvIG1vdmUgY3Vyc29yIHRvICh4ID09PSByb3cpXG4gICAgICAgICAgICAodGhpc1Jvd0xhc3RDaGFyLmdldENoYXJzKCkgfHwgdGhpc1Jvd0xhc3RDaGFyLmdldFdpZHRoKCkgPT09IDApICYmXG4gICAgICAgICAgICAvLyBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZmlyc3Qgd3JhcHBlZCBjZWxsIGFsc28gYWZmZWN0cyBCQ0VcbiAgICAgICAgICAgIC8vIHNvIHdlIG1hcmsgaXQgYXMgaW52YWxpZCB0byBzaW1wbHkgdGhlIHByb2Nlc3MgdG8gZGV0ZXJtaW5lIGxpbmUgc2VwYXJhdG9yXG4gICAgICAgICAgICBlcXVhbEJnKHRoaXNSb3dMYXN0Q2hhciwgbmV4dFJvd0ZpcnN0Q2hhcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHRoZSBzZWNvbmQgdG8gbGFzdCBjaGFyYWN0ZXIgY2FuJ3QgYmUgbnVsbCBpZiB0aGUgbmV4dCBsaW5lIHN0YXJ0cyB3aXRoIENKSyxcbiAgICAgICAgICAgIC8vIHlvdSBjYW4ndCB1c2UgY29udHJvbCBzZXF1ZW5jZSB0byBtb3ZlIGN1cnNvciB0byAoeCA9PT0gcm93KVxuICAgICAgICAgICAgaXNOZXh0Um93Rmlyc3RDaGFyRG91YmxlV2lkdGggJiZcbiAgICAgICAgICAgICh0aGlzUm93TGFzdFNlY29uZENoYXIuZ2V0Q2hhcnMoKSB8fCB0aGlzUm93TGFzdFNlY29uZENoYXIuZ2V0V2lkdGgoKSA9PT0gMCkgJiZcbiAgICAgICAgICAgIC8vIGNoYW5nZSBiYWNrZ3JvdW5kIG9mIHRoZSBmaXJzdCB3cmFwcGVkIGNlbGwgYWxzbyBhZmZlY3RzIEJDRVxuICAgICAgICAgICAgLy8gc28gd2UgbWFyayBpdCBhcyBpbnZhbGlkIHRvIHNpbXBseSB0aGUgcHJvY2VzcyB0byBkZXRlcm1pbmUgbGluZSBzZXBhcmF0b3JcbiAgICAgICAgICAgIGVxdWFsQmcodGhpc1Jvd0xhc3RDaGFyLCBuZXh0Um93Rmlyc3RDaGFyKSAmJlxuICAgICAgICAgICAgZXF1YWxCZyh0aGlzUm93TGFzdFNlY29uZENoYXIsIG5leHRSb3dGaXJzdENoYXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICAvLyBmb3JjZSB0aGUgd3JhcCB3aXRoIG1hZ2ljXG4gICAgICAgICAgLy8gaW5zZXJ0IGVub3VnaCBjaGFyYWN0ZXIgdG8gZm9yY2UgdGhlIHdyYXBcbiAgICAgICAgICByb3dTZXBhcmF0b3IgPSAnLScucmVwZWF0KHRoaXMuX251bGxDZWxsQ291bnQgKyAxKTtcbiAgICAgICAgICAvLyBtb3ZlIGJhY2sgYW5kIGVyYXNlIG5leHQgbGluZSBoZWFkXG4gICAgICAgICAgcm93U2VwYXJhdG9yICs9ICdcXHUwMDFiWzFEXFx1MDAxYlsxWCc7XG5cbiAgICAgICAgICBpZiAodGhpcy5fbnVsbENlbGxDb3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGRvIHRoZXNlIGJlY2F1c2Ugd2UgZmlsbGVkIHRoZSBsYXN0IHNldmVyYWwgbnVsbCBzbG90LCB3aGljaCB3ZSBzaG91bGRuJ3RcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSAnXFx1MDAxYltBJztcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSBgXFx1MDAxYlske2N1cnJlbnRMaW5lLmxlbmd0aCAtIHRoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gYFxcdTAwMWJbJHt0aGlzLl9udWxsQ2VsbENvdW50fVhgO1xuICAgICAgICAgICAgcm93U2VwYXJhdG9yICs9IGBcXHUwMDFiWyR7Y3VycmVudExpbmUubGVuZ3RoIC0gdGhpcy5fbnVsbENlbGxDb3VudH1EYDtcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSAnXFx1MDAxYltCJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGlzIGlzIGNvbnRlbnQgYW5kIG5lZWQgdGhlIGJlIHNlcmlhbGl6ZWQgZXZlbiBpdCBpcyBpbnZpc2libGUuXG4gICAgICAgICAgLy8gd2l0aG91dCB0aGlzLCB3cmFwIHdpbGwgYmUgbWlzc2luZyBmcm9tIG91dHB1dHMuXG4gICAgICAgICAgdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JSb3cgPSByb3cgKyAxO1xuICAgICAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sID0gMDtcblxuICAgICAgICAgIC8vIGZvcmNlIGNvbW1pdCB0aGUgY3Vyc29yIHBvc2l0aW9uXG4gICAgICAgICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdyArIDE7XG4gICAgICAgICAgdGhpcy5fbGFzdEN1cnNvckNvbCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9hbGxSb3dzW3RoaXMuX3Jvd0luZGV4XSA9IHRoaXMuX2N1cnJlbnRSb3c7XG4gICAgdGhpcy5fYWxsUm93U2VwYXJhdG9yc1t0aGlzLl9yb3dJbmRleCsrXSA9IHJvd1NlcGFyYXRvcjtcbiAgICB0aGlzLl9jdXJyZW50Um93ID0gJyc7XG4gICAgdGhpcy5fbnVsbENlbGxDb3VudCA9IDA7XG4gIH1cblxuICBwcml2YXRlIF9kaWZmU3R5bGUoY2VsbDogSUJ1ZmZlckNlbGwgfCBJQXR0cmlidXRlRGF0YSwgb2xkQ2VsbDogSUJ1ZmZlckNlbGwpOiBudW1iZXJbXSB7XG4gICAgY29uc3Qgc2dyU2VxOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGZnQ2hhbmdlZCA9ICFlcXVhbEZnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGJnQ2hhbmdlZCA9ICFlcXVhbEJnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGZsYWdzQ2hhbmdlZCA9ICFlcXVhbEZsYWdzKGNlbGwsIG9sZENlbGwpO1xuXG4gICAgaWYgKGZnQ2hhbmdlZCB8fCBiZ0NoYW5nZWQgfHwgZmxhZ3NDaGFuZ2VkKSB7XG4gICAgICBpZiAoY2VsbC5pc0F0dHJpYnV0ZURlZmF1bHQoKSkge1xuICAgICAgICBpZiAoIW9sZENlbGwuaXNBdHRyaWJ1dGVEZWZhdWx0KCkpIHtcbiAgICAgICAgICBzZ3JTZXEucHVzaCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZnQ2hhbmdlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY2VsbC5nZXRGZ0NvbG9yKCk7XG4gICAgICAgICAgaWYgKGNlbGwuaXNGZ1JHQigpKSB7IHNnclNlcS5wdXNoKDM4LCAyLCAoY29sb3IgPj4+IDE2KSAmIDB4RkYsIChjb2xvciA+Pj4gOCkgJiAweEZGLCBjb2xvciAmIDB4RkYpOyB9XG4gICAgICAgICAgZWxzZSBpZiAoY2VsbC5pc0ZnUGFsZXR0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoY29sb3IgPj0gMTYpIHsgc2dyU2VxLnB1c2goMzgsIDUsIGNvbG9yKTsgfVxuICAgICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKGNvbG9yICYgOCA/IDkwICsgKGNvbG9yICYgNykgOiAzMCArIChjb2xvciAmIDcpKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHsgc2dyU2VxLnB1c2goMzkpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJnQ2hhbmdlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY2VsbC5nZXRCZ0NvbG9yKCk7XG4gICAgICAgICAgaWYgKGNlbGwuaXNCZ1JHQigpKSB7IHNnclNlcS5wdXNoKDQ4LCAyLCAoY29sb3IgPj4+IDE2KSAmIDB4RkYsIChjb2xvciA+Pj4gOCkgJiAweEZGLCBjb2xvciAmIDB4RkYpOyB9XG4gICAgICAgICAgZWxzZSBpZiAoY2VsbC5pc0JnUGFsZXR0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoY29sb3IgPj0gMTYpIHsgc2dyU2VxLnB1c2goNDgsIDUsIGNvbG9yKTsgfVxuICAgICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKGNvbG9yICYgOCA/IDEwMCArIChjb2xvciAmIDcpIDogNDAgKyAoY29sb3IgJiA3KSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKDQ5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmbGFnc0NoYW5nZWQpIHtcbiAgICAgICAgICBpZiAoY2VsbC5pc0ludmVyc2UoKSAhPT0gb2xkQ2VsbC5pc0ludmVyc2UoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzSW52ZXJzZSgpID8gNyA6IDI3KTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzQm9sZCgpICE9PSBvbGRDZWxsLmlzQm9sZCgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNCb2xkKCkgPyAxIDogMjIpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNVbmRlcmxpbmUoKSAhPT0gb2xkQ2VsbC5pc1VuZGVybGluZSgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNVbmRlcmxpbmUoKSA/IDQgOiAyNCk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc092ZXJsaW5lKCkgIT09IG9sZENlbGwuaXNPdmVybGluZSgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNPdmVybGluZSgpID8gNTMgOiA1NSk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0JsaW5rKCkgIT09IG9sZENlbGwuaXNCbGluaygpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNCbGluaygpID8gNSA6IDI1KTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzSW52aXNpYmxlKCkgIT09IG9sZENlbGwuaXNJbnZpc2libGUoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzSW52aXNpYmxlKCkgPyA4IDogMjgpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNJdGFsaWMoKSAhPT0gb2xkQ2VsbC5pc0l0YWxpYygpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNJdGFsaWMoKSA/IDMgOiAyMyk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0RpbSgpICE9PSBvbGRDZWxsLmlzRGltKCkpIHsgc2dyU2VxLnB1c2goY2VsbC5pc0RpbSgpID8gMiA6IDIyKTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzU3RyaWtldGhyb3VnaCgpICE9PSBvbGRDZWxsLmlzU3RyaWtldGhyb3VnaCgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNTdHJpa2V0aHJvdWdoKCkgPyA5IDogMjkpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2dyU2VxO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9uZXh0Q2VsbChjZWxsOiBJQnVmZmVyQ2VsbCwgb2xkQ2VsbDogSUJ1ZmZlckNlbGwsIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGEgd2lkdGggMCBjZWxsIGRvbid0IG5lZWQgdG8gYmUgY291bnQgYmVjYXVzZSBpdCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgYWZ0ZXIgYSBDSksgY2hhcmFjdGVyO1xuICAgIGNvbnN0IGlzUGxhY2VIb2xkZXJDZWxsID0gY2VsbC5nZXRXaWR0aCgpID09PSAwO1xuXG4gICAgaWYgKGlzUGxhY2VIb2xkZXJDZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjZWxsIGRvbid0IGhhdmUgY29udGVudFxuICAgIGNvbnN0IGlzRW1wdHlDZWxsID0gY2VsbC5nZXRDaGFycygpID09PSAnJztcblxuICAgIGNvbnN0IHNnclNlcSA9IHRoaXMuX2RpZmZTdHlsZShjZWxsLCB0aGlzLl9jdXJzb3JTdHlsZSk7XG5cbiAgICAvLyB0aGUgZW1wdHkgY2VsbCBzdHlsZSBpcyBvbmx5IGFzc3VtZWQgdG8gYmUgY2hhbmdlZCB3aGVuIGJhY2tncm91bmQgY2hhbmdlZCwgYmVjYXVzZVxuICAgIC8vIGZvcmVncm91bmQgaXMgYWx3YXlzIDAuXG4gICAgY29uc3Qgc3R5bGVDaGFuZ2VkID0gaXNFbXB0eUNlbGwgPyAhZXF1YWxCZyh0aGlzLl9jdXJzb3JTdHlsZSwgY2VsbCkgOiBzZ3JTZXEubGVuZ3RoID4gMDtcblxuICAgIC8qKlxuICAgICAqICBoYW5kbGVzIHN0eWxlIGNoYW5nZVxuICAgICAqL1xuICAgIGlmIChzdHlsZUNoYW5nZWQpIHtcbiAgICAgIC8vIGJlZm9yZSB1cGRhdGUgdGhlIHN0eWxlLCB3ZSBuZWVkIHRvIGZpbGwgZW1wdHkgY2VsbCBiYWNrXG4gICAgICBpZiAodGhpcy5fbnVsbENlbGxDb3VudCA+IDApIHtcbiAgICAgICAgLy8gdXNlIGNsZWFyIHJpZ2h0IHRvIHNldCBiYWNrZ3JvdW5kLlxuICAgICAgICBpZiAoIWVxdWFsQmcodGhpcy5fY3Vyc29yU3R5bGUsIHRoaXMuX2JhY2tncm91bmRDZWxsKSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gYFxcdTAwMWJbJHt0aGlzLl9udWxsQ2VsbENvdW50fVhgO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVzZSBtb3ZlIHJpZ2h0IHRvIG1vdmUgY3Vyc29yLlxuICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1DYDtcbiAgICAgICAgdGhpcy5fbnVsbENlbGxDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdztcbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sID0gdGhpcy5fbGFzdEN1cnNvckNvbCA9IGNvbDtcblxuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3NnclNlcS5qb2luKCc7Jyl9bWA7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgbGFzdCBjdXJzb3Igc3R5bGVcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLl9idWZmZXIuZ2V0TGluZShyb3cpO1xuICAgICAgaWYgKGxpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsaW5lLmdldENlbGwoY29sLCB0aGlzLl9jdXJzb3JTdHlsZSk7XG4gICAgICAgIHRoaXMuX2N1cnNvclN0eWxlUm93ID0gcm93O1xuICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUNvbCA9IGNvbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgaGFuZGxlcyBhY3R1YWwgY29udGVudFxuICAgICAqL1xuICAgIGlmIChpc0VtcHR5Q2VsbCkge1xuICAgICAgdGhpcy5fbnVsbENlbGxDb3VudCArPSBjZWxsLmdldFdpZHRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9udWxsQ2VsbENvdW50ID4gMCkge1xuICAgICAgICAvLyB3ZSBjYW4ganVzdCBhc3N1bWUgd2UgaGF2ZSBzYW1lIHN0eWxlIHdpdGggcHJldmlvdXMgb25lIGhlcmVcbiAgICAgICAgLy8gYmVjYXVzZSBzdHlsZSBjaGFuZ2UgaXMgaGFuZGxlZCBieSBwcmV2aW91cyBzdGFnZVxuICAgICAgICAvLyB1c2UgbW92ZSByaWdodCB3aGVuIGJhY2tncm91bmQgaXMgZW1wdHksIHVzZSBjbGVhciByaWdodCB3aGVuIHRoZXJlIGlzIGJhY2tncm91bmQuXG4gICAgICAgIGlmIChlcXVhbEJnKHRoaXMuX2N1cnNvclN0eWxlLCB0aGlzLl9iYWNrZ3JvdW5kQ2VsbCkpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1DYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1DYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9udWxsQ2VsbENvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBjZWxsLmdldENoYXJzKCk7XG5cbiAgICAgIC8vIHVwZGF0ZSBjdXJzb3JcbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdztcbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sID0gdGhpcy5fbGFzdEN1cnNvckNvbCA9IGNvbCArIGNlbGwuZ2V0V2lkdGgoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlcmlhbGl6ZVN0cmluZyhleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbjogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgbGV0IHJvd0VuZCA9IHRoaXMuX2FsbFJvd3MubGVuZ3RoO1xuXG4gICAgLy8gdGhlIGZpeHVwIGlzIG9ubHkgcmVxdWlyZWQgZm9yIGRhdGEgd2l0aG91dCBzY3JvbGxiYWNrXG4gICAgLy8gYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSBwbGFjZWQgYXQgbGFzdCBsaW5lIG90aGVyd2lzZVxuICAgIGlmICh0aGlzLl9idWZmZXIubGVuZ3RoIC0gdGhpcy5fZmlyc3RSb3cgPD0gdGhpcy5fdGVybWluYWwucm93cykge1xuICAgICAgcm93RW5kID0gdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JSb3cgKyAxIC0gdGhpcy5fZmlyc3RSb3c7XG4gICAgICB0aGlzLl9sYXN0Q3Vyc29yQ29sID0gdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JDb2w7XG4gICAgICB0aGlzLl9sYXN0Q3Vyc29yUm93ID0gdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JSb3c7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSAnJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93RW5kOyBpKyspIHtcbiAgICAgIGNvbnRlbnQgKz0gdGhpcy5fYWxsUm93c1tpXTtcbiAgICAgIGlmIChpICsgMSA8IHJvd0VuZCkge1xuICAgICAgICBjb250ZW50ICs9IHRoaXMuX2FsbFJvd1NlcGFyYXRvcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgY3Vyc29yXG4gICAgaWYgKCFleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbikge1xuICAgICAgY29uc3QgcmVhbEN1cnNvclJvdyA9IHRoaXMuX2J1ZmZlci5iYXNlWSArIHRoaXMuX2J1ZmZlci5jdXJzb3JZO1xuICAgICAgY29uc3QgcmVhbEN1cnNvckNvbCA9IHRoaXMuX2J1ZmZlci5jdXJzb3JYO1xuXG4gICAgICBjb25zdCBjdXJzb3JNb3ZlZCA9IChyZWFsQ3Vyc29yUm93ICE9PSB0aGlzLl9sYXN0Q3Vyc29yUm93IHx8IHJlYWxDdXJzb3JDb2wgIT09IHRoaXMuX2xhc3RDdXJzb3JDb2wpO1xuXG4gICAgICBjb25zdCBtb3ZlUmlnaHQgPSAob2Zmc2V0OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcbiAgICAgICAgICBjb250ZW50ICs9IGBcXHUwMDFiWyR7b2Zmc2V0fUNgO1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICBjb250ZW50ICs9IGBcXHUwMDFiWyR7LW9mZnNldH1EYDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1vdmVEb3duID0gKG9mZnNldDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlske29mZnNldH1CYDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlskey1vZmZzZXR9QWA7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChjdXJzb3JNb3ZlZCkge1xuICAgICAgICBtb3ZlRG93bihyZWFsQ3Vyc29yUm93IC0gdGhpcy5fbGFzdEN1cnNvclJvdyk7XG4gICAgICAgIG1vdmVSaWdodChyZWFsQ3Vyc29yQ29sIC0gdGhpcy5fbGFzdEN1cnNvckNvbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSB0aGUgY3Vyc29yJ3MgY3VycmVudCBzdHlsZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS94dGVybWpzL3h0ZXJtLmpzL2lzc3Vlcy8zNjc3XG4gICAgLy8gSEFDSzogSW50ZXJuYWwgQVBJIGFjY2VzcyBzaW5jZSBpdCdzIGF3a3dhcmQgdG8gZXhwb3NlIHRoaXMgaW4gdGhlIEFQSSBhbmQgc2VyaWFsaXplIHdpbGxcbiAgICAvLyBsaWtlbHkgYmUgdGhlIG9ubHkgY29uc3VtZXJcbiAgICBjb25zdCBjdXJBdHRyRGF0YTogSUF0dHJpYnV0ZURhdGEgPSAodGhpcy5fdGVybWluYWwgYXMgYW55KS5fY29yZS5faW5wdXRIYW5kbGVyLl9jdXJBdHRyRGF0YTtcbiAgICBjb25zdCBzZ3JTZXEgPSB0aGlzLl9kaWZmU3R5bGUoY3VyQXR0ckRhdGEsIHRoaXMuX2N1cnNvclN0eWxlKTtcbiAgICBpZiAoc2dyU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRlbnQgKz0gYFxcdTAwMWJbJHtzZ3JTZXEuam9pbignOycpfW1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemVBZGRvbiBpbXBsZW1lbnRzIElUZXJtaW5hbEFkZG9uICwgSVNlcmlhbGl6ZUFwaSB7XG4gIHByaXZhdGUgX3Rlcm1pbmFsOiBUZXJtaW5hbCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgYWN0aXZhdGUodGVybWluYWw6IFRlcm1pbmFsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVybWluYWwgPSB0ZXJtaW5hbDtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZUJ1ZmZlckJ5U2Nyb2xsYmFjayh0ZXJtaW5hbDogVGVybWluYWwsIGJ1ZmZlcjogSUJ1ZmZlciwgc2Nyb2xsYmFjaz86IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbWF4Um93cyA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgY29ycmVjdFJvd3MgPSAoc2Nyb2xsYmFjayA9PT0gdW5kZWZpbmVkKSA/IG1heFJvd3MgOiBjb25zdHJhaW4oc2Nyb2xsYmFjayArIHRlcm1pbmFsLnJvd3MsIDAsIG1heFJvd3MpO1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVCdWZmZXJCeVJhbmdlKHRlcm1pbmFsLCBidWZmZXIsIHtcbiAgICAgIHN0YXJ0OiBtYXhSb3dzIC0gY29ycmVjdFJvd3MsXG4gICAgICBlbmQ6IG1heFJvd3MgLSAxXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VyaWFsaXplQnVmZmVyQnlSYW5nZSh0ZXJtaW5hbDogVGVybWluYWwsIGJ1ZmZlcjogSUJ1ZmZlciwgcmFuZ2U6IElTZXJpYWxpemVSYW5nZSwgZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb246IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgU3RyaW5nU2VyaWFsaXplSGFuZGxlcihidWZmZXIsIHRlcm1pbmFsKTtcbiAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUoe1xuICAgICAgc3RhcnQ6IHsgeDogMCwgICAgICAgICAgICAgeTogdHlwZW9mIHJhbmdlLnN0YXJ0ID09PSAnbnVtYmVyJyA/IHJhbmdlLnN0YXJ0IDogcmFuZ2Uuc3RhcnQubGluZSB9LFxuICAgICAgZW5kOiAgIHsgeDogdGVybWluYWwuY29scywgeTogdHlwZW9mIHJhbmdlLmVuZCAgID09PSAnbnVtYmVyJyA/IHJhbmdlLmVuZCAgIDogcmFuZ2UuZW5kLmxpbmUgICB9XG4gICAgfSwgZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VyaWFsaXplQnVmZmVyQXNIVE1MKHRlcm1pbmFsOiBUZXJtaW5hbCwgb3B0aW9uczogUGFydGlhbDxJSFRNTFNlcmlhbGl6ZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICBjb25zdCBidWZmZXIgPSB0ZXJtaW5hbC5idWZmZXIuYWN0aXZlO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSFRNTFNlcmlhbGl6ZUhhbmRsZXIoYnVmZmVyLCB0ZXJtaW5hbCwgb3B0aW9ucyk7XG4gICAgY29uc3Qgb25seVNlbGVjdGlvbiA9IG9wdGlvbnMub25seVNlbGVjdGlvbiA/PyBmYWxzZTtcbiAgICBpZiAoIW9ubHlTZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IG1heFJvd3MgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgY29uc3Qgc2Nyb2xsYmFjayA9IG9wdGlvbnMuc2Nyb2xsYmFjaztcbiAgICAgIGNvbnN0IGNvcnJlY3RSb3dzID0gKHNjcm9sbGJhY2sgPT09IHVuZGVmaW5lZCkgPyBtYXhSb3dzIDogY29uc3RyYWluKHNjcm9sbGJhY2sgKyB0ZXJtaW5hbC5yb3dzLCAwLCBtYXhSb3dzKTtcbiAgICAgIHJldHVybiBoYW5kbGVyLnNlcmlhbGl6ZSh7XG4gICAgICAgIHN0YXJ0OiB7IHg6IDAsICAgICAgICAgICAgIHk6IG1heFJvd3MgLSBjb3JyZWN0Um93cyB9LFxuICAgICAgICBlbmQ6ICAgeyB4OiB0ZXJtaW5hbC5jb2xzLCB5OiBtYXhSb3dzIC0gMSAgICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fdGVybWluYWw/LmdldFNlbGVjdGlvblBvc2l0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUoe1xuICAgICAgICBzdGFydDogeyB4OiBzZWxlY3Rpb24uc3RhcnQueCwgeTogc2VsZWN0aW9uLnN0YXJ0LnkgfSxcbiAgICAgICAgZW5kOiAgIHsgeDogc2VsZWN0aW9uLmVuZC54LCAgIHk6IHNlbGVjdGlvbi5lbmQueSAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZU1vZGVzKHRlcm1pbmFsOiBUZXJtaW5hbCk6IHN0cmluZyB7XG4gICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICBjb25zdCBtb2RlcyA9IHRlcm1pbmFsLm1vZGVzO1xuXG4gICAgLy8gRGVmYXVsdDogZmFsc2VcbiAgICBpZiAobW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzFoJztcbiAgICBpZiAobW9kZXMuYXBwbGljYXRpb25LZXlwYWRNb2RlKSBjb250ZW50ICs9ICdcXHgxYls/NjZoJztcbiAgICBpZiAobW9kZXMuYnJhY2tldGVkUGFzdGVNb2RlKSBjb250ZW50ICs9ICdcXHgxYls/MjAwNGgnO1xuICAgIGlmIChtb2Rlcy5pbnNlcnRNb2RlKSBjb250ZW50ICs9ICdcXHgxYls0aCc7XG4gICAgaWYgKG1vZGVzLm9yaWdpbk1vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz82aCc7XG4gICAgaWYgKG1vZGVzLnJldmVyc2VXcmFwYXJvdW5kTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzQ1aCc7XG4gICAgaWYgKG1vZGVzLnNlbmRGb2N1c01vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz8xMDA0aCc7XG5cbiAgICAvLyBEZWZhdWx0OiB0cnVlXG4gICAgaWYgKG1vZGVzLndyYXBhcm91bmRNb2RlID09PSBmYWxzZSkgY29udGVudCArPSAnXFx4MWJbPzdsJztcblxuICAgIC8vIERlZmF1bHQ6ICdub25lJ1xuICAgIGlmIChtb2Rlcy5tb3VzZVRyYWNraW5nTW9kZSAhPT0gJ25vbmUnKSB7XG4gICAgICBzd2l0Y2ggKG1vZGVzLm1vdXNlVHJhY2tpbmdNb2RlKSB7XG4gICAgICAgIGNhc2UgJ3gxMCc6IGNvbnRlbnQgKz0gJ1xceDFiWz85aCc7IGJyZWFrO1xuICAgICAgICBjYXNlICd2dDIwMCc6IGNvbnRlbnQgKz0gJ1xceDFiWz8xMDAwaCc7IGJyZWFrO1xuICAgICAgICBjYXNlICdkcmFnJzogY29udGVudCArPSAnXFx4MWJbPzEwMDJoJzsgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FueSc6IGNvbnRlbnQgKz0gJ1xceDFiWz8xMDAzaCc7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZShvcHRpb25zPzogSVNlcmlhbGl6ZU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIC8vIFRPRE86IEFkZCBjb21iaW5lZERhdGEgc3VwcG9ydFxuICAgIGlmICghdGhpcy5fdGVybWluYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBhZGRvbiB1bnRpbCBpdCBoYXMgYmVlbiBsb2FkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWwgYnVmZmVyXG4gICAgbGV0IGNvbnRlbnQgPSBvcHRpb25zPy5yYW5nZVxuICAgICAgPyB0aGlzLl9zZXJpYWxpemVCdWZmZXJCeVJhbmdlKHRoaXMuX3Rlcm1pbmFsLCB0aGlzLl90ZXJtaW5hbC5idWZmZXIubm9ybWFsLCBvcHRpb25zLnJhbmdlLCB0cnVlKVxuICAgICAgOiB0aGlzLl9zZXJpYWxpemVCdWZmZXJCeVNjcm9sbGJhY2sodGhpcy5fdGVybWluYWwsIHRoaXMuX3Rlcm1pbmFsLmJ1ZmZlci5ub3JtYWwsIG9wdGlvbnM/LnNjcm9sbGJhY2spO1xuXG4gICAgLy8gQWx0ZXJuYXRlIGJ1ZmZlclxuICAgIGlmICghb3B0aW9ucz8uZXhjbHVkZUFsdEJ1ZmZlcikge1xuICAgICAgaWYgKHRoaXMuX3Rlcm1pbmFsLmJ1ZmZlci5hY3RpdmUudHlwZSA9PT0gJ2FsdGVybmF0ZScpIHtcbiAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVTY3JlZW5Db250ZW50ID0gdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlTY3JvbGxiYWNrKHRoaXMuX3Rlcm1pbmFsLCB0aGlzLl90ZXJtaW5hbC5idWZmZXIuYWx0ZXJuYXRlLCB1bmRlZmluZWQpO1xuICAgICAgICBjb250ZW50ICs9IGBcXHUwMDFiWz8xMDQ5aFxcdTAwMWJbSCR7YWx0ZXJuYXRpdmVTY3JlZW5Db250ZW50fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTW9kZXNcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVNb2Rlcykge1xuICAgICAgY29udGVudCArPSB0aGlzLl9zZXJpYWxpemVNb2Rlcyh0aGlzLl90ZXJtaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplQXNIVE1MKG9wdGlvbnM/OiBQYXJ0aWFsPElIVE1MU2VyaWFsaXplT3B0aW9ucz4pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fdGVybWluYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBhZGRvbiB1bnRpbCBpdCBoYXMgYmVlbiBsb2FkZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplQnVmZmVyQXNIVE1MKHRoaXMuX3Rlcm1pbmFsLCBvcHRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQgeyB9XG59XG5cbmV4cG9ydCBjbGFzcyBIVE1MU2VyaWFsaXplSGFuZGxlciBleHRlbmRzIEJhc2VTZXJpYWxpemVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBfY3VycmVudFJvdzogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBfaHRtbENvbnRlbnQgPSAnJztcblxuICBwcml2YXRlIF9hbnNpQ29sb3JzOiBSZWFkb25seTxJQ29sb3JbXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVmZmVyOiBJQnVmZmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlcm1pbmFsOiBUZXJtaW5hbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBQYXJ0aWFsPElIVE1MU2VyaWFsaXplT3B0aW9ucz5cbiAgKSB7XG4gICAgc3VwZXIoYnVmZmVyKTtcblxuICAgIC8vIEZvciB4dGVybSBoZWFkbGVzczogZmFsbGJhY2sgdG8gYW5zaSBjb2xvcnNcbiAgICBpZiAoKF90ZXJtaW5hbCBhcyBhbnkpLl9jb3JlLl90aGVtZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMuX2Fuc2lDb2xvcnMgPSAoX3Rlcm1pbmFsIGFzIGFueSkuX2NvcmUuX3RoZW1lU2VydmljZS5jb2xvcnMuYW5zaTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9hbnNpQ29sb3JzID0gREVGQVVMVF9BTlNJX0NPTE9SUztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYWRTdGFydCh0YXJnZXQ6IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBwYWRTdHJpbmcgPz8gJyAnO1xuICAgIGlmICh0YXJnZXQubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCAtPSB0YXJnZXQubGVuZ3RoO1xuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgdGFyZ2V0O1xuICB9XG5cbiAgcHJvdGVjdGVkIF9iZWZvcmVTZXJpYWxpemUocm93czogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2h0bWxDb250ZW50ICs9ICc8aHRtbD48Ym9keT48IS0tU3RhcnRGcmFnbWVudC0tPjxwcmU+JztcblxuICAgIGxldCBmb3JlZ3JvdW5kID0gJyMwMDAwMDAnO1xuICAgIGxldCBiYWNrZ3JvdW5kID0gJyNmZmZmZmYnO1xuICAgIGlmICh0aGlzLl9vcHRpb25zLmluY2x1ZGVHbG9iYWxCYWNrZ3JvdW5kID8/IGZhbHNlKSB7XG4gICAgICBmb3JlZ3JvdW5kID0gdGhpcy5fdGVybWluYWwub3B0aW9ucy50aGVtZT8uZm9yZWdyb3VuZCA/PyAnI2ZmZmZmZic7XG4gICAgICBiYWNrZ3JvdW5kID0gdGhpcy5fdGVybWluYWwub3B0aW9ucy50aGVtZT8uYmFja2dyb3VuZCA/PyAnIzAwMDAwMCc7XG4gICAgfVxuXG4gICAgY29uc3QgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucyA9IFtdO1xuICAgIGdsb2JhbFN0eWxlRGVmaW5pdGlvbnMucHVzaCgnY29sb3I6ICcgKyBmb3JlZ3JvdW5kICsgJzsnKTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2JhY2tncm91bmQtY29sb3I6ICcgKyBiYWNrZ3JvdW5kICsgJzsnKTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2ZvbnQtZmFtaWx5OiAnICsgdGhpcy5fdGVybWluYWwub3B0aW9ucy5mb250RmFtaWx5ICsgJzsnKTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2ZvbnQtc2l6ZTogJyArIHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMuZm9udFNpemUgKyAncHg7Jyk7XG4gICAgdGhpcy5faHRtbENvbnRlbnQgKz0gJzxkaXYgc3R5bGU9XFwnJyArIGdsb2JhbFN0eWxlRGVmaW5pdGlvbnMuam9pbignICcpICsgJ1xcJz4nO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9hZnRlclNlcmlhbGl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPC9kaXY+JztcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPC9wcmU+PCEtLUVuZEZyYWdtZW50LS0+PC9ib2R5PjwvaHRtbD4nO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yb3dFbmQocm93OiBudW1iZXIsIGlzTGFzdFJvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2h0bWxDb250ZW50ICs9ICc8ZGl2PjxzcGFuPicgKyB0aGlzLl9jdXJyZW50Um93ICsgJzwvc3Bhbj48L2Rpdj4nO1xuICAgIHRoaXMuX2N1cnJlbnRSb3cgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgX2dldEhleENvbG9yKGNlbGw6IElCdWZmZXJDZWxsLCBpc0ZnOiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb2xvciA9IGlzRmcgPyBjZWxsLmdldEZnQ29sb3IoKSA6IGNlbGwuZ2V0QmdDb2xvcigpO1xuICAgIGlmIChpc0ZnID8gY2VsbC5pc0ZnUkdCKCkgOiBjZWxsLmlzQmdSR0IoKSkge1xuICAgICAgY29uc3QgcmdiID0gW1xuICAgICAgICAoY29sb3IgPj4gMTYpICYgMjU1LFxuICAgICAgICAoY29sb3IgPj4gIDgpICYgMjU1LFxuICAgICAgICAoY29sb3IgICAgICApICYgMjU1XG4gICAgICBdO1xuICAgICAgcmV0dXJuICcjJyArIHJnYi5tYXAoeCA9PiB0aGlzLl9wYWRTdGFydCh4LnRvU3RyaW5nKDE2KSwgMiwgJzAnKSkuam9pbignJyk7XG4gICAgfVxuICAgIGlmIChpc0ZnID8gY2VsbC5pc0ZnUGFsZXR0ZSgpIDogY2VsbC5pc0JnUGFsZXR0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYW5zaUNvbG9yc1tjb2xvcl0uY3NzO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlmZlN0eWxlKGNlbGw6IElCdWZmZXJDZWxsLCBvbGRDZWxsOiBJQnVmZmVyQ2VsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb250ZW50OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc3QgZmdDaGFuZ2VkID0gIWVxdWFsRmcoY2VsbCwgb2xkQ2VsbCk7XG4gICAgY29uc3QgYmdDaGFuZ2VkID0gIWVxdWFsQmcoY2VsbCwgb2xkQ2VsbCk7XG4gICAgY29uc3QgZmxhZ3NDaGFuZ2VkID0gIWVxdWFsRmxhZ3MoY2VsbCwgb2xkQ2VsbCk7XG5cbiAgICBpZiAoZmdDaGFuZ2VkIHx8IGJnQ2hhbmdlZCB8fCBmbGFnc0NoYW5nZWQpIHtcbiAgICAgIGNvbnN0IGZnSGV4Q29sb3IgPSB0aGlzLl9nZXRIZXhDb2xvcihjZWxsLCB0cnVlKTtcbiAgICAgIGlmIChmZ0hleENvbG9yKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCgnY29sb3I6ICcgKyBmZ0hleENvbG9yICsgJzsnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmdIZXhDb2xvciA9IHRoaXMuX2dldEhleENvbG9yKGNlbGwsIGZhbHNlKTtcbiAgICAgIGlmIChiZ0hleENvbG9yKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCgnYmFja2dyb3VuZC1jb2xvcjogJyArIGJnSGV4Q29sb3IgKyAnOycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbC5pc0ludmVyc2UoKSkgeyBjb250ZW50LnB1c2goJ2NvbG9yOiAjMDAwMDAwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQkZCRkJGOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0JvbGQoKSkgeyBjb250ZW50LnB1c2goJ2ZvbnQtd2VpZ2h0OiBib2xkOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc1VuZGVybGluZSgpICYmIGNlbGwuaXNPdmVybGluZSgpKSB7IGNvbnRlbnQucHVzaCgndGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSB1bmRlcmxpbmU7Jyk7IH1cbiAgICAgIGVsc2UgaWYgKGNlbGwuaXNVbmRlcmxpbmUoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOycpOyB9XG4gICAgICBlbHNlIGlmIChjZWxsLmlzT3ZlcmxpbmUoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzQmxpbmsoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogYmxpbms7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzSW52aXNpYmxlKCkpIHsgY29udGVudC5wdXNoKCd2aXNpYmlsaXR5OiBoaWRkZW47Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzSXRhbGljKCkpIHsgY29udGVudC5wdXNoKCdmb250LXN0eWxlOiBpdGFsaWM7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzRGltKCkpIHsgY29udGVudC5wdXNoKCdvcGFjaXR5OiAwLjU7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzU3RyaWtldGhyb3VnaCgpKSB7IGNvbnRlbnQucHVzaCgndGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Jyk7IH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dENlbGwoY2VsbDogSUJ1ZmZlckNlbGwsIG9sZENlbGw6IElCdWZmZXJDZWxsLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhIHdpZHRoIDAgY2VsbCBkb24ndCBuZWVkIHRvIGJlIGNvdW50IGJlY2F1c2UgaXQgaXMganVzdCBhIHBsYWNlaG9sZGVyIGFmdGVyIGEgQ0pLIGNoYXJhY3RlcjtcbiAgICBjb25zdCBpc1BsYWNlSG9sZGVyQ2VsbCA9IGNlbGwuZ2V0V2lkdGgoKSA9PT0gMDtcbiAgICBpZiAoaXNQbGFjZUhvbGRlckNlbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNlbGwgZG9uJ3QgaGF2ZSBjb250ZW50XG4gICAgY29uc3QgaXNFbXB0eUNlbGwgPSBjZWxsLmdldENoYXJzKCkgPT09ICcnO1xuXG4gICAgY29uc3Qgc3R5bGVEZWZpbml0aW9ucyA9IHRoaXMuX2RpZmZTdHlsZShjZWxsLCBvbGRDZWxsKTtcblxuICAgIC8vIGhhbmRsZXMgc3R5bGUgY2hhbmdlXG4gICAgaWYgKHN0eWxlRGVmaW5pdGlvbnMpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gc3R5bGVEZWZpbml0aW9ucy5sZW5ndGggPT09IDAgP1xuICAgICAgICAnPC9zcGFuPjxzcGFuPicgOlxuICAgICAgICAnPC9zcGFuPjxzcGFuIHN0eWxlPVxcJycgKyBzdHlsZURlZmluaXRpb25zLmpvaW4oJyAnKSArICdcXCc+JztcbiAgICB9XG5cbiAgICAvLyBoYW5kbGVzIGFjdHVhbCBjb250ZW50XG4gICAgaWYgKGlzRW1wdHlDZWxsKSB7XG4gICAgICB0aGlzLl9jdXJyZW50Um93ICs9ICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBjZWxsLmdldENoYXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXJpYWxpemVTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faHRtbENvbnRlbnQ7XG4gIH1cbn1cbiIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlNlcmlhbGl6ZUFkZG9uXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlNlcmlhbGl6ZUFkZG9uXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSUNvbG9yQ29udHJhc3RDYWNoZSB9IGZyb20gJ2Jyb3dzZXIvVHlwZXMnO1xuaW1wb3J0IHsgSUNvbG9yIH0gZnJvbSAnY29tbW9uL1R5cGVzJztcbmltcG9ydCB7IFR3b0tleU1hcCB9IGZyb20gJ2NvbW1vbi9NdWx0aUtleU1hcCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xvckNvbnRyYXN0Q2FjaGUgaW1wbGVtZW50cyBJQ29sb3JDb250cmFzdENhY2hlIHtcbiAgcHJpdmF0ZSBfY29sb3I6IFR3b0tleU1hcDwvKiBiZyAqL251bWJlciwgLyogZmcgKi9udW1iZXIsIElDb2xvciB8IG51bGw+ID0gbmV3IFR3b0tleU1hcCgpO1xuICBwcml2YXRlIF9jc3M6IFR3b0tleU1hcDwvKiBiZyAqL251bWJlciwgLyogZmcgKi9udW1iZXIsIHN0cmluZyB8IG51bGw+ID0gbmV3IFR3b0tleU1hcCgpO1xuXG4gIHB1YmxpYyBzZXRDc3MoYmc6IG51bWJlciwgZmc6IG51bWJlciwgdmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9jc3Muc2V0KGJnLCBmZywgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldENzcyhiZzogbnVtYmVyLCBmZzogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Nzcy5nZXQoYmcsIGZnKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb2xvcihiZzogbnVtYmVyLCBmZzogbnVtYmVyLCB2YWx1ZTogSUNvbG9yIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbG9yLnNldChiZywgZmcsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2xvcihiZzogbnVtYmVyLCBmZzogbnVtYmVyKTogSUNvbG9yIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yLmdldChiZywgZmcpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbG9yLmNsZWFyKCk7XG4gICAgdGhpcy5fY3NzLmNsZWFyKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgQ29sb3JDb250cmFzdENhY2hlIH0gZnJvbSAnYnJvd3Nlci9Db2xvckNvbnRyYXN0Q2FjaGUnO1xuaW1wb3J0IHsgSVRoZW1lU2VydmljZSB9IGZyb20gJ2Jyb3dzZXIvc2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgSUNvbG9yQ29udHJhc3RDYWNoZSwgSUNvbG9yU2V0LCBSZWFkb25seUNvbG9yU2V0IH0gZnJvbSAnYnJvd3Nlci9UeXBlcyc7XG5pbXBvcnQgeyBjaGFubmVscywgY29sb3IsIGNzcywgTlVMTF9DT0xPUiB9IGZyb20gJ2NvbW1vbi9Db2xvcic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdjb21tb24vRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7IERpc3Bvc2FibGUgfSBmcm9tICdjb21tb24vTGlmZWN5Y2xlJztcbmltcG9ydCB7IElPcHRpb25zU2VydmljZSwgSVRoZW1lIH0gZnJvbSAnY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IEFsbENvbG9ySW5kZXgsIElDb2xvciwgU3BlY2lhbENvbG9ySW5kZXggfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG5pbnRlcmZhY2UgSVJlc3RvcmVDb2xvclNldCB7XG4gIGZvcmVncm91bmQ6IElDb2xvcjtcbiAgYmFja2dyb3VuZDogSUNvbG9yO1xuICBjdXJzb3I6IElDb2xvcjtcbiAgYW5zaTogSUNvbG9yW107XG59XG5cblxuY29uc3QgREVGQVVMVF9GT1JFR1JPVU5EID0gY3NzLnRvQ29sb3IoJyNmZmZmZmYnKTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORCA9IGNzcy50b0NvbG9yKCcjMDAwMDAwJyk7XG5jb25zdCBERUZBVUxUX0NVUlNPUiA9IGNzcy50b0NvbG9yKCcjZmZmZmZmJyk7XG5jb25zdCBERUZBVUxUX0NVUlNPUl9BQ0NFTlQgPSBjc3MudG9Db2xvcignIzAwMDAwMCcpO1xuY29uc3QgREVGQVVMVF9TRUxFQ1RJT04gPSB7XG4gIGNzczogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKScsXG4gIHJnYmE6IDB4RkZGRkZGNERcbn07XG5cbi8vIEFuIElJRkUgdG8gZ2VuZXJhdGUgREVGQVVMVF9BTlNJX0NPTE9SUy5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOU0lfQ09MT1JTID0gT2JqZWN0LmZyZWV6ZSgoKCkgPT4ge1xuICBjb25zdCBjb2xvcnMgPSBbXG4gICAgLy8gZGFyazpcbiAgICBjc3MudG9Db2xvcignIzJlMzQzNicpLFxuICAgIGNzcy50b0NvbG9yKCcjY2MwMDAwJyksXG4gICAgY3NzLnRvQ29sb3IoJyM0ZTlhMDYnKSxcbiAgICBjc3MudG9Db2xvcignI2M0YTAwMCcpLFxuICAgIGNzcy50b0NvbG9yKCcjMzQ2NWE0JyksXG4gICAgY3NzLnRvQ29sb3IoJyM3NTUwN2InKSxcbiAgICBjc3MudG9Db2xvcignIzA2OTg5YScpLFxuICAgIGNzcy50b0NvbG9yKCcjZDNkN2NmJyksXG4gICAgLy8gYnJpZ2h0OlxuICAgIGNzcy50b0NvbG9yKCcjNTU1NzUzJyksXG4gICAgY3NzLnRvQ29sb3IoJyNlZjI5MjknKSxcbiAgICBjc3MudG9Db2xvcignIzhhZTIzNCcpLFxuICAgIGNzcy50b0NvbG9yKCcjZmNlOTRmJyksXG4gICAgY3NzLnRvQ29sb3IoJyM3MjlmY2YnKSxcbiAgICBjc3MudG9Db2xvcignI2FkN2ZhOCcpLFxuICAgIGNzcy50b0NvbG9yKCcjMzRlMmUyJyksXG4gICAgY3NzLnRvQ29sb3IoJyNlZWVlZWMnKVxuICBdO1xuXG4gIC8vIEZpbGwgaW4gdGhlIHJlbWFpbmluZyAyNDAgQU5TSSBjb2xvcnMuXG4gIC8vIEdlbmVyYXRlIGNvbG9ycyAoMTYtMjMxKVxuICBjb25zdCB2ID0gWzB4MDAsIDB4NWYsIDB4ODcsIDB4YWYsIDB4ZDcsIDB4ZmZdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDIxNjsgaSsrKSB7XG4gICAgY29uc3QgciA9IHZbKGkgLyAzNikgJSA2IHwgMF07XG4gICAgY29uc3QgZyA9IHZbKGkgLyA2KSAlIDYgfCAwXTtcbiAgICBjb25zdCBiID0gdltpICUgNl07XG4gICAgY29sb3JzLnB1c2goe1xuICAgICAgY3NzOiBjaGFubmVscy50b0NzcyhyLCBnLCBiKSxcbiAgICAgIHJnYmE6IGNoYW5uZWxzLnRvUmdiYShyLCBnLCBiKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgZ3JleXMgKDIzMi0yNTUpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgIGNvbnN0IGMgPSA4ICsgaSAqIDEwO1xuICAgIGNvbG9ycy5wdXNoKHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MoYywgYywgYyksXG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEoYywgYywgYylcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb2xvcnM7XG59KSgpKTtcblxuZXhwb3J0IGNsYXNzIFRoZW1lU2VydmljZSBleHRlbmRzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJVGhlbWVTZXJ2aWNlIHtcbiAgcHVibGljIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgX2NvbG9yczogSUNvbG9yU2V0O1xuICBwcml2YXRlIF9jb250cmFzdENhY2hlOiBJQ29sb3JDb250cmFzdENhY2hlID0gbmV3IENvbG9yQ29udHJhc3RDYWNoZSgpO1xuICBwcml2YXRlIF9oYWxmQ29udHJhc3RDYWNoZTogSUNvbG9yQ29udHJhc3RDYWNoZSA9IG5ldyBDb2xvckNvbnRyYXN0Q2FjaGUoKTtcbiAgcHJpdmF0ZSBfcmVzdG9yZUNvbG9ycyE6IElSZXN0b3JlQ29sb3JTZXQ7XG5cbiAgcHVibGljIGdldCBjb2xvcnMoKTogUmVhZG9ubHlDb2xvclNldCB7IHJldHVybiB0aGlzLl9jb2xvcnM7IH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNoYW5nZUNvbG9ycyA9IHRoaXMucmVnaXN0ZXIobmV3IEV2ZW50RW1pdHRlcjxSZWFkb25seUNvbG9yU2V0PigpKTtcbiAgcHVibGljIHJlYWRvbmx5IG9uQ2hhbmdlQ29sb3JzID0gdGhpcy5fb25DaGFuZ2VDb2xvcnMuZXZlbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQElPcHRpb25zU2VydmljZSBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zU2VydmljZTogSU9wdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9jb2xvcnMgPSB7XG4gICAgICBmb3JlZ3JvdW5kOiBERUZBVUxUX0ZPUkVHUk9VTkQsXG4gICAgICBiYWNrZ3JvdW5kOiBERUZBVUxUX0JBQ0tHUk9VTkQsXG4gICAgICBjdXJzb3I6IERFRkFVTFRfQ1VSU09SLFxuICAgICAgY3Vyc29yQWNjZW50OiBERUZBVUxUX0NVUlNPUl9BQ0NFTlQsXG4gICAgICBzZWxlY3Rpb25Gb3JlZ3JvdW5kOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQ6IERFRkFVTFRfU0VMRUNUSU9OLFxuICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZTogY29sb3IuYmxlbmQoREVGQVVMVF9CQUNLR1JPVU5ELCBERUZBVUxUX1NFTEVDVElPTiksXG4gICAgICBzZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRUcmFuc3BhcmVudDogREVGQVVMVF9TRUxFQ1RJT04sXG4gICAgICBzZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRPcGFxdWU6IGNvbG9yLmJsZW5kKERFRkFVTFRfQkFDS0dST1VORCwgREVGQVVMVF9TRUxFQ1RJT04pLFxuICAgICAgYW5zaTogREVGQVVMVF9BTlNJX0NPTE9SUy5zbGljZSgpLFxuICAgICAgY29udHJhc3RDYWNoZTogdGhpcy5fY29udHJhc3RDYWNoZSxcbiAgICAgIGhhbGZDb250cmFzdENhY2hlOiB0aGlzLl9oYWxmQ29udHJhc3RDYWNoZVxuICAgIH07XG4gICAgdGhpcy5fdXBkYXRlUmVzdG9yZUNvbG9ycygpO1xuICAgIHRoaXMuX3NldFRoZW1lKHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMudGhlbWUpO1xuXG4gICAgdGhpcy5yZWdpc3Rlcih0aGlzLl9vcHRpb25zU2VydmljZS5vblNwZWNpZmljT3B0aW9uQ2hhbmdlKCdtaW5pbXVtQ29udHJhc3RSYXRpbycsICgpID0+IHRoaXMuX2NvbnRyYXN0Q2FjaGUuY2xlYXIoKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZSgndGhlbWUnLCAoKSA9PiB0aGlzLl9zZXRUaGVtZSh0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnRoZW1lKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRlcm1pbmFsJ3MgdGhlbWUuXG4gICAqIEBwYXJhbSB0aGVtZSBUaGUgIHRoZW1lIHRvIHVzZS4gSWYgYSBwYXJ0aWFsIHRoZW1lIGlzIHByb3ZpZGVkIHRoZW4gZGVmYXVsdFxuICAgKiBjb2xvcnMgd2lsbCBiZSB1c2VkIHdoZXJlIGNvbG9ycyBhcmUgbm90IGRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zZXRUaGVtZSh0aGVtZTogSVRoZW1lID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLl9jb2xvcnM7XG4gICAgY29sb3JzLmZvcmVncm91bmQgPSBwYXJzZUNvbG9yKHRoZW1lLmZvcmVncm91bmQsIERFRkFVTFRfRk9SRUdST1VORCk7XG4gICAgY29sb3JzLmJhY2tncm91bmQgPSBwYXJzZUNvbG9yKHRoZW1lLmJhY2tncm91bmQsIERFRkFVTFRfQkFDS0dST1VORCk7XG4gICAgY29sb3JzLmN1cnNvciA9IHBhcnNlQ29sb3IodGhlbWUuY3Vyc29yLCBERUZBVUxUX0NVUlNPUik7XG4gICAgY29sb3JzLmN1cnNvckFjY2VudCA9IHBhcnNlQ29sb3IodGhlbWUuY3Vyc29yQWNjZW50LCBERUZBVUxUX0NVUlNPUl9BQ0NFTlQpO1xuICAgIGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBwYXJzZUNvbG9yKHRoZW1lLnNlbGVjdGlvbkJhY2tncm91bmQsIERFRkFVTFRfU0VMRUNUSU9OKTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZSA9IGNvbG9yLmJsZW5kKGNvbG9ycy5iYWNrZ3JvdW5kLCBjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50KTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBwYXJzZUNvbG9yKHRoZW1lLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZCwgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCk7XG4gICAgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZE9wYXF1ZSA9IGNvbG9yLmJsZW5kKGNvbG9ycy5iYWNrZ3JvdW5kLCBjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQpO1xuICAgIGNvbG9ycy5zZWxlY3Rpb25Gb3JlZ3JvdW5kID0gdGhlbWUuc2VsZWN0aW9uRm9yZWdyb3VuZCA/IHBhcnNlQ29sb3IodGhlbWUuc2VsZWN0aW9uRm9yZWdyb3VuZCwgTlVMTF9DT0xPUikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbG9ycy5zZWxlY3Rpb25Gb3JlZ3JvdW5kID09PSBOVUxMX0NPTE9SKSB7XG4gICAgICBjb2xvcnMuc2VsZWN0aW9uRm9yZWdyb3VuZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZWxlY3Rpb24gY29sb3IgaXMgb3BhcXVlLCBibGVuZCBpdCB3aXRoIGJhY2tncm91bmQgd2l0aCAwLjMgb3BhY2l0eVxuICAgICAqIElzc3VlICMyNzM3XG4gICAgICovXG4gICAgaWYgKGNvbG9yLmlzT3BhcXVlKGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQpKSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gMC4zO1xuICAgICAgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCA9IGNvbG9yLm9wYWNpdHkoY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCwgb3BhY2l0eSk7XG4gICAgfVxuICAgIGlmIChjb2xvci5pc09wYXF1ZShjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQpKSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gMC4zO1xuICAgICAgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50ID0gY29sb3Iub3BhY2l0eShjb2xvcnMuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQsIG9wYWNpdHkpO1xuICAgIH1cbiAgICBjb2xvcnMuYW5zaSA9IERFRkFVTFRfQU5TSV9DT0xPUlMuc2xpY2UoKTtcbiAgICBjb2xvcnMuYW5zaVswXSA9IHBhcnNlQ29sb3IodGhlbWUuYmxhY2ssIERFRkFVTFRfQU5TSV9DT0xPUlNbMF0pO1xuICAgIGNvbG9ycy5hbnNpWzFdID0gcGFyc2VDb2xvcih0aGVtZS5yZWQsIERFRkFVTFRfQU5TSV9DT0xPUlNbMV0pO1xuICAgIGNvbG9ycy5hbnNpWzJdID0gcGFyc2VDb2xvcih0aGVtZS5ncmVlbiwgREVGQVVMVF9BTlNJX0NPTE9SU1syXSk7XG4gICAgY29sb3JzLmFuc2lbM10gPSBwYXJzZUNvbG9yKHRoZW1lLnllbGxvdywgREVGQVVMVF9BTlNJX0NPTE9SU1szXSk7XG4gICAgY29sb3JzLmFuc2lbNF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJsdWUsIERFRkFVTFRfQU5TSV9DT0xPUlNbNF0pO1xuICAgIGNvbG9ycy5hbnNpWzVdID0gcGFyc2VDb2xvcih0aGVtZS5tYWdlbnRhLCBERUZBVUxUX0FOU0lfQ09MT1JTWzVdKTtcbiAgICBjb2xvcnMuYW5zaVs2XSA9IHBhcnNlQ29sb3IodGhlbWUuY3lhbiwgREVGQVVMVF9BTlNJX0NPTE9SU1s2XSk7XG4gICAgY29sb3JzLmFuc2lbN10gPSBwYXJzZUNvbG9yKHRoZW1lLndoaXRlLCBERUZBVUxUX0FOU0lfQ09MT1JTWzddKTtcbiAgICBjb2xvcnMuYW5zaVs4XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0QmxhY2ssIERFRkFVTFRfQU5TSV9DT0xPUlNbOF0pO1xuICAgIGNvbG9ycy5hbnNpWzldID0gcGFyc2VDb2xvcih0aGVtZS5icmlnaHRSZWQsIERFRkFVTFRfQU5TSV9DT0xPUlNbOV0pO1xuICAgIGNvbG9ycy5hbnNpWzEwXSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0R3JlZW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbMTBdKTtcbiAgICBjb2xvcnMuYW5zaVsxMV0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodFllbGxvdywgREVGQVVMVF9BTlNJX0NPTE9SU1sxMV0pO1xuICAgIGNvbG9ycy5hbnNpWzEyXSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0Qmx1ZSwgREVGQVVMVF9BTlNJX0NPTE9SU1sxMl0pO1xuICAgIGNvbG9ycy5hbnNpWzEzXSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0TWFnZW50YSwgREVGQVVMVF9BTlNJX0NPTE9SU1sxM10pO1xuICAgIGNvbG9ycy5hbnNpWzE0XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0Q3lhbiwgREVGQVVMVF9BTlNJX0NPTE9SU1sxNF0pO1xuICAgIGNvbG9ycy5hbnNpWzE1XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0V2hpdGUsIERFRkFVTFRfQU5TSV9DT0xPUlNbMTVdKTtcbiAgICBpZiAodGhlbWUuZXh0ZW5kZWRBbnNpKSB7XG4gICAgICBjb25zdCBjb2xvckNvdW50ID0gTWF0aC5taW4oY29sb3JzLmFuc2kubGVuZ3RoIC0gMTYsIHRoZW1lLmV4dGVuZGVkQW5zaS5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xvckNvdW50OyBpKyspIHtcbiAgICAgICAgY29sb3JzLmFuc2lbaSArIDE2XSA9IHBhcnNlQ29sb3IodGhlbWUuZXh0ZW5kZWRBbnNpW2ldLCBERUZBVUxUX0FOU0lfQ09MT1JTW2kgKyAxNl0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBDbGVhciBvdXIgdGhlIGNhY2hlXG4gICAgdGhpcy5fY29udHJhc3RDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuX2hhbGZDb250cmFzdENhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5fdXBkYXRlUmVzdG9yZUNvbG9ycygpO1xuICAgIHRoaXMuX29uQ2hhbmdlQ29sb3JzLmZpcmUodGhpcy5jb2xvcnMpO1xuICB9XG5cbiAgcHVibGljIHJlc3RvcmVDb2xvcihzbG90PzogQWxsQ29sb3JJbmRleCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc3RvcmVDb2xvcihzbG90KTtcbiAgICB0aGlzLl9vbkNoYW5nZUNvbG9ycy5maXJlKHRoaXMuY29sb3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVDb2xvcihzbG90OiBBbGxDb2xvckluZGV4IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgLy8gdW5zZXQgc2xvdCByZXN0b3JlcyBhbGwgYW5zaSBjb2xvcnNcbiAgICBpZiAoc2xvdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9jb2xvcnMuYW5zaVtpXSA9IHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaVtpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzbG90KSB7XG4gICAgICBjYXNlIFNwZWNpYWxDb2xvckluZGV4LkZPUkVHUk9VTkQ6XG4gICAgICAgIHRoaXMuX2NvbG9ycy5mb3JlZ3JvdW5kID0gdGhpcy5fcmVzdG9yZUNvbG9ycy5mb3JlZ3JvdW5kO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3BlY2lhbENvbG9ySW5kZXguQkFDS0dST1VORDpcbiAgICAgICAgdGhpcy5fY29sb3JzLmJhY2tncm91bmQgPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmJhY2tncm91bmQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTcGVjaWFsQ29sb3JJbmRleC5DVVJTT1I6XG4gICAgICAgIHRoaXMuX2NvbG9ycy5jdXJzb3IgPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmN1cnNvcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9jb2xvcnMuYW5zaVtzbG90XSA9IHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaVtzbG90XTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW9kaWZ5Q29sb3JzKGNhbGxiYWNrOiAoY29sb3JzOiBJQ29sb3JTZXQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjYWxsYmFjayh0aGlzLl9jb2xvcnMpO1xuICAgIC8vIEFzc3VtZSB0aGUgY2hhbmdlIGhhcHBlbmVkXG4gICAgdGhpcy5fb25DaGFuZ2VDb2xvcnMuZmlyZSh0aGlzLmNvbG9ycyk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVSZXN0b3JlQ29sb3JzKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc3RvcmVDb2xvcnMgPSB7XG4gICAgICBmb3JlZ3JvdW5kOiB0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZCxcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kLFxuICAgICAgY3Vyc29yOiB0aGlzLl9jb2xvcnMuY3Vyc29yLFxuICAgICAgYW5zaTogdGhpcy5fY29sb3JzLmFuc2kuc2xpY2UoKVxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDb2xvcihcbiAgY3NzU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGZhbGxiYWNrOiBJQ29sb3Jcbik6IElDb2xvciB7XG4gIGlmIChjc3NTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY3NzLnRvQ29sb3IoY3NzU3RyaW5nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxsYmFjaztcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSUNvbG9yLCBJQ29sb3JSR0IgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG5sZXQgJHIgPSAwO1xubGV0ICRnID0gMDtcbmxldCAkYiA9IDA7XG5sZXQgJGEgPSAwO1xuXG5leHBvcnQgY29uc3QgTlVMTF9DT0xPUjogSUNvbG9yID0ge1xuICBjc3M6ICcjMDAwMDAwMDAnLFxuICByZ2JhOiAwXG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwiY2hhbm5lbHNcIiAoaW5kaXZpZHVhbCBjb2xvciBjaGFubmVscyBhcyBudW1iZXJzKS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBjaGFubmVscyB7XG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NzcyhyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYCMke3RvUGFkZGVkSGV4KHIpfSR7dG9QYWRkZWRIZXgoZyl9JHt0b1BhZGRlZEhleChiKX0ke3RvUGFkZGVkSGV4KGEpfWA7XG4gICAgfVxuICAgIHJldHVybiBgIyR7dG9QYWRkZWRIZXgocil9JHt0b1BhZGRlZEhleChnKX0ke3RvUGFkZGVkSGV4KGIpfWA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9SZ2JhKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlciA9IDB4RkYpOiBudW1iZXIge1xuICAgIC8vIE5vdGU6IFRoZSBhZ2dyZWdhdGVkIG51bWJlciBpcyBSR0JBMzIgKEJFKSwgdGh1cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gQUJHUjMyXG4gICAgLy8gb24gTEUgc3lzdGVtcywgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIGZvciBkaXJlY3QgMzItYml0IGJ1ZmZlciB3cml0ZXMuXG4gICAgLy8gPj4+IDAgZm9yY2VzIGFuIHVuc2lnbmVkIGludFxuICAgIHJldHVybiAociA8PCAyNCB8IGcgPDwgMTYgfCBiIDw8IDggfCBhKSA+Pj4gMDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbG9yKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE/OiBudW1iZXIpOiBJQ29sb3Ige1xuICAgIHJldHVybiB7XG4gICAgICBjc3M6IGNoYW5uZWxzLnRvQ3NzKHIsIGcsIGIsIGEpLFxuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKHIsIGcsIGIsIGEpXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIGBJQ29sb3JgLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIGNvbG9yIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGJsZW5kKGJnOiBJQ29sb3IsIGZnOiBJQ29sb3IpOiBJQ29sb3Ige1xuICAgICRhID0gKGZnLnJnYmEgJiAweEZGKSAvIDI1NTtcbiAgICBpZiAoJGEgPT09IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNzczogZmcuY3NzLFxuICAgICAgICByZ2JhOiBmZy5yZ2JhXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmZ1IgPSAoZmcucmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGZnRyA9IChmZy5yZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgZmdCID0gKGZnLnJnYmEgPj4gOCkgJiAweEZGO1xuICAgIGNvbnN0IGJnUiA9IChiZy5yZ2JhID4+IDI0KSAmIDB4RkY7XG4gICAgY29uc3QgYmdHID0gKGJnLnJnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmcucmdiYSA+PiA4KSAmIDB4RkY7XG4gICAgJHIgPSBiZ1IgKyBNYXRoLnJvdW5kKChmZ1IgLSBiZ1IpICogJGEpO1xuICAgICRnID0gYmdHICsgTWF0aC5yb3VuZCgoZmdHIC0gYmdHKSAqICRhKTtcbiAgICAkYiA9IGJnQiArIE1hdGgucm91bmQoKGZnQiAtIGJnQikgKiAkYSk7XG4gICAgY29uc3QgY3NzID0gY2hhbm5lbHMudG9Dc3MoJHIsICRnLCAkYik7XG4gICAgY29uc3QgcmdiYSA9IGNoYW5uZWxzLnRvUmdiYSgkciwgJGcsICRiKTtcbiAgICByZXR1cm4geyBjc3MsIHJnYmEgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc09wYXF1ZShjb2xvcjogSUNvbG9yKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjb2xvci5yZ2JhICYgMHhGRikgPT09IDB4RkY7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5zdXJlQ29udHJhc3RSYXRpbyhiZzogSUNvbG9yLCBmZzogSUNvbG9yLCByYXRpbzogbnVtYmVyKTogSUNvbG9yIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZXN1bHQgPSByZ2JhLmVuc3VyZUNvbnRyYXN0UmF0aW8oYmcucmdiYSwgZmcucmdiYSwgcmF0aW8pO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbm5lbHMudG9Db2xvcihcbiAgICAgIChyZXN1bHQgPj4gMjQgJiAweEZGKSxcbiAgICAgIChyZXN1bHQgPj4gMTYgJiAweEZGKSxcbiAgICAgIChyZXN1bHQgPj4gOCAgJiAweEZGKVxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3BhcXVlKGNvbG9yOiBJQ29sb3IpOiBJQ29sb3Ige1xuICAgIGNvbnN0IHJnYmFDb2xvciA9IChjb2xvci5yZ2JhIHwgMHhGRikgPj4+IDA7XG4gICAgWyRyLCAkZywgJGJdID0gcmdiYS50b0NoYW5uZWxzKHJnYmFDb2xvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MoJHIsICRnLCAkYiksXG4gICAgICByZ2JhOiByZ2JhQ29sb3JcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9wYWNpdHkoY29sb3I6IElDb2xvciwgb3BhY2l0eTogbnVtYmVyKTogSUNvbG9yIHtcbiAgICAkYSA9IE1hdGgucm91bmQob3BhY2l0eSAqIDB4RkYpO1xuICAgIFskciwgJGcsICRiXSA9IHJnYmEudG9DaGFubmVscyhjb2xvci5yZ2JhKTtcbiAgICByZXR1cm4ge1xuICAgICAgY3NzOiBjaGFubmVscy50b0NzcygkciwgJGcsICRiLCAkYSksXG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYiwgJGEpXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseU9wYWNpdHkoY29sb3I6IElDb2xvciwgZmFjdG9yOiBudW1iZXIpOiBJQ29sb3Ige1xuICAgICRhID0gY29sb3IucmdiYSAmIDB4RkY7XG4gICAgcmV0dXJuIG9wYWNpdHkoY29sb3IsICgkYSAqIGZhY3RvcikgLyAweEZGKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbG9yUkdCKGNvbG9yOiBJQ29sb3IpOiBJQ29sb3JSR0Ige1xuICAgIHJldHVybiBbKGNvbG9yLnJnYmEgPj4gMjQpICYgMHhGRiwgKGNvbG9yLnJnYmEgPj4gMTYpICYgMHhGRiwgKGNvbG9yLnJnYmEgPj4gOCkgJiAweEZGXTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwiY3NzXCIgKHN0cmluZzogJyNyZ2InLCAnI3JnYmEnLCAnI3JyZ2diYicsXG4gKiAnI3JyZ2diYmFhJykuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgY3NzIHtcbiAgLy8gQXR0ZW1wdCB0byBzZXQgZ2V0IHRoZSBzaGFyZWQgY2FudmFzIGNvbnRleHRcbiAgbGV0ICRjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZDtcbiAgbGV0ICRsaXRtdXNDb2xvcjogQ2FudmFzR3JhZGllbnQgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHJ1biBpbiB0aGUgZmlyc3Qgd2luZG93LCBzbyBkb2N1bWVudCBzaG91bGQgYmUgY29ycmVjdFxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IDE7XG4gICAgY2FudmFzLmhlaWdodCA9IDE7XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywge1xuICAgICAgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgJGN0eCA9IGN0eDtcbiAgICAgICRjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2NvcHknO1xuICAgICAgJGxpdG11c0NvbG9yID0gJGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAxLCAxKTtcbiAgICB9XG4gIH1cbiAgY2F0Y2gge1xuICAgIC8vIG5vb3BcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGNzcyBzdHJpbmcgdG8gYW4gSUNvbG9yLCB0aGlzIHNob3VsZCBoYW5kbGUgYWxsIHZhbGlkIENTUyBjb2xvciBzdHJpbmdzIGFuZCB3aWxsXG4gICAqIHRocm93IGlmIGl0J3MgaW52YWxpZC4gVGhlIGlkZWFsIGZvcm1hdCB0byB1c2UgaXMgYCNycmdnYmJbYWFdYCBhcyBpdCdzIHRoZSBmYXN0ZXN0IHRvIHBhcnNlLlxuICAgKlxuICAgKiBPbmx5IGAjcmdiW2FdYCwgYCNycmdnYmJbYWFdYCwgYHJnYigpYCBhbmQgYHJnYmEoKWAgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIHdoZW4gcnVuIGluIGEgTm9kZVxuICAgKiBlbnZpcm9ubWVudC5cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0NvbG9yKGNzczogc3RyaW5nKTogSUNvbG9yIHtcbiAgICAvLyBGb3JtYXRzOiAjcmdiW2FdIGFuZCAjcnJnZ2JiW2FhXVxuICAgIGlmIChjc3MubWF0Y2goLyNbXFxkYS1mXXszLDh9L2kpKSB7XG4gICAgICBzd2l0Y2ggKGNzcy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSA0OiB7IC8vICNyZ2JcbiAgICAgICAgICAkciA9IHBhcnNlSW50KGNzcy5zbGljZSgxLCAyKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkZyA9IHBhcnNlSW50KGNzcy5zbGljZSgyLCAzKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkYiA9IHBhcnNlSW50KGNzcy5zbGljZSgzLCA0KS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICByZXR1cm4gY2hhbm5lbHMudG9Db2xvcigkciwgJGcsICRiKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDU6IHsgLy8gI3JnYmFcbiAgICAgICAgICAkciA9IHBhcnNlSW50KGNzcy5zbGljZSgxLCAyKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkZyA9IHBhcnNlSW50KGNzcy5zbGljZSgyLCAzKS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkYiA9IHBhcnNlSW50KGNzcy5zbGljZSgzLCA0KS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICAkYSA9IHBhcnNlSW50KGNzcy5zbGljZSg0LCA1KS5yZXBlYXQoMiksIDE2KTtcbiAgICAgICAgICByZXR1cm4gY2hhbm5lbHMudG9Db2xvcigkciwgJGcsICRiLCAkYSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA3OiAvLyAjcnJnZ2JiXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNzcyxcbiAgICAgICAgICAgIHJnYmE6IChwYXJzZUludChjc3Muc2xpY2UoMSksIDE2KSA8PCA4IHwgMHhGRikgPj4+IDBcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIDk6IC8vICNycmdnYmJhYVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjc3MsXG4gICAgICAgICAgICByZ2JhOiBwYXJzZUludChjc3Muc2xpY2UoMSksIDE2KSA+Pj4gMFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9ybWF0czogcmdiKCkgb3IgcmdiYSgpXG4gICAgY29uc3QgcmdiYU1hdGNoID0gY3NzLm1hdGNoKC9yZ2JhP1xcKFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqKCxcXHMqKDB8MXxcXGQ/XFwuKFxcZCspKVxccyopP1xcKS8pO1xuICAgIGlmIChyZ2JhTWF0Y2gpIHtcbiAgICAgICRyID0gcGFyc2VJbnQocmdiYU1hdGNoWzFdKTtcbiAgICAgICRnID0gcGFyc2VJbnQocmdiYU1hdGNoWzJdKTtcbiAgICAgICRiID0gcGFyc2VJbnQocmdiYU1hdGNoWzNdKTtcbiAgICAgICRhID0gTWF0aC5yb3VuZCgocmdiYU1hdGNoWzVdID09PSB1bmRlZmluZWQgPyAxIDogcGFyc2VGbG9hdChyZ2JhTWF0Y2hbNV0pKSAqIDB4RkYpO1xuICAgICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoJHIsICRnLCAkYiwgJGEpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBjb250ZXh0IGlzIGF2YWlsYWJsZSBmb3IgY2FudmFzLWJhc2VkIGNvbG9yIHBhcnNpbmdcbiAgICBpZiAoISRjdHggfHwgISRsaXRtdXNDb2xvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MudG9Db2xvcjogVW5zdXBwb3J0ZWQgY3NzIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBjb2xvciB1c2luZyBjYW52YXMgZmlsbFN0eWxlXG4gICAgLy8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHlsZXNcbiAgICAkY3R4LmZpbGxTdHlsZSA9ICRsaXRtdXNDb2xvcjtcbiAgICAkY3R4LmZpbGxTdHlsZSA9IGNzcztcbiAgICBpZiAodHlwZW9mICRjdHguZmlsbFN0eWxlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MudG9Db2xvcjogVW5zdXBwb3J0ZWQgY3NzIGZvcm1hdCcpO1xuICAgIH1cblxuICAgICRjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG4gICAgWyRyLCAkZywgJGIsICRhXSA9ICRjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29sb3IgaXMgbm9uLXRyYW5zcGFyZW50IGFzIGNvbG9yIGh1ZSBnZXRzIGxvc3Qgd2hlbiBkcmF3biB0byB0aGUgY2FudmFzXG4gICAgaWYgKCRhICE9PSAweEZGKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nzcy50b0NvbG9yOiBVbnN1cHBvcnRlZCBjc3MgZm9ybWF0Jyk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCB0aGUgY29sb3IgZnJvbSB0aGUgY2FudmFzJyBmaWxsU3R5bGUgcHJvcGVydHkgd2hpY2ggZXhwb3NlcyB0aGUgY29sb3IgdmFsdWUgaW4gcmdiYSgpXG4gICAgLy8gZm9ybWF0XG4gICAgLy8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI3NlcmlhbGlzYXRpb24tb2YtYS1jb2xvclxuICAgIHJldHVybiB7XG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYiwgJGEpLFxuICAgICAgY3NzXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwicmdiXCIgKG51bWJlcjogMHhycmdnYmIpLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIHJnYiB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWxhdGl2ZSBsdW1pbmFuY2Ugb2YgYW4gUkdCIGNvbG9yLCB0aGlzIGlzIHVzZWZ1bCBpbiBkZXRlcm1pbmluZyB0aGUgY29udHJhc3QgcmF0aW9cbiAgICogYmV0d2VlbiB0d28gY29sb3JzLlxuICAgKiBAcGFyYW0gcmdiIFRoZSBjb2xvciB0byB1c2UuXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZShyZ2I6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlbGF0aXZlTHVtaW5hbmNlMihcbiAgICAgIChyZ2IgPj4gMTYpICYgMHhGRixcbiAgICAgIChyZ2IgPj4gOCApICYgMHhGRixcbiAgICAgIChyZ2IgICAgICApICYgMHhGRik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcmVsYXRpdmUgbHVtaW5hbmNlIG9mIGFuIFJHQiBjb2xvciwgdGhpcyBpcyB1c2VmdWwgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbnRyYXN0IHJhdGlvXG4gICAqIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAgICogQHBhcmFtIHIgVGhlIHJlZCBjaGFubmVsICgweDAwIHRvIDB4RkYpLlxuICAgKiBAcGFyYW0gZyBUaGUgZ3JlZW4gY2hhbm5lbCAoMHgwMCB0byAweEZGKS5cbiAgICogQHBhcmFtIGIgVGhlIGJsdWUgY2hhbm5lbCAoMHgwMCB0byAweEZGKS5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlTHVtaW5hbmNlMihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBycyA9IHIgLyAyNTU7XG4gICAgY29uc3QgZ3MgPSBnIC8gMjU1O1xuICAgIGNvbnN0IGJzID0gYiAvIDI1NTtcbiAgICBjb25zdCByciA9IHJzIDw9IDAuMDM5MjggPyBycyAvIDEyLjkyIDogTWF0aC5wb3coKHJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgY29uc3QgcmcgPSBncyA8PSAwLjAzOTI4ID8gZ3MgLyAxMi45MiA6IE1hdGgucG93KChncyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGNvbnN0IHJiID0gYnMgPD0gMC4wMzkyOCA/IGJzIC8gMTIuOTIgOiBNYXRoLnBvdygoYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICByZXR1cm4gcnIgKiAwLjIxMjYgKyByZyAqIDAuNzE1MiArIHJiICogMC4wNzIyO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9ucyB3aGVyZSB0aGUgc291cmNlIHR5cGUgaXMgXCJyZ2JhXCIgKG51bWJlcjogMHhycmdnYmJhYSkuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgcmdiYSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBibGVuZChiZzogbnVtYmVyLCBmZzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAkYSA9IChmZyAmIDB4RkYpIC8gMHhGRjtcbiAgICBpZiAoJGEgPT09IDEpIHtcbiAgICAgIHJldHVybiBmZztcbiAgICB9XG4gICAgY29uc3QgZmdSID0gKGZnID4+IDI0KSAmIDB4RkY7XG4gICAgY29uc3QgZmdHID0gKGZnID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgZmdCID0gKGZnID4+IDgpICYgMHhGRjtcbiAgICBjb25zdCBiZ1IgPSAoYmcgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBiZ0cgPSAoYmcgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmcgPj4gOCkgJiAweEZGO1xuICAgICRyID0gYmdSICsgTWF0aC5yb3VuZCgoZmdSIC0gYmdSKSAqICRhKTtcbiAgICAkZyA9IGJnRyArIE1hdGgucm91bmQoKGZnRyAtIGJnRykgKiAkYSk7XG4gICAgJGIgPSBiZ0IgKyBNYXRoLnJvdW5kKChmZ0IgLSBiZ0IpICogJGEpO1xuICAgIHJldHVybiBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYik7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBmb3JlZ3JvdW5kIGNvbG9yIGFuZCBhIGJhY2tncm91bmQgY29sb3IsIGVpdGhlciBpbmNyZWFzZSBvciByZWR1Y2UgdGhlIGx1bWluYW5jZSBvZiB0aGVcbiAgICogZm9yZWdyb3VuZCBjb2xvciB1bnRpbCB0aGUgc3BlY2lmaWVkIGNvbnRyYXN0IHJhdGlvIGlzIG1ldC4gSWYgcHVyZSB3aGl0ZSBvciBibGFjayBpcyBoaXRcbiAgICogd2l0aG91dCB0aGUgY29udHJhc3QgcmF0aW8gYmVpbmcgbWV0LCBnbyB0aGUgb3RoZXIgZGlyZWN0aW9uIHVzaW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIHRoZVxuICAgKiBmb3JlZ3JvdW5kIGNvbG9yIGFuZCB0YWtlIGVpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIHJlc3VsdCBkZXBlbmRpbmcgb24gd2hpY2ggaGFzIHRoZSBoaWdoZXJcbiAgICogY29udHJhc3QgcmF0aW8uXG4gICAqXG4gICAqIGB1bmRlZmluZWRgIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGNvbnRyYXN0IHJhdGlvIGlzIGFscmVhZHkgbWV0LlxuICAgKlxuICAgKiBAcGFyYW0gYmdSZ2JhIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGluIHJnYmEgZm9ybWF0LlxuICAgKiBAcGFyYW0gZmdSZ2JhIFRoZSBmb3JlZ3JvdW5kIGNvbG9yIGluIHJnYmEgZm9ybWF0LlxuICAgKiBAcGFyYW0gcmF0aW8gVGhlIGNvbnRyYXN0IHJhdGlvIHRvIGFjaGlldmUuXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZW5zdXJlQ29udHJhc3RSYXRpbyhiZ1JnYmE6IG51bWJlciwgZmdSZ2JhOiBudW1iZXIsIHJhdGlvOiBudW1iZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJnTCA9IHJnYi5yZWxhdGl2ZUx1bWluYW5jZShiZ1JnYmEgPj4gOCk7XG4gICAgY29uc3QgZmdMID0gcmdiLnJlbGF0aXZlTHVtaW5hbmNlKGZnUmdiYSA+PiA4KTtcbiAgICBjb25zdCBjciA9IGNvbnRyYXN0UmF0aW8oYmdMLCBmZ0wpO1xuICAgIGlmIChjciA8IHJhdGlvKSB7XG4gICAgICBpZiAoZmdMIDwgYmdMKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdEEgPSByZWR1Y2VMdW1pbmFuY2UoYmdSZ2JhLCBmZ1JnYmEsIHJhdGlvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QVJhdGlvID0gY29udHJhc3RSYXRpbyhiZ0wsIHJnYi5yZWxhdGl2ZUx1bWluYW5jZShyZXN1bHRBID4+IDgpKTtcbiAgICAgICAgaWYgKHJlc3VsdEFSYXRpbyA8IHJhdGlvKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0QiA9IGluY3JlYXNlTHVtaW5hbmNlKGJnUmdiYSwgZmdSZ2JhLCByYXRpbyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0QlJhdGlvID0gY29udHJhc3RSYXRpbyhiZ0wsIHJnYi5yZWxhdGl2ZUx1bWluYW5jZShyZXN1bHRCID4+IDgpKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0QVJhdGlvID4gcmVzdWx0QlJhdGlvID8gcmVzdWx0QSA6IHJlc3VsdEI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdEE7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHRBID0gaW5jcmVhc2VMdW1pbmFuY2UoYmdSZ2JhLCBmZ1JnYmEsIHJhdGlvKTtcbiAgICAgIGNvbnN0IHJlc3VsdEFSYXRpbyA9IGNvbnRyYXN0UmF0aW8oYmdMLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UocmVzdWx0QSA+PiA4KSk7XG4gICAgICBpZiAocmVzdWx0QVJhdGlvIDwgcmF0aW8pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0QiA9IHJlZHVjZUx1bWluYW5jZShiZ1JnYmEsIGZnUmdiYSwgcmF0aW8pO1xuICAgICAgICBjb25zdCByZXN1bHRCUmF0aW8gPSBjb250cmFzdFJhdGlvKGJnTCwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlKHJlc3VsdEIgPj4gOCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0QVJhdGlvID4gcmVzdWx0QlJhdGlvID8gcmVzdWx0QSA6IHJlc3VsdEI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0QTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWR1Y2VMdW1pbmFuY2UoYmdSZ2JhOiBudW1iZXIsIGZnUmdiYTogbnVtYmVyLCByYXRpbzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBUaGlzIGlzIGEgbmFpdmUgYnV0IGZhc3QgYXBwcm9hY2ggdG8gcmVkdWNpbmcgbHVtaW5hbmNlIGFzIGNvbnZlcnRpbmcgdG9cbiAgICAvLyBIU0wgYW5kIGJhY2sgaXMgZXhwZW5zaXZlXG4gICAgY29uc3QgYmdSID0gKGJnUmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGJnRyA9IChiZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGZnUiA9IChmZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBsZXQgZmdHID0gKGZnUmdiYSA+PiAxNikgJiAweEZGO1xuICAgIGxldCBmZ0IgPSAoZmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB3aGlsZSAoY3IgPCByYXRpbyAmJiAoZmdSID4gMCB8fCBmZ0cgPiAwIHx8IGZnQiA+IDApKSB7XG4gICAgICAvLyBSZWR1Y2UgYnkgMTAlIHVudGlsIHRoZSByYXRpbyBpcyBoaXRcbiAgICAgIGZnUiAtPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoZmdSICogMC4xKSk7XG4gICAgICBmZ0cgLT0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGZnRyAqIDAuMSkpO1xuICAgICAgZmdCIC09IE1hdGgubWF4KDAsIE1hdGguY2VpbChmZ0IgKiAwLjEpKTtcbiAgICAgIGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB9XG4gICAgcmV0dXJuIChmZ1IgPDwgMjQgfCBmZ0cgPDwgMTYgfCBmZ0IgPDwgOCB8IDB4RkYpID4+PiAwO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGluY3JlYXNlTHVtaW5hbmNlKGJnUmdiYTogbnVtYmVyLCBmZ1JnYmE6IG51bWJlciwgcmF0aW86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gVGhpcyBpcyBhIG5haXZlIGJ1dCBmYXN0IGFwcHJvYWNoIHRvIGluY3JlYXNpbmcgbHVtaW5hbmNlIGFzIGNvbnZlcnRpbmcgdG9cbiAgICAvLyBIU0wgYW5kIGJhY2sgaXMgZXhwZW5zaXZlXG4gICAgY29uc3QgYmdSID0gKGJnUmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGJnRyA9IChiZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBjb25zdCBiZ0IgPSAoYmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGZnUiA9IChmZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBsZXQgZmdHID0gKGZnUmdiYSA+PiAxNikgJiAweEZGO1xuICAgIGxldCBmZ0IgPSAoZmdSZ2JhID4+ICA4KSAmIDB4RkY7XG4gICAgbGV0IGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB3aGlsZSAoY3IgPCByYXRpbyAmJiAoZmdSIDwgMHhGRiB8fCBmZ0cgPCAweEZGIHx8IGZnQiA8IDB4RkYpKSB7XG4gICAgICAvLyBJbmNyZWFzZSBieSAxMCUgdW50aWwgdGhlIHJhdGlvIGlzIGhpdFxuICAgICAgZmdSID0gTWF0aC5taW4oMHhGRiwgZmdSICsgTWF0aC5jZWlsKCgyNTUgLSBmZ1IpICogMC4xKSk7XG4gICAgICBmZ0cgPSBNYXRoLm1pbigweEZGLCBmZ0cgKyBNYXRoLmNlaWwoKDI1NSAtIGZnRykgKiAwLjEpKTtcbiAgICAgIGZnQiA9IE1hdGgubWluKDB4RkYsIGZnQiArIE1hdGguY2VpbCgoMjU1IC0gZmdCKSAqIDAuMSkpO1xuICAgICAgY3IgPSBjb250cmFzdFJhdGlvKHJnYi5yZWxhdGl2ZUx1bWluYW5jZTIoZmdSLCBmZ0csIGZnQiksIHJnYi5yZWxhdGl2ZUx1bWluYW5jZTIoYmdSLCBiZ0csIGJnQikpO1xuICAgIH1cbiAgICByZXR1cm4gKGZnUiA8PCAyNCB8IGZnRyA8PCAxNiB8IGZnQiA8PCA4IHwgMHhGRikgPj4+IDA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9DaGFubmVscyh2YWx1ZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiBbKHZhbHVlID4+IDI0KSAmIDB4RkYsICh2YWx1ZSA+PiAxNikgJiAweEZGLCAodmFsdWUgPj4gOCkgJiAweEZGLCB2YWx1ZSAmIDB4RkZdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BhZGRlZEhleChjOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzID0gYy50b1N0cmluZygxNik7XG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAnMCcgKyBzIDogcztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb250cmFzdCByYXRpbyBiZXR3ZWVuIHR3byByZWxhdGl2ZSBsdW1pbmFuY2UgdmFsdWVzLlxuICogQHBhcmFtIGwxIFRoZSBmaXJzdCByZWxhdGl2ZSBsdW1pbmFuY2UuXG4gKiBAcGFyYW0gbDIgVGhlIGZpcnN0IHJlbGF0aXZlIGx1bWluYW5jZS5cbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyYXN0UmF0aW8obDE6IG51bWJlciwgbDI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChsMSA8IGwyKSB7XG4gICAgcmV0dXJuIChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG4gIH1cbiAgcmV0dXJuIChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSAnY29tbW9uL1R5cGVzJztcblxuaW50ZXJmYWNlIElMaXN0ZW5lcjxULCBVID0gdm9pZD4ge1xuICAoYXJnMTogVCwgYXJnMjogVSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50PFQsIFUgPSB2b2lkPiB7XG4gIChsaXN0ZW5lcjogKGFyZzE6IFQsIGFyZzI6IFUpID0+IGFueSk6IElEaXNwb3NhYmxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudEVtaXR0ZXI8VCwgVSA9IHZvaWQ+IHtcbiAgZXZlbnQ6IElFdmVudDxULCBVPjtcbiAgZmlyZShhcmcxOiBULCBhcmcyOiBVKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRFbWl0dGVyPFQsIFUgPSB2b2lkPiBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXI8VCwgVT4ge1xuICBwcml2YXRlIF9saXN0ZW5lcnM6IElMaXN0ZW5lcjxULCBVPltdID0gW107XG4gIHByaXZhdGUgX2V2ZW50PzogSUV2ZW50PFQsIFU+O1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgZXZlbnQoKTogSUV2ZW50PFQsIFU+IHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50KSB7XG4gICAgICB0aGlzLl9ldmVudCA9IChsaXN0ZW5lcjogKGFyZzE6IFQsIGFyZzI6IFUpID0+IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSB7XG4gICAgICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9saXN0ZW5lcnNbaV0gPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZmlyZShhcmcxOiBULCBhcmcyOiBVKTogdm9pZCB7XG4gICAgY29uc3QgcXVldWU6IElMaXN0ZW5lcjxULCBVPltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXVlLnB1c2godGhpcy5fbGlzdGVuZXJzW2ldKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgcXVldWVbaV0uY2FsbCh1bmRlZmluZWQsIGFyZzEsIGFyZzIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkRXZlbnQ8VD4oZnJvbTogSUV2ZW50PFQ+LCB0bzogSUV2ZW50RW1pdHRlcjxUPik6IElEaXNwb3NhYmxlIHtcbiAgcmV0dXJuIGZyb20oZSA9PiB0by5maXJlKGUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFuZFN1YnNjcmliZTxUPihldmVudDogSUV2ZW50PFQ+LCBoYW5kbGVyOiAoZTogVCB8IHVuZGVmaW5lZCkgPT4gYW55KTogSURpc3Bvc2FibGUge1xuICBoYW5kbGVyKHVuZGVmaW5lZCk7XG4gIHJldHVybiBldmVudChlID0+IGhhbmRsZXIoZSkpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIHRoYXQgY2FuIGJlIGV4dGVuZGVkIHRvIHByb3ZpZGUgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiBhblxuICogb2JqZWN0IGFuZCBpdHMgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByb3RlY3RlZCBfZGlzcG9zYWJsZXM6IElEaXNwb3NhYmxlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9pc0Rpc3Bvc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QsIHRyaWdnZXJpbmcgdGhlIGBkaXNwb3NlYCBtZXRob2Qgb24gYWxsIHJlZ2lzdGVyZWQgSURpc3Bvc2FibGVzLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBkIG9mIHRoaXMuX2Rpc3Bvc2FibGVzKSB7XG4gICAgICBkLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBkaXNwb3NhYmxlIG9iamVjdC5cbiAgICogQHBhcmFtIGQgVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBkaXNwb3NhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBJRGlzcG9zYWJsZT4oZDogVCk6IFQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLnB1c2goZCk7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSBkaXNwb3NhYmxlIG9iamVjdCBpZiBpdCBoYXMgYmVlbiByZWdpc3RlcmVkLCBpZiBub3QgZG9cbiAgICogbm90aGluZy5cbiAgICogQHBhcmFtIGQgVGhlIGRpc3Bvc2FibGUgdG8gdW5yZWdpc3Rlci5cbiAgICovXG4gIHB1YmxpYyB1bnJlZ2lzdGVyPFQgZXh0ZW5kcyBJRGlzcG9zYWJsZT4oZDogVCk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGlzcG9zYWJsZXMuaW5kZXhPZihkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTXV0YWJsZURpc3Bvc2FibGU8VCBleHRlbmRzIElEaXNwb3NhYmxlPiBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfdmFsdWU/OiBUO1xuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIGlmIGl0IGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQgPyB1bmRlZmluZWQgOiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSwgZGlzcG9zaW5nIG9mIHRoZSBvbGQgdmFsdWUgaWYgaXQgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLl9pc0Rpc3Bvc2VkIHx8IHZhbHVlID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZT8uZGlzcG9zZSgpO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzdG9yZWQgdmFsdWUgYW5kIGRpc3Bvc2VzIG9mIHRoZSBwcmV2aW91c2x5IHN0b3JlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWU/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXAgYSBmdW5jdGlvbiBpbiBhIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGUoZjogKCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgcmV0dXJuIHsgZGlzcG9zZTogZiB9O1xufVxuXG4vKipcbiAqIERpc3Bvc2Ugb2YgYWxsIGRpc3Bvc2FibGVzIGluIGFuIGFycmF5IGFuZCBzZXQgaXRzIGxlbmd0aCB0byAwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZUFycmF5KGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZCBvZiBkaXNwb3NhYmxlcykge1xuICAgIGQuZGlzcG9zZSgpO1xuICB9XG4gIGRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3Bvc2FibGUgdGhhdCB3aWxsIGRpc3Bvc2Ugb2YgYW4gYXJyYXkgb2YgZGlzcG9zYWJsZXMgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3Bvc2VBcnJheURpc3Bvc2FibGUoYXJyYXk6IElEaXNwb3NhYmxlW10pOiBJRGlzcG9zYWJsZSB7XG4gIHJldHVybiB7IGRpc3Bvc2U6ICgpID0+IGRpc3Bvc2VBcnJheShhcnJheSkgfTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuZXhwb3J0IGNsYXNzIFR3b0tleU1hcDxURmlyc3QgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRTZWNvbmQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRWYWx1ZT4ge1xuICBwcml2YXRlIF9kYXRhOiB7IFtiZzogc3RyaW5nIHwgbnVtYmVyXTogeyBbZmc6IHN0cmluZyB8IG51bWJlcl06IFRWYWx1ZSB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkIH0gPSB7fTtcblxuICBwdWJsaWMgc2V0KGZpcnN0OiBURmlyc3QsIHNlY29uZDogVFNlY29uZCwgdmFsdWU6IFRWYWx1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZGF0YVtmaXJzdF0pIHtcbiAgICAgIHRoaXMuX2RhdGFbZmlyc3RdID0ge307XG4gICAgfVxuICAgIHRoaXMuX2RhdGFbZmlyc3QgYXMgc3RyaW5nIHwgbnVtYmVyXSFbc2Vjb25kXSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQpOiBUVmFsdWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhW2ZpcnN0IGFzIHN0cmluZyB8IG51bWJlcl0gPyB0aGlzLl9kYXRhW2ZpcnN0IGFzIHN0cmluZyB8IG51bWJlcl0hW3NlY29uZF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YSA9IHt9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGb3VyS2V5TWFwPFRGaXJzdCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVFNlY29uZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVFRoaXJkIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBURm91cnRoIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBUVmFsdWU+IHtcbiAgcHJpdmF0ZSBfZGF0YTogVHdvS2V5TWFwPFRGaXJzdCwgVFNlY29uZCwgVHdvS2V5TWFwPFRUaGlyZCwgVEZvdXJ0aCwgVFZhbHVlPj4gPSBuZXcgVHdvS2V5TWFwKCk7XG5cbiAgcHVibGljIHNldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQsIHRoaXJkOiBUVGhpcmQsIGZvdXJ0aDogVEZvdXJ0aCwgdmFsdWU6IFRWYWx1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZGF0YS5nZXQoZmlyc3QsIHNlY29uZCkpIHtcbiAgICAgIHRoaXMuX2RhdGEuc2V0KGZpcnN0LCBzZWNvbmQsIG5ldyBUd29LZXlNYXAoKSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEuZ2V0KGZpcnN0LCBzZWNvbmQpIS5zZXQodGhpcmQsIGZvdXJ0aCwgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQsIHRoaXJkOiBUVGhpcmQsIGZvdXJ0aDogVEZvdXJ0aCk6IFRWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGZpcnN0LCBzZWNvbmQpPy5nZXQodGhpcmQsIGZvdXJ0aCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YS5jbGVhcigpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICpcbiAqIFRoaXMgd2FzIGhlYXZpbHkgaW5zcGlyZWQgZnJvbSBtaWNyb3NvZnQvdnNjb2RlJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gc3lzdGVtIChNSVQpLlxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuaW1wb3J0IHsgSVNlcnZpY2VJZGVudGlmaWVyIH0gZnJvbSAnY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VzJztcblxuY29uc3QgRElfVEFSR0VUID0gJ2RpJHRhcmdldCc7XG5jb25zdCBESV9ERVBFTkRFTkNJRVMgPSAnZGkkZGVwZW5kZW5jaWVzJztcblxuZXhwb3J0IGNvbnN0IHNlcnZpY2VSZWdpc3RyeTogTWFwPHN0cmluZywgSVNlcnZpY2VJZGVudGlmaWVyPGFueT4+ID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZURlcGVuZGVuY2llcyhjdG9yOiBhbnkpOiB7IGlkOiBJU2VydmljZUlkZW50aWZpZXI8YW55PiwgaW5kZXg6IG51bWJlciwgb3B0aW9uYWw6IGJvb2xlYW4gfVtdIHtcbiAgcmV0dXJuIGN0b3JbRElfREVQRU5ERU5DSUVTXSB8fCBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcjxUPihpZDogc3RyaW5nKTogSVNlcnZpY2VJZGVudGlmaWVyPFQ+IHtcbiAgaWYgKHNlcnZpY2VSZWdpc3RyeS5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIHNlcnZpY2VSZWdpc3RyeS5nZXQoaWQpITtcbiAgfVxuXG4gIGNvbnN0IGRlY29yYXRvcjogYW55ID0gZnVuY3Rpb24gKHRhcmdldDogRnVuY3Rpb24sIGtleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdASVNlcnZpY2VOYW1lLWRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIHRvIGRlY29yYXRlIGEgcGFyYW1ldGVyJyk7XG4gICAgfVxuXG4gICAgc3RvcmVTZXJ2aWNlRGVwZW5kZW5jeShkZWNvcmF0b3IsIHRhcmdldCwgaW5kZXgpO1xuICB9O1xuXG4gIGRlY29yYXRvci50b1N0cmluZyA9ICgpID0+IGlkO1xuXG4gIHNlcnZpY2VSZWdpc3RyeS5zZXQoaWQsIGRlY29yYXRvcik7XG4gIHJldHVybiBkZWNvcmF0b3I7XG59XG5cbmZ1bmN0aW9uIHN0b3JlU2VydmljZURlcGVuZGVuY3koaWQ6IEZ1bmN0aW9uLCB0YXJnZXQ6IEZ1bmN0aW9uLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICgodGFyZ2V0IGFzIGFueSlbRElfVEFSR0VUXSA9PT0gdGFyZ2V0KSB7XG4gICAgKHRhcmdldCBhcyBhbnkpW0RJX0RFUEVOREVOQ0lFU10ucHVzaCh7IGlkLCBpbmRleCB9KTtcbiAgfSBlbHNlIHtcbiAgICAodGFyZ2V0IGFzIGFueSlbRElfREVQRU5ERU5DSUVTXSA9IFt7IGlkLCBpbmRleCB9XTtcbiAgICAodGFyZ2V0IGFzIGFueSlbRElfVEFSR0VUXSA9IHRhcmdldDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyBJRXZlbnQsIElFdmVudEVtaXR0ZXIgfSBmcm9tICdjb21tb24vRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7IElCdWZmZXIsIElCdWZmZXJTZXQgfSBmcm9tICdjb21tb24vYnVmZmVyL1R5cGVzJztcbmltcG9ydCB7IElEZWNQcml2YXRlTW9kZXMsIElDb3JlTW91c2VFdmVudCwgQ29yZU1vdXNlRW5jb2RpbmcsIElDb3JlTW91c2VQcm90b2NvbCwgQ29yZU1vdXNlRXZlbnRUeXBlLCBJQ2hhcnNldCwgSVdpbmRvd09wdGlvbnMsIElNb2RlcywgSUF0dHJpYnV0ZURhdGEsIFNjcm9sbFNvdXJjZSwgSURpc3Bvc2FibGUsIElDb2xvciwgQ3Vyc29yU3R5bGUsIEN1cnNvckluYWN0aXZlU3R5bGUsIElPc2NMaW5rRGF0YSB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICdjb21tb24vc2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IElEZWNvcmF0aW9uT3B0aW9ucywgSURlY29yYXRpb24sIElMaW5rSGFuZGxlciwgSVdpbmRvd3NQdHksIElMb2dnZXIgfSBmcm9tICdAeHRlcm0veHRlcm0nO1xuXG5leHBvcnQgY29uc3QgSUJ1ZmZlclNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUJ1ZmZlclNlcnZpY2U+KCdCdWZmZXJTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElCdWZmZXJTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgY29sczogbnVtYmVyO1xuICByZWFkb25seSByb3dzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGJ1ZmZlcjogSUJ1ZmZlcjtcbiAgcmVhZG9ubHkgYnVmZmVyczogSUJ1ZmZlclNldDtcbiAgaXNVc2VyU2Nyb2xsaW5nOiBib29sZWFuO1xuICBvblJlc2l6ZTogSUV2ZW50PHsgY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIgfT47XG4gIG9uU2Nyb2xsOiBJRXZlbnQ8bnVtYmVyPjtcbiAgc2Nyb2xsKGVyYXNlQXR0cjogSUF0dHJpYnV0ZURhdGEsIGlzV3JhcHBlZD86IGJvb2xlYW4pOiB2b2lkO1xuICBzY3JvbGxMaW5lcyhkaXNwOiBudW1iZXIsIHN1cHByZXNzU2Nyb2xsRXZlbnQ/OiBib29sZWFuLCBzb3VyY2U/OiBTY3JvbGxTb3VyY2UpOiB2b2lkO1xuICByZXNpemUoY29sczogbnVtYmVyLCByb3dzOiBudW1iZXIpOiB2b2lkO1xuICByZXNldCgpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgSUNvcmVNb3VzZVNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUNvcmVNb3VzZVNlcnZpY2U+KCdDb3JlTW91c2VTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElDb3JlTW91c2VTZXJ2aWNlIHtcbiAgYWN0aXZlUHJvdG9jb2w6IHN0cmluZztcbiAgYWN0aXZlRW5jb2Rpbmc6IHN0cmluZztcbiAgYXJlTW91c2VFdmVudHNBY3RpdmU6IGJvb2xlYW47XG4gIGFkZFByb3RvY29sKG5hbWU6IHN0cmluZywgcHJvdG9jb2w6IElDb3JlTW91c2VQcm90b2NvbCk6IHZvaWQ7XG4gIGFkZEVuY29kaW5nKG5hbWU6IHN0cmluZywgZW5jb2Rpbmc6IENvcmVNb3VzZUVuY29kaW5nKTogdm9pZDtcbiAgcmVzZXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBtb3VzZSBldmVudCB0byBiZSBzZW50LlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IHBhc3NlZCBhbGwgcHJvdG9jb2wgcmVzdHJpY3Rpb25zIGFuZCBhIHJlcG9ydFxuICAgKiB3YXMgc2VudCwgb3RoZXJ3aXNlIGZhbHNlLiBUaGUgcmV0dXJuIHZhbHVlIG1heSBiZSB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyXG4gICAqIHRoZSBkZWZhdWx0IGV2ZW50IGFjdGlvbiBpbiB0aGUgYm93c2VyIGNvbXBvbmVudCBzaG91bGQgYmUgb21pdHRlZC5cbiAgICpcbiAgICogTm90ZTogVGhlIG1ldGhvZCB3aWxsIGNoYW5nZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIGV2ZW50IG9iamVjdFxuICAgKiB0byBmdWxsZmlsbCBwcm90b2NvbCBhbmQgZW5jb2RpbmcgcmVzdHJpY3Rpb25zLlxuICAgKi9cbiAgdHJpZ2dlck1vdXNlRXZlbnQoZXZlbnQ6IElDb3JlTW91c2VFdmVudCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV2ZW50IHRvIGFubm91bmNlIGNoYW5nZXMgaW4gbW91c2UgdHJhY2tpbmcuXG4gICAqL1xuICBvblByb3RvY29sQ2hhbmdlOiBJRXZlbnQ8Q29yZU1vdXNlRXZlbnRUeXBlPjtcblxuICAvKipcbiAgICogSHVtYW4gcmVhZGFibGUgdmVyc2lvbiBvZiBtb3VzZSBldmVudHMuXG4gICAqL1xuICBleHBsYWluRXZlbnRzKGV2ZW50czogQ29yZU1vdXNlRXZlbnRUeXBlKTogeyBbZXZlbnQ6IHN0cmluZ106IGJvb2xlYW4gfTtcbn1cblxuZXhwb3J0IGNvbnN0IElDb3JlU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJQ29yZVNlcnZpY2U+KCdDb3JlU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJQ29yZVNlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5pdGlhbGx5IHRoZSBjdXJzb3Igd2lsbCBub3QgYmUgdmlzaWJsZSB1bnRpbCB0aGUgZmlyc3QgdGltZSB0aGUgdGVybWluYWxcbiAgICogaXMgZm9jdXNlZC5cbiAgICovXG4gIGlzQ3Vyc29ySW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIGlzQ3Vyc29ySGlkZGVuOiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IG1vZGVzOiBJTW9kZXM7XG4gIHJlYWRvbmx5IGRlY1ByaXZhdGVNb2RlczogSURlY1ByaXZhdGVNb2RlcztcblxuICByZWFkb25seSBvbkRhdGE6IElFdmVudDxzdHJpbmc+O1xuICByZWFkb25seSBvblVzZXJJbnB1dDogSUV2ZW50PHZvaWQ+O1xuICByZWFkb25seSBvbkJpbmFyeTogSUV2ZW50PHN0cmluZz47XG4gIHJlYWRvbmx5IG9uUmVxdWVzdFNjcm9sbFRvQm90dG9tOiBJRXZlbnQ8dm9pZD47XG5cbiAgcmVzZXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVHJpZ2dlcnMgdGhlIG9uRGF0YSBldmVudCBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdGhhdCBpcyBiZWluZyBlbWl0dGVkLlxuICAgKiBAcGFyYW0gd2FzVXNlcklucHV0IFdoZXRoZXIgdGhlIGRhdGEgb3JpZ2luYXRlZCBmcm9tIHRoZSB1c2VyIChhcyBvcHBvc2VkIHRvXG4gICAqIHJlc3VsdGluZyBmcm9tIHBhcnNpbmcgaW5jb21pbmcgZGF0YSkuIFdoZW4gdHJ1ZSB0aGlzIHdpbGwgYWxzbzpcbiAgICogLSBTY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgYnVmZmVyIGlmIG9wdGlvbiBzY3JvbGxPblVzZXJJbnB1dCBpcyB0cnVlLlxuICAgKiAtIEZpcmUgdGhlIGBvblVzZXJJbnB1dGAgZXZlbnQgKHNvIHNlbGVjdGlvbiBjYW4gYmUgY2xlYXJlZCkuXG4gICAqL1xuICB0cmlnZ2VyRGF0YUV2ZW50KGRhdGE6IHN0cmluZywgd2FzVXNlcklucHV0PzogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBvbkJpbmFyeSBldmVudCBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdGhhdCBpcyBiZWluZyBlbWl0dGVkLlxuICAgKi9cbiAgdHJpZ2dlckJpbmFyeUV2ZW50KGRhdGE6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBJQ2hhcnNldFNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUNoYXJzZXRTZXJ2aWNlPignQ2hhcnNldFNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUNoYXJzZXRTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgY2hhcnNldDogSUNoYXJzZXQgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGdsZXZlbDogbnVtYmVyO1xuXG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgRyBsZXZlbCBvZiB0aGUgdGVybWluYWwuXG4gICAqIEBwYXJhbSBnXG4gICAqL1xuICBzZXRnTGV2ZWwoZzogbnVtYmVyKTogdm9pZDtcblxuICAvKipcbiAgICogU2V0IHRoZSBjaGFyc2V0IGZvciB0aGUgZ2l2ZW4gRyBsZXZlbCBvZiB0aGUgdGVybWluYWwuXG4gICAqIEBwYXJhbSBnXG4gICAqIEBwYXJhbSBjaGFyc2V0XG4gICAqL1xuICBzZXRnQ2hhcnNldChnOiBudW1iZXIsIGNoYXJzZXQ6IElDaGFyc2V0IHwgdW5kZWZpbmVkKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZUlkZW50aWZpZXI8VD4ge1xuICAoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICB0eXBlOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCcmFuZGVkU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xufVxuXG50eXBlIEdldExlYWRpbmdOb25TZXJ2aWNlQXJnczxUQXJncyBleHRlbmRzIGFueVtdPiA9IFRBcmdzIGV4dGVuZHMgW10gPyBbXVxuICA6IFRBcmdzIGV4dGVuZHMgWy4uLmluZmVyIFRGaXJzdCwgaW5mZXIgVExhc3RdID8gVExhc3QgZXh0ZW5kcyBJQnJhbmRlZFNlcnZpY2UgPyBHZXRMZWFkaW5nTm9uU2VydmljZUFyZ3M8VEZpcnN0PiA6IFRBcmdzXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IGNvbnN0IElJbnN0YW50aWF0aW9uU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJSW5zdGFudGlhdGlvblNlcnZpY2U+KCdJbnN0YW50aWF0aW9uU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJSW5zdGFudGlhdGlvblNlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICBzZXRTZXJ2aWNlPFQ+KGlkOiBJU2VydmljZUlkZW50aWZpZXI8VD4sIGluc3RhbmNlOiBUKTogdm9pZDtcbiAgZ2V0U2VydmljZTxUPihpZDogSVNlcnZpY2VJZGVudGlmaWVyPFQ+KTogVCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlSW5zdGFuY2U8Q3RvciBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSwgUiBleHRlbmRzIEluc3RhbmNlVHlwZTxDdG9yPj4odDogQ3RvciwgLi4uYXJnczogR2V0TGVhZGluZ05vblNlcnZpY2VBcmdzPENvbnN0cnVjdG9yUGFyYW1ldGVyczxDdG9yPj4pOiBSO1xufVxuXG5leHBvcnQgZW51bSBMb2dMZXZlbEVudW0ge1xuICBUUkFDRSA9IDAsXG4gIERFQlVHID0gMSxcbiAgSU5GTyA9IDIsXG4gIFdBUk4gPSAzLFxuICBFUlJPUiA9IDQsXG4gIE9GRiA9IDVcbn1cblxuZXhwb3J0IGNvbnN0IElMb2dTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElMb2dTZXJ2aWNlPignTG9nU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJTG9nU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IGxvZ0xldmVsOiBMb2dMZXZlbEVudW07XG5cbiAgdHJhY2UobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGluZm8obWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgSU9wdGlvbnNTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElPcHRpb25zU2VydmljZT4oJ09wdGlvbnNTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElPcHRpb25zU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSByYXcgb3B0aW9ucyBvYmplY3QsIHRoaXMgaXMgYW4gaW50ZXJuYWwtb25seSBmYXN0IHBhdGggZm9yIGFjY2Vzc2luZ1xuICAgKiBzaW5nbGUgb3B0aW9ucyB3aXRob3V0IGFueSB2YWxpZGF0aW9uIGFzIHdlIHRydXN0IFR5cGVTY3JpcHQgdG8gZW5mb3JjZSBjb3JyZWN0IHVzYWdlXG4gICAqIGludGVybmFsbHkuXG4gICAqL1xuICByZWFkb25seSByYXdPcHRpb25zOiBSZXF1aXJlZDxJVGVybWluYWxPcHRpb25zPjtcblxuICAvKipcbiAgICogT3B0aW9ucyBhcyBleHBvc2VkIHRocm91Z2ggdGhlIHB1YmxpYyBBUEksIHRoaXMgcHJvcGVydHkgdXNlcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHdpdGhcbiAgICogdmFsaWRhdGlvbiB3aGljaCBtYWtlcyBpdCBzYWZlciBidXQgc2xvd2VyLiB7QGxpbmsgcmF3T3B0aW9uc30gc2hvdWxkIGJlIHVzZWQgZm9yIHByZXR0eSBtdWNoXG4gICAqIGFsbCBpbnRlcm5hbCB1c2FnZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPElUZXJtaW5hbE9wdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB3aGVuIGFueSBvcHRpb24gY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uT3B0aW9uQ2hhbmdlOiBJRXZlbnQ8a2V5b2YgSVRlcm1pbmFsT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIHdoZW4gYSBzcGVjaWZpYyBvcHRpb24gY2hhbmdlcywgdGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGlzXG4gICAqIHByZWZlcnJlZCBvdmVyIHtAbGluayBvbk9wdGlvbkNoYW5nZX0gd2hlbiBvbmx5IGEgc2luZ2xlIG9wdGlvbiBpcyBiZWluZyBsaXN0ZW5lZCB0by5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgb25TcGVjaWZpY09wdGlvbkNoYW5nZTxUIGV4dGVuZHMga2V5b2YgSVRlcm1pbmFsT3B0aW9ucz4oa2V5OiBULCBsaXN0ZW5lcjogKGFyZzE6IFJlcXVpcmVkPElUZXJtaW5hbE9wdGlvbnM+W1RdKSA9PiBhbnkpOiBJRGlzcG9zYWJsZTtcblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciBmb3Igd2hlbiBhIHNldCBvZiBzcGVjaWZpYyBvcHRpb25zIGNoYW5nZSwgdGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZFxuICAgKiB0aGF0IGlzIHByZWZlcnJlZCBvdmVyIHtAbGluayBvbk9wdGlvbkNoYW5nZX0gd2hlbiBtdWx0aXBsZSBvcHRpb25zIGFyZSBiZWluZyBsaXN0ZW5lZCB0byBhbmRcbiAgICogaGFuZGxlZCB0aGUgc2FtZSB3YXkuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIG9uTXVsdGlwbGVPcHRpb25DaGFuZ2Uoa2V5czogKGtleW9mIElUZXJtaW5hbE9wdGlvbnMpW10sIGxpc3RlbmVyOiAoKSA9PiBhbnkpOiBJRGlzcG9zYWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgRm9udFdlaWdodCA9ICdub3JtYWwnIHwgJ2JvbGQnIHwgJzEwMCcgfCAnMjAwJyB8ICczMDAnIHwgJzQwMCcgfCAnNTAwJyB8ICc2MDAnIHwgJzcwMCcgfCAnODAwJyB8ICc5MDAnIHwgbnVtYmVyO1xuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAndHJhY2UnIHwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnb2ZmJztcblxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWxPcHRpb25zIHtcbiAgYWxsb3dQcm9wb3NlZEFwaT86IGJvb2xlYW47XG4gIGFsbG93VHJhbnNwYXJlbmN5PzogYm9vbGVhbjtcbiAgYWx0Q2xpY2tNb3Zlc0N1cnNvcj86IGJvb2xlYW47XG4gIGNvbHM/OiBudW1iZXI7XG4gIGNvbnZlcnRFb2w/OiBib29sZWFuO1xuICBjdXJzb3JCbGluaz86IGJvb2xlYW47XG4gIGN1cnNvclN0eWxlPzogQ3Vyc29yU3R5bGU7XG4gIGN1cnNvcldpZHRoPzogbnVtYmVyO1xuICBjdXJzb3JJbmFjdGl2ZVN0eWxlPzogQ3Vyc29ySW5hY3RpdmVTdHlsZTtcbiAgY3VzdG9tR2x5cGhzPzogYm9vbGVhbjtcbiAgZGlzYWJsZVN0ZGluPzogYm9vbGVhbjtcbiAgZG9jdW1lbnRPdmVycmlkZT86IGFueSB8IG51bGw7XG4gIGRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzPzogYm9vbGVhbjtcbiAgZmFzdFNjcm9sbE1vZGlmaWVyPzogJ25vbmUnIHwgJ2FsdCcgfCAnY3RybCcgfCAnc2hpZnQnO1xuICBmYXN0U2Nyb2xsU2Vuc2l0aXZpdHk/OiBudW1iZXI7XG4gIGZvbnRTaXplPzogbnVtYmVyO1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICBmb250V2VpZ2h0PzogRm9udFdlaWdodDtcbiAgZm9udFdlaWdodEJvbGQ/OiBGb250V2VpZ2h0O1xuICBpZ25vcmVCcmFja2V0ZWRQYXN0ZU1vZGU/OiBib29sZWFuO1xuICBsZXR0ZXJTcGFjaW5nPzogbnVtYmVyO1xuICBsaW5lSGVpZ2h0PzogbnVtYmVyO1xuICBsaW5rSGFuZGxlcj86IElMaW5rSGFuZGxlciB8IG51bGw7XG4gIGxvZ0xldmVsPzogTG9nTGV2ZWw7XG4gIGxvZ2dlcj86IElMb2dnZXIgfCBudWxsO1xuICBtYWNPcHRpb25Jc01ldGE/OiBib29sZWFuO1xuICBtYWNPcHRpb25DbGlja0ZvcmNlc1NlbGVjdGlvbj86IGJvb2xlYW47XG4gIG1pbmltdW1Db250cmFzdFJhdGlvPzogbnVtYmVyO1xuICByZXNjYWxlT3ZlcmxhcHBpbmdHbHlwaHM/OiBib29sZWFuO1xuICByaWdodENsaWNrU2VsZWN0c1dvcmQ/OiBib29sZWFuO1xuICByb3dzPzogbnVtYmVyO1xuICBzY3JlZW5SZWFkZXJNb2RlPzogYm9vbGVhbjtcbiAgc2Nyb2xsYmFjaz86IG51bWJlcjtcbiAgc2Nyb2xsT25Vc2VySW5wdXQ/OiBib29sZWFuO1xuICBzY3JvbGxTZW5zaXRpdml0eT86IG51bWJlcjtcbiAgc21vb3RoU2Nyb2xsRHVyYXRpb24/OiBudW1iZXI7XG4gIHRhYlN0b3BXaWR0aD86IG51bWJlcjtcbiAgdGhlbWU/OiBJVGhlbWU7XG4gIHdpbmRvd3NNb2RlPzogYm9vbGVhbjtcbiAgd2luZG93c1B0eT86IElXaW5kb3dzUHR5O1xuICB3aW5kb3dPcHRpb25zPzogSVdpbmRvd09wdGlvbnM7XG4gIHdvcmRTZXBhcmF0b3I/OiBzdHJpbmc7XG4gIG92ZXJ2aWV3UnVsZXJXaWR0aD86IG51bWJlcjtcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGNhbmNlbEV2ZW50czogYm9vbGVhbjtcbiAgdGVybU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGhlbWUge1xuICBmb3JlZ3JvdW5kPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGN1cnNvckFjY2VudD86IHN0cmluZztcbiAgc2VsZWN0aW9uRm9yZWdyb3VuZD86IHN0cmluZztcbiAgc2VsZWN0aW9uQmFja2dyb3VuZD86IHN0cmluZztcbiAgc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBibGFjaz86IHN0cmluZztcbiAgcmVkPzogc3RyaW5nO1xuICBncmVlbj86IHN0cmluZztcbiAgeWVsbG93Pzogc3RyaW5nO1xuICBibHVlPzogc3RyaW5nO1xuICBtYWdlbnRhPzogc3RyaW5nO1xuICBjeWFuPzogc3RyaW5nO1xuICB3aGl0ZT86IHN0cmluZztcbiAgYnJpZ2h0QmxhY2s/OiBzdHJpbmc7XG4gIGJyaWdodFJlZD86IHN0cmluZztcbiAgYnJpZ2h0R3JlZW4/OiBzdHJpbmc7XG4gIGJyaWdodFllbGxvdz86IHN0cmluZztcbiAgYnJpZ2h0Qmx1ZT86IHN0cmluZztcbiAgYnJpZ2h0TWFnZW50YT86IHN0cmluZztcbiAgYnJpZ2h0Q3lhbj86IHN0cmluZztcbiAgYnJpZ2h0V2hpdGU/OiBzdHJpbmc7XG4gIGV4dGVuZGVkQW5zaT86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgSU9zY0xpbmtTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElPc2NMaW5rU2VydmljZT4oJ09zY0xpbmtTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElPc2NMaW5rU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGluayB0byB0aGUgc2VydmljZSwgcmV0dXJuaW5nIHRoZSBsaW5rIElELiBUaGUgbGluayBkYXRhIGlzIG1hbmFnZWQgYnkgdGhpc1xuICAgKiBzZXJ2aWNlIGFuZCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhpcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpcyB0cmltbWVkIG9mZiB0aGUgYnVmZmVyLlxuICAgKi9cbiAgcmVnaXN0ZXJMaW5rKGxpbmtEYXRhOiBJT3NjTGlua0RhdGEpOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBZGRzIGEgbGluZSB0byBhIGxpbmsgaWYgbmVlZGVkLlxuICAgKi9cbiAgYWRkTGluZVRvTGluayhsaW5rSWQ6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEdldCB0aGUgbGluayBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGxpbmsgSUQuICovXG4gIGdldExpbmtEYXRhKGxpbmtJZDogbnVtYmVyKTogSU9zY0xpbmtEYXRhIHwgdW5kZWZpbmVkO1xufVxuXG4vKlxuICogV2lkdGggYW5kIEdyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgcHJvcGVydGllcyBvZiBhIGNoYXJhY3RlciBhcyBhIGJpdCBtYXNrLlxuICpcbiAqIGJpdCAwOiBzaG91bGRKb2luIC0gc2hvdWxkIGNvbWJpbmUgd2l0aCBwcmVjZWRpbmcgY2hhcmFjdGVyLlxuICogYml0IDEuLjI6IHdjd2lkdGggLSBzZWUgVW5pY29kZUNoYXJXaWR0aC5cbiAqIGJpdCAzLi4zMTogY2xhc3Mgb2YgY2hhcmFjdGVyIChjdXJyZW50bHkgb25seSA0IGJpdHMgYXJlIHVzZWQpLlxuICogICBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lZCBncmFwaGVtZSBjbHVzdGVyaW5nIC0gaS5lLiB3aGljaCBjb2RlcG9pbnRzXG4gKiAgIGFyZSB0byBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGNvbXBvdW5kIGNoYXJhY3Rlci5cbiAqXG4gKiBVc2UgdGhlIFVuaWNvZGVTZXJ2aWNlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eVZhbHVlIHRvIGNyZWF0ZSBhXG4gKiBVbmljb2RlQ2hhclByb3BlcnRpZXM7IHVzZSBleHRyYWN0U2hvdWxkSm9pbiwgZXh0cmFjdFdpZHRoLCBhbmRcbiAqIGV4dHJhY3RDaGFyS2luZCB0byBleHRyYWN0IHRoZSBjb21wb25lbnRzLlxuICovXG5leHBvcnQgdHlwZSBVbmljb2RlQ2hhclByb3BlcnRpZXMgPSBudW1iZXI7XG5cbi8qKlxuICogV2lkdGggaW4gY29sdW1ucyBvZiBhIGNoYXJhY3Rlci5cbiAqIEluIGEgQ0pLIGNvbnRleHQsIFwiaGFsZi13aWR0aFwiIGNoYXJhY3RlcnMgKHN1Y2ggYXMgTGF0aW4pIGFyZSB3aWR0aCAxLFxuICogd2hpbGUgXCJmdWxsLXdpZHRoXCIgY2hhcmFjdGVycyAoc3VjaCBhcyBLYW5qaSkgYXJlIDIgY29sdW1ucyB3aWRlLlxuICogQ29tYmluaW5nIGNoYXJhY3RlcnMgKHN1Y2ggYXMgYWNjZW50cykgYXJlIHdpZHRoIDAuXG4gKi9cbmV4cG9ydCB0eXBlIFVuaWNvZGVDaGFyV2lkdGggPSAwIHwgMSB8IDI7XG5cbmV4cG9ydCBjb25zdCBJVW5pY29kZVNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SVVuaWNvZGVTZXJ2aWNlPignVW5pY29kZVNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSVVuaWNvZGVTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG4gIC8qKiBSZWdpc3RlciBhbiBVbmljb2RlIHZlcnNpb24gcHJvdmlkZXIuICovXG4gIHJlZ2lzdGVyKHByb3ZpZGVyOiBJVW5pY29kZVZlcnNpb25Qcm92aWRlcik6IHZvaWQ7XG4gIC8qKiBSZWdpc3RlcmVkIFVuaWNvZGUgdmVyc2lvbnMuICovXG4gIHJlYWRvbmx5IHZlcnNpb25zOiBzdHJpbmdbXTtcbiAgLyoqIEN1cnJlbnRseSBhY3RpdmUgdmVyc2lvbi4gKi9cbiAgYWN0aXZlVmVyc2lvbjogc3RyaW5nO1xuICAvKiogRXZlbnQgdHJpZ2dlcmVkLCB3aGVuIGFjdGl2YXRlIHZlcnNpb24gY2hhbmdlZC4gKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2U6IElFdmVudDxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBVbmljb2RlIHZlcnNpb24gZGVwZW5kZW50XG4gICAqL1xuICB3Y3dpZHRoKGNvZGVwb2ludDogbnVtYmVyKTogVW5pY29kZUNoYXJXaWR0aDtcbiAgZ2V0U3RyaW5nQ2VsbFdpZHRoKHM6IHN0cmluZyk6IG51bWJlcjtcbiAgLyoqXG4gICAqIFJldHVybiBjaGFyYWN0ZXIgd2lkdGggYW5kIHR5cGUgZm9yIGdyYXBoZW1lIGNsdXN0ZXJpbmcuXG4gICAqIElmIHByZWNlZGluZyAhPSAwLCBpdCBpcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyO1xuICAgKiBpbiB0aGF0IGNhc2UgdGhlIHJlc3VsdCBzcGVjaWZpZXMgaWYgdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGpvaW5lZC5cbiAgICovXG4gIGNoYXJQcm9wZXJ0aWVzKGNvZGVwb2ludDogbnVtYmVyLCBwcmVjZWRpbmc6IFVuaWNvZGVDaGFyUHJvcGVydGllcyk6IFVuaWNvZGVDaGFyUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVW5pY29kZVZlcnNpb25Qcm92aWRlciB7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgd2N3aWR0aCh1Y3M6IG51bWJlcik6IFVuaWNvZGVDaGFyV2lkdGg7XG4gIGNoYXJQcm9wZXJ0aWVzKGNvZGVwb2ludDogbnVtYmVyLCBwcmVjZWRpbmc6IFVuaWNvZGVDaGFyUHJvcGVydGllcyk6IFVuaWNvZGVDaGFyUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IElEZWNvcmF0aW9uU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJRGVjb3JhdGlvblNlcnZpY2U+KCdEZWNvcmF0aW9uU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJRGVjb3JhdGlvblNlcnZpY2UgZXh0ZW5kcyBJRGlzcG9zYWJsZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuICByZWFkb25seSBkZWNvcmF0aW9uczogSXRlcmFibGVJdGVyYXRvcjxJSW50ZXJuYWxEZWNvcmF0aW9uPjtcbiAgcmVhZG9ubHkgb25EZWNvcmF0aW9uUmVnaXN0ZXJlZDogSUV2ZW50PElJbnRlcm5hbERlY29yYXRpb24+O1xuICByZWFkb25seSBvbkRlY29yYXRpb25SZW1vdmVkOiBJRXZlbnQ8SUludGVybmFsRGVjb3JhdGlvbj47XG4gIHJlZ2lzdGVyRGVjb3JhdGlvbihkZWNvcmF0aW9uT3B0aW9uczogSURlY29yYXRpb25PcHRpb25zKTogSURlY29yYXRpb24gfCB1bmRlZmluZWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGEgY2FsbGJhY2sgb3ZlciB0aGUgZGVjb3JhdGlvbiBhdCBhIGNlbGwgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpLiBUaGlzIHVzZXMgYSBjYWxsYmFja1xuICAgKiBpbnN0ZWFkIG9mIGFuIGl0ZXJhdG9yIGFzIGl0J3MgdHlwaWNhbGx5IHVzZWQgaW4gaG90IGNvZGUgcGF0aHMuXG4gICAqL1xuICBmb3JFYWNoRGVjb3JhdGlvbkF0Q2VsbCh4OiBudW1iZXIsIGxpbmU6IG51bWJlciwgbGF5ZXI6ICdib3R0b20nIHwgJ3RvcCcgfCB1bmRlZmluZWQsIGNhbGxiYWNrOiAoZGVjb3JhdGlvbjogSUludGVybmFsRGVjb3JhdGlvbikgPT4gdm9pZCk6IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcm5hbERlY29yYXRpb24gZXh0ZW5kcyBJRGVjb3JhdGlvbiB7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IElEZWNvcmF0aW9uT3B0aW9ucztcbiAgcmVhZG9ubHkgYmFja2dyb3VuZENvbG9yUkdCOiBJQ29sb3IgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGZvcmVncm91bmRDb2xvclJHQjogSUNvbG9yIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBvblJlbmRlckVtaXR0ZXI6IElFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+O1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKlxuICogKEVYUEVSSU1FTlRBTCkgVGhpcyBBZGRvbiBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuICovXG5cbmltcG9ydCB0eXBlIHsgSUJ1ZmZlciwgSUJ1ZmZlckNlbGwsIElCdWZmZXJSYW5nZSwgSVRlcm1pbmFsQWRkb24sIFRlcm1pbmFsIH0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcbmltcG9ydCB0eXBlIHsgSUhUTUxTZXJpYWxpemVPcHRpb25zLCBTZXJpYWxpemVBZGRvbiBhcyBJU2VyaWFsaXplQXBpLCBJU2VyaWFsaXplT3B0aW9ucywgSVNlcmlhbGl6ZVJhbmdlIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLXNlcmlhbGl6ZSc7XG5pbXBvcnQgeyBERUZBVUxUX0FOU0lfQ09MT1JTIH0gZnJvbSAnYnJvd3Nlci9zZXJ2aWNlcy9UaGVtZVNlcnZpY2UnO1xuaW1wb3J0IHsgSUF0dHJpYnV0ZURhdGEsIElDb2xvciB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5cbmZ1bmN0aW9uIGNvbnN0cmFpbih2YWx1ZTogbnVtYmVyLCBsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KGxvdywgTWF0aC5taW4odmFsdWUsIGhpZ2gpKTtcbn1cblxuLy8gVE9ETzogUmVmaW5lIHRoaXMgdGVtcGxhdGUgY2xhc3MgbGF0ZXJcbmFic3RyYWN0IGNsYXNzIEJhc2VTZXJpYWxpemVIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9idWZmZXI6IElCdWZmZXJcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplKHJhbmdlOiBJQnVmZmVyUmFuZ2UsIGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgLy8gd2UgbmVlZCB0d28gb2YgdGhlbSB0byBmbGlwIGJldHdlZW4gb2xkIGFuZCBuZXcgY2VsbFxuICAgIGNvbnN0IGNlbGwxID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gICAgY29uc3QgY2VsbDIgPSB0aGlzLl9idWZmZXIuZ2V0TnVsbENlbGwoKTtcbiAgICBsZXQgb2xkQ2VsbCA9IGNlbGwxO1xuXG4gICAgY29uc3Qgc3RhcnRSb3cgPSByYW5nZS5zdGFydC55O1xuICAgIGNvbnN0IGVuZFJvdyA9IHJhbmdlLmVuZC55O1xuICAgIGNvbnN0IHN0YXJ0Q29sdW1uID0gcmFuZ2Uuc3RhcnQueDtcbiAgICBjb25zdCBlbmRDb2x1bW4gPSByYW5nZS5lbmQueDtcblxuICAgIHRoaXMuX2JlZm9yZVNlcmlhbGl6ZShlbmRSb3cgLSBzdGFydFJvdywgc3RhcnRSb3csIGVuZFJvdyk7XG5cbiAgICBmb3IgKGxldCByb3cgPSBzdGFydFJvdzsgcm93IDw9IGVuZFJvdzsgcm93KyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLl9idWZmZXIuZ2V0TGluZShyb3cpO1xuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRMaW5lQ29sdW1uID0gcm93ID09PSByYW5nZS5zdGFydC55ID8gc3RhcnRDb2x1bW4gOiAwO1xuICAgICAgICBjb25zdCBlbmRMaW5lQ29sdW1uID0gcm93ID09PSByYW5nZS5lbmQueSA/IGVuZENvbHVtbjogbGluZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGNvbCA9IHN0YXJ0TGluZUNvbHVtbjsgY29sIDwgZW5kTGluZUNvbHVtbjsgY29sKyspIHtcbiAgICAgICAgICBjb25zdCBjID0gbGluZS5nZXRDZWxsKGNvbCwgb2xkQ2VsbCA9PT0gY2VsbDEgPyBjZWxsMiA6IGNlbGwxKTtcbiAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ2FuJ3QgZ2V0IGNlbGwgYXQgcm93PSR7cm93fSwgY29sPSR7Y29sfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX25leHRDZWxsKGMsIG9sZENlbGwsIHJvdywgY29sKTtcbiAgICAgICAgICBvbGRDZWxsID0gYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fcm93RW5kKHJvdywgcm93ID09PSBlbmRSb3cpO1xuICAgIH1cblxuICAgIHRoaXMuX2FmdGVyU2VyaWFsaXplKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplU3RyaW5nKGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dENlbGwoY2VsbDogSUJ1ZmZlckNlbGwsIG9sZENlbGw6IElCdWZmZXJDZWxsLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHsgfVxuICBwcm90ZWN0ZWQgX3Jvd0VuZChyb3c6IG51bWJlciwgaXNMYXN0Um93OiBib29sZWFuKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIF9iZWZvcmVTZXJpYWxpemUocm93czogbnVtYmVyLCBzdGFydFJvdzogbnVtYmVyLCBlbmRSb3c6IG51bWJlcik6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBfYWZ0ZXJTZXJpYWxpemUoKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIF9zZXJpYWxpemVTdHJpbmcoZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24/OiBib29sZWFuKTogc3RyaW5nIHsgcmV0dXJuICcnOyB9XG59XG5cbmZ1bmN0aW9uIGVxdWFsRmcoY2VsbDE6IElCdWZmZXJDZWxsIHwgSUF0dHJpYnV0ZURhdGEsIGNlbGwyOiBJQnVmZmVyQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2VsbDEuZ2V0RmdDb2xvck1vZGUoKSA9PT0gY2VsbDIuZ2V0RmdDb2xvck1vZGUoKVxuICAgICYmIGNlbGwxLmdldEZnQ29sb3IoKSA9PT0gY2VsbDIuZ2V0RmdDb2xvcigpO1xufVxuXG5mdW5jdGlvbiBlcXVhbEJnKGNlbGwxOiBJQnVmZmVyQ2VsbCB8IElBdHRyaWJ1dGVEYXRhLCBjZWxsMjogSUJ1ZmZlckNlbGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNlbGwxLmdldEJnQ29sb3JNb2RlKCkgPT09IGNlbGwyLmdldEJnQ29sb3JNb2RlKClcbiAgICAmJiBjZWxsMS5nZXRCZ0NvbG9yKCkgPT09IGNlbGwyLmdldEJnQ29sb3IoKTtcbn1cblxuZnVuY3Rpb24gZXF1YWxGbGFncyhjZWxsMTogSUJ1ZmZlckNlbGwgfCBJQXR0cmlidXRlRGF0YSwgY2VsbDI6IElCdWZmZXJDZWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBjZWxsMS5pc0ludmVyc2UoKSA9PT0gY2VsbDIuaXNJbnZlcnNlKClcbiAgICAmJiBjZWxsMS5pc0JvbGQoKSA9PT0gY2VsbDIuaXNCb2xkKClcbiAgICAmJiBjZWxsMS5pc1VuZGVybGluZSgpID09PSBjZWxsMi5pc1VuZGVybGluZSgpXG4gICAgJiYgY2VsbDEuaXNPdmVybGluZSgpID09PSBjZWxsMi5pc092ZXJsaW5lKClcbiAgICAmJiBjZWxsMS5pc0JsaW5rKCkgPT09IGNlbGwyLmlzQmxpbmsoKVxuICAgICYmIGNlbGwxLmlzSW52aXNpYmxlKCkgPT09IGNlbGwyLmlzSW52aXNpYmxlKClcbiAgICAmJiBjZWxsMS5pc0l0YWxpYygpID09PSBjZWxsMi5pc0l0YWxpYygpXG4gICAgJiYgY2VsbDEuaXNEaW0oKSA9PT0gY2VsbDIuaXNEaW0oKVxuICAgICYmIGNlbGwxLmlzU3RyaWtldGhyb3VnaCgpID09PSBjZWxsMi5pc1N0cmlrZXRocm91Z2goKTtcbn1cblxuY2xhc3MgU3RyaW5nU2VyaWFsaXplSGFuZGxlciBleHRlbmRzIEJhc2VTZXJpYWxpemVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBfcm93SW5kZXg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2FsbFJvd3M6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfYWxsUm93U2VwYXJhdG9yczogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBwcml2YXRlIF9jdXJyZW50Um93OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfbnVsbENlbGxDb3VudDogbnVtYmVyID0gMDtcblxuICAvLyB3ZSBjYW4gc2VlIGEgZnVsbCBjb2xvcmVkIGNlbGwgYW5kIGEgbnVsbCBjZWxsIHRoYXQgb25seSBoYXZlIGJhY2tncm91bmQgdGhlIHNhbWUgc3R5bGVcbiAgLy8gYnV0IHRoZSBpbmZvcm1hdGlvbiBpc24ndCBwcmVzZXJ2ZWQgYnkgbnVsbCBjZWxsIGl0c2VsZlxuICAvLyBzbyB3ZWUgbmVlZCB0byByZWNvcmQgaXQgd2hlbiByZXF1aXJlZC5cbiAgcHJpdmF0ZSBfY3Vyc29yU3R5bGU6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG5cbiAgLy8gd2hlcmUgZXhhY3QgdGhlIGN1cnNvciBzdHlsZXMgY29tZXMgZnJvbVxuICAvLyBiZWNhdXNlIHdlIGNhbid0IGNvcHkgdGhlIGNlbGwgZGlyZWN0bHlcbiAgLy8gc28gd2UgcmVtZW1iZXIgd2hlcmUgdGhlIGNvbnRlbnQgY29tZXMgZnJvbSBpbnN0ZWFkXG4gIHByaXZhdGUgX2N1cnNvclN0eWxlUm93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9jdXJzb3JTdHlsZUNvbDogbnVtYmVyID0gMDtcblxuICAvLyB0aGlzIGlzIGEgbnVsbCBjZWxsIGZvciByZWZlcmVuY2UgZm9yIGNoZWNraW5nIHdoZXRoZXIgYmFja2dyb3VuZCBpcyBlbXB0eSBvciBub3RcbiAgcHJpdmF0ZSBfYmFja2dyb3VuZENlbGw6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG5cbiAgcHJpdmF0ZSBfZmlyc3RSb3c6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RDdXJzb3JSb3c6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RDdXJzb3JDb2w6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2xhc3RDb250ZW50Q3Vyc29yUm93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q29udGVudEN1cnNvckNvbDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWZmZXI6IElCdWZmZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVybWluYWw6IFRlcm1pbmFsXG4gICkge1xuICAgIHN1cGVyKGJ1ZmZlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2JlZm9yZVNlcmlhbGl6ZShyb3dzOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fYWxsUm93cyA9IG5ldyBBcnJheTxzdHJpbmc+KHJvd3MpO1xuICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gc3RhcnQ7XG4gICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHN0YXJ0O1xuICAgIHRoaXMuX2ZpcnN0Um93ID0gc3RhcnQ7XG4gIH1cblxuICBwcml2YXRlIF90aGlzUm93TGFzdENoYXI6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gIHByaXZhdGUgX3RoaXNSb3dMYXN0U2Vjb25kQ2hhcjogSUJ1ZmZlckNlbGwgPSB0aGlzLl9idWZmZXIuZ2V0TnVsbENlbGwoKTtcbiAgcHJpdmF0ZSBfbmV4dFJvd0ZpcnN0Q2hhcjogSUJ1ZmZlckNlbGwgPSB0aGlzLl9idWZmZXIuZ2V0TnVsbENlbGwoKTtcbiAgcHJvdGVjdGVkIF9yb3dFbmQocm93OiBudW1iZXIsIGlzTGFzdFJvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIGlmIHRoZXJlIGlzIGNvbG9yZnVsIGVtcHR5IGNlbGwgYXQgbGluZSBlbmQsIHdoZSBtdXN0IHBhZCBpdCBiYWNrLCBvciB0aGUgdGhlIGNvbG9yIGJsb2NrXG4gICAgLy8gd2lsbCBtaXNzaW5nXG4gICAgaWYgKHRoaXMuX251bGxDZWxsQ291bnQgPiAwICYmICFlcXVhbEJnKHRoaXMuX2N1cnNvclN0eWxlLCB0aGlzLl9iYWNrZ3JvdW5kQ2VsbCkpIHtcbiAgICAgIC8vIHVzZSBjbGVhciByaWdodCB0byBzZXQgYmFja2dyb3VuZC5cbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gYFxcdTAwMWJbJHt0aGlzLl9udWxsQ2VsbENvdW50fVhgO1xuICAgIH1cblxuICAgIGxldCByb3dTZXBhcmF0b3IgPSAnJztcblxuICAgIC8vIGhhbmRsZSByb3cgc2VwYXJhdG9yXG4gICAgaWYgKCFpc0xhc3RSb3cpIHtcbiAgICAgIC8vIEVuYWJsZSBCQ0VcbiAgICAgIGlmIChyb3cgLSB0aGlzLl9maXJzdFJvdyA+PSB0aGlzLl90ZXJtaW5hbC5yb3dzKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5nZXRMaW5lKHRoaXMuX2N1cnNvclN0eWxlUm93KT8uZ2V0Q2VsbCh0aGlzLl9jdXJzb3JTdHlsZUNvbCwgdGhpcy5fYmFja2dyb3VuZENlbGwpO1xuICAgICAgfVxuXG4gICAgICAvLyBGZXRjaCBjdXJyZW50IGxpbmVcbiAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93KSE7XG4gICAgICAvLyBGZXRjaCBuZXh0IGxpbmVcbiAgICAgIGNvbnN0IG5leHRMaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93ICsgMSkhO1xuXG4gICAgICBpZiAoIW5leHRMaW5lLmlzV3JhcHBlZCkge1xuICAgICAgICAvLyBqdXN0IGluc2VydCB0aGUgbGluZSBicmVha1xuICAgICAgICByb3dTZXBhcmF0b3IgPSAnXFxyXFxuJztcbiAgICAgICAgLy8gd2Ugc2VuZGVkIHRoZSBlbnRlclxuICAgICAgICB0aGlzLl9sYXN0Q3Vyc29yUm93ID0gcm93ICsgMTtcbiAgICAgICAgdGhpcy5fbGFzdEN1cnNvckNvbCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dTZXBhcmF0b3IgPSAnJztcbiAgICAgICAgY29uc3QgdGhpc1Jvd0xhc3RDaGFyID0gY3VycmVudExpbmUuZ2V0Q2VsbChjdXJyZW50TGluZS5sZW5ndGggLSAxLCB0aGlzLl90aGlzUm93TGFzdENoYXIpITtcbiAgICAgICAgY29uc3QgdGhpc1Jvd0xhc3RTZWNvbmRDaGFyID0gY3VycmVudExpbmUuZ2V0Q2VsbChjdXJyZW50TGluZS5sZW5ndGggLSAyLCB0aGlzLl90aGlzUm93TGFzdFNlY29uZENoYXIpITtcbiAgICAgICAgY29uc3QgbmV4dFJvd0ZpcnN0Q2hhciA9IG5leHRMaW5lLmdldENlbGwoMCwgdGhpcy5fbmV4dFJvd0ZpcnN0Q2hhcikhO1xuICAgICAgICBjb25zdCBpc05leHRSb3dGaXJzdENoYXJEb3VibGVXaWR0aCA9IG5leHRSb3dGaXJzdENoYXIuZ2V0V2lkdGgoKSA+IDE7XG5cbiAgICAgICAgLy8gdmFsaWRhdGUgd2hldGhlciB0aGlzIGxpbmUgd3JhcCBpcyBldmVyIHBvc3NpYmxlXG4gICAgICAgIC8vIHdoaWNoIG1lYW4gd2hldGhlciBjdXJzb3IgY2FuIHBsYWNlZCBhdCBhIG92ZXJmbG93IHBvc2l0aW9uICh4ID09PSByb3cpIG5hdHVyYWxseVxuICAgICAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyB5b3UgbXVzdCBvdXRwdXQgY2hhcmFjdGVyIHRvIGNhdXNlIG92ZXJmbG93LCBjb250cm9sIHNlcXVlbmNlIGNhbid0IGRvIHRoaXNcbiAgICAgICAgICBuZXh0Um93Rmlyc3RDaGFyLmdldENoYXJzKCkgJiZcbiAgICAgICAgICAgIGlzTmV4dFJvd0ZpcnN0Q2hhckRvdWJsZVdpZHRoID8gdGhpcy5fbnVsbENlbGxDb3VudCA8PSAxIDogdGhpcy5fbnVsbENlbGxDb3VudCA8PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGNoYXJhY3RlciBjYW4ndCBiZSBudWxsLFxuICAgICAgICAgICAgLy8geW91IGNhbid0IHVzZSBjb250cm9sIHNlcXVlbmNlIHRvIG1vdmUgY3Vyc29yIHRvICh4ID09PSByb3cpXG4gICAgICAgICAgICAodGhpc1Jvd0xhc3RDaGFyLmdldENoYXJzKCkgfHwgdGhpc1Jvd0xhc3RDaGFyLmdldFdpZHRoKCkgPT09IDApICYmXG4gICAgICAgICAgICAvLyBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZmlyc3Qgd3JhcHBlZCBjZWxsIGFsc28gYWZmZWN0cyBCQ0VcbiAgICAgICAgICAgIC8vIHNvIHdlIG1hcmsgaXQgYXMgaW52YWxpZCB0byBzaW1wbHkgdGhlIHByb2Nlc3MgdG8gZGV0ZXJtaW5lIGxpbmUgc2VwYXJhdG9yXG4gICAgICAgICAgICBlcXVhbEJnKHRoaXNSb3dMYXN0Q2hhciwgbmV4dFJvd0ZpcnN0Q2hhcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHRoZSBzZWNvbmQgdG8gbGFzdCBjaGFyYWN0ZXIgY2FuJ3QgYmUgbnVsbCBpZiB0aGUgbmV4dCBsaW5lIHN0YXJ0cyB3aXRoIENKSyxcbiAgICAgICAgICAgIC8vIHlvdSBjYW4ndCB1c2UgY29udHJvbCBzZXF1ZW5jZSB0byBtb3ZlIGN1cnNvciB0byAoeCA9PT0gcm93KVxuICAgICAgICAgICAgaXNOZXh0Um93Rmlyc3RDaGFyRG91YmxlV2lkdGggJiZcbiAgICAgICAgICAgICh0aGlzUm93TGFzdFNlY29uZENoYXIuZ2V0Q2hhcnMoKSB8fCB0aGlzUm93TGFzdFNlY29uZENoYXIuZ2V0V2lkdGgoKSA9PT0gMCkgJiZcbiAgICAgICAgICAgIC8vIGNoYW5nZSBiYWNrZ3JvdW5kIG9mIHRoZSBmaXJzdCB3cmFwcGVkIGNlbGwgYWxzbyBhZmZlY3RzIEJDRVxuICAgICAgICAgICAgLy8gc28gd2UgbWFyayBpdCBhcyBpbnZhbGlkIHRvIHNpbXBseSB0aGUgcHJvY2VzcyB0byBkZXRlcm1pbmUgbGluZSBzZXBhcmF0b3JcbiAgICAgICAgICAgIGVxdWFsQmcodGhpc1Jvd0xhc3RDaGFyLCBuZXh0Um93Rmlyc3RDaGFyKSAmJlxuICAgICAgICAgICAgZXF1YWxCZyh0aGlzUm93TGFzdFNlY29uZENoYXIsIG5leHRSb3dGaXJzdENoYXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICAvLyBmb3JjZSB0aGUgd3JhcCB3aXRoIG1hZ2ljXG4gICAgICAgICAgLy8gaW5zZXJ0IGVub3VnaCBjaGFyYWN0ZXIgdG8gZm9yY2UgdGhlIHdyYXBcbiAgICAgICAgICByb3dTZXBhcmF0b3IgPSAnLScucmVwZWF0KHRoaXMuX251bGxDZWxsQ291bnQgKyAxKTtcbiAgICAgICAgICAvLyBtb3ZlIGJhY2sgYW5kIGVyYXNlIG5leHQgbGluZSBoZWFkXG4gICAgICAgICAgcm93U2VwYXJhdG9yICs9ICdcXHUwMDFiWzFEXFx1MDAxYlsxWCc7XG5cbiAgICAgICAgICBpZiAodGhpcy5fbnVsbENlbGxDb3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGRvIHRoZXNlIGJlY2F1c2Ugd2UgZmlsbGVkIHRoZSBsYXN0IHNldmVyYWwgbnVsbCBzbG90LCB3aGljaCB3ZSBzaG91bGRuJ3RcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSAnXFx1MDAxYltBJztcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSBgXFx1MDAxYlske2N1cnJlbnRMaW5lLmxlbmd0aCAtIHRoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gYFxcdTAwMWJbJHt0aGlzLl9udWxsQ2VsbENvdW50fVhgO1xuICAgICAgICAgICAgcm93U2VwYXJhdG9yICs9IGBcXHUwMDFiWyR7Y3VycmVudExpbmUubGVuZ3RoIC0gdGhpcy5fbnVsbENlbGxDb3VudH1EYDtcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSAnXFx1MDAxYltCJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGlzIGlzIGNvbnRlbnQgYW5kIG5lZWQgdGhlIGJlIHNlcmlhbGl6ZWQgZXZlbiBpdCBpcyBpbnZpc2libGUuXG4gICAgICAgICAgLy8gd2l0aG91dCB0aGlzLCB3cmFwIHdpbGwgYmUgbWlzc2luZyBmcm9tIG91dHB1dHMuXG4gICAgICAgICAgdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JSb3cgPSByb3cgKyAxO1xuICAgICAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sID0gMDtcblxuICAgICAgICAgIC8vIGZvcmNlIGNvbW1pdCB0aGUgY3Vyc29yIHBvc2l0aW9uXG4gICAgICAgICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdyArIDE7XG4gICAgICAgICAgdGhpcy5fbGFzdEN1cnNvckNvbCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9hbGxSb3dzW3RoaXMuX3Jvd0luZGV4XSA9IHRoaXMuX2N1cnJlbnRSb3c7XG4gICAgdGhpcy5fYWxsUm93U2VwYXJhdG9yc1t0aGlzLl9yb3dJbmRleCsrXSA9IHJvd1NlcGFyYXRvcjtcbiAgICB0aGlzLl9jdXJyZW50Um93ID0gJyc7XG4gICAgdGhpcy5fbnVsbENlbGxDb3VudCA9IDA7XG4gIH1cblxuICBwcml2YXRlIF9kaWZmU3R5bGUoY2VsbDogSUJ1ZmZlckNlbGwgfCBJQXR0cmlidXRlRGF0YSwgb2xkQ2VsbDogSUJ1ZmZlckNlbGwpOiBudW1iZXJbXSB7XG4gICAgY29uc3Qgc2dyU2VxOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGZnQ2hhbmdlZCA9ICFlcXVhbEZnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGJnQ2hhbmdlZCA9ICFlcXVhbEJnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGZsYWdzQ2hhbmdlZCA9ICFlcXVhbEZsYWdzKGNlbGwsIG9sZENlbGwpO1xuXG4gICAgaWYgKGZnQ2hhbmdlZCB8fCBiZ0NoYW5nZWQgfHwgZmxhZ3NDaGFuZ2VkKSB7XG4gICAgICBpZiAoY2VsbC5pc0F0dHJpYnV0ZURlZmF1bHQoKSkge1xuICAgICAgICBpZiAoIW9sZENlbGwuaXNBdHRyaWJ1dGVEZWZhdWx0KCkpIHtcbiAgICAgICAgICBzZ3JTZXEucHVzaCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZnQ2hhbmdlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY2VsbC5nZXRGZ0NvbG9yKCk7XG4gICAgICAgICAgaWYgKGNlbGwuaXNGZ1JHQigpKSB7IHNnclNlcS5wdXNoKDM4LCAyLCAoY29sb3IgPj4+IDE2KSAmIDB4RkYsIChjb2xvciA+Pj4gOCkgJiAweEZGLCBjb2xvciAmIDB4RkYpOyB9XG4gICAgICAgICAgZWxzZSBpZiAoY2VsbC5pc0ZnUGFsZXR0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoY29sb3IgPj0gMTYpIHsgc2dyU2VxLnB1c2goMzgsIDUsIGNvbG9yKTsgfVxuICAgICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKGNvbG9yICYgOCA/IDkwICsgKGNvbG9yICYgNykgOiAzMCArIChjb2xvciAmIDcpKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHsgc2dyU2VxLnB1c2goMzkpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJnQ2hhbmdlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY2VsbC5nZXRCZ0NvbG9yKCk7XG4gICAgICAgICAgaWYgKGNlbGwuaXNCZ1JHQigpKSB7IHNnclNlcS5wdXNoKDQ4LCAyLCAoY29sb3IgPj4+IDE2KSAmIDB4RkYsIChjb2xvciA+Pj4gOCkgJiAweEZGLCBjb2xvciAmIDB4RkYpOyB9XG4gICAgICAgICAgZWxzZSBpZiAoY2VsbC5pc0JnUGFsZXR0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoY29sb3IgPj0gMTYpIHsgc2dyU2VxLnB1c2goNDgsIDUsIGNvbG9yKTsgfVxuICAgICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKGNvbG9yICYgOCA/IDEwMCArIChjb2xvciAmIDcpIDogNDAgKyAoY29sb3IgJiA3KSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKDQ5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmbGFnc0NoYW5nZWQpIHtcbiAgICAgICAgICBpZiAoY2VsbC5pc0ludmVyc2UoKSAhPT0gb2xkQ2VsbC5pc0ludmVyc2UoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzSW52ZXJzZSgpID8gNyA6IDI3KTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzQm9sZCgpICE9PSBvbGRDZWxsLmlzQm9sZCgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNCb2xkKCkgPyAxIDogMjIpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNVbmRlcmxpbmUoKSAhPT0gb2xkQ2VsbC5pc1VuZGVybGluZSgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNVbmRlcmxpbmUoKSA/IDQgOiAyNCk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc092ZXJsaW5lKCkgIT09IG9sZENlbGwuaXNPdmVybGluZSgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNPdmVybGluZSgpID8gNTMgOiA1NSk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0JsaW5rKCkgIT09IG9sZENlbGwuaXNCbGluaygpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNCbGluaygpID8gNSA6IDI1KTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzSW52aXNpYmxlKCkgIT09IG9sZENlbGwuaXNJbnZpc2libGUoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzSW52aXNpYmxlKCkgPyA4IDogMjgpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNJdGFsaWMoKSAhPT0gb2xkQ2VsbC5pc0l0YWxpYygpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNJdGFsaWMoKSA/IDMgOiAyMyk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0RpbSgpICE9PSBvbGRDZWxsLmlzRGltKCkpIHsgc2dyU2VxLnB1c2goY2VsbC5pc0RpbSgpID8gMiA6IDIyKTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzU3RyaWtldGhyb3VnaCgpICE9PSBvbGRDZWxsLmlzU3RyaWtldGhyb3VnaCgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNTdHJpa2V0aHJvdWdoKCkgPyA5IDogMjkpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2dyU2VxO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9uZXh0Q2VsbChjZWxsOiBJQnVmZmVyQ2VsbCwgb2xkQ2VsbDogSUJ1ZmZlckNlbGwsIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGEgd2lkdGggMCBjZWxsIGRvbid0IG5lZWQgdG8gYmUgY291bnQgYmVjYXVzZSBpdCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgYWZ0ZXIgYSBDSksgY2hhcmFjdGVyO1xuICAgIGNvbnN0IGlzUGxhY2VIb2xkZXJDZWxsID0gY2VsbC5nZXRXaWR0aCgpID09PSAwO1xuXG4gICAgaWYgKGlzUGxhY2VIb2xkZXJDZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjZWxsIGRvbid0IGhhdmUgY29udGVudFxuICAgIGNvbnN0IGlzRW1wdHlDZWxsID0gY2VsbC5nZXRDaGFycygpID09PSAnJztcblxuICAgIGNvbnN0IHNnclNlcSA9IHRoaXMuX2RpZmZTdHlsZShjZWxsLCB0aGlzLl9jdXJzb3JTdHlsZSk7XG5cbiAgICAvLyB0aGUgZW1wdHkgY2VsbCBzdHlsZSBpcyBvbmx5IGFzc3VtZWQgdG8gYmUgY2hhbmdlZCB3aGVuIGJhY2tncm91bmQgY2hhbmdlZCwgYmVjYXVzZVxuICAgIC8vIGZvcmVncm91bmQgaXMgYWx3YXlzIDAuXG4gICAgY29uc3Qgc3R5bGVDaGFuZ2VkID0gaXNFbXB0eUNlbGwgPyAhZXF1YWxCZyh0aGlzLl9jdXJzb3JTdHlsZSwgY2VsbCkgOiBzZ3JTZXEubGVuZ3RoID4gMDtcblxuICAgIC8qKlxuICAgICAqICBoYW5kbGVzIHN0eWxlIGNoYW5nZVxuICAgICAqL1xuICAgIGlmIChzdHlsZUNoYW5nZWQpIHtcbiAgICAgIC8vIGJlZm9yZSB1cGRhdGUgdGhlIHN0eWxlLCB3ZSBuZWVkIHRvIGZpbGwgZW1wdHkgY2VsbCBiYWNrXG4gICAgICBpZiAodGhpcy5fbnVsbENlbGxDb3VudCA+IDApIHtcbiAgICAgICAgLy8gdXNlIGNsZWFyIHJpZ2h0IHRvIHNldCBiYWNrZ3JvdW5kLlxuICAgICAgICBpZiAoIWVxdWFsQmcodGhpcy5fY3Vyc29yU3R5bGUsIHRoaXMuX2JhY2tncm91bmRDZWxsKSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gYFxcdTAwMWJbJHt0aGlzLl9udWxsQ2VsbENvdW50fVhgO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVzZSBtb3ZlIHJpZ2h0IHRvIG1vdmUgY3Vyc29yLlxuICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1DYDtcbiAgICAgICAgdGhpcy5fbnVsbENlbGxDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdztcbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sID0gdGhpcy5fbGFzdEN1cnNvckNvbCA9IGNvbDtcblxuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3NnclNlcS5qb2luKCc7Jyl9bWA7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgbGFzdCBjdXJzb3Igc3R5bGVcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLl9idWZmZXIuZ2V0TGluZShyb3cpO1xuICAgICAgaWYgKGxpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsaW5lLmdldENlbGwoY29sLCB0aGlzLl9jdXJzb3JTdHlsZSk7XG4gICAgICAgIHRoaXMuX2N1cnNvclN0eWxlUm93ID0gcm93O1xuICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUNvbCA9IGNvbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgaGFuZGxlcyBhY3R1YWwgY29udGVudFxuICAgICAqL1xuICAgIGlmIChpc0VtcHR5Q2VsbCkge1xuICAgICAgdGhpcy5fbnVsbENlbGxDb3VudCArPSBjZWxsLmdldFdpZHRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9udWxsQ2VsbENvdW50ID4gMCkge1xuICAgICAgICAvLyB3ZSBjYW4ganVzdCBhc3N1bWUgd2UgaGF2ZSBzYW1lIHN0eWxlIHdpdGggcHJldmlvdXMgb25lIGhlcmVcbiAgICAgICAgLy8gYmVjYXVzZSBzdHlsZSBjaGFuZ2UgaXMgaGFuZGxlZCBieSBwcmV2aW91cyBzdGFnZVxuICAgICAgICAvLyB1c2UgbW92ZSByaWdodCB3aGVuIGJhY2tncm91bmQgaXMgZW1wdHksIHVzZSBjbGVhciByaWdodCB3aGVuIHRoZXJlIGlzIGJhY2tncm91bmQuXG4gICAgICAgIGlmIChlcXVhbEJnKHRoaXMuX2N1cnNvclN0eWxlLCB0aGlzLl9iYWNrZ3JvdW5kQ2VsbCkpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1DYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1DYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9udWxsQ2VsbENvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBjZWxsLmdldENoYXJzKCk7XG5cbiAgICAgIC8vIHVwZGF0ZSBjdXJzb3JcbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdztcbiAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sID0gdGhpcy5fbGFzdEN1cnNvckNvbCA9IGNvbCArIGNlbGwuZ2V0V2lkdGgoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlcmlhbGl6ZVN0cmluZyhleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbjogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgbGV0IHJvd0VuZCA9IHRoaXMuX2FsbFJvd3MubGVuZ3RoO1xuXG4gICAgLy8gdGhlIGZpeHVwIGlzIG9ubHkgcmVxdWlyZWQgZm9yIGRhdGEgd2l0aG91dCBzY3JvbGxiYWNrXG4gICAgLy8gYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSBwbGFjZWQgYXQgbGFzdCBsaW5lIG90aGVyd2lzZVxuICAgIGlmICh0aGlzLl9idWZmZXIubGVuZ3RoIC0gdGhpcy5fZmlyc3RSb3cgPD0gdGhpcy5fdGVybWluYWwucm93cykge1xuICAgICAgcm93RW5kID0gdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JSb3cgKyAxIC0gdGhpcy5fZmlyc3RSb3c7XG4gICAgICB0aGlzLl9sYXN0Q3Vyc29yQ29sID0gdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JDb2w7XG4gICAgICB0aGlzLl9sYXN0Q3Vyc29yUm93ID0gdGhpcy5fbGFzdENvbnRlbnRDdXJzb3JSb3c7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSAnJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93RW5kOyBpKyspIHtcbiAgICAgIGNvbnRlbnQgKz0gdGhpcy5fYWxsUm93c1tpXTtcbiAgICAgIGlmIChpICsgMSA8IHJvd0VuZCkge1xuICAgICAgICBjb250ZW50ICs9IHRoaXMuX2FsbFJvd1NlcGFyYXRvcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgY3Vyc29yXG4gICAgaWYgKCFleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbikge1xuICAgICAgY29uc3QgcmVhbEN1cnNvclJvdyA9IHRoaXMuX2J1ZmZlci5iYXNlWSArIHRoaXMuX2J1ZmZlci5jdXJzb3JZO1xuICAgICAgY29uc3QgcmVhbEN1cnNvckNvbCA9IHRoaXMuX2J1ZmZlci5jdXJzb3JYO1xuXG4gICAgICBjb25zdCBjdXJzb3JNb3ZlZCA9IChyZWFsQ3Vyc29yUm93ICE9PSB0aGlzLl9sYXN0Q3Vyc29yUm93IHx8IHJlYWxDdXJzb3JDb2wgIT09IHRoaXMuX2xhc3RDdXJzb3JDb2wpO1xuXG4gICAgICBjb25zdCBtb3ZlUmlnaHQgPSAob2Zmc2V0OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcbiAgICAgICAgICBjb250ZW50ICs9IGBcXHUwMDFiWyR7b2Zmc2V0fUNgO1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICBjb250ZW50ICs9IGBcXHUwMDFiWyR7LW9mZnNldH1EYDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1vdmVEb3duID0gKG9mZnNldDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlske29mZnNldH1CYDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlskey1vZmZzZXR9QWA7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChjdXJzb3JNb3ZlZCkge1xuICAgICAgICBtb3ZlRG93bihyZWFsQ3Vyc29yUm93IC0gdGhpcy5fbGFzdEN1cnNvclJvdyk7XG4gICAgICAgIG1vdmVSaWdodChyZWFsQ3Vyc29yQ29sIC0gdGhpcy5fbGFzdEN1cnNvckNvbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSB0aGUgY3Vyc29yJ3MgY3VycmVudCBzdHlsZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS94dGVybWpzL3h0ZXJtLmpzL2lzc3Vlcy8zNjc3XG4gICAgLy8gSEFDSzogSW50ZXJuYWwgQVBJIGFjY2VzcyBzaW5jZSBpdCdzIGF3a3dhcmQgdG8gZXhwb3NlIHRoaXMgaW4gdGhlIEFQSSBhbmQgc2VyaWFsaXplIHdpbGxcbiAgICAvLyBsaWtlbHkgYmUgdGhlIG9ubHkgY29uc3VtZXJcbiAgICBjb25zdCBjdXJBdHRyRGF0YTogSUF0dHJpYnV0ZURhdGEgPSAodGhpcy5fdGVybWluYWwgYXMgYW55KS5fY29yZS5faW5wdXRIYW5kbGVyLl9jdXJBdHRyRGF0YTtcbiAgICBjb25zdCBzZ3JTZXEgPSB0aGlzLl9kaWZmU3R5bGUoY3VyQXR0ckRhdGEsIHRoaXMuX2N1cnNvclN0eWxlKTtcbiAgICBpZiAoc2dyU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRlbnQgKz0gYFxcdTAwMWJbJHtzZ3JTZXEuam9pbignOycpfW1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemVBZGRvbiBpbXBsZW1lbnRzIElUZXJtaW5hbEFkZG9uICwgSVNlcmlhbGl6ZUFwaSB7XG4gIHByaXZhdGUgX3Rlcm1pbmFsOiBUZXJtaW5hbCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgYWN0aXZhdGUodGVybWluYWw6IFRlcm1pbmFsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVybWluYWwgPSB0ZXJtaW5hbDtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZUJ1ZmZlckJ5U2Nyb2xsYmFjayh0ZXJtaW5hbDogVGVybWluYWwsIGJ1ZmZlcjogSUJ1ZmZlciwgc2Nyb2xsYmFjaz86IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbWF4Um93cyA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgY29ycmVjdFJvd3MgPSAoc2Nyb2xsYmFjayA9PT0gdW5kZWZpbmVkKSA/IG1heFJvd3MgOiBjb25zdHJhaW4oc2Nyb2xsYmFjayArIHRlcm1pbmFsLnJvd3MsIDAsIG1heFJvd3MpO1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVCdWZmZXJCeVJhbmdlKHRlcm1pbmFsLCBidWZmZXIsIHtcbiAgICAgIHN0YXJ0OiBtYXhSb3dzIC0gY29ycmVjdFJvd3MsXG4gICAgICBlbmQ6IG1heFJvd3MgLSAxXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VyaWFsaXplQnVmZmVyQnlSYW5nZSh0ZXJtaW5hbDogVGVybWluYWwsIGJ1ZmZlcjogSUJ1ZmZlciwgcmFuZ2U6IElTZXJpYWxpemVSYW5nZSwgZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb246IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgU3RyaW5nU2VyaWFsaXplSGFuZGxlcihidWZmZXIsIHRlcm1pbmFsKTtcbiAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUoe1xuICAgICAgc3RhcnQ6IHsgeDogMCwgICAgICAgICAgICAgeTogdHlwZW9mIHJhbmdlLnN0YXJ0ID09PSAnbnVtYmVyJyA/IHJhbmdlLnN0YXJ0IDogcmFuZ2Uuc3RhcnQubGluZSB9LFxuICAgICAgZW5kOiAgIHsgeDogdGVybWluYWwuY29scywgeTogdHlwZW9mIHJhbmdlLmVuZCAgID09PSAnbnVtYmVyJyA/IHJhbmdlLmVuZCAgIDogcmFuZ2UuZW5kLmxpbmUgICB9XG4gICAgfSwgZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VyaWFsaXplQnVmZmVyQXNIVE1MKHRlcm1pbmFsOiBUZXJtaW5hbCwgb3B0aW9uczogUGFydGlhbDxJSFRNTFNlcmlhbGl6ZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICBjb25zdCBidWZmZXIgPSB0ZXJtaW5hbC5idWZmZXIuYWN0aXZlO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSFRNTFNlcmlhbGl6ZUhhbmRsZXIoYnVmZmVyLCB0ZXJtaW5hbCwgb3B0aW9ucyk7XG4gICAgY29uc3Qgb25seVNlbGVjdGlvbiA9IG9wdGlvbnMub25seVNlbGVjdGlvbiA/PyBmYWxzZTtcbiAgICBpZiAoIW9ubHlTZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IG1heFJvd3MgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgY29uc3Qgc2Nyb2xsYmFjayA9IG9wdGlvbnMuc2Nyb2xsYmFjaztcbiAgICAgIGNvbnN0IGNvcnJlY3RSb3dzID0gKHNjcm9sbGJhY2sgPT09IHVuZGVmaW5lZCkgPyBtYXhSb3dzIDogY29uc3RyYWluKHNjcm9sbGJhY2sgKyB0ZXJtaW5hbC5yb3dzLCAwLCBtYXhSb3dzKTtcbiAgICAgIHJldHVybiBoYW5kbGVyLnNlcmlhbGl6ZSh7XG4gICAgICAgIHN0YXJ0OiB7IHg6IDAsICAgICAgICAgICAgIHk6IG1heFJvd3MgLSBjb3JyZWN0Um93cyB9LFxuICAgICAgICBlbmQ6ICAgeyB4OiB0ZXJtaW5hbC5jb2xzLCB5OiBtYXhSb3dzIC0gMSAgICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fdGVybWluYWw/LmdldFNlbGVjdGlvblBvc2l0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUoe1xuICAgICAgICBzdGFydDogeyB4OiBzZWxlY3Rpb24uc3RhcnQueCwgeTogc2VsZWN0aW9uLnN0YXJ0LnkgfSxcbiAgICAgICAgZW5kOiAgIHsgeDogc2VsZWN0aW9uLmVuZC54LCAgIHk6IHNlbGVjdGlvbi5lbmQueSAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZU1vZGVzKHRlcm1pbmFsOiBUZXJtaW5hbCk6IHN0cmluZyB7XG4gICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICBjb25zdCBtb2RlcyA9IHRlcm1pbmFsLm1vZGVzO1xuXG4gICAgLy8gRGVmYXVsdDogZmFsc2VcbiAgICBpZiAobW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzFoJztcbiAgICBpZiAobW9kZXMuYXBwbGljYXRpb25LZXlwYWRNb2RlKSBjb250ZW50ICs9ICdcXHgxYls/NjZoJztcbiAgICBpZiAobW9kZXMuYnJhY2tldGVkUGFzdGVNb2RlKSBjb250ZW50ICs9ICdcXHgxYls/MjAwNGgnO1xuICAgIGlmIChtb2Rlcy5pbnNlcnRNb2RlKSBjb250ZW50ICs9ICdcXHgxYls0aCc7XG4gICAgaWYgKG1vZGVzLm9yaWdpbk1vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz82aCc7XG4gICAgaWYgKG1vZGVzLnJldmVyc2VXcmFwYXJvdW5kTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzQ1aCc7XG4gICAgaWYgKG1vZGVzLnNlbmRGb2N1c01vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz8xMDA0aCc7XG5cbiAgICAvLyBEZWZhdWx0OiB0cnVlXG4gICAgaWYgKG1vZGVzLndyYXBhcm91bmRNb2RlID09PSBmYWxzZSkgY29udGVudCArPSAnXFx4MWJbPzdsJztcblxuICAgIC8vIERlZmF1bHQ6ICdub25lJ1xuICAgIGlmIChtb2Rlcy5tb3VzZVRyYWNraW5nTW9kZSAhPT0gJ25vbmUnKSB7XG4gICAgICBzd2l0Y2ggKG1vZGVzLm1vdXNlVHJhY2tpbmdNb2RlKSB7XG4gICAgICAgIGNhc2UgJ3gxMCc6IGNvbnRlbnQgKz0gJ1xceDFiWz85aCc7IGJyZWFrO1xuICAgICAgICBjYXNlICd2dDIwMCc6IGNvbnRlbnQgKz0gJ1xceDFiWz8xMDAwaCc7IGJyZWFrO1xuICAgICAgICBjYXNlICdkcmFnJzogY29udGVudCArPSAnXFx4MWJbPzEwMDJoJzsgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FueSc6IGNvbnRlbnQgKz0gJ1xceDFiWz8xMDAzaCc7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZShvcHRpb25zPzogSVNlcmlhbGl6ZU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIC8vIFRPRE86IEFkZCBjb21iaW5lZERhdGEgc3VwcG9ydFxuICAgIGlmICghdGhpcy5fdGVybWluYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBhZGRvbiB1bnRpbCBpdCBoYXMgYmVlbiBsb2FkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWwgYnVmZmVyXG4gICAgbGV0IGNvbnRlbnQgPSBvcHRpb25zPy5yYW5nZVxuICAgICAgPyB0aGlzLl9zZXJpYWxpemVCdWZmZXJCeVJhbmdlKHRoaXMuX3Rlcm1pbmFsLCB0aGlzLl90ZXJtaW5hbC5idWZmZXIubm9ybWFsLCBvcHRpb25zLnJhbmdlLCB0cnVlKVxuICAgICAgOiB0aGlzLl9zZXJpYWxpemVCdWZmZXJCeVNjcm9sbGJhY2sodGhpcy5fdGVybWluYWwsIHRoaXMuX3Rlcm1pbmFsLmJ1ZmZlci5ub3JtYWwsIG9wdGlvbnM/LnNjcm9sbGJhY2spO1xuXG4gICAgLy8gQWx0ZXJuYXRlIGJ1ZmZlclxuICAgIGlmICghb3B0aW9ucz8uZXhjbHVkZUFsdEJ1ZmZlcikge1xuICAgICAgaWYgKHRoaXMuX3Rlcm1pbmFsLmJ1ZmZlci5hY3RpdmUudHlwZSA9PT0gJ2FsdGVybmF0ZScpIHtcbiAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVTY3JlZW5Db250ZW50ID0gdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlTY3JvbGxiYWNrKHRoaXMuX3Rlcm1pbmFsLCB0aGlzLl90ZXJtaW5hbC5idWZmZXIuYWx0ZXJuYXRlLCB1bmRlZmluZWQpO1xuICAgICAgICBjb250ZW50ICs9IGBcXHUwMDFiWz8xMDQ5aFxcdTAwMWJbSCR7YWx0ZXJuYXRpdmVTY3JlZW5Db250ZW50fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTW9kZXNcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVNb2Rlcykge1xuICAgICAgY29udGVudCArPSB0aGlzLl9zZXJpYWxpemVNb2Rlcyh0aGlzLl90ZXJtaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplQXNIVE1MKG9wdGlvbnM/OiBQYXJ0aWFsPElIVE1MU2VyaWFsaXplT3B0aW9ucz4pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fdGVybWluYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBhZGRvbiB1bnRpbCBpdCBoYXMgYmVlbiBsb2FkZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplQnVmZmVyQXNIVE1MKHRoaXMuX3Rlcm1pbmFsLCBvcHRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQgeyB9XG59XG5cbmV4cG9ydCBjbGFzcyBIVE1MU2VyaWFsaXplSGFuZGxlciBleHRlbmRzIEJhc2VTZXJpYWxpemVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBfY3VycmVudFJvdzogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBfaHRtbENvbnRlbnQgPSAnJztcblxuICBwcml2YXRlIF9hbnNpQ29sb3JzOiBSZWFkb25seTxJQ29sb3JbXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVmZmVyOiBJQnVmZmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlcm1pbmFsOiBUZXJtaW5hbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBQYXJ0aWFsPElIVE1MU2VyaWFsaXplT3B0aW9ucz5cbiAgKSB7XG4gICAgc3VwZXIoYnVmZmVyKTtcblxuICAgIC8vIEZvciB4dGVybSBoZWFkbGVzczogZmFsbGJhY2sgdG8gYW5zaSBjb2xvcnNcbiAgICBpZiAoKF90ZXJtaW5hbCBhcyBhbnkpLl9jb3JlLl90aGVtZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMuX2Fuc2lDb2xvcnMgPSAoX3Rlcm1pbmFsIGFzIGFueSkuX2NvcmUuX3RoZW1lU2VydmljZS5jb2xvcnMuYW5zaTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9hbnNpQ29sb3JzID0gREVGQVVMVF9BTlNJX0NPTE9SUztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYWRTdGFydCh0YXJnZXQ6IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBwYWRTdHJpbmcgPz8gJyAnO1xuICAgIGlmICh0YXJnZXQubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCAtPSB0YXJnZXQubGVuZ3RoO1xuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgdGFyZ2V0O1xuICB9XG5cbiAgcHJvdGVjdGVkIF9iZWZvcmVTZXJpYWxpemUocm93czogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2h0bWxDb250ZW50ICs9ICc8aHRtbD48Ym9keT48IS0tU3RhcnRGcmFnbWVudC0tPjxwcmU+JztcblxuICAgIGxldCBmb3JlZ3JvdW5kID0gJyMwMDAwMDAnO1xuICAgIGxldCBiYWNrZ3JvdW5kID0gJyNmZmZmZmYnO1xuICAgIGlmICh0aGlzLl9vcHRpb25zLmluY2x1ZGVHbG9iYWxCYWNrZ3JvdW5kID8/IGZhbHNlKSB7XG4gICAgICBmb3JlZ3JvdW5kID0gdGhpcy5fdGVybWluYWwub3B0aW9ucy50aGVtZT8uZm9yZWdyb3VuZCA/PyAnI2ZmZmZmZic7XG4gICAgICBiYWNrZ3JvdW5kID0gdGhpcy5fdGVybWluYWwub3B0aW9ucy50aGVtZT8uYmFja2dyb3VuZCA/PyAnIzAwMDAwMCc7XG4gICAgfVxuXG4gICAgY29uc3QgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucyA9IFtdO1xuICAgIGdsb2JhbFN0eWxlRGVmaW5pdGlvbnMucHVzaCgnY29sb3I6ICcgKyBmb3JlZ3JvdW5kICsgJzsnKTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2JhY2tncm91bmQtY29sb3I6ICcgKyBiYWNrZ3JvdW5kICsgJzsnKTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2ZvbnQtZmFtaWx5OiAnICsgdGhpcy5fdGVybWluYWwub3B0aW9ucy5mb250RmFtaWx5ICsgJzsnKTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2ZvbnQtc2l6ZTogJyArIHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMuZm9udFNpemUgKyAncHg7Jyk7XG4gICAgdGhpcy5faHRtbENvbnRlbnQgKz0gJzxkaXYgc3R5bGU9XFwnJyArIGdsb2JhbFN0eWxlRGVmaW5pdGlvbnMuam9pbignICcpICsgJ1xcJz4nO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9hZnRlclNlcmlhbGl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPC9kaXY+JztcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPC9wcmU+PCEtLUVuZEZyYWdtZW50LS0+PC9ib2R5PjwvaHRtbD4nO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yb3dFbmQocm93OiBudW1iZXIsIGlzTGFzdFJvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2h0bWxDb250ZW50ICs9ICc8ZGl2PjxzcGFuPicgKyB0aGlzLl9jdXJyZW50Um93ICsgJzwvc3Bhbj48L2Rpdj4nO1xuICAgIHRoaXMuX2N1cnJlbnRSb3cgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgX2dldEhleENvbG9yKGNlbGw6IElCdWZmZXJDZWxsLCBpc0ZnOiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb2xvciA9IGlzRmcgPyBjZWxsLmdldEZnQ29sb3IoKSA6IGNlbGwuZ2V0QmdDb2xvcigpO1xuICAgIGlmIChpc0ZnID8gY2VsbC5pc0ZnUkdCKCkgOiBjZWxsLmlzQmdSR0IoKSkge1xuICAgICAgY29uc3QgcmdiID0gW1xuICAgICAgICAoY29sb3IgPj4gMTYpICYgMjU1LFxuICAgICAgICAoY29sb3IgPj4gIDgpICYgMjU1LFxuICAgICAgICAoY29sb3IgICAgICApICYgMjU1XG4gICAgICBdO1xuICAgICAgcmV0dXJuICcjJyArIHJnYi5tYXAoeCA9PiB0aGlzLl9wYWRTdGFydCh4LnRvU3RyaW5nKDE2KSwgMiwgJzAnKSkuam9pbignJyk7XG4gICAgfVxuICAgIGlmIChpc0ZnID8gY2VsbC5pc0ZnUGFsZXR0ZSgpIDogY2VsbC5pc0JnUGFsZXR0ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYW5zaUNvbG9yc1tjb2xvcl0uY3NzO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlmZlN0eWxlKGNlbGw6IElCdWZmZXJDZWxsLCBvbGRDZWxsOiBJQnVmZmVyQ2VsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb250ZW50OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc3QgZmdDaGFuZ2VkID0gIWVxdWFsRmcoY2VsbCwgb2xkQ2VsbCk7XG4gICAgY29uc3QgYmdDaGFuZ2VkID0gIWVxdWFsQmcoY2VsbCwgb2xkQ2VsbCk7XG4gICAgY29uc3QgZmxhZ3NDaGFuZ2VkID0gIWVxdWFsRmxhZ3MoY2VsbCwgb2xkQ2VsbCk7XG5cbiAgICBpZiAoZmdDaGFuZ2VkIHx8IGJnQ2hhbmdlZCB8fCBmbGFnc0NoYW5nZWQpIHtcbiAgICAgIGNvbnN0IGZnSGV4Q29sb3IgPSB0aGlzLl9nZXRIZXhDb2xvcihjZWxsLCB0cnVlKTtcbiAgICAgIGlmIChmZ0hleENvbG9yKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCgnY29sb3I6ICcgKyBmZ0hleENvbG9yICsgJzsnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmdIZXhDb2xvciA9IHRoaXMuX2dldEhleENvbG9yKGNlbGwsIGZhbHNlKTtcbiAgICAgIGlmIChiZ0hleENvbG9yKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaCgnYmFja2dyb3VuZC1jb2xvcjogJyArIGJnSGV4Q29sb3IgKyAnOycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbC5pc0ludmVyc2UoKSkgeyBjb250ZW50LnB1c2goJ2NvbG9yOiAjMDAwMDAwOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQkZCRkJGOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0JvbGQoKSkgeyBjb250ZW50LnB1c2goJ2ZvbnQtd2VpZ2h0OiBib2xkOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc1VuZGVybGluZSgpICYmIGNlbGwuaXNPdmVybGluZSgpKSB7IGNvbnRlbnQucHVzaCgndGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSB1bmRlcmxpbmU7Jyk7IH1cbiAgICAgIGVsc2UgaWYgKGNlbGwuaXNVbmRlcmxpbmUoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOycpOyB9XG4gICAgICBlbHNlIGlmIChjZWxsLmlzT3ZlcmxpbmUoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzQmxpbmsoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogYmxpbms7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzSW52aXNpYmxlKCkpIHsgY29udGVudC5wdXNoKCd2aXNpYmlsaXR5OiBoaWRkZW47Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzSXRhbGljKCkpIHsgY29udGVudC5wdXNoKCdmb250LXN0eWxlOiBpdGFsaWM7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzRGltKCkpIHsgY29udGVudC5wdXNoKCdvcGFjaXR5OiAwLjU7Jyk7IH1cbiAgICAgIGlmIChjZWxsLmlzU3RyaWtldGhyb3VnaCgpKSB7IGNvbnRlbnQucHVzaCgndGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Jyk7IH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dENlbGwoY2VsbDogSUJ1ZmZlckNlbGwsIG9sZENlbGw6IElCdWZmZXJDZWxsLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhIHdpZHRoIDAgY2VsbCBkb24ndCBuZWVkIHRvIGJlIGNvdW50IGJlY2F1c2UgaXQgaXMganVzdCBhIHBsYWNlaG9sZGVyIGFmdGVyIGEgQ0pLIGNoYXJhY3RlcjtcbiAgICBjb25zdCBpc1BsYWNlSG9sZGVyQ2VsbCA9IGNlbGwuZ2V0V2lkdGgoKSA9PT0gMDtcbiAgICBpZiAoaXNQbGFjZUhvbGRlckNlbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNlbGwgZG9uJ3QgaGF2ZSBjb250ZW50XG4gICAgY29uc3QgaXNFbXB0eUNlbGwgPSBjZWxsLmdldENoYXJzKCkgPT09ICcnO1xuXG4gICAgY29uc3Qgc3R5bGVEZWZpbml0aW9ucyA9IHRoaXMuX2RpZmZTdHlsZShjZWxsLCBvbGRDZWxsKTtcblxuICAgIC8vIGhhbmRsZXMgc3R5bGUgY2hhbmdlXG4gICAgaWYgKHN0eWxlRGVmaW5pdGlvbnMpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gc3R5bGVEZWZpbml0aW9ucy5sZW5ndGggPT09IDAgP1xuICAgICAgICAnPC9zcGFuPjxzcGFuPicgOlxuICAgICAgICAnPC9zcGFuPjxzcGFuIHN0eWxlPVxcJycgKyBzdHlsZURlZmluaXRpb25zLmpvaW4oJyAnKSArICdcXCc+JztcbiAgICB9XG5cbiAgICAvLyBoYW5kbGVzIGFjdHVhbCBjb250ZW50XG4gICAgaWYgKGlzRW1wdHlDZWxsKSB7XG4gICAgICB0aGlzLl9jdXJyZW50Um93ICs9ICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBjZWxsLmdldENoYXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXJpYWxpemVTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faHRtbENvbnRlbnQ7XG4gIH1cbn1cbiJdfQ==
749
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU2VyaWFsaXplQWRkb24vc3JjL2Jyb3dzZXIvQ29sb3JDb250cmFzdENhY2hlLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9icm93c2VyL3NlcnZpY2VzL1RoZW1lU2VydmljZS50cyIsIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL0NvbG9yLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vTGlmZWN5Y2xlLnRzIiwid2VicGFjazovL1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vTXVsdGlLZXlNYXAudHMiLCJ3ZWJwYWNrOi8vU2VyaWFsaXplQWRkb24vc3JjL2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnkudHMiLCJ3ZWJwYWNrOi8vU2VyaWFsaXplQWRkb24vc3JjL2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlcy50cyIsIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9TZXJpYWxpemVBZGRvbi9zcmMvU2VyaWFsaXplQWRkb24udHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvYnJvd3Nlci9Db2xvckNvbnRyYXN0Q2FjaGUudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvYnJvd3Nlci9zZXJ2aWNlcy9UaGVtZVNlcnZpY2UudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL0NvbG9yLnRzIiwiZmlsZTovLy9Vc2Vycy9kYW1pZW4ubWFpbGxhcmQvZGV2L3BlcnNvL2pzZW52LWNvcmUvd2VicGFjazovU2VyaWFsaXplQWRkb24vc3JjL2NvbW1vbi9FdmVudEVtaXR0ZXIudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL0xpZmVjeWNsZS50cyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3dlYnBhY2s6L1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vTXVsdGlLZXlNYXAudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi9zcmMvY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeS50cyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3dlYnBhY2s6L1NlcmlhbGl6ZUFkZG9uL3NyYy9jb21tb24vc2VydmljZXMvU2VydmljZXMudHMiLCJmaWxlOi8vL1VzZXJzL2RhbWllbi5tYWlsbGFyZC9kZXYvcGVyc28vanNlbnYtY29yZS93ZWJwYWNrOi9TZXJpYWxpemVBZGRvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL3dlYnBhY2s6L1NlcmlhbGl6ZUFkZG9uL3NyYy9TZXJpYWxpemVBZGRvbi50cyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJ0aGlzIiwiX2NvbG9yIiwiVHdvS2V5TWFwIiwiX2NzcyIsInNldENzcyIsImJnIiwiZmciLCJ2YWx1ZSIsInNldCIsImdldENzcyIsImdldCIsInNldENvbG9yIiwiZ2V0Q29sb3IiLCJjbGVhciIsIkRFRkFVTFRfRk9SRUdST1VORCIsImNzcyIsInRvQ29sb3IiLCJERUZBVUxUX0JBQ0tHUk9VTkQiLCJERUZBVUxUX0NVUlNPUiIsIkRFRkFVTFRfQ1VSU09SX0FDQ0VOVCIsIkRFRkFVTFRfU0VMRUNUSU9OIiwicmdiYSIsIkRFRkFVTFRfQU5TSV9DT0xPUlMiLCJPYmplY3QiLCJmcmVlemUiLCJjb2xvcnMiLCJ2IiwiaSIsInIiLCJnIiwiYiIsInB1c2giLCJjaGFubmVscyIsInRvQ3NzIiwidG9SZ2JhIiwiYyIsIlRoZW1lU2VydmljZSIsIkRpc3Bvc2FibGUiLCJfY29sb3JzIiwiY29uc3RydWN0b3IiLCJzdXBlciIsIl9vcHRpb25zU2VydmljZSIsIl9jb250cmFzdENhY2hlIiwiQ29sb3JDb250cmFzdENhY2hlIiwiX2hhbGZDb250cmFzdENhY2hlIiwiX29uQ2hhbmdlQ29sb3JzIiwicmVnaXN0ZXIiLCJFdmVudEVtaXR0ZXIiLCJvbkNoYW5nZUNvbG9ycyIsImV2ZW50IiwiZm9yZWdyb3VuZCIsImJhY2tncm91bmQiLCJjdXJzb3IiLCJjdXJzb3JBY2NlbnQiLCJzZWxlY3Rpb25Gb3JlZ3JvdW5kIiwidW5kZWZpbmVkIiwic2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50Iiwic2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZSIsImNvbG9yIiwiYmxlbmQiLCJzZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRUcmFuc3BhcmVudCIsInNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZE9wYXF1ZSIsImFuc2kiLCJzbGljZSIsImNvbnRyYXN0Q2FjaGUiLCJoYWxmQ29udHJhc3RDYWNoZSIsIl91cGRhdGVSZXN0b3JlQ29sb3JzIiwiX3NldFRoZW1lIiwicmF3T3B0aW9ucyIsInRoZW1lIiwib25TcGVjaWZpY09wdGlvbkNoYW5nZSIsInBhcnNlQ29sb3IiLCJzZWxlY3Rpb25CYWNrZ3JvdW5kIiwic2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kIiwiTlVMTF9DT0xPUiIsImlzT3BhcXVlIiwib3BhY2l0eSIsImJsYWNrIiwicmVkIiwiZ3JlZW4iLCJ5ZWxsb3ciLCJibHVlIiwibWFnZW50YSIsImN5YW4iLCJ3aGl0ZSIsImJyaWdodEJsYWNrIiwiYnJpZ2h0UmVkIiwiYnJpZ2h0R3JlZW4iLCJicmlnaHRZZWxsb3ciLCJicmlnaHRCbHVlIiwiYnJpZ2h0TWFnZW50YSIsImJyaWdodEN5YW4iLCJicmlnaHRXaGl0ZSIsImV4dGVuZGVkQW5zaSIsImNvbG9yQ291bnQiLCJNYXRoIiwibWluIiwibGVuZ3RoIiwiZmlyZSIsInJlc3RvcmVDb2xvciIsInNsb3QiLCJfcmVzdG9yZUNvbG9yIiwiX3Jlc3RvcmVDb2xvcnMiLCJtb2RpZnlDb2xvcnMiLCJjYWxsYmFjayIsImNzc1N0cmluZyIsImZhbGxiYWNrIiwiSU9wdGlvbnNTZXJ2aWNlIiwiJHIiLCIkZyIsIiRiIiwiJGEiLCJyZ2IiLCJ0b1BhZGRlZEhleCIsInMiLCJ0b1N0cmluZyIsImNvbnRyYXN0UmF0aW8iLCJsMSIsImwyIiwiYSIsInJvdW5kIiwidG9DaGFubmVscyIsImZnUiIsImZnRyIsImZnQiIsImJnUiIsImJnRyIsImJnQiIsImVuc3VyZUNvbnRyYXN0UmF0aW8iLCJyYXRpbyIsInJlc3VsdCIsIm9wYXF1ZSIsInJnYmFDb2xvciIsIm11bHRpcGx5T3BhY2l0eSIsImZhY3RvciIsInRvQ29sb3JSR0IiLCIkY3R4IiwiJGxpdG11c0NvbG9yIiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJjdHgiLCJnZXRDb250ZXh0Iiwid2lsbFJlYWRGcmVxdWVudGx5IiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiY3JlYXRlTGluZWFyR3JhZGllbnQiLCJtYXRjaCIsInBhcnNlSW50IiwicmVwZWF0IiwicmdiYU1hdGNoIiwicGFyc2VGbG9hdCIsIkVycm9yIiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwicmVsYXRpdmVMdW1pbmFuY2UyIiwicnMiLCJncyIsImJzIiwicG93IiwicmVsYXRpdmVMdW1pbmFuY2UiLCJyZWR1Y2VMdW1pbmFuY2UiLCJiZ1JnYmEiLCJmZ1JnYmEiLCJjciIsIm1heCIsImNlaWwiLCJpbmNyZWFzZUx1bWluYW5jZSIsImJnTCIsImZnTCIsInJlc3VsdEEiLCJyZXN1bHRBUmF0aW8iLCJyZXN1bHRCIiwiX2xpc3RlbmVycyIsIl9kaXNwb3NlZCIsIl9ldmVudCIsImxpc3RlbmVyIiwiZGlzcG9zZSIsInNwbGljZSIsImFyZzEiLCJhcmcyIiwicXVldWUiLCJjYWxsIiwiY2xlYXJMaXN0ZW5lcnMiLCJmcm9tIiwidG8iLCJlIiwiaGFuZGxlciIsImRpc3Bvc2VBcnJheSIsImRpc3Bvc2FibGVzIiwiZCIsIl9kaXNwb3NhYmxlcyIsIl9pc0Rpc3Bvc2VkIiwidW5yZWdpc3RlciIsImluZGV4IiwiaW5kZXhPZiIsIl92YWx1ZSIsImYiLCJhcnJheSIsIl9kYXRhIiwiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCIsIkRJX1RBUkdFVCIsIkRJX0RFUEVOREVOQ0lFUyIsInNlcnZpY2VSZWdpc3RyeSIsIk1hcCIsImN0b3IiLCJpZCIsImhhcyIsImRlY29yYXRvciIsInRhcmdldCIsImtleSIsImFyZ3VtZW50cyIsInN0b3JlU2VydmljZURlcGVuZGVuY3kiLCJMb2dMZXZlbEVudW0iLCJJQnVmZmVyU2VydmljZSIsImNyZWF0ZURlY29yYXRvciIsIklDb3JlTW91c2VTZXJ2aWNlIiwiSUNvcmVTZXJ2aWNlIiwiSUNoYXJzZXRTZXJ2aWNlIiwiSUluc3RhbnRpYXRpb25TZXJ2aWNlIiwiSUxvZ1NlcnZpY2UiLCJJT3NjTGlua1NlcnZpY2UiLCJJVW5pY29kZVNlcnZpY2UiLCJJRGVjb3JhdGlvblNlcnZpY2UiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY29uc3RyYWluIiwibG93IiwiaGlnaCIsIkJhc2VTZXJpYWxpemVIYW5kbGVyIiwiX2J1ZmZlciIsInNlcmlhbGl6ZSIsInJhbmdlIiwiZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24iLCJjZWxsMSIsImdldE51bGxDZWxsIiwiY2VsbDIiLCJvbGRDZWxsIiwic3RhcnRSb3ciLCJzdGFydCIsInkiLCJlbmRSb3ciLCJlbmQiLCJzdGFydENvbHVtbiIsIngiLCJlbmRDb2x1bW4iLCJfYmVmb3JlU2VyaWFsaXplIiwicm93IiwibGluZSIsImdldExpbmUiLCJzdGFydExpbmVDb2x1bW4iLCJlbmRMaW5lQ29sdW1uIiwiY29sIiwiZ2V0Q2VsbCIsIl9uZXh0Q2VsbCIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jvd0VuZCIsIl9hZnRlclNlcmlhbGl6ZSIsIl9zZXJpYWxpemVTdHJpbmciLCJjZWxsIiwiaXNMYXN0Um93Iiwicm93cyIsImVxdWFsRmciLCJnZXRGZ0NvbG9yTW9kZSIsImdldEZnQ29sb3IiLCJlcXVhbEJnIiwiZ2V0QmdDb2xvck1vZGUiLCJnZXRCZ0NvbG9yIiwiZXF1YWxGbGFncyIsImlzSW52ZXJzZSIsImlzQm9sZCIsImlzVW5kZXJsaW5lIiwiaXNPdmVybGluZSIsImlzQmxpbmsiLCJpc0ludmlzaWJsZSIsImlzSXRhbGljIiwiaXNEaW0iLCJpc1N0cmlrZXRocm91Z2giLCJTdHJpbmdTZXJpYWxpemVIYW5kbGVyIiwiYnVmZmVyIiwiX3Rlcm1pbmFsIiwiX3Jvd0luZGV4IiwiX2FsbFJvd3MiLCJBcnJheSIsIl9hbGxSb3dTZXBhcmF0b3JzIiwiX2N1cnJlbnRSb3ciLCJfbnVsbENlbGxDb3VudCIsIl9jdXJzb3JTdHlsZSIsIl9jdXJzb3JTdHlsZVJvdyIsIl9jdXJzb3JTdHlsZUNvbCIsIl9iYWNrZ3JvdW5kQ2VsbCIsIl9maXJzdFJvdyIsIl9sYXN0Q3Vyc29yUm93IiwiX2xhc3RDdXJzb3JDb2wiLCJfbGFzdENvbnRlbnRDdXJzb3JSb3ciLCJfbGFzdENvbnRlbnRDdXJzb3JDb2wiLCJfdGhpc1Jvd0xhc3RDaGFyIiwiX3RoaXNSb3dMYXN0U2Vjb25kQ2hhciIsIl9uZXh0Um93Rmlyc3RDaGFyIiwicm93U2VwYXJhdG9yIiwiY3VycmVudExpbmUiLCJuZXh0TGluZSIsImlzV3JhcHBlZCIsInRoaXNSb3dMYXN0Q2hhciIsInRoaXNSb3dMYXN0U2Vjb25kQ2hhciIsIm5leHRSb3dGaXJzdENoYXIiLCJpc05leHRSb3dGaXJzdENoYXJEb3VibGVXaWR0aCIsImdldFdpZHRoIiwiaXNWYWxpZCIsImdldENoYXJzIiwiX2RpZmZTdHlsZSIsInNnclNlcSIsImZnQ2hhbmdlZCIsImJnQ2hhbmdlZCIsImZsYWdzQ2hhbmdlZCIsImlzQXR0cmlidXRlRGVmYXVsdCIsImlzRmdSR0IiLCJpc0ZnUGFsZXR0ZSIsImlzQmdSR0IiLCJpc0JnUGFsZXR0ZSIsImlzRW1wdHlDZWxsIiwiam9pbiIsInJvd0VuZCIsImNvbnRlbnQiLCJyZWFsQ3Vyc29yUm93IiwiYmFzZVkiLCJjdXJzb3JZIiwicmVhbEN1cnNvckNvbCIsImN1cnNvclgiLCJtb3ZlUmlnaHQiLCJvZmZzZXQiLCJjdXJBdHRyRGF0YSIsIl9jb3JlIiwiX2lucHV0SGFuZGxlciIsIl9jdXJBdHRyRGF0YSIsImFjdGl2YXRlIiwidGVybWluYWwiLCJfc2VyaWFsaXplQnVmZmVyQnlTY3JvbGxiYWNrIiwic2Nyb2xsYmFjayIsIm1heFJvd3MiLCJjb3JyZWN0Um93cyIsIl9zZXJpYWxpemVCdWZmZXJCeVJhbmdlIiwiY29scyIsIl9zZXJpYWxpemVCdWZmZXJBc0hUTUwiLCJvcHRpb25zIiwiYWN0aXZlIiwiSFRNTFNlcmlhbGl6ZUhhbmRsZXIiLCJvbmx5U2VsZWN0aW9uIiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uUG9zaXRpb24iLCJfc2VyaWFsaXplTW9kZXMiLCJtb2RlcyIsImFwcGxpY2F0aW9uQ3Vyc29yS2V5c01vZGUiLCJhcHBsaWNhdGlvbktleXBhZE1vZGUiLCJicmFja2V0ZWRQYXN0ZU1vZGUiLCJpbnNlcnRNb2RlIiwib3JpZ2luTW9kZSIsInJldmVyc2VXcmFwYXJvdW5kTW9kZSIsInNlbmRGb2N1c01vZGUiLCJ3cmFwYXJvdW5kTW9kZSIsIm1vdXNlVHJhY2tpbmdNb2RlIiwibm9ybWFsIiwiZXhjbHVkZUFsdEJ1ZmZlciIsInR5cGUiLCJhbHRlcm5hdGUiLCJleGNsdWRlTW9kZXMiLCJzZXJpYWxpemVBc0hUTUwiLCJfb3B0aW9ucyIsIl9odG1sQ29udGVudCIsIl90aGVtZVNlcnZpY2UiLCJfYW5zaUNvbG9ycyIsIl9wYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsImluY2x1ZGVHbG9iYWxCYWNrZ3JvdW5kIiwiZ2xvYmFsU3R5bGVEZWZpbml0aW9ucyIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsIl9nZXRIZXhDb2xvciIsImlzRmciLCJtYXAiLCJmZ0hleENvbG9yIiwiYmdIZXhDb2xvciIsInN0eWxlRGVmaW5pdGlvbnMiLCJ0IiwiU2VyaWFsaXplQWRkb24iLCJ3aW5kb3ciLCJuIiwibCIsImgiLCJ1IiwiXyIsIkMiLCJvIiwiZm9yd2FyZEV2ZW50IiwicnVuQW5kU3Vic2NyaWJlIiwiTXV0YWJsZURpc3Bvc2FibGUiLCJ0b0Rpc3Bvc2FibGUiLCJnZXREaXNwb3NlQXJyYXlEaXNwb3NhYmxlIiwiRm91cktleU1hcCIsImdldFNlcnZpY2VEZXBlbmRlbmNpZXMiLCJUUkFDRSIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIk9GRiJdLCJtYXBwaW5ncyI6IkNXQUEsQVhBQSxTQUEyQ0EsQ1dBQW1NLENBQUEsQVhBTWxNLEVXQUErWSxDQUFBLEFYQzFCLGlCQUFaOVksU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxR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VUFBQSxDQUFXbkksQ0FBQSxFQUFNNk0sQ0FBQTtRQUczQy9XLENBQUEsS0FDRixLQUFLNFEsV0FBQSxJQUEyQyxNQUE1QjVRLENBQUEsQ0FBaUJzRSxNQUFBLEdBQ25DLGtCQUNBLHlCQUEwQnRFLENBQUEsQ0FBaUJnVCxJQUFBLENBQUssT0FBTyxPQUt6RCxLQUFLcEMsV0FBQSxJQURINEcsQ0FBQSxHQUNrQixNQUVBdE4sQ0FBQSxDQUFLa0ksUUFBQSxFQUU3QjtNQUFBO01BRVVuRCxpQkFBQTtRQUNSLE9BQU8sS0FBSzhHLFlBQ2Q7TUFBQTtJQUFBO0lBakpGN0wsQ0FBQSxDQUFBdUssb0JBQUEsR0FBQTJDLEMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTZXJpYWxpemVBZGRvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTZXJpYWxpemVBZGRvblwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNyBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IElDb2xvckNvbnRyYXN0Q2FjaGUgfSBmcm9tICdicm93c2VyL1R5cGVzJztcbmltcG9ydCB7IElDb2xvciB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5pbXBvcnQgeyBUd29LZXlNYXAgfSBmcm9tICdjb21tb24vTXVsdGlLZXlNYXAnO1xuXG5leHBvcnQgY2xhc3MgQ29sb3JDb250cmFzdENhY2hlIGltcGxlbWVudHMgSUNvbG9yQ29udHJhc3RDYWNoZSB7XG4gIHByaXZhdGUgX2NvbG9yOiBUd29LZXlNYXA8LyogYmcgKi9udW1iZXIsIC8qIGZnICovbnVtYmVyLCBJQ29sb3IgfCBudWxsPiA9IG5ldyBUd29LZXlNYXAoKTtcbiAgcHJpdmF0ZSBfY3NzOiBUd29LZXlNYXA8LyogYmcgKi9udW1iZXIsIC8qIGZnICovbnVtYmVyLCBzdHJpbmcgfCBudWxsPiA9IG5ldyBUd29LZXlNYXAoKTtcblxuICBwdWJsaWMgc2V0Q3NzKGJnOiBudW1iZXIsIGZnOiBudW1iZXIsIHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fY3NzLnNldChiZywgZmcsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDc3MoYmc6IG51bWJlciwgZmc6IG51bWJlcik6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jc3MuZ2V0KGJnLCBmZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29sb3IoYmc6IG51bWJlciwgZmc6IG51bWJlciwgdmFsdWU6IElDb2xvciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2xvci5zZXQoYmcsIGZnLCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sb3IoYmc6IG51bWJlciwgZmc6IG51bWJlcik6IElDb2xvciB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb2xvci5nZXQoYmcsIGZnKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2xvci5jbGVhcigpO1xuICAgIHRoaXMuX2Nzcy5jbGVhcigpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMiBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IENvbG9yQ29udHJhc3RDYWNoZSB9IGZyb20gJ2Jyb3dzZXIvQ29sb3JDb250cmFzdENhY2hlJztcbmltcG9ydCB7IElUaGVtZVNlcnZpY2UgfSBmcm9tICdicm93c2VyL3NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IElDb2xvckNvbnRyYXN0Q2FjaGUsIElDb2xvclNldCwgUmVhZG9ubHlDb2xvclNldCB9IGZyb20gJ2Jyb3dzZXIvVHlwZXMnO1xuaW1wb3J0IHsgY2hhbm5lbHMsIGNvbG9yLCBjc3MsIE5VTExfQ09MT1IgfSBmcm9tICdjb21tb24vQ29sb3InO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnY29tbW9uL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBEaXNwb3NhYmxlIH0gZnJvbSAnY29tbW9uL0xpZmVjeWNsZSc7XG5pbXBvcnQgeyBJT3B0aW9uc1NlcnZpY2UsIElUaGVtZSB9IGZyb20gJ2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBBbGxDb2xvckluZGV4LCBJQ29sb3IsIFNwZWNpYWxDb2xvckluZGV4IH0gZnJvbSAnY29tbW9uL1R5cGVzJztcblxuaW50ZXJmYWNlIElSZXN0b3JlQ29sb3JTZXQge1xuICBmb3JlZ3JvdW5kOiBJQ29sb3I7XG4gIGJhY2tncm91bmQ6IElDb2xvcjtcbiAgY3Vyc29yOiBJQ29sb3I7XG4gIGFuc2k6IElDb2xvcltdO1xufVxuXG5cbmNvbnN0IERFRkFVTFRfRk9SRUdST1VORCA9IGNzcy50b0NvbG9yKCcjZmZmZmZmJyk7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkQgPSBjc3MudG9Db2xvcignIzAwMDAwMCcpO1xuY29uc3QgREVGQVVMVF9DVVJTT1IgPSBjc3MudG9Db2xvcignI2ZmZmZmZicpO1xuY29uc3QgREVGQVVMVF9DVVJTT1JfQUNDRU5UID0gY3NzLnRvQ29sb3IoJyMwMDAwMDAnKTtcbmNvbnN0IERFRkFVTFRfU0VMRUNUSU9OID0ge1xuICBjc3M6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICByZ2JhOiAweEZGRkZGRjREXG59O1xuXG4vLyBBbiBJSUZFIHRvIGdlbmVyYXRlIERFRkFVTFRfQU5TSV9DT0xPUlMuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTlNJX0NPTE9SUyA9IE9iamVjdC5mcmVlemUoKCgpID0+IHtcbiAgY29uc3QgY29sb3JzID0gW1xuICAgIC8vIGRhcms6XG4gICAgY3NzLnRvQ29sb3IoJyMyZTM0MzYnKSxcbiAgICBjc3MudG9Db2xvcignI2NjMDAwMCcpLFxuICAgIGNzcy50b0NvbG9yKCcjNGU5YTA2JyksXG4gICAgY3NzLnRvQ29sb3IoJyNjNGEwMDAnKSxcbiAgICBjc3MudG9Db2xvcignIzM0NjVhNCcpLFxuICAgIGNzcy50b0NvbG9yKCcjNzU1MDdiJyksXG4gICAgY3NzLnRvQ29sb3IoJyMwNjk4OWEnKSxcbiAgICBjc3MudG9Db2xvcignI2QzZDdjZicpLFxuICAgIC8vIGJyaWdodDpcbiAgICBjc3MudG9Db2xvcignIzU1NTc1MycpLFxuICAgIGNzcy50b0NvbG9yKCcjZWYyOTI5JyksXG4gICAgY3NzLnRvQ29sb3IoJyM4YWUyMzQnKSxcbiAgICBjc3MudG9Db2xvcignI2ZjZTk0ZicpLFxuICAgIGNzcy50b0NvbG9yKCcjNzI5ZmNmJyksXG4gICAgY3NzLnRvQ29sb3IoJyNhZDdmYTgnKSxcbiAgICBjc3MudG9Db2xvcignIzM0ZTJlMicpLFxuICAgIGNzcy50b0NvbG9yKCcjZWVlZWVjJylcbiAgXTtcblxuICAvLyBGaWxsIGluIHRoZSByZW1haW5pbmcgMjQwIEFOU0kgY29sb3JzLlxuICAvLyBHZW5lcmF0ZSBjb2xvcnMgKDE2LTIzMSlcbiAgY29uc3QgdiA9IFsweDAwLCAweDVmLCAweDg3LCAweGFmLCAweGQ3LCAweGZmXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTY7IGkrKykge1xuICAgIGNvbnN0IHIgPSB2WyhpIC8gMzYpICUgNiB8IDBdO1xuICAgIGNvbnN0IGcgPSB2WyhpIC8gNikgJSA2IHwgMF07XG4gICAgY29uc3QgYiA9IHZbaSAlIDZdO1xuICAgIGNvbG9ycy5wdXNoKHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MociwgZywgYiksXG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEociwgZywgYilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGdyZXlzICgyMzItMjU1KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBjb25zdCBjID0gOCArIGkgKiAxMDtcbiAgICBjb2xvcnMucHVzaCh7XG4gICAgICBjc3M6IGNoYW5uZWxzLnRvQ3NzKGMsIGMsIGMpLFxuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKGMsIGMsIGMpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufSkoKSk7XG5cbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2UgZXh0ZW5kcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSVRoZW1lU2VydmljZSB7XG4gIHB1YmxpYyBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9jb2xvcnM6IElDb2xvclNldDtcbiAgcHJpdmF0ZSBfY29udHJhc3RDYWNoZTogSUNvbG9yQ29udHJhc3RDYWNoZSA9IG5ldyBDb2xvckNvbnRyYXN0Q2FjaGUoKTtcbiAgcHJpdmF0ZSBfaGFsZkNvbnRyYXN0Q2FjaGU6IElDb2xvckNvbnRyYXN0Q2FjaGUgPSBuZXcgQ29sb3JDb250cmFzdENhY2hlKCk7XG4gIHByaXZhdGUgX3Jlc3RvcmVDb2xvcnMhOiBJUmVzdG9yZUNvbG9yU2V0O1xuXG4gIHB1YmxpYyBnZXQgY29sb3JzKCk6IFJlYWRvbmx5Q29sb3JTZXQgeyByZXR1cm4gdGhpcy5fY29sb3JzOyB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25DaGFuZ2VDb2xvcnMgPSB0aGlzLnJlZ2lzdGVyKG5ldyBFdmVudEVtaXR0ZXI8UmVhZG9ubHlDb2xvclNldD4oKSk7XG4gIHB1YmxpYyByZWFkb25seSBvbkNoYW5nZUNvbG9ycyA9IHRoaXMuX29uQ2hhbmdlQ29sb3JzLmV2ZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJT3B0aW9uc1NlcnZpY2UgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uc1NlcnZpY2U6IElPcHRpb25zU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fY29sb3JzID0ge1xuICAgICAgZm9yZWdyb3VuZDogREVGQVVMVF9GT1JFR1JPVU5ELFxuICAgICAgYmFja2dyb3VuZDogREVGQVVMVF9CQUNLR1JPVU5ELFxuICAgICAgY3Vyc29yOiBERUZBVUxUX0NVUlNPUixcbiAgICAgIGN1cnNvckFjY2VudDogREVGQVVMVF9DVVJTT1JfQUNDRU5ULFxuICAgICAgc2VsZWN0aW9uRm9yZWdyb3VuZDogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50OiBERUZBVUxUX1NFTEVDVElPTixcbiAgICAgIHNlbGVjdGlvbkJhY2tncm91bmRPcGFxdWU6IGNvbG9yLmJsZW5kKERFRkFVTFRfQkFDS0dST1VORCwgREVGQVVMVF9TRUxFQ1RJT04pLFxuICAgICAgc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQ6IERFRkFVTFRfU0VMRUNUSU9OLFxuICAgICAgc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kT3BhcXVlOiBjb2xvci5ibGVuZChERUZBVUxUX0JBQ0tHUk9VTkQsIERFRkFVTFRfU0VMRUNUSU9OKSxcbiAgICAgIGFuc2k6IERFRkFVTFRfQU5TSV9DT0xPUlMuc2xpY2UoKSxcbiAgICAgIGNvbnRyYXN0Q2FjaGU6IHRoaXMuX2NvbnRyYXN0Q2FjaGUsXG4gICAgICBoYWxmQ29udHJhc3RDYWNoZTogdGhpcy5faGFsZkNvbnRyYXN0Q2FjaGVcbiAgICB9O1xuICAgIHRoaXMuX3VwZGF0ZVJlc3RvcmVDb2xvcnMoKTtcbiAgICB0aGlzLl9zZXRUaGVtZSh0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnRoZW1lKTtcblxuICAgIHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZSgnbWluaW11bUNvbnRyYXN0UmF0aW8nLCAoKSA9PiB0aGlzLl9jb250cmFzdENhY2hlLmNsZWFyKCkpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9uU3BlY2lmaWNPcHRpb25DaGFuZ2UoJ3RoZW1lJywgKCkgPT4gdGhpcy5fc2V0VGhlbWUodGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy50aGVtZSkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZXJtaW5hbCdzIHRoZW1lLlxuICAgKiBAcGFyYW0gdGhlbWUgVGhlICB0aGVtZSB0byB1c2UuIElmIGEgcGFydGlhbCB0aGVtZSBpcyBwcm92aWRlZCB0aGVuIGRlZmF1bHRcbiAgICogY29sb3JzIHdpbGwgYmUgdXNlZCB3aGVyZSBjb2xvcnMgYXJlIG5vdCBkZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0VGhlbWUodGhlbWU6IElUaGVtZSA9IHt9KTogdm9pZCB7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5fY29sb3JzO1xuICAgIGNvbG9ycy5mb3JlZ3JvdW5kID0gcGFyc2VDb2xvcih0aGVtZS5mb3JlZ3JvdW5kLCBERUZBVUxUX0ZPUkVHUk9VTkQpO1xuICAgIGNvbG9ycy5iYWNrZ3JvdW5kID0gcGFyc2VDb2xvcih0aGVtZS5iYWNrZ3JvdW5kLCBERUZBVUxUX0JBQ0tHUk9VTkQpO1xuICAgIGNvbG9ycy5jdXJzb3IgPSBwYXJzZUNvbG9yKHRoZW1lLmN1cnNvciwgREVGQVVMVF9DVVJTT1IpO1xuICAgIGNvbG9ycy5jdXJzb3JBY2NlbnQgPSBwYXJzZUNvbG9yKHRoZW1lLmN1cnNvckFjY2VudCwgREVGQVVMVF9DVVJTT1JfQUNDRU5UKTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50ID0gcGFyc2VDb2xvcih0aGVtZS5zZWxlY3Rpb25CYWNrZ3JvdW5kLCBERUZBVUxUX1NFTEVDVElPTik7XG4gICAgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRPcGFxdWUgPSBjb2xvci5ibGVuZChjb2xvcnMuYmFja2dyb3VuZCwgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCk7XG4gICAgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50ID0gcGFyc2VDb2xvcih0aGVtZS5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmQsIGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQpO1xuICAgIGNvbG9ycy5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRPcGFxdWUgPSBjb2xvci5ibGVuZChjb2xvcnMuYmFja2dyb3VuZCwgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50KTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uRm9yZWdyb3VuZCA9IHRoZW1lLnNlbGVjdGlvbkZvcmVncm91bmQgPyBwYXJzZUNvbG9yKHRoZW1lLnNlbGVjdGlvbkZvcmVncm91bmQsIE5VTExfQ09MT1IpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xvcnMuc2VsZWN0aW9uRm9yZWdyb3VuZCA9PT0gTlVMTF9DT0xPUikge1xuICAgICAgY29sb3JzLnNlbGVjdGlvbkZvcmVncm91bmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgc2VsZWN0aW9uIGNvbG9yIGlzIG9wYXF1ZSwgYmxlbmQgaXQgd2l0aCBiYWNrZ3JvdW5kIHdpdGggMC4zIG9wYWNpdHlcbiAgICAgKiBJc3N1ZSAjMjczN1xuICAgICAqL1xuICAgIGlmIChjb2xvci5pc09wYXF1ZShjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50KSkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IDAuMztcbiAgICAgIGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBjb2xvci5vcGFjaXR5KGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQsIG9wYWNpdHkpO1xuICAgIH1cbiAgICBpZiAoY29sb3IuaXNPcGFxdWUoY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50KSkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IDAuMztcbiAgICAgIGNvbG9ycy5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRUcmFuc3BhcmVudCA9IGNvbG9yLm9wYWNpdHkoY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50LCBvcGFjaXR5KTtcbiAgICB9XG4gICAgY29sb3JzLmFuc2kgPSBERUZBVUxUX0FOU0lfQ09MT1JTLnNsaWNlKCk7XG4gICAgY29sb3JzLmFuc2lbMF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJsYWNrLCBERUZBVUxUX0FOU0lfQ09MT1JTWzBdKTtcbiAgICBjb2xvcnMuYW5zaVsxXSA9IHBhcnNlQ29sb3IodGhlbWUucmVkLCBERUZBVUxUX0FOU0lfQ09MT1JTWzFdKTtcbiAgICBjb2xvcnMuYW5zaVsyXSA9IHBhcnNlQ29sb3IodGhlbWUuZ3JlZW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbMl0pO1xuICAgIGNvbG9ycy5hbnNpWzNdID0gcGFyc2VDb2xvcih0aGVtZS55ZWxsb3csIERFRkFVTFRfQU5TSV9DT0xPUlNbM10pO1xuICAgIGNvbG9ycy5hbnNpWzRdID0gcGFyc2VDb2xvcih0aGVtZS5ibHVlLCBERUZBVUxUX0FOU0lfQ09MT1JTWzRdKTtcbiAgICBjb2xvcnMuYW5zaVs1XSA9IHBhcnNlQ29sb3IodGhlbWUubWFnZW50YSwgREVGQVVMVF9BTlNJX0NPTE9SU1s1XSk7XG4gICAgY29sb3JzLmFuc2lbNl0gPSBwYXJzZUNvbG9yKHRoZW1lLmN5YW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbNl0pO1xuICAgIGNvbG9ycy5hbnNpWzddID0gcGFyc2VDb2xvcih0aGVtZS53aGl0ZSwgREVGQVVMVF9BTlNJX0NPTE9SU1s3XSk7XG4gICAgY29sb3JzLmFuc2lbOF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEJsYWNrLCBERUZBVUxUX0FOU0lfQ09MT1JTWzhdKTtcbiAgICBjb2xvcnMuYW5zaVs5XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0UmVkLCBERUZBVUxUX0FOU0lfQ09MT1JTWzldKTtcbiAgICBjb2xvcnMuYW5zaVsxMF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEdyZWVuLCBERUZBVUxUX0FOU0lfQ09MT1JTWzEwXSk7XG4gICAgY29sb3JzLmFuc2lbMTFdID0gcGFyc2VDb2xvcih0aGVtZS5icmlnaHRZZWxsb3csIERFRkFVTFRfQU5TSV9DT0xPUlNbMTFdKTtcbiAgICBjb2xvcnMuYW5zaVsxMl0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEJsdWUsIERFRkFVTFRfQU5TSV9DT0xPUlNbMTJdKTtcbiAgICBjb2xvcnMuYW5zaVsxM10gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodE1hZ2VudGEsIERFRkFVTFRfQU5TSV9DT0xPUlNbMTNdKTtcbiAgICBjb2xvcnMuYW5zaVsxNF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEN5YW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbMTRdKTtcbiAgICBjb2xvcnMuYW5zaVsxNV0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodFdoaXRlLCBERUZBVUxUX0FOU0lfQ09MT1JTWzE1XSk7XG4gICAgaWYgKHRoZW1lLmV4dGVuZGVkQW5zaSkge1xuICAgICAgY29uc3QgY29sb3JDb3VudCA9IE1hdGgubWluKGNvbG9ycy5hbnNpLmxlbmd0aCAtIDE2LCB0aGVtZS5leHRlbmRlZEFuc2kubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbG9ycy5hbnNpW2kgKyAxNl0gPSBwYXJzZUNvbG9yKHRoZW1lLmV4dGVuZGVkQW5zaVtpXSwgREVGQVVMVF9BTlNJX0NPTE9SU1tpICsgMTZdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2xlYXIgb3VyIHRoZSBjYWNoZVxuICAgIHRoaXMuX2NvbnRyYXN0Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLl9oYWxmQ29udHJhc3RDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuX3VwZGF0ZVJlc3RvcmVDb2xvcnMoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNvbG9ycy5maXJlKHRoaXMuY29sb3JzKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN0b3JlQ29sb3Ioc2xvdD86IEFsbENvbG9ySW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXN0b3JlQ29sb3Ioc2xvdCk7XG4gICAgdGhpcy5fb25DaGFuZ2VDb2xvcnMuZmlyZSh0aGlzLmNvbG9ycyk7XG4gIH1cblxuICBwcml2YXRlIF9yZXN0b3JlQ29sb3Ioc2xvdDogQWxsQ29sb3JJbmRleCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIC8vIHVuc2V0IHNsb3QgcmVzdG9yZXMgYWxsIGFuc2kgY29sb3JzXG4gICAgaWYgKHNsb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2kubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fY29sb3JzLmFuc2lbaV0gPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2lbaV07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAoc2xvdCkge1xuICAgICAgY2FzZSBTcGVjaWFsQ29sb3JJbmRleC5GT1JFR1JPVU5EOlxuICAgICAgICB0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZCA9IHRoaXMuX3Jlc3RvcmVDb2xvcnMuZm9yZWdyb3VuZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNwZWNpYWxDb2xvckluZGV4LkJBQ0tHUk9VTkQ6XG4gICAgICAgIHRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kID0gdGhpcy5fcmVzdG9yZUNvbG9ycy5iYWNrZ3JvdW5kO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3BlY2lhbENvbG9ySW5kZXguQ1VSU09SOlxuICAgICAgICB0aGlzLl9jb2xvcnMuY3Vyc29yID0gdGhpcy5fcmVzdG9yZUNvbG9ycy5jdXJzb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5fY29sb3JzLmFuc2lbc2xvdF0gPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2lbc2xvdF07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vZGlmeUNvbG9ycyhjYWxsYmFjazogKGNvbG9yczogSUNvbG9yU2V0KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY2FsbGJhY2sodGhpcy5fY29sb3JzKTtcbiAgICAvLyBBc3N1bWUgdGhlIGNoYW5nZSBoYXBwZW5lZFxuICAgIHRoaXMuX29uQ2hhbmdlQ29sb3JzLmZpcmUodGhpcy5jb2xvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUmVzdG9yZUNvbG9ycygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXN0b3JlQ29sb3JzID0ge1xuICAgICAgZm9yZWdyb3VuZDogdGhpcy5fY29sb3JzLmZvcmVncm91bmQsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLl9jb2xvcnMuYmFja2dyb3VuZCxcbiAgICAgIGN1cnNvcjogdGhpcy5fY29sb3JzLmN1cnNvcixcbiAgICAgIGFuc2k6IHRoaXMuX2NvbG9ycy5hbnNpLnNsaWNlKClcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29sb3IoXG4gIGNzc1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBmYWxsYmFjazogSUNvbG9yXG4pOiBJQ29sb3Ige1xuICBpZiAoY3NzU3RyaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNzcy50b0NvbG9yKGNzc1N0cmluZyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBuby1vcFxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsbGJhY2s7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IElDb2xvciwgSUNvbG9yUkdCIH0gZnJvbSAnY29tbW9uL1R5cGVzJztcblxubGV0ICRyID0gMDtcbmxldCAkZyA9IDA7XG5sZXQgJGIgPSAwO1xubGV0ICRhID0gMDtcblxuZXhwb3J0IGNvbnN0IE5VTExfQ09MT1I6IElDb2xvciA9IHtcbiAgY3NzOiAnIzAwMDAwMDAwJyxcbiAgcmdiYTogMFxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBcImNoYW5uZWxzXCIgKGluZGl2aWR1YWwgY29sb3IgY2hhbm5lbHMgYXMgbnVtYmVycykuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgY2hhbm5lbHMge1xuICBleHBvcnQgZnVuY3Rpb24gdG9Dc3MocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYT86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGAjJHt0b1BhZGRlZEhleChyKX0ke3RvUGFkZGVkSGV4KGcpfSR7dG9QYWRkZWRIZXgoYil9JHt0b1BhZGRlZEhleChhKX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCMke3RvUGFkZGVkSGV4KHIpfSR7dG9QYWRkZWRIZXgoZyl9JHt0b1BhZGRlZEhleChiKX1gO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmdiYShyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIgPSAweEZGKTogbnVtYmVyIHtcbiAgICAvLyBOb3RlOiBUaGUgYWdncmVnYXRlZCBudW1iZXIgaXMgUkdCQTMyIChCRSksIHRodXMgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIEFCR1IzMlxuICAgIC8vIG9uIExFIHN5c3RlbXMsIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBmb3IgZGlyZWN0IDMyLWJpdCBidWZmZXIgd3JpdGVzLlxuICAgIC8vID4+PiAwIGZvcmNlcyBhbiB1bnNpZ25lZCBpbnRcbiAgICByZXR1cm4gKHIgPDwgMjQgfCBnIDw8IDE2IHwgYiA8PCA4IHwgYSkgPj4+IDA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9Db2xvcihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhPzogbnVtYmVyKTogSUNvbG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3NzOiBjaGFubmVscy50b0NzcyhyLCBnLCBiLCBhKSxcbiAgICAgIHJnYmE6IGNoYW5uZWxzLnRvUmdiYShyLCBnLCBiLCBhKVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBgSUNvbG9yYC5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBjb2xvciB7XG4gIGV4cG9ydCBmdW5jdGlvbiBibGVuZChiZzogSUNvbG9yLCBmZzogSUNvbG9yKTogSUNvbG9yIHtcbiAgICAkYSA9IChmZy5yZ2JhICYgMHhGRikgLyAyNTU7XG4gICAgaWYgKCRhID09PSAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjc3M6IGZnLmNzcyxcbiAgICAgICAgcmdiYTogZmcucmdiYVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmdSID0gKGZnLnJnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBmZ0cgPSAoZmcucmdiYSA+PiAxNikgJiAweEZGO1xuICAgIGNvbnN0IGZnQiA9IChmZy5yZ2JhID4+IDgpICYgMHhGRjtcbiAgICBjb25zdCBiZ1IgPSAoYmcucmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGJnRyA9IChiZy5yZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnLnJnYmEgPj4gOCkgJiAweEZGO1xuICAgICRyID0gYmdSICsgTWF0aC5yb3VuZCgoZmdSIC0gYmdSKSAqICRhKTtcbiAgICAkZyA9IGJnRyArIE1hdGgucm91bmQoKGZnRyAtIGJnRykgKiAkYSk7XG4gICAgJGIgPSBiZ0IgKyBNYXRoLnJvdW5kKChmZ0IgLSBiZ0IpICogJGEpO1xuICAgIGNvbnN0IGNzcyA9IGNoYW5uZWxzLnRvQ3NzKCRyLCAkZywgJGIpO1xuICAgIGNvbnN0IHJnYmEgPSBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYik7XG4gICAgcmV0dXJuIHsgY3NzLCByZ2JhIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNPcGFxdWUoY29sb3I6IElDb2xvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoY29sb3IucmdiYSAmIDB4RkYpID09PSAweEZGO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnRyYXN0UmF0aW8oYmc6IElDb2xvciwgZmc6IElDb2xvciwgcmF0aW86IG51bWJlcik6IElDb2xvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmdiYS5lbnN1cmVDb250cmFzdFJhdGlvKGJnLnJnYmEsIGZnLnJnYmEsIHJhdGlvKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoXG4gICAgICAocmVzdWx0ID4+IDI0ICYgMHhGRiksXG4gICAgICAocmVzdWx0ID4+IDE2ICYgMHhGRiksXG4gICAgICAocmVzdWx0ID4+IDggICYgMHhGRilcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9wYXF1ZShjb2xvcjogSUNvbG9yKTogSUNvbG9yIHtcbiAgICBjb25zdCByZ2JhQ29sb3IgPSAoY29sb3IucmdiYSB8IDB4RkYpID4+PiAwO1xuICAgIFskciwgJGcsICRiXSA9IHJnYmEudG9DaGFubmVscyhyZ2JhQ29sb3IpO1xuICAgIHJldHVybiB7XG4gICAgICBjc3M6IGNoYW5uZWxzLnRvQ3NzKCRyLCAkZywgJGIpLFxuICAgICAgcmdiYTogcmdiYUNvbG9yXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGFjaXR5KGNvbG9yOiBJQ29sb3IsIG9wYWNpdHk6IG51bWJlcik6IElDb2xvciB7XG4gICAgJGEgPSBNYXRoLnJvdW5kKG9wYWNpdHkgKiAweEZGKTtcbiAgICBbJHIsICRnLCAkYl0gPSByZ2JhLnRvQ2hhbm5lbHMoY29sb3IucmdiYSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MoJHIsICRnLCAkYiwgJGEpLFxuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKCRyLCAkZywgJGIsICRhKVxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlPcGFjaXR5KGNvbG9yOiBJQ29sb3IsIGZhY3RvcjogbnVtYmVyKTogSUNvbG9yIHtcbiAgICAkYSA9IGNvbG9yLnJnYmEgJiAweEZGO1xuICAgIHJldHVybiBvcGFjaXR5KGNvbG9yLCAoJGEgKiBmYWN0b3IpIC8gMHhGRik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9Db2xvclJHQihjb2xvcjogSUNvbG9yKTogSUNvbG9yUkdCIHtcbiAgICByZXR1cm4gWyhjb2xvci5yZ2JhID4+IDI0KSAmIDB4RkYsIChjb2xvci5yZ2JhID4+IDE2KSAmIDB4RkYsIChjb2xvci5yZ2JhID4+IDgpICYgMHhGRl07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBcImNzc1wiIChzdHJpbmc6ICcjcmdiJywgJyNyZ2JhJywgJyNycmdnYmInLFxuICogJyNycmdnYmJhYScpLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIGNzcyB7XG4gIC8vIEF0dGVtcHQgdG8gc2V0IGdldCB0aGUgc2hhcmVkIGNhbnZhcyBjb250ZXh0XG4gIGxldCAkY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQ7XG4gIGxldCAkbGl0bXVzQ29sb3I6IENhbnZhc0dyYWRpZW50IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBydW4gaW4gdGhlIGZpcnN0IHdpbmRvdywgc28gZG9jdW1lbnQgc2hvdWxkIGJlIGNvcnJlY3RcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSAxO1xuICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChjdHgpIHtcbiAgICAgICRjdHggPSBjdHg7XG4gICAgICAkY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICAgICRsaXRtdXNDb2xvciA9ICRjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMSwgMSk7XG4gICAgfVxuICB9XG4gIGNhdGNoIHtcbiAgICAvLyBub29wXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBjc3Mgc3RyaW5nIHRvIGFuIElDb2xvciwgdGhpcyBzaG91bGQgaGFuZGxlIGFsbCB2YWxpZCBDU1MgY29sb3Igc3RyaW5ncyBhbmQgd2lsbFxuICAgKiB0aHJvdyBpZiBpdCdzIGludmFsaWQuIFRoZSBpZGVhbCBmb3JtYXQgdG8gdXNlIGlzIGAjcnJnZ2JiW2FhXWAgYXMgaXQncyB0aGUgZmFzdGVzdCB0byBwYXJzZS5cbiAgICpcbiAgICogT25seSBgI3JnYlthXWAsIGAjcnJnZ2JiW2FhXWAsIGByZ2IoKWAgYW5kIGByZ2JhKClgIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCB3aGVuIHJ1biBpbiBhIE5vZGVcbiAgICogZW52aXJvbm1lbnQuXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gdG9Db2xvcihjc3M6IHN0cmluZyk6IElDb2xvciB7XG4gICAgLy8gRm9ybWF0czogI3JnYlthXSBhbmQgI3JyZ2diYlthYV1cbiAgICBpZiAoY3NzLm1hdGNoKC8jW1xcZGEtZl17Myw4fS9pKSkge1xuICAgICAgc3dpdGNoIChjc3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgNDogeyAvLyAjcmdiXG4gICAgICAgICAgJHIgPSBwYXJzZUludChjc3Muc2xpY2UoMSwgMikucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGcgPSBwYXJzZUludChjc3Muc2xpY2UoMiwgMykucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGIgPSBwYXJzZUludChjc3Muc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoJHIsICRnLCAkYik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA1OiB7IC8vICNyZ2JhXG4gICAgICAgICAgJHIgPSBwYXJzZUludChjc3Muc2xpY2UoMSwgMikucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGcgPSBwYXJzZUludChjc3Muc2xpY2UoMiwgMykucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGIgPSBwYXJzZUludChjc3Muc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGEgPSBwYXJzZUludChjc3Muc2xpY2UoNCwgNSkucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoJHIsICRnLCAkYiwgJGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgNzogLy8gI3JyZ2diYlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjc3MsXG4gICAgICAgICAgICByZ2JhOiAocGFyc2VJbnQoY3NzLnNsaWNlKDEpLCAxNikgPDwgOCB8IDB4RkYpID4+PiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSA5OiAvLyAjcnJnZ2JiYWFcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3NzLFxuICAgICAgICAgICAgcmdiYTogcGFyc2VJbnQoY3NzLnNsaWNlKDEpLCAxNikgPj4+IDBcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcm1hdHM6IHJnYigpIG9yIHJnYmEoKVxuICAgIGNvbnN0IHJnYmFNYXRjaCA9IGNzcy5tYXRjaCgvcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKigsXFxzKigwfDF8XFxkP1xcLihcXGQrKSlcXHMqKT9cXCkvKTtcbiAgICBpZiAocmdiYU1hdGNoKSB7XG4gICAgICAkciA9IHBhcnNlSW50KHJnYmFNYXRjaFsxXSk7XG4gICAgICAkZyA9IHBhcnNlSW50KHJnYmFNYXRjaFsyXSk7XG4gICAgICAkYiA9IHBhcnNlSW50KHJnYmFNYXRjaFszXSk7XG4gICAgICAkYSA9IE1hdGgucm91bmQoKHJnYmFNYXRjaFs1XSA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnNlRmxvYXQocmdiYU1hdGNoWzVdKSkgKiAweEZGKTtcbiAgICAgIHJldHVybiBjaGFubmVscy50b0NvbG9yKCRyLCAkZywgJGIsICRhKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29udGV4dCBpcyBhdmFpbGFibGUgZm9yIGNhbnZhcy1iYXNlZCBjb2xvciBwYXJzaW5nXG4gICAgaWYgKCEkY3R4IHx8ICEkbGl0bXVzQ29sb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzLnRvQ29sb3I6IFVuc3VwcG9ydGVkIGNzcyBmb3JtYXQnKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29sb3IgdXNpbmcgY2FudmFzIGZpbGxTdHlsZVxuICAgIC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jYW52YXMuaHRtbCNmaWxsLWFuZC1zdHJva2Utc3R5bGVzXG4gICAgJGN0eC5maWxsU3R5bGUgPSAkbGl0bXVzQ29sb3I7XG4gICAgJGN0eC5maWxsU3R5bGUgPSBjc3M7XG4gICAgaWYgKHR5cGVvZiAkY3R4LmZpbGxTdHlsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzLnRvQ29sb3I6IFVuc3VwcG9ydGVkIGNzcyBmb3JtYXQnKTtcbiAgICB9XG5cbiAgICAkY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgIFskciwgJGcsICRiLCAkYV0gPSAkY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGNvbG9yIGlzIG5vbi10cmFuc3BhcmVudCBhcyBjb2xvciBodWUgZ2V0cyBsb3N0IHdoZW4gZHJhd24gdG8gdGhlIGNhbnZhc1xuICAgIGlmICgkYSAhPT0gMHhGRikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MudG9Db2xvcjogVW5zdXBwb3J0ZWQgY3NzIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgdGhlIGNvbG9yIGZyb20gdGhlIGNhbnZhcycgZmlsbFN0eWxlIHByb3BlcnR5IHdoaWNoIGV4cG9zZXMgdGhlIGNvbG9yIHZhbHVlIGluIHJnYmEoKVxuICAgIC8vIGZvcm1hdFxuICAgIC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jYW52YXMuaHRtbCNzZXJpYWxpc2F0aW9uLW9mLWEtY29sb3JcbiAgICByZXR1cm4ge1xuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKCRyLCAkZywgJGIsICRhKSxcbiAgICAgIGNzc1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBcInJnYlwiIChudW1iZXI6IDB4cnJnZ2JiKS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSByZ2Ige1xuICAvKipcbiAgICogR2V0cyB0aGUgcmVsYXRpdmUgbHVtaW5hbmNlIG9mIGFuIFJHQiBjb2xvciwgdGhpcyBpcyB1c2VmdWwgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbnRyYXN0IHJhdGlvXG4gICAqIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAgICogQHBhcmFtIHJnYiBUaGUgY29sb3IgdG8gdXNlLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UocmdiOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWxhdGl2ZUx1bWluYW5jZTIoXG4gICAgICAocmdiID4+IDE2KSAmIDB4RkYsXG4gICAgICAocmdiID4+IDggKSAmIDB4RkYsXG4gICAgICAocmdiICAgICAgKSAmIDB4RkYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlbGF0aXZlIGx1bWluYW5jZSBvZiBhbiBSR0IgY29sb3IsIHRoaXMgaXMgdXNlZnVsIGluIGRldGVybWluaW5nIHRoZSBjb250cmFzdCByYXRpb1xuICAgKiBiZXR3ZWVuIHR3byBjb2xvcnMuXG4gICAqIEBwYXJhbSByIFRoZSByZWQgY2hhbm5lbCAoMHgwMCB0byAweEZGKS5cbiAgICogQHBhcmFtIGcgVGhlIGdyZWVuIGNoYW5uZWwgKDB4MDAgdG8gMHhGRikuXG4gICAqIEBwYXJhbSBiIFRoZSBibHVlIGNoYW5uZWwgKDB4MDAgdG8gMHhGRikuXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZTIocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcnMgPSByIC8gMjU1O1xuICAgIGNvbnN0IGdzID0gZyAvIDI1NTtcbiAgICBjb25zdCBicyA9IGIgLyAyNTU7XG4gICAgY29uc3QgcnIgPSBycyA8PSAwLjAzOTI4ID8gcnMgLyAxMi45MiA6IE1hdGgucG93KChycyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGNvbnN0IHJnID0gZ3MgPD0gMC4wMzkyOCA/IGdzIC8gMTIuOTIgOiBNYXRoLnBvdygoZ3MgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICBjb25zdCByYiA9IGJzIDw9IDAuMDM5MjggPyBicyAvIDEyLjkyIDogTWF0aC5wb3coKGJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgcmV0dXJuIHJyICogMC4yMTI2ICsgcmcgKiAwLjcxNTIgKyByYiAqIDAuMDcyMjtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwicmdiYVwiIChudW1iZXI6IDB4cnJnZ2JiYWEpLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIHJnYmEge1xuICBleHBvcnQgZnVuY3Rpb24gYmxlbmQoYmc6IG51bWJlciwgZmc6IG51bWJlcik6IG51bWJlciB7XG4gICAgJGEgPSAoZmcgJiAweEZGKSAvIDB4RkY7XG4gICAgaWYgKCRhID09PSAxKSB7XG4gICAgICByZXR1cm4gZmc7XG4gICAgfVxuICAgIGNvbnN0IGZnUiA9IChmZyA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGZnRyA9IChmZyA+PiAxNikgJiAweEZGO1xuICAgIGNvbnN0IGZnQiA9IChmZyA+PiA4KSAmIDB4RkY7XG4gICAgY29uc3QgYmdSID0gKGJnID4+IDI0KSAmIDB4RkY7XG4gICAgY29uc3QgYmdHID0gKGJnID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnID4+IDgpICYgMHhGRjtcbiAgICAkciA9IGJnUiArIE1hdGgucm91bmQoKGZnUiAtIGJnUikgKiAkYSk7XG4gICAgJGcgPSBiZ0cgKyBNYXRoLnJvdW5kKChmZ0cgLSBiZ0cpICogJGEpO1xuICAgICRiID0gYmdCICsgTWF0aC5yb3VuZCgoZmdCIC0gYmdCKSAqICRhKTtcbiAgICByZXR1cm4gY2hhbm5lbHMudG9SZ2JhKCRyLCAkZywgJGIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZm9yZWdyb3VuZCBjb2xvciBhbmQgYSBiYWNrZ3JvdW5kIGNvbG9yLCBlaXRoZXIgaW5jcmVhc2Ugb3IgcmVkdWNlIHRoZSBsdW1pbmFuY2Ugb2YgdGhlXG4gICAqIGZvcmVncm91bmQgY29sb3IgdW50aWwgdGhlIHNwZWNpZmllZCBjb250cmFzdCByYXRpbyBpcyBtZXQuIElmIHB1cmUgd2hpdGUgb3IgYmxhY2sgaXMgaGl0XG4gICAqIHdpdGhvdXQgdGhlIGNvbnRyYXN0IHJhdGlvIGJlaW5nIG1ldCwgZ28gdGhlIG90aGVyIGRpcmVjdGlvbiB1c2luZyB0aGUgYmFja2dyb3VuZCBjb2xvciBhcyB0aGVcbiAgICogZm9yZWdyb3VuZCBjb2xvciBhbmQgdGFrZSBlaXRoZXIgdGhlIGZpcnN0IG9yIHNlY29uZCByZXN1bHQgZGVwZW5kaW5nIG9uIHdoaWNoIGhhcyB0aGUgaGlnaGVyXG4gICAqIGNvbnRyYXN0IHJhdGlvLlxuICAgKlxuICAgKiBgdW5kZWZpbmVkYCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjb250cmFzdCByYXRpbyBpcyBhbHJlYWR5IG1ldC5cbiAgICpcbiAgICogQHBhcmFtIGJnUmdiYSBUaGUgYmFja2dyb3VuZCBjb2xvciBpbiByZ2JhIGZvcm1hdC5cbiAgICogQHBhcmFtIGZnUmdiYSBUaGUgZm9yZWdyb3VuZCBjb2xvciBpbiByZ2JhIGZvcm1hdC5cbiAgICogQHBhcmFtIHJhdGlvIFRoZSBjb250cmFzdCByYXRpbyB0byBhY2hpZXZlLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnRyYXN0UmF0aW8oYmdSZ2JhOiBudW1iZXIsIGZnUmdiYTogbnVtYmVyLCByYXRpbzogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBiZ0wgPSByZ2IucmVsYXRpdmVMdW1pbmFuY2UoYmdSZ2JhID4+IDgpO1xuICAgIGNvbnN0IGZnTCA9IHJnYi5yZWxhdGl2ZUx1bWluYW5jZShmZ1JnYmEgPj4gOCk7XG4gICAgY29uc3QgY3IgPSBjb250cmFzdFJhdGlvKGJnTCwgZmdMKTtcbiAgICBpZiAoY3IgPCByYXRpbykge1xuICAgICAgaWYgKGZnTCA8IGJnTCkge1xuICAgICAgICBjb25zdCByZXN1bHRBID0gcmVkdWNlTHVtaW5hbmNlKGJnUmdiYSwgZmdSZ2JhLCByYXRpbyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEFSYXRpbyA9IGNvbnRyYXN0UmF0aW8oYmdMLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UocmVzdWx0QSA+PiA4KSk7XG4gICAgICAgIGlmIChyZXN1bHRBUmF0aW8gPCByYXRpbykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdEIgPSBpbmNyZWFzZUx1bWluYW5jZShiZ1JnYmEsIGZnUmdiYSwgcmF0aW8pO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdEJSYXRpbyA9IGNvbnRyYXN0UmF0aW8oYmdMLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UocmVzdWx0QiA+PiA4KSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdEFSYXRpbyA+IHJlc3VsdEJSYXRpbyA/IHJlc3VsdEEgOiByZXN1bHRCO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRBO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0QSA9IGluY3JlYXNlTHVtaW5hbmNlKGJnUmdiYSwgZmdSZ2JhLCByYXRpbyk7XG4gICAgICBjb25zdCByZXN1bHRBUmF0aW8gPSBjb250cmFzdFJhdGlvKGJnTCwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlKHJlc3VsdEEgPj4gOCkpO1xuICAgICAgaWYgKHJlc3VsdEFSYXRpbyA8IHJhdGlvKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdEIgPSByZWR1Y2VMdW1pbmFuY2UoYmdSZ2JhLCBmZ1JnYmEsIHJhdGlvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QlJhdGlvID0gY29udHJhc3RSYXRpbyhiZ0wsIHJnYi5yZWxhdGl2ZUx1bWluYW5jZShyZXN1bHRCID4+IDgpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdEFSYXRpbyA+IHJlc3VsdEJSYXRpbyA/IHJlc3VsdEEgOiByZXN1bHRCO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdEE7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVkdWNlTHVtaW5hbmNlKGJnUmdiYTogbnVtYmVyLCBmZ1JnYmE6IG51bWJlciwgcmF0aW86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gVGhpcyBpcyBhIG5haXZlIGJ1dCBmYXN0IGFwcHJvYWNoIHRvIHJlZHVjaW5nIGx1bWluYW5jZSBhcyBjb252ZXJ0aW5nIHRvXG4gICAgLy8gSFNMIGFuZCBiYWNrIGlzIGV4cGVuc2l2ZVxuICAgIGNvbnN0IGJnUiA9IChiZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBiZ0cgPSAoYmdSZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBmZ1IgPSAoZmdSZ2JhID4+IDI0KSAmIDB4RkY7XG4gICAgbGV0IGZnRyA9IChmZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBsZXQgZmdCID0gKGZnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBjciA9IGNvbnRyYXN0UmF0aW8ocmdiLnJlbGF0aXZlTHVtaW5hbmNlMihmZ1IsIGZnRywgZmdCKSwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlMihiZ1IsIGJnRywgYmdCKSk7XG4gICAgd2hpbGUgKGNyIDwgcmF0aW8gJiYgKGZnUiA+IDAgfHwgZmdHID4gMCB8fCBmZ0IgPiAwKSkge1xuICAgICAgLy8gUmVkdWNlIGJ5IDEwJSB1bnRpbCB0aGUgcmF0aW8gaXMgaGl0XG4gICAgICBmZ1IgLT0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGZnUiAqIDAuMSkpO1xuICAgICAgZmdHIC09IE1hdGgubWF4KDAsIE1hdGguY2VpbChmZ0cgKiAwLjEpKTtcbiAgICAgIGZnQiAtPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoZmdCICogMC4xKSk7XG4gICAgICBjciA9IGNvbnRyYXN0UmF0aW8ocmdiLnJlbGF0aXZlTHVtaW5hbmNlMihmZ1IsIGZnRywgZmdCKSwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlMihiZ1IsIGJnRywgYmdCKSk7XG4gICAgfVxuICAgIHJldHVybiAoZmdSIDw8IDI0IHwgZmdHIDw8IDE2IHwgZmdCIDw8IDggfCAweEZGKSA+Pj4gMDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmNyZWFzZUx1bWluYW5jZShiZ1JnYmE6IG51bWJlciwgZmdSZ2JhOiBudW1iZXIsIHJhdGlvOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFRoaXMgaXMgYSBuYWl2ZSBidXQgZmFzdCBhcHByb2FjaCB0byBpbmNyZWFzaW5nIGx1bWluYW5jZSBhcyBjb252ZXJ0aW5nIHRvXG4gICAgLy8gSFNMIGFuZCBiYWNrIGlzIGV4cGVuc2l2ZVxuICAgIGNvbnN0IGJnUiA9IChiZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBiZ0cgPSAoYmdSZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBmZ1IgPSAoZmdSZ2JhID4+IDI0KSAmIDB4RkY7XG4gICAgbGV0IGZnRyA9IChmZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBsZXQgZmdCID0gKGZnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBjciA9IGNvbnRyYXN0UmF0aW8ocmdiLnJlbGF0aXZlTHVtaW5hbmNlMihmZ1IsIGZnRywgZmdCKSwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlMihiZ1IsIGJnRywgYmdCKSk7XG4gICAgd2hpbGUgKGNyIDwgcmF0aW8gJiYgKGZnUiA8IDB4RkYgfHwgZmdHIDwgMHhGRiB8fCBmZ0IgPCAweEZGKSkge1xuICAgICAgLy8gSW5jcmVhc2UgYnkgMTAlIHVudGlsIHRoZSByYXRpbyBpcyBoaXRcbiAgICAgIGZnUiA9IE1hdGgubWluKDB4RkYsIGZnUiArIE1hdGguY2VpbCgoMjU1IC0gZmdSKSAqIDAuMSkpO1xuICAgICAgZmdHID0gTWF0aC5taW4oMHhGRiwgZmdHICsgTWF0aC5jZWlsKCgyNTUgLSBmZ0cpICogMC4xKSk7XG4gICAgICBmZ0IgPSBNYXRoLm1pbigweEZGLCBmZ0IgKyBNYXRoLmNlaWwoKDI1NSAtIGZnQikgKiAwLjEpKTtcbiAgICAgIGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB9XG4gICAgcmV0dXJuIChmZ1IgPDwgMjQgfCBmZ0cgPDwgMTYgfCBmZ0IgPDwgOCB8IDB4RkYpID4+PiAwO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvQ2hhbm5lbHModmFsdWU6IG51bWJlcik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gWyh2YWx1ZSA+PiAyNCkgJiAweEZGLCAodmFsdWUgPj4gMTYpICYgMHhGRiwgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9QYWRkZWRIZXgoYzogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcyA9IGMudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gcy5sZW5ndGggPCAyID8gJzAnICsgcyA6IHM7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gcmVsYXRpdmUgbHVtaW5hbmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBsMSBUaGUgZmlyc3QgcmVsYXRpdmUgbHVtaW5hbmNlLlxuICogQHBhcmFtIGwyIFRoZSBmaXJzdCByZWxhdGl2ZSBsdW1pbmFuY2UuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI2NvbnRyYXN0LXJhdGlvZGVmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFzdFJhdGlvKGwxOiBudW1iZXIsIGwyOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAobDEgPCBsMikge1xuICAgIHJldHVybiAobDIgKyAwLjA1KSAvIChsMSArIDAuMDUpO1xuICB9XG4gIHJldHVybiAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5cbmludGVyZmFjZSBJTGlzdGVuZXI8VCwgVSA9IHZvaWQ+IHtcbiAgKGFyZzE6IFQsIGFyZzI6IFUpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudDxULCBVID0gdm9pZD4ge1xuICAobGlzdGVuZXI6IChhcmcxOiBULCBhcmcyOiBVKSA9PiBhbnkpOiBJRGlzcG9zYWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRFbWl0dGVyPFQsIFUgPSB2b2lkPiB7XG4gIGV2ZW50OiBJRXZlbnQ8VCwgVT47XG4gIGZpcmUoYXJnMTogVCwgYXJnMjogVSk6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50RW1pdHRlcjxULCBVID0gdm9pZD4gaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyPFQsIFU+IHtcbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiBJTGlzdGVuZXI8VCwgVT5bXSA9IFtdO1xuICBwcml2YXRlIF9ldmVudD86IElFdmVudDxULCBVPjtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGV2ZW50KCk6IElFdmVudDxULCBVPiB7XG4gICAgaWYgKCF0aGlzLl9ldmVudCkge1xuICAgICAgdGhpcy5fZXZlbnQgPSAobGlzdGVuZXI6IChhcmcxOiBULCBhcmcyOiBVKSA9PiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICBjb25zdCBkaXNwb3NhYmxlID0ge1xuICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzW2ldID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50O1xuICB9XG5cbiAgcHVibGljIGZpcmUoYXJnMTogVCwgYXJnMjogVSk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlOiBJTGlzdGVuZXI8VCwgVT5bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWV1ZS5wdXNoKHRoaXMuX2xpc3RlbmVyc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXVlW2ldLmNhbGwodW5kZWZpbmVkLCBhcmcxLCBhcmcyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGNsZWFyTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZEV2ZW50PFQ+KGZyb206IElFdmVudDxUPiwgdG86IElFdmVudEVtaXR0ZXI8VD4pOiBJRGlzcG9zYWJsZSB7XG4gIHJldHVybiBmcm9tKGUgPT4gdG8uZmlyZShlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5BbmRTdWJzY3JpYmU8VD4oZXZlbnQ6IElFdmVudDxUPiwgaGFuZGxlcjogKGU6IFQgfCB1bmRlZmluZWQpID0+IGFueSk6IElEaXNwb3NhYmxlIHtcbiAgaGFuZGxlcih1bmRlZmluZWQpO1xuICByZXR1cm4gZXZlbnQoZSA9PiBoYW5kbGVyKGUpKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZCB0byBwcm92aWRlIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgYW5cbiAqIG9iamVjdCBhbmQgaXRzIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcm90ZWN0ZWQgX2Rpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBfaXNEaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LCB0cmlnZ2VyaW5nIHRoZSBgZGlzcG9zZWAgbWV0aG9kIG9uIGFsbCByZWdpc3RlcmVkIElEaXNwb3NhYmxlcy5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgZCBvZiB0aGlzLl9kaXNwb3NhYmxlcykge1xuICAgICAgZC5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgZGlzcG9zYWJsZSBvYmplY3QuXG4gICAqIEBwYXJhbSBkIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzcG9zYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcjxUIGV4dGVuZHMgSURpc3Bvc2FibGU+KGQ6IFQpOiBUIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5wdXNoKGQpO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIGEgZGlzcG9zYWJsZSBvYmplY3QgaWYgaXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgaWYgbm90IGRvXG4gICAqIG5vdGhpbmcuXG4gICAqIEBwYXJhbSBkIFRoZSBkaXNwb3NhYmxlIHRvIHVucmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgdW5yZWdpc3RlcjxUIGV4dGVuZHMgSURpc3Bvc2FibGU+KGQ6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2Rpc3Bvc2FibGVzLmluZGV4T2YoZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11dGFibGVEaXNwb3NhYmxlPFQgZXh0ZW5kcyBJRGlzcG9zYWJsZT4gaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3ZhbHVlPzogVDtcbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBpZiBpdCBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkID8gdW5kZWZpbmVkIDogdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUsIGRpc3Bvc2luZyBvZiB0aGUgb2xkIHZhbHVlIGlmIGl0IGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5faXNEaXNwb3NlZCB8fCB2YWx1ZSA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWU/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIHZhbHVlIGFuZCBkaXNwb3NlcyBvZiB0aGUgcHJldmlvdXNseSBzdG9yZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX3ZhbHVlPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwIGEgZnVuY3Rpb24gaW4gYSBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EaXNwb3NhYmxlKGY6ICgpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gIHJldHVybiB7IGRpc3Bvc2U6IGYgfTtcbn1cblxuLyoqXG4gKiBEaXNwb3NlIG9mIGFsbCBkaXNwb3NhYmxlcyBpbiBhbiBhcnJheSBhbmQgc2V0IGl0cyBsZW5ndGggdG8gMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VBcnJheShkaXNwb3NhYmxlczogSURpc3Bvc2FibGVbXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGQgb2YgZGlzcG9zYWJsZXMpIHtcbiAgICBkLmRpc3Bvc2UoKTtcbiAgfVxuICBkaXNwb3NhYmxlcy5sZW5ndGggPSAwO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkaXNwb3NhYmxlIHRoYXQgd2lsbCBkaXNwb3NlIG9mIGFuIGFycmF5IG9mIGRpc3Bvc2FibGVzIHdoZW4gZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwb3NlQXJyYXlEaXNwb3NhYmxlKGFycmF5OiBJRGlzcG9zYWJsZVtdKTogSURpc3Bvc2FibGUge1xuICByZXR1cm4geyBkaXNwb3NlOiAoKSA9PiBkaXNwb3NlQXJyYXkoYXJyYXkpIH07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMiBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmV4cG9ydCBjbGFzcyBUd29LZXlNYXA8VEZpcnN0IGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBUU2Vjb25kIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBUVmFsdWU+IHtcbiAgcHJpdmF0ZSBfZGF0YTogeyBbYmc6IHN0cmluZyB8IG51bWJlcl06IHsgW2ZnOiBzdHJpbmcgfCBudW1iZXJdOiBUVmFsdWUgfCB1bmRlZmluZWQgfSB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgcHVibGljIHNldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQsIHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RhdGFbZmlyc3RdKSB7XG4gICAgICB0aGlzLl9kYXRhW2ZpcnN0XSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLl9kYXRhW2ZpcnN0IGFzIHN0cmluZyB8IG51bWJlcl0hW3NlY29uZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoZmlyc3Q6IFRGaXJzdCwgc2Vjb25kOiBUU2Vjb25kKTogVFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVtmaXJzdCBhcyBzdHJpbmcgfCBudW1iZXJdID8gdGhpcy5fZGF0YVtmaXJzdCBhcyBzdHJpbmcgfCBudW1iZXJdIVtzZWNvbmRdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRm91cktleU1hcDxURmlyc3QgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRTZWNvbmQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRUaGlyZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVEZvdXJ0aCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVFZhbHVlPiB7XG4gIHByaXZhdGUgX2RhdGE6IFR3b0tleU1hcDxURmlyc3QsIFRTZWNvbmQsIFR3b0tleU1hcDxUVGhpcmQsIFRGb3VydGgsIFRWYWx1ZT4+ID0gbmV3IFR3b0tleU1hcCgpO1xuXG4gIHB1YmxpYyBzZXQoZmlyc3Q6IFRGaXJzdCwgc2Vjb25kOiBUU2Vjb25kLCB0aGlyZDogVFRoaXJkLCBmb3VydGg6IFRGb3VydGgsIHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEuZ2V0KGZpcnN0LCBzZWNvbmQpKSB7XG4gICAgICB0aGlzLl9kYXRhLnNldChmaXJzdCwgc2Vjb25kLCBuZXcgVHdvS2V5TWFwKCkpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhLmdldChmaXJzdCwgc2Vjb25kKSEuc2V0KHRoaXJkLCBmb3VydGgsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoZmlyc3Q6IFRGaXJzdCwgc2Vjb25kOiBUU2Vjb25kLCB0aGlyZDogVFRoaXJkLCBmb3VydGg6IFRGb3VydGgpOiBUVmFsdWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldChmaXJzdCwgc2Vjb25kKT8uZ2V0KHRoaXJkLCBmb3VydGgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqXG4gKiBUaGlzIHdhcyBoZWF2aWx5IGluc3BpcmVkIGZyb20gbWljcm9zb2Z0L3ZzY29kZSdzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbSAoTUlUKS5cbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmltcG9ydCB7IElTZXJ2aWNlSWRlbnRpZmllciB9IGZyb20gJ2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlcyc7XG5cbmNvbnN0IERJX1RBUkdFVCA9ICdkaSR0YXJnZXQnO1xuY29uc3QgRElfREVQRU5ERU5DSUVTID0gJ2RpJGRlcGVuZGVuY2llcyc7XG5cbmV4cG9ydCBjb25zdCBzZXJ2aWNlUmVnaXN0cnk6IE1hcDxzdHJpbmcsIElTZXJ2aWNlSWRlbnRpZmllcjxhbnk+PiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VEZXBlbmRlbmNpZXMoY3RvcjogYW55KTogeyBpZDogSVNlcnZpY2VJZGVudGlmaWVyPGFueT4sIGluZGV4OiBudW1iZXIsIG9wdGlvbmFsOiBib29sZWFuIH1bXSB7XG4gIHJldHVybiBjdG9yW0RJX0RFUEVOREVOQ0lFU10gfHwgW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWNvcmF0b3I8VD4oaWQ6IHN0cmluZyk6IElTZXJ2aWNlSWRlbnRpZmllcjxUPiB7XG4gIGlmIChzZXJ2aWNlUmVnaXN0cnkuaGFzKGlkKSkge1xuICAgIHJldHVybiBzZXJ2aWNlUmVnaXN0cnkuZ2V0KGlkKSE7XG4gIH1cblxuICBjb25zdCBkZWNvcmF0b3I6IGFueSA9IGZ1bmN0aW9uICh0YXJnZXQ6IEZ1bmN0aW9uLCBrZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQElTZXJ2aWNlTmFtZS1kZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCB0byBkZWNvcmF0ZSBhIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIHN0b3JlU2VydmljZURlcGVuZGVuY3koZGVjb3JhdG9yLCB0YXJnZXQsIGluZGV4KTtcbiAgfTtcblxuICBkZWNvcmF0b3IudG9TdHJpbmcgPSAoKSA9PiBpZDtcblxuICBzZXJ2aWNlUmVnaXN0cnkuc2V0KGlkLCBkZWNvcmF0b3IpO1xuICByZXR1cm4gZGVjb3JhdG9yO1xufVxuXG5mdW5jdGlvbiBzdG9yZVNlcnZpY2VEZXBlbmRlbmN5KGlkOiBGdW5jdGlvbiwgdGFyZ2V0OiBGdW5jdGlvbiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICBpZiAoKHRhcmdldCBhcyBhbnkpW0RJX1RBUkdFVF0gPT09IHRhcmdldCkge1xuICAgICh0YXJnZXQgYXMgYW55KVtESV9ERVBFTkRFTkNJRVNdLnB1c2goeyBpZCwgaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgKHRhcmdldCBhcyBhbnkpW0RJX0RFUEVOREVOQ0lFU10gPSBbeyBpZCwgaW5kZXggfV07XG4gICAgKHRhcmdldCBhcyBhbnkpW0RJX1RBUkdFVF0gPSB0YXJnZXQ7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSUV2ZW50LCBJRXZlbnRFbWl0dGVyIH0gZnJvbSAnY29tbW9uL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBJQnVmZmVyLCBJQnVmZmVyU2V0IH0gZnJvbSAnY29tbW9uL2J1ZmZlci9UeXBlcyc7XG5pbXBvcnQgeyBJRGVjUHJpdmF0ZU1vZGVzLCBJQ29yZU1vdXNlRXZlbnQsIENvcmVNb3VzZUVuY29kaW5nLCBJQ29yZU1vdXNlUHJvdG9jb2wsIENvcmVNb3VzZUV2ZW50VHlwZSwgSUNoYXJzZXQsIElXaW5kb3dPcHRpb25zLCBJTW9kZXMsIElBdHRyaWJ1dGVEYXRhLCBTY3JvbGxTb3VyY2UsIElEaXNwb3NhYmxlLCBJQ29sb3IsIEN1cnNvclN0eWxlLCBDdXJzb3JJbmFjdGl2ZVN0eWxlLCBJT3NjTGlua0RhdGEgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAnY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBJRGVjb3JhdGlvbk9wdGlvbnMsIElEZWNvcmF0aW9uLCBJTGlua0hhbmRsZXIsIElXaW5kb3dzUHR5LCBJTG9nZ2VyIH0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcblxuZXhwb3J0IGNvbnN0IElCdWZmZXJTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElCdWZmZXJTZXJ2aWNlPignQnVmZmVyU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJQnVmZmVyU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IGNvbHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgcm93czogbnVtYmVyO1xuICByZWFkb25seSBidWZmZXI6IElCdWZmZXI7XG4gIHJlYWRvbmx5IGJ1ZmZlcnM6IElCdWZmZXJTZXQ7XG4gIGlzVXNlclNjcm9sbGluZzogYm9vbGVhbjtcbiAgb25SZXNpemU6IElFdmVudDx7IGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyIH0+O1xuICBvblNjcm9sbDogSUV2ZW50PG51bWJlcj47XG4gIHNjcm9sbChlcmFzZUF0dHI6IElBdHRyaWJ1dGVEYXRhLCBpc1dyYXBwZWQ/OiBib29sZWFuKTogdm9pZDtcbiAgc2Nyb2xsTGluZXMoZGlzcDogbnVtYmVyLCBzdXBwcmVzc1Njcm9sbEV2ZW50PzogYm9vbGVhbiwgc291cmNlPzogU2Nyb2xsU291cmNlKTogdm9pZDtcbiAgcmVzaXplKGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyKTogdm9pZDtcbiAgcmVzZXQoKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IElDb3JlTW91c2VTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElDb3JlTW91c2VTZXJ2aWNlPignQ29yZU1vdXNlU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJQ29yZU1vdXNlU2VydmljZSB7XG4gIGFjdGl2ZVByb3RvY29sOiBzdHJpbmc7XG4gIGFjdGl2ZUVuY29kaW5nOiBzdHJpbmc7XG4gIGFyZU1vdXNlRXZlbnRzQWN0aXZlOiBib29sZWFuO1xuICBhZGRQcm90b2NvbChuYW1lOiBzdHJpbmcsIHByb3RvY29sOiBJQ29yZU1vdXNlUHJvdG9jb2wpOiB2b2lkO1xuICBhZGRFbmNvZGluZyhuYW1lOiBzdHJpbmcsIGVuY29kaW5nOiBDb3JlTW91c2VFbmNvZGluZyk6IHZvaWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbW91c2UgZXZlbnQgdG8gYmUgc2VudC5cbiAgICpcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBwYXNzZWQgYWxsIHByb3RvY29sIHJlc3RyaWN0aW9ucyBhbmQgYSByZXBvcnRcbiAgICogd2FzIHNlbnQsIG90aGVyd2lzZSBmYWxzZS4gVGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgdXNlZCB0byBkZWNpZGUgd2hldGhlclxuICAgKiB0aGUgZGVmYXVsdCBldmVudCBhY3Rpb24gaW4gdGhlIGJvd3NlciBjb21wb25lbnQgc2hvdWxkIGJlIG9taXR0ZWQuXG4gICAqXG4gICAqIE5vdGU6IFRoZSBtZXRob2Qgd2lsbCBjaGFuZ2UgdmFsdWVzIG9mIHRoZSBnaXZlbiBldmVudCBvYmplY3RcbiAgICogdG8gZnVsbGZpbGwgcHJvdG9jb2wgYW5kIGVuY29kaW5nIHJlc3RyaWN0aW9ucy5cbiAgICovXG4gIHRyaWdnZXJNb3VzZUV2ZW50KGV2ZW50OiBJQ29yZU1vdXNlRXZlbnQpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFdmVudCB0byBhbm5vdW5jZSBjaGFuZ2VzIGluIG1vdXNlIHRyYWNraW5nLlxuICAgKi9cbiAgb25Qcm90b2NvbENoYW5nZTogSUV2ZW50PENvcmVNb3VzZUV2ZW50VHlwZT47XG5cbiAgLyoqXG4gICAqIEh1bWFuIHJlYWRhYmxlIHZlcnNpb24gb2YgbW91c2UgZXZlbnRzLlxuICAgKi9cbiAgZXhwbGFpbkV2ZW50cyhldmVudHM6IENvcmVNb3VzZUV2ZW50VHlwZSk6IHsgW2V2ZW50OiBzdHJpbmddOiBib29sZWFuIH07XG59XG5cbmV4cG9ydCBjb25zdCBJQ29yZVNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUNvcmVTZXJ2aWNlPignQ29yZVNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxseSB0aGUgY3Vyc29yIHdpbGwgbm90IGJlIHZpc2libGUgdW50aWwgdGhlIGZpcnN0IHRpbWUgdGhlIHRlcm1pbmFsXG4gICAqIGlzIGZvY3VzZWQuXG4gICAqL1xuICBpc0N1cnNvckluaXRpYWxpemVkOiBib29sZWFuO1xuICBpc0N1cnNvckhpZGRlbjogYm9vbGVhbjtcblxuICByZWFkb25seSBtb2RlczogSU1vZGVzO1xuICByZWFkb25seSBkZWNQcml2YXRlTW9kZXM6IElEZWNQcml2YXRlTW9kZXM7XG5cbiAgcmVhZG9ubHkgb25EYXRhOiBJRXZlbnQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgb25Vc2VySW5wdXQ6IElFdmVudDx2b2lkPjtcbiAgcmVhZG9ubHkgb25CaW5hcnk6IElFdmVudDxzdHJpbmc+O1xuICByZWFkb25seSBvblJlcXVlc3RTY3JvbGxUb0JvdHRvbTogSUV2ZW50PHZvaWQ+O1xuXG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBvbkRhdGEgZXZlbnQgaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgZW1pdHRlZC5cbiAgICogQHBhcmFtIHdhc1VzZXJJbnB1dCBXaGV0aGVyIHRoZSBkYXRhIG9yaWdpbmF0ZWQgZnJvbSB0aGUgdXNlciAoYXMgb3Bwb3NlZCB0b1xuICAgKiByZXN1bHRpbmcgZnJvbSBwYXJzaW5nIGluY29taW5nIGRhdGEpLiBXaGVuIHRydWUgdGhpcyB3aWxsIGFsc286XG4gICAqIC0gU2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGJ1ZmZlciBpZiBvcHRpb24gc2Nyb2xsT25Vc2VySW5wdXQgaXMgdHJ1ZS5cbiAgICogLSBGaXJlIHRoZSBgb25Vc2VySW5wdXRgIGV2ZW50IChzbyBzZWxlY3Rpb24gY2FuIGJlIGNsZWFyZWQpLlxuICAgKi9cbiAgdHJpZ2dlckRhdGFFdmVudChkYXRhOiBzdHJpbmcsIHdhc1VzZXJJbnB1dD86IGJvb2xlYW4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyB0aGUgb25CaW5hcnkgZXZlbnQgaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgZW1pdHRlZC5cbiAgICovXG4gIHRyaWdnZXJCaW5hcnlFdmVudChkYXRhOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgSUNoYXJzZXRTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElDaGFyc2V0U2VydmljZT4oJ0NoYXJzZXRTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElDaGFyc2V0U2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIGNoYXJzZXQ6IElDaGFyc2V0IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBnbGV2ZWw6IG51bWJlcjtcblxuICByZXNldCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEcgbGV2ZWwgb2YgdGhlIHRlcm1pbmFsLlxuICAgKiBAcGFyYW0gZ1xuICAgKi9cbiAgc2V0Z0xldmVsKGc6IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2hhcnNldCBmb3IgdGhlIGdpdmVuIEcgbGV2ZWwgb2YgdGhlIHRlcm1pbmFsLlxuICAgKiBAcGFyYW0gZ1xuICAgKiBAcGFyYW0gY2hhcnNldFxuICAgKi9cbiAgc2V0Z0NoYXJzZXQoZzogbnVtYmVyLCBjaGFyc2V0OiBJQ2hhcnNldCB8IHVuZGVmaW5lZCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZpY2VJZGVudGlmaWVyPFQ+IHtcbiAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgdHlwZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnJhbmRlZFNlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcbn1cblxudHlwZSBHZXRMZWFkaW5nTm9uU2VydmljZUFyZ3M8VEFyZ3MgZXh0ZW5kcyBhbnlbXT4gPSBUQXJncyBleHRlbmRzIFtdID8gW11cbiAgOiBUQXJncyBleHRlbmRzIFsuLi5pbmZlciBURmlyc3QsIGluZmVyIFRMYXN0XSA/IFRMYXN0IGV4dGVuZHMgSUJyYW5kZWRTZXJ2aWNlID8gR2V0TGVhZGluZ05vblNlcnZpY2VBcmdzPFRGaXJzdD4gOiBUQXJnc1xuICAgIDogbmV2ZXI7XG5cbmV4cG9ydCBjb25zdCBJSW5zdGFudGlhdGlvblNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUluc3RhbnRpYXRpb25TZXJ2aWNlPignSW5zdGFudGlhdGlvblNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUluc3RhbnRpYXRpb25TZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgc2V0U2VydmljZTxUPihpZDogSVNlcnZpY2VJZGVudGlmaWVyPFQ+LCBpbnN0YW5jZTogVCk6IHZvaWQ7XG4gIGdldFNlcnZpY2U8VD4oaWQ6IElTZXJ2aWNlSWRlbnRpZmllcjxUPik6IFQgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZUluc3RhbmNlPEN0b3IgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIFIgZXh0ZW5kcyBJbnN0YW5jZVR5cGU8Q3Rvcj4+KHQ6IEN0b3IsIC4uLmFyZ3M6IEdldExlYWRpbmdOb25TZXJ2aWNlQXJnczxDb25zdHJ1Y3RvclBhcmFtZXRlcnM8Q3Rvcj4+KTogUjtcbn1cblxuZXhwb3J0IGVudW0gTG9nTGV2ZWxFbnVtIHtcbiAgVFJBQ0UgPSAwLFxuICBERUJVRyA9IDEsXG4gIElORk8gPSAyLFxuICBXQVJOID0gMyxcbiAgRVJST1IgPSA0LFxuICBPRkYgPSA1XG59XG5cbmV4cG9ydCBjb25zdCBJTG9nU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJTG9nU2VydmljZT4oJ0xvZ1NlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICByZWFkb25seSBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtO1xuXG4gIHRyYWNlKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBpbmZvKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IElPcHRpb25zU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJT3B0aW9uc1NlcnZpY2U+KCdPcHRpb25zU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9uc1NlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgcmF3IG9wdGlvbnMgb2JqZWN0LCB0aGlzIGlzIGFuIGludGVybmFsLW9ubHkgZmFzdCBwYXRoIGZvciBhY2Nlc3NpbmdcbiAgICogc2luZ2xlIG9wdGlvbnMgd2l0aG91dCBhbnkgdmFsaWRhdGlvbiBhcyB3ZSB0cnVzdCBUeXBlU2NyaXB0IHRvIGVuZm9yY2UgY29ycmVjdCB1c2FnZVxuICAgKiBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3T3B0aW9uczogUmVxdWlyZWQ8SVRlcm1pbmFsT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgYXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBwdWJsaWMgQVBJLCB0aGlzIHByb3BlcnR5IHVzZXMgZ2V0dGVycyBhbmQgc2V0dGVycyB3aXRoXG4gICAqIHZhbGlkYXRpb24gd2hpY2ggbWFrZXMgaXQgc2FmZXIgYnV0IHNsb3dlci4ge0BsaW5rIHJhd09wdGlvbnN9IHNob3VsZCBiZSB1c2VkIGZvciBwcmV0dHkgbXVjaFxuICAgKiBhbGwgaW50ZXJuYWwgdXNhZ2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxJVGVybWluYWxPcHRpb25zPjtcblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciBmb3Igd2hlbiBhbnkgb3B0aW9uIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBvbk9wdGlvbkNoYW5nZTogSUV2ZW50PGtleW9mIElUZXJtaW5hbE9wdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB3aGVuIGEgc3BlY2lmaWMgb3B0aW9uIGNoYW5nZXMsIHRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBpc1xuICAgKiBwcmVmZXJyZWQgb3ZlciB7QGxpbmsgb25PcHRpb25DaGFuZ2V9IHdoZW4gb25seSBhIHNpbmdsZSBvcHRpb24gaXMgYmVpbmcgbGlzdGVuZWQgdG8uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIG9uU3BlY2lmaWNPcHRpb25DaGFuZ2U8VCBleHRlbmRzIGtleW9mIElUZXJtaW5hbE9wdGlvbnM+KGtleTogVCwgbGlzdGVuZXI6IChhcmcxOiBSZXF1aXJlZDxJVGVybWluYWxPcHRpb25zPltUXSkgPT4gYW55KTogSURpc3Bvc2FibGU7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIHdoZW4gYSBzZXQgb2Ygc3BlY2lmaWMgb3B0aW9ucyBjaGFuZ2UsIHRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2RcbiAgICogdGhhdCBpcyBwcmVmZXJyZWQgb3ZlciB7QGxpbmsgb25PcHRpb25DaGFuZ2V9IHdoZW4gbXVsdGlwbGUgb3B0aW9ucyBhcmUgYmVpbmcgbGlzdGVuZWQgdG8gYW5kXG4gICAqIGhhbmRsZWQgdGhlIHNhbWUgd2F5LlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICBvbk11bHRpcGxlT3B0aW9uQ2hhbmdlKGtleXM6IChrZXlvZiBJVGVybWluYWxPcHRpb25zKVtdLCBsaXN0ZW5lcjogKCkgPT4gYW55KTogSURpc3Bvc2FibGU7XG59XG5cbmV4cG9ydCB0eXBlIEZvbnRXZWlnaHQgPSAnbm9ybWFsJyB8ICdib2xkJyB8ICcxMDAnIHwgJzIwMCcgfCAnMzAwJyB8ICc0MDAnIHwgJzUwMCcgfCAnNjAwJyB8ICc3MDAnIHwgJzgwMCcgfCAnOTAwJyB8IG51bWJlcjtcbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ3RyYWNlJyB8ICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ29mZic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsT3B0aW9ucyB7XG4gIGFsbG93UHJvcG9zZWRBcGk/OiBib29sZWFuO1xuICBhbGxvd1RyYW5zcGFyZW5jeT86IGJvb2xlYW47XG4gIGFsdENsaWNrTW92ZXNDdXJzb3I/OiBib29sZWFuO1xuICBjb2xzPzogbnVtYmVyO1xuICBjb252ZXJ0RW9sPzogYm9vbGVhbjtcbiAgY3Vyc29yQmxpbms/OiBib29sZWFuO1xuICBjdXJzb3JTdHlsZT86IEN1cnNvclN0eWxlO1xuICBjdXJzb3JXaWR0aD86IG51bWJlcjtcbiAgY3Vyc29ySW5hY3RpdmVTdHlsZT86IEN1cnNvckluYWN0aXZlU3R5bGU7XG4gIGN1c3RvbUdseXBocz86IGJvb2xlYW47XG4gIGRpc2FibGVTdGRpbj86IGJvb2xlYW47XG4gIGRvY3VtZW50T3ZlcnJpZGU/OiBhbnkgfCBudWxsO1xuICBkcmF3Qm9sZFRleHRJbkJyaWdodENvbG9ycz86IGJvb2xlYW47XG4gIGZhc3RTY3JvbGxNb2RpZmllcj86ICdub25lJyB8ICdhbHQnIHwgJ2N0cmwnIHwgJ3NoaWZ0JztcbiAgZmFzdFNjcm9sbFNlbnNpdGl2aXR5PzogbnVtYmVyO1xuICBmb250U2l6ZT86IG51bWJlcjtcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgZm9udFdlaWdodD86IEZvbnRXZWlnaHQ7XG4gIGZvbnRXZWlnaHRCb2xkPzogRm9udFdlaWdodDtcbiAgaWdub3JlQnJhY2tldGVkUGFzdGVNb2RlPzogYm9vbGVhbjtcbiAgbGV0dGVyU3BhY2luZz86IG51bWJlcjtcbiAgbGluZUhlaWdodD86IG51bWJlcjtcbiAgbGlua0hhbmRsZXI/OiBJTGlua0hhbmRsZXIgfCBudWxsO1xuICBsb2dMZXZlbD86IExvZ0xldmVsO1xuICBsb2dnZXI/OiBJTG9nZ2VyIHwgbnVsbDtcbiAgbWFjT3B0aW9uSXNNZXRhPzogYm9vbGVhbjtcbiAgbWFjT3B0aW9uQ2xpY2tGb3JjZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuICBtaW5pbXVtQ29udHJhc3RSYXRpbz86IG51bWJlcjtcbiAgcmVzY2FsZU92ZXJsYXBwaW5nR2x5cGhzPzogYm9vbGVhbjtcbiAgcmlnaHRDbGlja1NlbGVjdHNXb3JkPzogYm9vbGVhbjtcbiAgcm93cz86IG51bWJlcjtcbiAgc2NyZWVuUmVhZGVyTW9kZT86IGJvb2xlYW47XG4gIHNjcm9sbGJhY2s/OiBudW1iZXI7XG4gIHNjcm9sbE9uVXNlcklucHV0PzogYm9vbGVhbjtcbiAgc2Nyb2xsU2Vuc2l0aXZpdHk/OiBudW1iZXI7XG4gIHNtb290aFNjcm9sbER1cmF0aW9uPzogbnVtYmVyO1xuICB0YWJTdG9wV2lkdGg/OiBudW1iZXI7XG4gIHRoZW1lPzogSVRoZW1lO1xuICB3aW5kb3dzTW9kZT86IGJvb2xlYW47XG4gIHdpbmRvd3NQdHk/OiBJV2luZG93c1B0eTtcbiAgd2luZG93T3B0aW9ucz86IElXaW5kb3dPcHRpb25zO1xuICB3b3JkU2VwYXJhdG9yPzogc3RyaW5nO1xuICBvdmVydmlld1J1bGVyV2lkdGg/OiBudW1iZXI7XG5cbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBjYW5jZWxFdmVudHM6IGJvb2xlYW47XG4gIHRlcm1OYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRoZW1lIHtcbiAgZm9yZWdyb3VuZD86IHN0cmluZztcbiAgYmFja2dyb3VuZD86IHN0cmluZztcbiAgY3Vyc29yPzogc3RyaW5nO1xuICBjdXJzb3JBY2NlbnQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkZvcmVncm91bmQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZD86IHN0cmluZztcbiAgYmxhY2s/OiBzdHJpbmc7XG4gIHJlZD86IHN0cmluZztcbiAgZ3JlZW4/OiBzdHJpbmc7XG4gIHllbGxvdz86IHN0cmluZztcbiAgYmx1ZT86IHN0cmluZztcbiAgbWFnZW50YT86IHN0cmluZztcbiAgY3lhbj86IHN0cmluZztcbiAgd2hpdGU/OiBzdHJpbmc7XG4gIGJyaWdodEJsYWNrPzogc3RyaW5nO1xuICBicmlnaHRSZWQ/OiBzdHJpbmc7XG4gIGJyaWdodEdyZWVuPzogc3RyaW5nO1xuICBicmlnaHRZZWxsb3c/OiBzdHJpbmc7XG4gIGJyaWdodEJsdWU/OiBzdHJpbmc7XG4gIGJyaWdodE1hZ2VudGE/OiBzdHJpbmc7XG4gIGJyaWdodEN5YW4/OiBzdHJpbmc7XG4gIGJyaWdodFdoaXRlPzogc3RyaW5nO1xuICBleHRlbmRlZEFuc2k/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IElPc2NMaW5rU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJT3NjTGlua1NlcnZpY2U+KCdPc2NMaW5rU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJT3NjTGlua1NlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxpbmsgdG8gdGhlIHNlcnZpY2UsIHJldHVybmluZyB0aGUgbGluayBJRC4gVGhlIGxpbmsgZGF0YSBpcyBtYW5hZ2VkIGJ5IHRoaXNcbiAgICogc2VydmljZSBhbmQgd2lsbCBiZSBmcmVlZCB3aGVuIHRoaXMgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgdHJpbW1lZCBvZmYgdGhlIGJ1ZmZlci5cbiAgICovXG4gIHJlZ2lzdGVyTGluayhsaW5rRGF0YTogSU9zY0xpbmtEYXRhKTogbnVtYmVyO1xuICAvKipcbiAgICogQWRkcyBhIGxpbmUgdG8gYSBsaW5rIGlmIG5lZWRlZC5cbiAgICovXG4gIGFkZExpbmVUb0xpbmsobGlua0lkOiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQ7XG4gIC8qKiBHZXQgdGhlIGxpbmsgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rIElELiAqL1xuICBnZXRMaW5rRGF0YShsaW5rSWQ6IG51bWJlcik6IElPc2NMaW5rRGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuLypcbiAqIFdpZHRoIGFuZCBHcmFwaGVtZV9DbHVzdGVyX0JyZWFrIHByb3BlcnRpZXMgb2YgYSBjaGFyYWN0ZXIgYXMgYSBiaXQgbWFzay5cbiAqXG4gKiBiaXQgMDogc2hvdWxkSm9pbiAtIHNob3VsZCBjb21iaW5lIHdpdGggcHJlY2VkaW5nIGNoYXJhY3Rlci5cbiAqIGJpdCAxLi4yOiB3Y3dpZHRoIC0gc2VlIFVuaWNvZGVDaGFyV2lkdGguXG4gKiBiaXQgMy4uMzE6IGNsYXNzIG9mIGNoYXJhY3RlciAoY3VycmVudGx5IG9ubHkgNCBiaXRzIGFyZSB1c2VkKS5cbiAqICAgVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZWQgZ3JhcGhlbWUgY2x1c3RlcmluZyAtIGkuZS4gd2hpY2ggY29kZXBvaW50c1xuICogICBhcmUgdG8gYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBjb21wb3VuZCBjaGFyYWN0ZXIuXG4gKlxuICogVXNlIHRoZSBVbmljb2RlU2VydmljZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlWYWx1ZSB0byBjcmVhdGUgYVxuICogVW5pY29kZUNoYXJQcm9wZXJ0aWVzOyB1c2UgZXh0cmFjdFNob3VsZEpvaW4sIGV4dHJhY3RXaWR0aCwgYW5kXG4gKiBleHRyYWN0Q2hhcktpbmQgdG8gZXh0cmFjdCB0aGUgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgVW5pY29kZUNoYXJQcm9wZXJ0aWVzID0gbnVtYmVyO1xuXG4vKipcbiAqIFdpZHRoIGluIGNvbHVtbnMgb2YgYSBjaGFyYWN0ZXIuXG4gKiBJbiBhIENKSyBjb250ZXh0LCBcImhhbGYtd2lkdGhcIiBjaGFyYWN0ZXJzIChzdWNoIGFzIExhdGluKSBhcmUgd2lkdGggMSxcbiAqIHdoaWxlIFwiZnVsbC13aWR0aFwiIGNoYXJhY3RlcnMgKHN1Y2ggYXMgS2FuamkpIGFyZSAyIGNvbHVtbnMgd2lkZS5cbiAqIENvbWJpbmluZyBjaGFyYWN0ZXJzIChzdWNoIGFzIGFjY2VudHMpIGFyZSB3aWR0aCAwLlxuICovXG5leHBvcnQgdHlwZSBVbmljb2RlQ2hhcldpZHRoID0gMCB8IDEgfCAyO1xuXG5leHBvcnQgY29uc3QgSVVuaWNvZGVTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElVbmljb2RlU2VydmljZT4oJ1VuaWNvZGVTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElVbmljb2RlU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuICAvKiogUmVnaXN0ZXIgYW4gVW5pY29kZSB2ZXJzaW9uIHByb3ZpZGVyLiAqL1xuICByZWdpc3Rlcihwcm92aWRlcjogSVVuaWNvZGVWZXJzaW9uUHJvdmlkZXIpOiB2b2lkO1xuICAvKiogUmVnaXN0ZXJlZCBVbmljb2RlIHZlcnNpb25zLiAqL1xuICByZWFkb25seSB2ZXJzaW9uczogc3RyaW5nW107XG4gIC8qKiBDdXJyZW50bHkgYWN0aXZlIHZlcnNpb24uICovXG4gIGFjdGl2ZVZlcnNpb246IHN0cmluZztcbiAgLyoqIEV2ZW50IHRyaWdnZXJlZCwgd2hlbiBhY3RpdmF0ZSB2ZXJzaW9uIGNoYW5nZWQuICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiBJRXZlbnQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogVW5pY29kZSB2ZXJzaW9uIGRlcGVuZGVudFxuICAgKi9cbiAgd2N3aWR0aChjb2RlcG9pbnQ6IG51bWJlcik6IFVuaWNvZGVDaGFyV2lkdGg7XG4gIGdldFN0cmluZ0NlbGxXaWR0aChzOiBzdHJpbmcpOiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXR1cm4gY2hhcmFjdGVyIHdpZHRoIGFuZCB0eXBlIGZvciBncmFwaGVtZSBjbHVzdGVyaW5nLlxuICAgKiBJZiBwcmVjZWRpbmcgIT0gMCwgaXQgaXMgdGhlIHJldHVybiBjb2RlIGZyb20gdGhlIHByZXZpb3VzIGNoYXJhY3RlcjtcbiAgICogaW4gdGhhdCBjYXNlIHRoZSByZXN1bHQgc3BlY2lmaWVzIGlmIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBqb2luZWQuXG4gICAqL1xuICBjaGFyUHJvcGVydGllcyhjb2RlcG9pbnQ6IG51bWJlciwgcHJlY2VkaW5nOiBVbmljb2RlQ2hhclByb3BlcnRpZXMpOiBVbmljb2RlQ2hhclByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVuaWNvZGVWZXJzaW9uUHJvdmlkZXIge1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHdjd2lkdGgodWNzOiBudW1iZXIpOiBVbmljb2RlQ2hhcldpZHRoO1xuICBjaGFyUHJvcGVydGllcyhjb2RlcG9pbnQ6IG51bWJlciwgcHJlY2VkaW5nOiBVbmljb2RlQ2hhclByb3BlcnRpZXMpOiBVbmljb2RlQ2hhclByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBjb25zdCBJRGVjb3JhdGlvblNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SURlY29yYXRpb25TZXJ2aWNlPignRGVjb3JhdGlvblNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSURlY29yYXRpb25TZXJ2aWNlIGV4dGVuZHMgSURpc3Bvc2FibGUge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZGVjb3JhdGlvbnM6IEl0ZXJhYmxlSXRlcmF0b3I8SUludGVybmFsRGVjb3JhdGlvbj47XG4gIHJlYWRvbmx5IG9uRGVjb3JhdGlvblJlZ2lzdGVyZWQ6IElFdmVudDxJSW50ZXJuYWxEZWNvcmF0aW9uPjtcbiAgcmVhZG9ubHkgb25EZWNvcmF0aW9uUmVtb3ZlZDogSUV2ZW50PElJbnRlcm5hbERlY29yYXRpb24+O1xuICByZWdpc3RlckRlY29yYXRpb24oZGVjb3JhdGlvbk9wdGlvbnM6IElEZWNvcmF0aW9uT3B0aW9ucyk6IElEZWNvcmF0aW9uIHwgdW5kZWZpbmVkO1xuICByZXNldCgpOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhIGNhbGxiYWNrIG92ZXIgdGhlIGRlY29yYXRpb24gYXQgYSBjZWxsIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKS4gVGhpcyB1c2VzIGEgY2FsbGJhY2tcbiAgICogaW5zdGVhZCBvZiBhbiBpdGVyYXRvciBhcyBpdCdzIHR5cGljYWxseSB1c2VkIGluIGhvdCBjb2RlIHBhdGhzLlxuICAgKi9cbiAgZm9yRWFjaERlY29yYXRpb25BdENlbGwoeDogbnVtYmVyLCBsaW5lOiBudW1iZXIsIGxheWVyOiAnYm90dG9tJyB8ICd0b3AnIHwgdW5kZWZpbmVkLCBjYWxsYmFjazogKGRlY29yYXRpb246IElJbnRlcm5hbERlY29yYXRpb24pID0+IHZvaWQpOiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJuYWxEZWNvcmF0aW9uIGV4dGVuZHMgSURlY29yYXRpb24ge1xuICByZWFkb25seSBvcHRpb25zOiBJRGVjb3JhdGlvbk9wdGlvbnM7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRDb2xvclJHQjogSUNvbG9yIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBmb3JlZ3JvdW5kQ29sb3JSR0I6IElDb2xvciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgb25SZW5kZXJFbWl0dGVyOiBJRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50Pjtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICpcbiAqIChFWFBFUklNRU5UQUwpIFRoaXMgQWRkb24gaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElCdWZmZXIsIElCdWZmZXJDZWxsLCBJQnVmZmVyUmFuZ2UsIElUZXJtaW5hbEFkZG9uLCBUZXJtaW5hbCB9IGZyb20gJ0B4dGVybS94dGVybSc7XG5pbXBvcnQgdHlwZSB7IElIVE1MU2VyaWFsaXplT3B0aW9ucywgU2VyaWFsaXplQWRkb24gYXMgSVNlcmlhbGl6ZUFwaSwgSVNlcmlhbGl6ZU9wdGlvbnMsIElTZXJpYWxpemVSYW5nZSB9IGZyb20gJ0B4dGVybS9hZGRvbi1zZXJpYWxpemUnO1xuaW1wb3J0IHsgREVGQVVMVF9BTlNJX0NPTE9SUyB9IGZyb20gJ2Jyb3dzZXIvc2VydmljZXMvVGhlbWVTZXJ2aWNlJztcbmltcG9ydCB7IElBdHRyaWJ1dGVEYXRhLCBJQ29sb3IgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG5mdW5jdGlvbiBjb25zdHJhaW4odmFsdWU6IG51bWJlciwgbG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChsb3csIE1hdGgubWluKHZhbHVlLCBoaWdoKSk7XG59XG5cbi8vIFRPRE86IFJlZmluZSB0aGlzIHRlbXBsYXRlIGNsYXNzIGxhdGVyXG5hYnN0cmFjdCBjbGFzcyBCYXNlU2VyaWFsaXplSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBfYnVmZmVyOiBJQnVmZmVyXG4gICkge1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZShyYW5nZTogSUJ1ZmZlclJhbmdlLCBleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIC8vIHdlIG5lZWQgdHdvIG9mIHRoZW0gdG8gZmxpcCBiZXR3ZWVuIG9sZCBhbmQgbmV3IGNlbGxcbiAgICBjb25zdCBjZWxsMSA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuICAgIGNvbnN0IGNlbGwyID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gICAgbGV0IG9sZENlbGwgPSBjZWxsMTtcblxuICAgIGNvbnN0IHN0YXJ0Um93ID0gcmFuZ2Uuc3RhcnQueTtcbiAgICBjb25zdCBlbmRSb3cgPSByYW5nZS5lbmQueTtcbiAgICBjb25zdCBzdGFydENvbHVtbiA9IHJhbmdlLnN0YXJ0Lng7XG4gICAgY29uc3QgZW5kQ29sdW1uID0gcmFuZ2UuZW5kLng7XG5cbiAgICB0aGlzLl9iZWZvcmVTZXJpYWxpemUoZW5kUm93IC0gc3RhcnRSb3csIHN0YXJ0Um93LCBlbmRSb3cpO1xuXG4gICAgZm9yIChsZXQgcm93ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93KTtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TGluZUNvbHVtbiA9IHJvdyA9PT0gcmFuZ2Uuc3RhcnQueSA/IHN0YXJ0Q29sdW1uIDogMDtcbiAgICAgICAgY29uc3QgZW5kTGluZUNvbHVtbiA9IHJvdyA9PT0gcmFuZ2UuZW5kLnkgPyBlbmRDb2x1bW46IGxpbmUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBjb2wgPSBzdGFydExpbmVDb2x1bW47IGNvbCA8IGVuZExpbmVDb2x1bW47IGNvbCsrKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGxpbmUuZ2V0Q2VsbChjb2wsIG9sZENlbGwgPT09IGNlbGwxID8gY2VsbDIgOiBjZWxsMSk7XG4gICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENhbid0IGdldCBjZWxsIGF0IHJvdz0ke3Jvd30sIGNvbD0ke2NvbH1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9uZXh0Q2VsbChjLCBvbGRDZWxsLCByb3csIGNvbCk7XG4gICAgICAgICAgb2xkQ2VsbCA9IGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX3Jvd0VuZChyb3csIHJvdyA9PT0gZW5kUm93KTtcbiAgICB9XG5cbiAgICB0aGlzLl9hZnRlclNlcmlhbGl6ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZVN0cmluZyhleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgX25leHRDZWxsKGNlbGw6IElCdWZmZXJDZWxsLCBvbGRDZWxsOiBJQnVmZmVyQ2VsbCwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIF9yb3dFbmQocm93OiBudW1iZXIsIGlzTGFzdFJvdzogYm9vbGVhbik6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBfYmVmb3JlU2VyaWFsaXplKHJvd3M6IG51bWJlciwgc3RhcnRSb3c6IG51bWJlciwgZW5kUm93OiBudW1iZXIpOiB2b2lkIHsgfVxuICBwcm90ZWN0ZWQgX2FmdGVyU2VyaWFsaXplKCk6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBfc2VyaWFsaXplU3RyaW5nKGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7IHJldHVybiAnJzsgfVxufVxuXG5mdW5jdGlvbiBlcXVhbEZnKGNlbGwxOiBJQnVmZmVyQ2VsbCB8IElBdHRyaWJ1dGVEYXRhLCBjZWxsMjogSUJ1ZmZlckNlbGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNlbGwxLmdldEZnQ29sb3JNb2RlKCkgPT09IGNlbGwyLmdldEZnQ29sb3JNb2RlKClcbiAgICAmJiBjZWxsMS5nZXRGZ0NvbG9yKCkgPT09IGNlbGwyLmdldEZnQ29sb3IoKTtcbn1cblxuZnVuY3Rpb24gZXF1YWxCZyhjZWxsMTogSUJ1ZmZlckNlbGwgfCBJQXR0cmlidXRlRGF0YSwgY2VsbDI6IElCdWZmZXJDZWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBjZWxsMS5nZXRCZ0NvbG9yTW9kZSgpID09PSBjZWxsMi5nZXRCZ0NvbG9yTW9kZSgpXG4gICAgJiYgY2VsbDEuZ2V0QmdDb2xvcigpID09PSBjZWxsMi5nZXRCZ0NvbG9yKCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsRmxhZ3MoY2VsbDE6IElCdWZmZXJDZWxsIHwgSUF0dHJpYnV0ZURhdGEsIGNlbGwyOiBJQnVmZmVyQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2VsbDEuaXNJbnZlcnNlKCkgPT09IGNlbGwyLmlzSW52ZXJzZSgpXG4gICAgJiYgY2VsbDEuaXNCb2xkKCkgPT09IGNlbGwyLmlzQm9sZCgpXG4gICAgJiYgY2VsbDEuaXNVbmRlcmxpbmUoKSA9PT0gY2VsbDIuaXNVbmRlcmxpbmUoKVxuICAgICYmIGNlbGwxLmlzT3ZlcmxpbmUoKSA9PT0gY2VsbDIuaXNPdmVybGluZSgpXG4gICAgJiYgY2VsbDEuaXNCbGluaygpID09PSBjZWxsMi5pc0JsaW5rKClcbiAgICAmJiBjZWxsMS5pc0ludmlzaWJsZSgpID09PSBjZWxsMi5pc0ludmlzaWJsZSgpXG4gICAgJiYgY2VsbDEuaXNJdGFsaWMoKSA9PT0gY2VsbDIuaXNJdGFsaWMoKVxuICAgICYmIGNlbGwxLmlzRGltKCkgPT09IGNlbGwyLmlzRGltKClcbiAgICAmJiBjZWxsMS5pc1N0cmlrZXRocm91Z2goKSA9PT0gY2VsbDIuaXNTdHJpa2V0aHJvdWdoKCk7XG59XG5cbmNsYXNzIFN0cmluZ1NlcmlhbGl6ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlU2VyaWFsaXplSGFuZGxlciB7XG4gIHByaXZhdGUgX3Jvd0luZGV4OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9hbGxSb3dzOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2FsbFJvd1NlcGFyYXRvcnM6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFJvdzogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX251bGxDZWxsQ291bnQ6IG51bWJlciA9IDA7XG5cbiAgLy8gd2UgY2FuIHNlZSBhIGZ1bGwgY29sb3JlZCBjZWxsIGFuZCBhIG51bGwgY2VsbCB0aGF0IG9ubHkgaGF2ZSBiYWNrZ3JvdW5kIHRoZSBzYW1lIHN0eWxlXG4gIC8vIGJ1dCB0aGUgaW5mb3JtYXRpb24gaXNuJ3QgcHJlc2VydmVkIGJ5IG51bGwgY2VsbCBpdHNlbGZcbiAgLy8gc28gd2VlIG5lZWQgdG8gcmVjb3JkIGl0IHdoZW4gcmVxdWlyZWQuXG4gIHByaXZhdGUgX2N1cnNvclN0eWxlOiBJQnVmZmVyQ2VsbCA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuXG4gIC8vIHdoZXJlIGV4YWN0IHRoZSBjdXJzb3Igc3R5bGVzIGNvbWVzIGZyb21cbiAgLy8gYmVjYXVzZSB3ZSBjYW4ndCBjb3B5IHRoZSBjZWxsIGRpcmVjdGx5XG4gIC8vIHNvIHdlIHJlbWVtYmVyIHdoZXJlIHRoZSBjb250ZW50IGNvbWVzIGZyb20gaW5zdGVhZFxuICBwcml2YXRlIF9jdXJzb3JTdHlsZVJvdzogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfY3Vyc29yU3R5bGVDb2w6IG51bWJlciA9IDA7XG5cbiAgLy8gdGhpcyBpcyBhIG51bGwgY2VsbCBmb3IgcmVmZXJlbmNlIGZvciBjaGVja2luZyB3aGV0aGVyIGJhY2tncm91bmQgaXMgZW1wdHkgb3Igbm90XG4gIHByaXZhdGUgX2JhY2tncm91bmRDZWxsOiBJQnVmZmVyQ2VsbCA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuXG4gIHByaXZhdGUgX2ZpcnN0Um93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q3Vyc29yUm93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q3Vyc29yQ29sOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q29udGVudEN1cnNvclJvdzogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbGFzdENvbnRlbnRDdXJzb3JDb2w6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVmZmVyOiBJQnVmZmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlcm1pbmFsOiBUZXJtaW5hbFxuICApIHtcbiAgICBzdXBlcihidWZmZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9iZWZvcmVTZXJpYWxpemUocm93czogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2FsbFJvd3MgPSBuZXcgQXJyYXk8c3RyaW5nPihyb3dzKTtcbiAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvclJvdyA9IHN0YXJ0O1xuICAgIHRoaXMuX2xhc3RDdXJzb3JSb3cgPSBzdGFydDtcbiAgICB0aGlzLl9maXJzdFJvdyA9IHN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBfdGhpc1Jvd0xhc3RDaGFyOiBJQnVmZmVyQ2VsbCA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuICBwcml2YXRlIF90aGlzUm93TGFzdFNlY29uZENoYXI6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gIHByaXZhdGUgX25leHRSb3dGaXJzdENoYXI6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gIHByb3RlY3RlZCBfcm93RW5kKHJvdzogbnVtYmVyLCBpc0xhc3RSb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBjb2xvcmZ1bCBlbXB0eSBjZWxsIGF0IGxpbmUgZW5kLCB3aGUgbXVzdCBwYWQgaXQgYmFjaywgb3IgdGhlIHRoZSBjb2xvciBibG9ja1xuICAgIC8vIHdpbGwgbWlzc2luZ1xuICAgIGlmICh0aGlzLl9udWxsQ2VsbENvdW50ID4gMCAmJiAhZXF1YWxCZyh0aGlzLl9jdXJzb3JTdHlsZSwgdGhpcy5fYmFja2dyb3VuZENlbGwpKSB7XG4gICAgICAvLyB1c2UgY2xlYXIgcmlnaHQgdG8gc2V0IGJhY2tncm91bmQuXG4gICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICB9XG5cbiAgICBsZXQgcm93U2VwYXJhdG9yID0gJyc7XG5cbiAgICAvLyBoYW5kbGUgcm93IHNlcGFyYXRvclxuICAgIGlmICghaXNMYXN0Um93KSB7XG4gICAgICAvLyBFbmFibGUgQkNFXG4gICAgICBpZiAocm93IC0gdGhpcy5fZmlyc3RSb3cgPj0gdGhpcy5fdGVybWluYWwucm93cykge1xuICAgICAgICB0aGlzLl9idWZmZXIuZ2V0TGluZSh0aGlzLl9jdXJzb3JTdHlsZVJvdyk/LmdldENlbGwodGhpcy5fY3Vyc29yU3R5bGVDb2wsIHRoaXMuX2JhY2tncm91bmRDZWxsKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmV0Y2ggY3VycmVudCBsaW5lXG4gICAgICBjb25zdCBjdXJyZW50TGluZSA9IHRoaXMuX2J1ZmZlci5nZXRMaW5lKHJvdykhO1xuICAgICAgLy8gRmV0Y2ggbmV4dCBsaW5lXG4gICAgICBjb25zdCBuZXh0TGluZSA9IHRoaXMuX2J1ZmZlci5nZXRMaW5lKHJvdyArIDEpITtcblxuICAgICAgaWYgKCFuZXh0TGluZS5pc1dyYXBwZWQpIHtcbiAgICAgICAgLy8ganVzdCBpbnNlcnQgdGhlIGxpbmUgYnJlYWtcbiAgICAgICAgcm93U2VwYXJhdG9yID0gJ1xcclxcbic7XG4gICAgICAgIC8vIHdlIHNlbmRlZCB0aGUgZW50ZXJcbiAgICAgICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdyArIDE7XG4gICAgICAgIHRoaXMuX2xhc3RDdXJzb3JDb2wgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93U2VwYXJhdG9yID0gJyc7XG4gICAgICAgIGNvbnN0IHRoaXNSb3dMYXN0Q2hhciA9IGN1cnJlbnRMaW5lLmdldENlbGwoY3VycmVudExpbmUubGVuZ3RoIC0gMSwgdGhpcy5fdGhpc1Jvd0xhc3RDaGFyKSE7XG4gICAgICAgIGNvbnN0IHRoaXNSb3dMYXN0U2Vjb25kQ2hhciA9IGN1cnJlbnRMaW5lLmdldENlbGwoY3VycmVudExpbmUubGVuZ3RoIC0gMiwgdGhpcy5fdGhpc1Jvd0xhc3RTZWNvbmRDaGFyKSE7XG4gICAgICAgIGNvbnN0IG5leHRSb3dGaXJzdENoYXIgPSBuZXh0TGluZS5nZXRDZWxsKDAsIHRoaXMuX25leHRSb3dGaXJzdENoYXIpITtcbiAgICAgICAgY29uc3QgaXNOZXh0Um93Rmlyc3RDaGFyRG91YmxlV2lkdGggPSBuZXh0Um93Rmlyc3RDaGFyLmdldFdpZHRoKCkgPiAxO1xuXG4gICAgICAgIC8vIHZhbGlkYXRlIHdoZXRoZXIgdGhpcyBsaW5lIHdyYXAgaXMgZXZlciBwb3NzaWJsZVxuICAgICAgICAvLyB3aGljaCBtZWFuIHdoZXRoZXIgY3Vyc29yIGNhbiBwbGFjZWQgYXQgYSBvdmVyZmxvdyBwb3NpdGlvbiAoeCA9PT0gcm93KSBuYXR1cmFsbHlcbiAgICAgICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8geW91IG11c3Qgb3V0cHV0IGNoYXJhY3RlciB0byBjYXVzZSBvdmVyZmxvdywgY29udHJvbCBzZXF1ZW5jZSBjYW4ndCBkbyB0aGlzXG4gICAgICAgICAgbmV4dFJvd0ZpcnN0Q2hhci5nZXRDaGFycygpICYmXG4gICAgICAgICAgICBpc05leHRSb3dGaXJzdENoYXJEb3VibGVXaWR0aCA/IHRoaXMuX251bGxDZWxsQ291bnQgPD0gMSA6IHRoaXMuX251bGxDZWxsQ291bnQgPD0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyB0aGUgbGFzdCBjaGFyYWN0ZXIgY2FuJ3QgYmUgbnVsbCxcbiAgICAgICAgICAgIC8vIHlvdSBjYW4ndCB1c2UgY29udHJvbCBzZXF1ZW5jZSB0byBtb3ZlIGN1cnNvciB0byAoeCA9PT0gcm93KVxuICAgICAgICAgICAgKHRoaXNSb3dMYXN0Q2hhci5nZXRDaGFycygpIHx8IHRoaXNSb3dMYXN0Q2hhci5nZXRXaWR0aCgpID09PSAwKSAmJlxuICAgICAgICAgICAgLy8gY2hhbmdlIGJhY2tncm91bmQgb2YgdGhlIGZpcnN0IHdyYXBwZWQgY2VsbCBhbHNvIGFmZmVjdHMgQkNFXG4gICAgICAgICAgICAvLyBzbyB3ZSBtYXJrIGl0IGFzIGludmFsaWQgdG8gc2ltcGx5IHRoZSBwcm9jZXNzIHRvIGRldGVybWluZSBsaW5lIHNlcGFyYXRvclxuICAgICAgICAgICAgZXF1YWxCZyh0aGlzUm93TGFzdENoYXIsIG5leHRSb3dGaXJzdENoYXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyB0aGUgc2Vjb25kIHRvIGxhc3QgY2hhcmFjdGVyIGNhbid0IGJlIG51bGwgaWYgdGhlIG5leHQgbGluZSBzdGFydHMgd2l0aCBDSkssXG4gICAgICAgICAgICAvLyB5b3UgY2FuJ3QgdXNlIGNvbnRyb2wgc2VxdWVuY2UgdG8gbW92ZSBjdXJzb3IgdG8gKHggPT09IHJvdylcbiAgICAgICAgICAgIGlzTmV4dFJvd0ZpcnN0Q2hhckRvdWJsZVdpZHRoICYmXG4gICAgICAgICAgICAodGhpc1Jvd0xhc3RTZWNvbmRDaGFyLmdldENoYXJzKCkgfHwgdGhpc1Jvd0xhc3RTZWNvbmRDaGFyLmdldFdpZHRoKCkgPT09IDApICYmXG4gICAgICAgICAgICAvLyBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZmlyc3Qgd3JhcHBlZCBjZWxsIGFsc28gYWZmZWN0cyBCQ0VcbiAgICAgICAgICAgIC8vIHNvIHdlIG1hcmsgaXQgYXMgaW52YWxpZCB0byBzaW1wbHkgdGhlIHByb2Nlc3MgdG8gZGV0ZXJtaW5lIGxpbmUgc2VwYXJhdG9yXG4gICAgICAgICAgICBlcXVhbEJnKHRoaXNSb3dMYXN0Q2hhciwgbmV4dFJvd0ZpcnN0Q2hhcikgJiZcbiAgICAgICAgICAgIGVxdWFsQmcodGhpc1Jvd0xhc3RTZWNvbmRDaGFyLCBuZXh0Um93Rmlyc3RDaGFyKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgLy8gZm9yY2UgdGhlIHdyYXAgd2l0aCBtYWdpY1xuICAgICAgICAgIC8vIGluc2VydCBlbm91Z2ggY2hhcmFjdGVyIHRvIGZvcmNlIHRoZSB3cmFwXG4gICAgICAgICAgcm93U2VwYXJhdG9yID0gJy0nLnJlcGVhdCh0aGlzLl9udWxsQ2VsbENvdW50ICsgMSk7XG4gICAgICAgICAgLy8gbW92ZSBiYWNrIGFuZCBlcmFzZSBuZXh0IGxpbmUgaGVhZFxuICAgICAgICAgIHJvd1NlcGFyYXRvciArPSAnXFx1MDAxYlsxRFxcdTAwMWJbMVgnO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX251bGxDZWxsQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBkbyB0aGVzZSBiZWNhdXNlIHdlIGZpbGxlZCB0aGUgbGFzdCBzZXZlcmFsIG51bGwgc2xvdCwgd2hpY2ggd2Ugc2hvdWxkbid0XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gJ1xcdTAwMWJbQSc7XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gYFxcdTAwMWJbJHtjdXJyZW50TGluZS5sZW5ndGggLSB0aGlzLl9udWxsQ2VsbENvdW50fUNgO1xuICAgICAgICAgICAgcm93U2VwYXJhdG9yICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSBgXFx1MDAxYlske2N1cnJlbnRMaW5lLmxlbmd0aCAtIHRoaXMuX251bGxDZWxsQ291bnR9RGA7XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gJ1xcdTAwMWJbQic7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhpcyBpcyBjb250ZW50IGFuZCBuZWVkIHRoZSBiZSBzZXJpYWxpemVkIGV2ZW4gaXQgaXMgaW52aXNpYmxlLlxuICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcywgd3JhcCB3aWxsIGJlIG1pc3NpbmcgZnJvbSBvdXRwdXRzLlxuICAgICAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gcm93ICsgMTtcbiAgICAgICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvckNvbCA9IDA7XG5cbiAgICAgICAgICAvLyBmb3JjZSBjb21taXQgdGhlIGN1cnNvciBwb3NpdGlvblxuICAgICAgICAgIHRoaXMuX2xhc3RDdXJzb3JSb3cgPSByb3cgKyAxO1xuICAgICAgICAgIHRoaXMuX2xhc3RDdXJzb3JDb2wgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYWxsUm93c1t0aGlzLl9yb3dJbmRleF0gPSB0aGlzLl9jdXJyZW50Um93O1xuICAgIHRoaXMuX2FsbFJvd1NlcGFyYXRvcnNbdGhpcy5fcm93SW5kZXgrK10gPSByb3dTZXBhcmF0b3I7XG4gICAgdGhpcy5fY3VycmVudFJvdyA9ICcnO1xuICAgIHRoaXMuX251bGxDZWxsQ291bnQgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlmZlN0eWxlKGNlbGw6IElCdWZmZXJDZWxsIHwgSUF0dHJpYnV0ZURhdGEsIG9sZENlbGw6IElCdWZmZXJDZWxsKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNnclNlcTogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBmZ0NoYW5nZWQgPSAhZXF1YWxGZyhjZWxsLCBvbGRDZWxsKTtcbiAgICBjb25zdCBiZ0NoYW5nZWQgPSAhZXF1YWxCZyhjZWxsLCBvbGRDZWxsKTtcbiAgICBjb25zdCBmbGFnc0NoYW5nZWQgPSAhZXF1YWxGbGFncyhjZWxsLCBvbGRDZWxsKTtcblxuICAgIGlmIChmZ0NoYW5nZWQgfHwgYmdDaGFuZ2VkIHx8IGZsYWdzQ2hhbmdlZCkge1xuICAgICAgaWYgKGNlbGwuaXNBdHRyaWJ1dGVEZWZhdWx0KCkpIHtcbiAgICAgICAgaWYgKCFvbGRDZWxsLmlzQXR0cmlidXRlRGVmYXVsdCgpKSB7XG4gICAgICAgICAgc2dyU2VxLnB1c2goMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmZ0NoYW5nZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IGNlbGwuZ2V0RmdDb2xvcigpO1xuICAgICAgICAgIGlmIChjZWxsLmlzRmdSR0IoKSkgeyBzZ3JTZXEucHVzaCgzOCwgMiwgKGNvbG9yID4+PiAxNikgJiAweEZGLCAoY29sb3IgPj4+IDgpICYgMHhGRiwgY29sb3IgJiAweEZGKTsgfVxuICAgICAgICAgIGVsc2UgaWYgKGNlbGwuaXNGZ1BhbGV0dGUoKSkge1xuICAgICAgICAgICAgaWYgKGNvbG9yID49IDE2KSB7IHNnclNlcS5wdXNoKDM4LCA1LCBjb2xvcik7IH1cbiAgICAgICAgICAgIGVsc2UgeyBzZ3JTZXEucHVzaChjb2xvciAmIDggPyA5MCArIChjb2xvciAmIDcpIDogMzAgKyAoY29sb3IgJiA3KSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKDM5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZ0NoYW5nZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IGNlbGwuZ2V0QmdDb2xvcigpO1xuICAgICAgICAgIGlmIChjZWxsLmlzQmdSR0IoKSkgeyBzZ3JTZXEucHVzaCg0OCwgMiwgKGNvbG9yID4+PiAxNikgJiAweEZGLCAoY29sb3IgPj4+IDgpICYgMHhGRiwgY29sb3IgJiAweEZGKTsgfVxuICAgICAgICAgIGVsc2UgaWYgKGNlbGwuaXNCZ1BhbGV0dGUoKSkge1xuICAgICAgICAgICAgaWYgKGNvbG9yID49IDE2KSB7IHNnclNlcS5wdXNoKDQ4LCA1LCBjb2xvcik7IH1cbiAgICAgICAgICAgIGVsc2UgeyBzZ3JTZXEucHVzaChjb2xvciAmIDggPyAxMDAgKyAoY29sb3IgJiA3KSA6IDQwICsgKGNvbG9yICYgNykpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgeyBzZ3JTZXEucHVzaCg0OSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxhZ3NDaGFuZ2VkKSB7XG4gICAgICAgICAgaWYgKGNlbGwuaXNJbnZlcnNlKCkgIT09IG9sZENlbGwuaXNJbnZlcnNlKCkpIHsgc2dyU2VxLnB1c2goY2VsbC5pc0ludmVyc2UoKSA/IDcgOiAyNyk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0JvbGQoKSAhPT0gb2xkQ2VsbC5pc0JvbGQoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzQm9sZCgpID8gMSA6IDIyKTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzVW5kZXJsaW5lKCkgIT09IG9sZENlbGwuaXNVbmRlcmxpbmUoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzVW5kZXJsaW5lKCkgPyA0IDogMjQpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNPdmVybGluZSgpICE9PSBvbGRDZWxsLmlzT3ZlcmxpbmUoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzT3ZlcmxpbmUoKSA/IDUzIDogNTUpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNCbGluaygpICE9PSBvbGRDZWxsLmlzQmxpbmsoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzQmxpbmsoKSA/IDUgOiAyNSk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0ludmlzaWJsZSgpICE9PSBvbGRDZWxsLmlzSW52aXNpYmxlKCkpIHsgc2dyU2VxLnB1c2goY2VsbC5pc0ludmlzaWJsZSgpID8gOCA6IDI4KTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzSXRhbGljKCkgIT09IG9sZENlbGwuaXNJdGFsaWMoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzSXRhbGljKCkgPyAzIDogMjMpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNEaW0oKSAhPT0gb2xkQ2VsbC5pc0RpbSgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNEaW0oKSA/IDIgOiAyMik7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc1N0cmlrZXRocm91Z2goKSAhPT0gb2xkQ2VsbC5pc1N0cmlrZXRocm91Z2goKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzU3RyaWtldGhyb3VnaCgpID8gOSA6IDI5KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNnclNlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dENlbGwoY2VsbDogSUJ1ZmZlckNlbGwsIG9sZENlbGw6IElCdWZmZXJDZWxsLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhIHdpZHRoIDAgY2VsbCBkb24ndCBuZWVkIHRvIGJlIGNvdW50IGJlY2F1c2UgaXQgaXMganVzdCBhIHBsYWNlaG9sZGVyIGFmdGVyIGEgQ0pLIGNoYXJhY3RlcjtcbiAgICBjb25zdCBpc1BsYWNlSG9sZGVyQ2VsbCA9IGNlbGwuZ2V0V2lkdGgoKSA9PT0gMDtcblxuICAgIGlmIChpc1BsYWNlSG9sZGVyQ2VsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY2VsbCBkb24ndCBoYXZlIGNvbnRlbnRcbiAgICBjb25zdCBpc0VtcHR5Q2VsbCA9IGNlbGwuZ2V0Q2hhcnMoKSA9PT0gJyc7XG5cbiAgICBjb25zdCBzZ3JTZXEgPSB0aGlzLl9kaWZmU3R5bGUoY2VsbCwgdGhpcy5fY3Vyc29yU3R5bGUpO1xuXG4gICAgLy8gdGhlIGVtcHR5IGNlbGwgc3R5bGUgaXMgb25seSBhc3N1bWVkIHRvIGJlIGNoYW5nZWQgd2hlbiBiYWNrZ3JvdW5kIGNoYW5nZWQsIGJlY2F1c2VcbiAgICAvLyBmb3JlZ3JvdW5kIGlzIGFsd2F5cyAwLlxuICAgIGNvbnN0IHN0eWxlQ2hhbmdlZCA9IGlzRW1wdHlDZWxsID8gIWVxdWFsQmcodGhpcy5fY3Vyc29yU3R5bGUsIGNlbGwpIDogc2dyU2VxLmxlbmd0aCA+IDA7XG5cbiAgICAvKipcbiAgICAgKiAgaGFuZGxlcyBzdHlsZSBjaGFuZ2VcbiAgICAgKi9cbiAgICBpZiAoc3R5bGVDaGFuZ2VkKSB7XG4gICAgICAvLyBiZWZvcmUgdXBkYXRlIHRoZSBzdHlsZSwgd2UgbmVlZCB0byBmaWxsIGVtcHR5IGNlbGwgYmFja1xuICAgICAgaWYgKHRoaXMuX251bGxDZWxsQ291bnQgPiAwKSB7XG4gICAgICAgIC8vIHVzZSBjbGVhciByaWdodCB0byBzZXQgYmFja2dyb3VuZC5cbiAgICAgICAgaWYgKCFlcXVhbEJnKHRoaXMuX2N1cnNvclN0eWxlLCB0aGlzLl9iYWNrZ3JvdW5kQ2VsbCkpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICAgICAgfVxuICAgICAgICAvLyB1c2UgbW92ZSByaWdodCB0byBtb3ZlIGN1cnNvci5cbiAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgIHRoaXMuX251bGxDZWxsQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvclJvdyA9IHRoaXMuX2xhc3RDdXJzb3JSb3cgPSByb3c7XG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvckNvbCA9IHRoaXMuX2xhc3RDdXJzb3JDb2wgPSBjb2w7XG5cbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gYFxcdTAwMWJbJHtzZ3JTZXEuam9pbignOycpfW1gO1xuXG4gICAgICAvLyB1cGRhdGUgdGhlIGxhc3QgY3Vyc29yIHN0eWxlXG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93KTtcbiAgICAgIGlmIChsaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGluZS5nZXRDZWxsKGNvbCwgdGhpcy5fY3Vyc29yU3R5bGUpO1xuICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZVJvdyA9IHJvdztcbiAgICAgICAgdGhpcy5fY3Vyc29yU3R5bGVDb2wgPSBjb2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIGhhbmRsZXMgYWN0dWFsIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAoaXNFbXB0eUNlbGwpIHtcbiAgICAgIHRoaXMuX251bGxDZWxsQ291bnQgKz0gY2VsbC5nZXRXaWR0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fbnVsbENlbGxDb3VudCA+IDApIHtcbiAgICAgICAgLy8gd2UgY2FuIGp1c3QgYXNzdW1lIHdlIGhhdmUgc2FtZSBzdHlsZSB3aXRoIHByZXZpb3VzIG9uZSBoZXJlXG4gICAgICAgIC8vIGJlY2F1c2Ugc3R5bGUgY2hhbmdlIGlzIGhhbmRsZWQgYnkgcHJldmlvdXMgc3RhZ2VcbiAgICAgICAgLy8gdXNlIG1vdmUgcmlnaHQgd2hlbiBiYWNrZ3JvdW5kIGlzIGVtcHR5LCB1c2UgY2xlYXIgcmlnaHQgd2hlbiB0aGVyZSBpcyBiYWNrZ3JvdW5kLlxuICAgICAgICBpZiAoZXF1YWxCZyh0aGlzLl9jdXJzb3JTdHlsZSwgdGhpcy5fYmFja2dyb3VuZENlbGwpKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9WGA7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbnVsbENlbGxDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gY2VsbC5nZXRDaGFycygpO1xuXG4gICAgICAvLyB1cGRhdGUgY3Vyc29yXG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvclJvdyA9IHRoaXMuX2xhc3RDdXJzb3JSb3cgPSByb3c7XG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvckNvbCA9IHRoaXMuX2xhc3RDdXJzb3JDb2wgPSBjb2wgKyBjZWxsLmdldFdpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXJpYWxpemVTdHJpbmcoZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb246IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCByb3dFbmQgPSB0aGlzLl9hbGxSb3dzLmxlbmd0aDtcblxuICAgIC8vIHRoZSBmaXh1cCBpcyBvbmx5IHJlcXVpcmVkIGZvciBkYXRhIHdpdGhvdXQgc2Nyb2xsYmFja1xuICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgcGxhY2VkIGF0IGxhc3QgbGluZSBvdGhlcndpc2VcbiAgICBpZiAodGhpcy5fYnVmZmVyLmxlbmd0aCAtIHRoaXMuX2ZpcnN0Um93IDw9IHRoaXMuX3Rlcm1pbmFsLnJvd3MpIHtcbiAgICAgIHJvd0VuZCA9IHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ICsgMSAtIHRoaXMuX2ZpcnN0Um93O1xuICAgICAgdGhpcy5fbGFzdEN1cnNvckNvbCA9IHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sO1xuICAgICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93O1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0VuZDsgaSsrKSB7XG4gICAgICBjb250ZW50ICs9IHRoaXMuX2FsbFJvd3NbaV07XG4gICAgICBpZiAoaSArIDEgPCByb3dFbmQpIHtcbiAgICAgICAgY29udGVudCArPSB0aGlzLl9hbGxSb3dTZXBhcmF0b3JzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIGN1cnNvclxuICAgIGlmICghZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHJlYWxDdXJzb3JSb3cgPSB0aGlzLl9idWZmZXIuYmFzZVkgKyB0aGlzLl9idWZmZXIuY3Vyc29yWTtcbiAgICAgIGNvbnN0IHJlYWxDdXJzb3JDb2wgPSB0aGlzLl9idWZmZXIuY3Vyc29yWDtcblxuICAgICAgY29uc3QgY3Vyc29yTW92ZWQgPSAocmVhbEN1cnNvclJvdyAhPT0gdGhpcy5fbGFzdEN1cnNvclJvdyB8fCByZWFsQ3Vyc29yQ29sICE9PSB0aGlzLl9sYXN0Q3Vyc29yQ29sKTtcblxuICAgICAgY29uc3QgbW92ZVJpZ2h0ID0gKG9mZnNldDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlske29mZnNldH1DYDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlskey1vZmZzZXR9RGA7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBtb3ZlRG93biA9IChvZmZzZXQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgIGNvbnRlbnQgKz0gYFxcdTAwMWJbJHtvZmZzZXR9QmA7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgIGNvbnRlbnQgKz0gYFxcdTAwMWJbJHstb2Zmc2V0fUFgO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoY3Vyc29yTW92ZWQpIHtcbiAgICAgICAgbW92ZURvd24ocmVhbEN1cnNvclJvdyAtIHRoaXMuX2xhc3RDdXJzb3JSb3cpO1xuICAgICAgICBtb3ZlUmlnaHQocmVhbEN1cnNvckNvbCAtIHRoaXMuX2xhc3RDdXJzb3JDb2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgc3R5bGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20veHRlcm1qcy94dGVybS5qcy9pc3N1ZXMvMzY3N1xuICAgIC8vIEhBQ0s6IEludGVybmFsIEFQSSBhY2Nlc3Mgc2luY2UgaXQncyBhd2t3YXJkIHRvIGV4cG9zZSB0aGlzIGluIHRoZSBBUEkgYW5kIHNlcmlhbGl6ZSB3aWxsXG4gICAgLy8gbGlrZWx5IGJlIHRoZSBvbmx5IGNvbnN1bWVyXG4gICAgY29uc3QgY3VyQXR0ckRhdGE6IElBdHRyaWJ1dGVEYXRhID0gKHRoaXMuX3Rlcm1pbmFsIGFzIGFueSkuX2NvcmUuX2lucHV0SGFuZGxlci5fY3VyQXR0ckRhdGE7XG4gICAgY29uc3Qgc2dyU2VxID0gdGhpcy5fZGlmZlN0eWxlKGN1ckF0dHJEYXRhLCB0aGlzLl9jdXJzb3JTdHlsZSk7XG4gICAgaWYgKHNnclNlcS5sZW5ndGggPiAwKSB7XG4gICAgICBjb250ZW50ICs9IGBcXHUwMDFiWyR7c2dyU2VxLmpvaW4oJzsnKX1tYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VyaWFsaXplQWRkb24gaW1wbGVtZW50cyBJVGVybWluYWxBZGRvbiAsIElTZXJpYWxpemVBcGkge1xuICBwcml2YXRlIF90ZXJtaW5hbDogVGVybWluYWwgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFjdGl2YXRlKHRlcm1pbmFsOiBUZXJtaW5hbCk6IHZvaWQge1xuICAgIHRoaXMuX3Rlcm1pbmFsID0gdGVybWluYWw7XG4gIH1cblxuICBwcml2YXRlIF9zZXJpYWxpemVCdWZmZXJCeVNjcm9sbGJhY2sodGVybWluYWw6IFRlcm1pbmFsLCBidWZmZXI6IElCdWZmZXIsIHNjcm9sbGJhY2s/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1heFJvd3MgPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IGNvcnJlY3RSb3dzID0gKHNjcm9sbGJhY2sgPT09IHVuZGVmaW5lZCkgPyBtYXhSb3dzIDogY29uc3RyYWluKHNjcm9sbGJhY2sgKyB0ZXJtaW5hbC5yb3dzLCAwLCBtYXhSb3dzKTtcbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlSYW5nZSh0ZXJtaW5hbCwgYnVmZmVyLCB7XG4gICAgICBzdGFydDogbWF4Um93cyAtIGNvcnJlY3RSb3dzLFxuICAgICAgZW5kOiBtYXhSb3dzIC0gMVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZUJ1ZmZlckJ5UmFuZ2UodGVybWluYWw6IFRlcm1pbmFsLCBidWZmZXI6IElCdWZmZXIsIHJhbmdlOiBJU2VyaWFsaXplUmFuZ2UsIGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IFN0cmluZ1NlcmlhbGl6ZUhhbmRsZXIoYnVmZmVyLCB0ZXJtaW5hbCk7XG4gICAgcmV0dXJuIGhhbmRsZXIuc2VyaWFsaXplKHtcbiAgICAgIHN0YXJ0OiB7IHg6IDAsICAgICAgICAgICAgIHk6IHR5cGVvZiByYW5nZS5zdGFydCA9PT0gJ251bWJlcicgPyByYW5nZS5zdGFydCA6IHJhbmdlLnN0YXJ0LmxpbmUgfSxcbiAgICAgIGVuZDogICB7IHg6IHRlcm1pbmFsLmNvbHMsIHk6IHR5cGVvZiByYW5nZS5lbmQgICA9PT0gJ251bWJlcicgPyByYW5nZS5lbmQgICA6IHJhbmdlLmVuZC5saW5lICAgfVxuICAgIH0sIGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZUJ1ZmZlckFzSFRNTCh0ZXJtaW5hbDogVGVybWluYWwsIG9wdGlvbnM6IFBhcnRpYWw8SUhUTUxTZXJpYWxpemVPcHRpb25zPik6IHN0cmluZyB7XG4gICAgY29uc3QgYnVmZmVyID0gdGVybWluYWwuYnVmZmVyLmFjdGl2ZTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEhUTUxTZXJpYWxpemVIYW5kbGVyKGJ1ZmZlciwgdGVybWluYWwsIG9wdGlvbnMpO1xuICAgIGNvbnN0IG9ubHlTZWxlY3Rpb24gPSBvcHRpb25zLm9ubHlTZWxlY3Rpb24gPz8gZmFsc2U7XG4gICAgaWYgKCFvbmx5U2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCBtYXhSb3dzID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGNvbnN0IHNjcm9sbGJhY2sgPSBvcHRpb25zLnNjcm9sbGJhY2s7XG4gICAgICBjb25zdCBjb3JyZWN0Um93cyA9IChzY3JvbGxiYWNrID09PSB1bmRlZmluZWQpID8gbWF4Um93cyA6IGNvbnN0cmFpbihzY3JvbGxiYWNrICsgdGVybWluYWwucm93cywgMCwgbWF4Um93cyk7XG4gICAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUoe1xuICAgICAgICBzdGFydDogeyB4OiAwLCAgICAgICAgICAgICB5OiBtYXhSb3dzIC0gY29ycmVjdFJvd3MgfSxcbiAgICAgICAgZW5kOiAgIHsgeDogdGVybWluYWwuY29scywgeTogbWF4Um93cyAtIDEgICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuX3Rlcm1pbmFsPy5nZXRTZWxlY3Rpb25Qb3NpdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGhhbmRsZXIuc2VyaWFsaXplKHtcbiAgICAgICAgc3RhcnQ6IHsgeDogc2VsZWN0aW9uLnN0YXJ0LngsIHk6IHNlbGVjdGlvbi5zdGFydC55IH0sXG4gICAgICAgIGVuZDogICB7IHg6IHNlbGVjdGlvbi5lbmQueCwgICB5OiBzZWxlY3Rpb24uZW5kLnkgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIF9zZXJpYWxpemVNb2Rlcyh0ZXJtaW5hbDogVGVybWluYWwpOiBzdHJpbmcge1xuICAgIGxldCBjb250ZW50ID0gJyc7XG4gICAgY29uc3QgbW9kZXMgPSB0ZXJtaW5hbC5tb2RlcztcblxuICAgIC8vIERlZmF1bHQ6IGZhbHNlXG4gICAgaWYgKG1vZGVzLmFwcGxpY2F0aW9uQ3Vyc29yS2V5c01vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz8xaCc7XG4gICAgaWYgKG1vZGVzLmFwcGxpY2F0aW9uS2V5cGFkTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzY2aCc7XG4gICAgaWYgKG1vZGVzLmJyYWNrZXRlZFBhc3RlTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzIwMDRoJztcbiAgICBpZiAobW9kZXMuaW5zZXJ0TW9kZSkgY29udGVudCArPSAnXFx4MWJbNGgnO1xuICAgIGlmIChtb2Rlcy5vcmlnaW5Nb2RlKSBjb250ZW50ICs9ICdcXHgxYls/NmgnO1xuICAgIGlmIChtb2Rlcy5yZXZlcnNlV3JhcGFyb3VuZE1vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz80NWgnO1xuICAgIGlmIChtb2Rlcy5zZW5kRm9jdXNNb2RlKSBjb250ZW50ICs9ICdcXHgxYls/MTAwNGgnO1xuXG4gICAgLy8gRGVmYXVsdDogdHJ1ZVxuICAgIGlmIChtb2Rlcy53cmFwYXJvdW5kTW9kZSA9PT0gZmFsc2UpIGNvbnRlbnQgKz0gJ1xceDFiWz83bCc7XG5cbiAgICAvLyBEZWZhdWx0OiAnbm9uZSdcbiAgICBpZiAobW9kZXMubW91c2VUcmFja2luZ01vZGUgIT09ICdub25lJykge1xuICAgICAgc3dpdGNoIChtb2Rlcy5tb3VzZVRyYWNraW5nTW9kZSkge1xuICAgICAgICBjYXNlICd4MTAnOiBjb250ZW50ICs9ICdcXHgxYls/OWgnOyBicmVhaztcbiAgICAgICAgY2FzZSAndnQyMDAnOiBjb250ZW50ICs9ICdcXHgxYls/MTAwMGgnOyBicmVhaztcbiAgICAgICAgY2FzZSAnZHJhZyc6IGNvbnRlbnQgKz0gJ1xceDFiWz8xMDAyaCc7IGJyZWFrO1xuICAgICAgICBjYXNlICdhbnknOiBjb250ZW50ICs9ICdcXHgxYls/MTAwM2gnOyBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXJpYWxpemUob3B0aW9ucz86IElTZXJpYWxpemVPcHRpb25zKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBBZGQgY29tYmluZWREYXRhIHN1cHBvcnRcbiAgICBpZiAoIXRoaXMuX3Rlcm1pbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYWRkb24gdW50aWwgaXQgaGFzIGJlZW4gbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsIGJ1ZmZlclxuICAgIGxldCBjb250ZW50ID0gb3B0aW9ucz8ucmFuZ2VcbiAgICAgID8gdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlSYW5nZSh0aGlzLl90ZXJtaW5hbCwgdGhpcy5fdGVybWluYWwuYnVmZmVyLm5vcm1hbCwgb3B0aW9ucy5yYW5nZSwgdHJ1ZSlcbiAgICAgIDogdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlTY3JvbGxiYWNrKHRoaXMuX3Rlcm1pbmFsLCB0aGlzLl90ZXJtaW5hbC5idWZmZXIubm9ybWFsLCBvcHRpb25zPy5zY3JvbGxiYWNrKTtcblxuICAgIC8vIEFsdGVybmF0ZSBidWZmZXJcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVBbHRCdWZmZXIpIHtcbiAgICAgIGlmICh0aGlzLl90ZXJtaW5hbC5idWZmZXIuYWN0aXZlLnR5cGUgPT09ICdhbHRlcm5hdGUnKSB7XG4gICAgICAgIGNvbnN0IGFsdGVybmF0aXZlU2NyZWVuQ29udGVudCA9IHRoaXMuX3NlcmlhbGl6ZUJ1ZmZlckJ5U2Nyb2xsYmFjayh0aGlzLl90ZXJtaW5hbCwgdGhpcy5fdGVybWluYWwuYnVmZmVyLmFsdGVybmF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgY29udGVudCArPSBgXFx1MDAxYls/MTA0OWhcXHUwMDFiW0gke2FsdGVybmF0aXZlU2NyZWVuQ29udGVudH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1vZGVzXG4gICAgaWYgKCFvcHRpb25zPy5leGNsdWRlTW9kZXMpIHtcbiAgICAgIGNvbnRlbnQgKz0gdGhpcy5fc2VyaWFsaXplTW9kZXModGhpcy5fdGVybWluYWwpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZUFzSFRNTChvcHRpb25zPzogUGFydGlhbDxJSFRNTFNlcmlhbGl6ZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3Rlcm1pbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYWRkb24gdW50aWwgaXQgaGFzIGJlZW4gbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZUJ1ZmZlckFzSFRNTCh0aGlzLl90ZXJtaW5hbCwgb3B0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHsgfVxufVxuXG5leHBvcnQgY2xhc3MgSFRNTFNlcmlhbGl6ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlU2VyaWFsaXplSGFuZGxlciB7XG4gIHByaXZhdGUgX2N1cnJlbnRSb3c6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgX2h0bWxDb250ZW50ID0gJyc7XG5cbiAgcHJpdmF0ZSBfYW5zaUNvbG9yczogUmVhZG9ubHk8SUNvbG9yW10+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJ1ZmZlcjogSUJ1ZmZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXJtaW5hbDogVGVybWluYWwsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogUGFydGlhbDxJSFRNTFNlcmlhbGl6ZU9wdGlvbnM+XG4gICkge1xuICAgIHN1cGVyKGJ1ZmZlcik7XG5cbiAgICAvLyBGb3IgeHRlcm0gaGVhZGxlc3M6IGZhbGxiYWNrIHRvIGFuc2kgY29sb3JzXG4gICAgaWYgKChfdGVybWluYWwgYXMgYW55KS5fY29yZS5fdGhlbWVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLl9hbnNpQ29sb3JzID0gKF90ZXJtaW5hbCBhcyBhbnkpLl9jb3JlLl90aGVtZVNlcnZpY2UuY29sb3JzLmFuc2k7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fYW5zaUNvbG9ycyA9IERFRkFVTFRfQU5TSV9DT0xPUlM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFkU3RhcnQodGFyZ2V0OiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gcGFkU3RyaW5nID8/ICcgJztcbiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggLT0gdGFyZ2V0Lmxlbmd0aDtcbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIHRhcmdldDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfYmVmb3JlU2VyaWFsaXplKHJvd3M6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPGh0bWw+PGJvZHk+PCEtLVN0YXJ0RnJhZ21lbnQtLT48cHJlPic7XG5cbiAgICBsZXQgZm9yZWdyb3VuZCA9ICcjMDAwMDAwJztcbiAgICBsZXQgYmFja2dyb3VuZCA9ICcjZmZmZmZmJztcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmNsdWRlR2xvYmFsQmFja2dyb3VuZCA/PyBmYWxzZSkge1xuICAgICAgZm9yZWdyb3VuZCA9IHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMudGhlbWU/LmZvcmVncm91bmQgPz8gJyNmZmZmZmYnO1xuICAgICAgYmFja2dyb3VuZCA9IHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMudGhlbWU/LmJhY2tncm91bmQgPz8gJyMwMDAwMDAnO1xuICAgIH1cblxuICAgIGNvbnN0IGdsb2JhbFN0eWxlRGVmaW5pdGlvbnMgPSBbXTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2NvbG9yOiAnICsgZm9yZWdyb3VuZCArICc7Jyk7XG4gICAgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucy5wdXNoKCdiYWNrZ3JvdW5kLWNvbG9yOiAnICsgYmFja2dyb3VuZCArICc7Jyk7XG4gICAgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucy5wdXNoKCdmb250LWZhbWlseTogJyArIHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMuZm9udEZhbWlseSArICc7Jyk7XG4gICAgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucy5wdXNoKCdmb250LXNpemU6ICcgKyB0aGlzLl90ZXJtaW5hbC5vcHRpb25zLmZvbnRTaXplICsgJ3B4OycpO1xuICAgIHRoaXMuX2h0bWxDb250ZW50ICs9ICc8ZGl2IHN0eWxlPVxcJycgKyBnbG9iYWxTdHlsZURlZmluaXRpb25zLmpvaW4oJyAnKSArICdcXCc+JztcbiAgfVxuXG4gIHByb3RlY3RlZCBfYWZ0ZXJTZXJpYWxpemUoKTogdm9pZCB7XG4gICAgdGhpcy5faHRtbENvbnRlbnQgKz0gJzwvZGl2Pic7XG4gICAgdGhpcy5faHRtbENvbnRlbnQgKz0gJzwvcHJlPjwhLS1FbmRGcmFnbWVudC0tPjwvYm9keT48L2h0bWw+JztcbiAgfVxuXG4gIHByb3RlY3RlZCBfcm93RW5kKHJvdzogbnVtYmVyLCBpc0xhc3RSb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPGRpdj48c3Bhbj4nICsgdGhpcy5fY3VycmVudFJvdyArICc8L3NwYW4+PC9kaXY+JztcbiAgICB0aGlzLl9jdXJyZW50Um93ID0gJyc7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIZXhDb2xvcihjZWxsOiBJQnVmZmVyQ2VsbCwgaXNGZzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29sb3IgPSBpc0ZnID8gY2VsbC5nZXRGZ0NvbG9yKCkgOiBjZWxsLmdldEJnQ29sb3IoKTtcbiAgICBpZiAoaXNGZyA/IGNlbGwuaXNGZ1JHQigpIDogY2VsbC5pc0JnUkdCKCkpIHtcbiAgICAgIGNvbnN0IHJnYiA9IFtcbiAgICAgICAgKGNvbG9yID4+IDE2KSAmIDI1NSxcbiAgICAgICAgKGNvbG9yID4+ICA4KSAmIDI1NSxcbiAgICAgICAgKGNvbG9yICAgICAgKSAmIDI1NVxuICAgICAgXTtcbiAgICAgIHJldHVybiAnIycgKyByZ2IubWFwKHggPT4gdGhpcy5fcGFkU3RhcnQoeC50b1N0cmluZygxNiksIDIsICcwJykpLmpvaW4oJycpO1xuICAgIH1cbiAgICBpZiAoaXNGZyA/IGNlbGwuaXNGZ1BhbGV0dGUoKSA6IGNlbGwuaXNCZ1BhbGV0dGUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Fuc2lDb2xvcnNbY29sb3JdLmNzcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX2RpZmZTdHlsZShjZWxsOiBJQnVmZmVyQ2VsbCwgb2xkQ2VsbDogSUJ1ZmZlckNlbGwpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnN0IGZnQ2hhbmdlZCA9ICFlcXVhbEZnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGJnQ2hhbmdlZCA9ICFlcXVhbEJnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGZsYWdzQ2hhbmdlZCA9ICFlcXVhbEZsYWdzKGNlbGwsIG9sZENlbGwpO1xuXG4gICAgaWYgKGZnQ2hhbmdlZCB8fCBiZ0NoYW5nZWQgfHwgZmxhZ3NDaGFuZ2VkKSB7XG4gICAgICBjb25zdCBmZ0hleENvbG9yID0gdGhpcy5fZ2V0SGV4Q29sb3IoY2VsbCwgdHJ1ZSk7XG4gICAgICBpZiAoZmdIZXhDb2xvcikge1xuICAgICAgICBjb250ZW50LnB1c2goJ2NvbG9yOiAnICsgZmdIZXhDb2xvciArICc7Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJnSGV4Q29sb3IgPSB0aGlzLl9nZXRIZXhDb2xvcihjZWxsLCBmYWxzZSk7XG4gICAgICBpZiAoYmdIZXhDb2xvcikge1xuICAgICAgICBjb250ZW50LnB1c2goJ2JhY2tncm91bmQtY29sb3I6ICcgKyBiZ0hleENvbG9yICsgJzsnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwuaXNJbnZlcnNlKCkpIHsgY29udGVudC5wdXNoKCdjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0JGQkZCRjsnKTsgfVxuICAgICAgaWYgKGNlbGwuaXNCb2xkKCkpIHsgY29udGVudC5wdXNoKCdmb250LXdlaWdodDogYm9sZDsnKTsgfVxuICAgICAgaWYgKGNlbGwuaXNVbmRlcmxpbmUoKSAmJiBjZWxsLmlzT3ZlcmxpbmUoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmUgdW5kZXJsaW5lOycpOyB9XG4gICAgICBlbHNlIGlmIChjZWxsLmlzVW5kZXJsaW5lKCkpIHsgY29udGVudC5wdXNoKCd0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsnKTsgfVxuICAgICAgZWxzZSBpZiAoY2VsbC5pc092ZXJsaW5lKCkpIHsgY29udGVudC5wdXNoKCd0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0JsaW5rKCkpIHsgY29udGVudC5wdXNoKCd0ZXh0LWRlY29yYXRpb246IGJsaW5rOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0ludmlzaWJsZSgpKSB7IGNvbnRlbnQucHVzaCgndmlzaWJpbGl0eTogaGlkZGVuOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0l0YWxpYygpKSB7IGNvbnRlbnQucHVzaCgnZm9udC1zdHlsZTogaXRhbGljOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0RpbSgpKSB7IGNvbnRlbnQucHVzaCgnb3BhY2l0eTogMC41OycpOyB9XG4gICAgICBpZiAoY2VsbC5pc1N0cmlrZXRocm91Z2goKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOycpOyB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgX25leHRDZWxsKGNlbGw6IElCdWZmZXJDZWxsLCBvbGRDZWxsOiBJQnVmZmVyQ2VsbCwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYSB3aWR0aCAwIGNlbGwgZG9uJ3QgbmVlZCB0byBiZSBjb3VudCBiZWNhdXNlIGl0IGlzIGp1c3QgYSBwbGFjZWhvbGRlciBhZnRlciBhIENKSyBjaGFyYWN0ZXI7XG4gICAgY29uc3QgaXNQbGFjZUhvbGRlckNlbGwgPSBjZWxsLmdldFdpZHRoKCkgPT09IDA7XG4gICAgaWYgKGlzUGxhY2VIb2xkZXJDZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjZWxsIGRvbid0IGhhdmUgY29udGVudFxuICAgIGNvbnN0IGlzRW1wdHlDZWxsID0gY2VsbC5nZXRDaGFycygpID09PSAnJztcblxuICAgIGNvbnN0IHN0eWxlRGVmaW5pdGlvbnMgPSB0aGlzLl9kaWZmU3R5bGUoY2VsbCwgb2xkQ2VsbCk7XG5cbiAgICAvLyBoYW5kbGVzIHN0eWxlIGNoYW5nZVxuICAgIGlmIChzdHlsZURlZmluaXRpb25zKSB7XG4gICAgICB0aGlzLl9jdXJyZW50Um93ICs9IHN0eWxlRGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID9cbiAgICAgICAgJzwvc3Bhbj48c3Bhbj4nIDpcbiAgICAgICAgJzwvc3Bhbj48c3BhbiBzdHlsZT1cXCcnICsgc3R5bGVEZWZpbml0aW9ucy5qb2luKCcgJykgKyAnXFwnPic7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlcyBhY3R1YWwgY29udGVudFxuICAgIGlmIChpc0VtcHR5Q2VsbCkge1xuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gY2VsbC5nZXRDaGFycygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfc2VyaWFsaXplU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2h0bWxDb250ZW50O1xuICB9XG59XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTZXJpYWxpemVBZGRvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTZXJpYWxpemVBZGRvblwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNyBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IElDb2xvckNvbnRyYXN0Q2FjaGUgfSBmcm9tICdicm93c2VyL1R5cGVzJztcbmltcG9ydCB7IElDb2xvciB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5pbXBvcnQgeyBUd29LZXlNYXAgfSBmcm9tICdjb21tb24vTXVsdGlLZXlNYXAnO1xuXG5leHBvcnQgY2xhc3MgQ29sb3JDb250cmFzdENhY2hlIGltcGxlbWVudHMgSUNvbG9yQ29udHJhc3RDYWNoZSB7XG4gIHByaXZhdGUgX2NvbG9yOiBUd29LZXlNYXA8LyogYmcgKi9udW1iZXIsIC8qIGZnICovbnVtYmVyLCBJQ29sb3IgfCBudWxsPiA9IG5ldyBUd29LZXlNYXAoKTtcbiAgcHJpdmF0ZSBfY3NzOiBUd29LZXlNYXA8LyogYmcgKi9udW1iZXIsIC8qIGZnICovbnVtYmVyLCBzdHJpbmcgfCBudWxsPiA9IG5ldyBUd29LZXlNYXAoKTtcblxuICBwdWJsaWMgc2V0Q3NzKGJnOiBudW1iZXIsIGZnOiBudW1iZXIsIHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fY3NzLnNldChiZywgZmcsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDc3MoYmc6IG51bWJlciwgZmc6IG51bWJlcik6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jc3MuZ2V0KGJnLCBmZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29sb3IoYmc6IG51bWJlciwgZmc6IG51bWJlciwgdmFsdWU6IElDb2xvciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2xvci5zZXQoYmcsIGZnLCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sb3IoYmc6IG51bWJlciwgZmc6IG51bWJlcik6IElDb2xvciB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb2xvci5nZXQoYmcsIGZnKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2xvci5jbGVhcigpO1xuICAgIHRoaXMuX2Nzcy5jbGVhcigpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMiBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IENvbG9yQ29udHJhc3RDYWNoZSB9IGZyb20gJ2Jyb3dzZXIvQ29sb3JDb250cmFzdENhY2hlJztcbmltcG9ydCB7IElUaGVtZVNlcnZpY2UgfSBmcm9tICdicm93c2VyL3NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IElDb2xvckNvbnRyYXN0Q2FjaGUsIElDb2xvclNldCwgUmVhZG9ubHlDb2xvclNldCB9IGZyb20gJ2Jyb3dzZXIvVHlwZXMnO1xuaW1wb3J0IHsgY2hhbm5lbHMsIGNvbG9yLCBjc3MsIE5VTExfQ09MT1IgfSBmcm9tICdjb21tb24vQ29sb3InO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnY29tbW9uL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBEaXNwb3NhYmxlIH0gZnJvbSAnY29tbW9uL0xpZmVjeWNsZSc7XG5pbXBvcnQgeyBJT3B0aW9uc1NlcnZpY2UsIElUaGVtZSB9IGZyb20gJ2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBBbGxDb2xvckluZGV4LCBJQ29sb3IsIFNwZWNpYWxDb2xvckluZGV4IH0gZnJvbSAnY29tbW9uL1R5cGVzJztcblxuaW50ZXJmYWNlIElSZXN0b3JlQ29sb3JTZXQge1xuICBmb3JlZ3JvdW5kOiBJQ29sb3I7XG4gIGJhY2tncm91bmQ6IElDb2xvcjtcbiAgY3Vyc29yOiBJQ29sb3I7XG4gIGFuc2k6IElDb2xvcltdO1xufVxuXG5cbmNvbnN0IERFRkFVTFRfRk9SRUdST1VORCA9IGNzcy50b0NvbG9yKCcjZmZmZmZmJyk7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkQgPSBjc3MudG9Db2xvcignIzAwMDAwMCcpO1xuY29uc3QgREVGQVVMVF9DVVJTT1IgPSBjc3MudG9Db2xvcignI2ZmZmZmZicpO1xuY29uc3QgREVGQVVMVF9DVVJTT1JfQUNDRU5UID0gY3NzLnRvQ29sb3IoJyMwMDAwMDAnKTtcbmNvbnN0IERFRkFVTFRfU0VMRUNUSU9OID0ge1xuICBjc3M6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICByZ2JhOiAweEZGRkZGRjREXG59O1xuXG4vLyBBbiBJSUZFIHRvIGdlbmVyYXRlIERFRkFVTFRfQU5TSV9DT0xPUlMuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTlNJX0NPTE9SUyA9IE9iamVjdC5mcmVlemUoKCgpID0+IHtcbiAgY29uc3QgY29sb3JzID0gW1xuICAgIC8vIGRhcms6XG4gICAgY3NzLnRvQ29sb3IoJyMyZTM0MzYnKSxcbiAgICBjc3MudG9Db2xvcignI2NjMDAwMCcpLFxuICAgIGNzcy50b0NvbG9yKCcjNGU5YTA2JyksXG4gICAgY3NzLnRvQ29sb3IoJyNjNGEwMDAnKSxcbiAgICBjc3MudG9Db2xvcignIzM0NjVhNCcpLFxuICAgIGNzcy50b0NvbG9yKCcjNzU1MDdiJyksXG4gICAgY3NzLnRvQ29sb3IoJyMwNjk4OWEnKSxcbiAgICBjc3MudG9Db2xvcignI2QzZDdjZicpLFxuICAgIC8vIGJyaWdodDpcbiAgICBjc3MudG9Db2xvcignIzU1NTc1MycpLFxuICAgIGNzcy50b0NvbG9yKCcjZWYyOTI5JyksXG4gICAgY3NzLnRvQ29sb3IoJyM4YWUyMzQnKSxcbiAgICBjc3MudG9Db2xvcignI2ZjZTk0ZicpLFxuICAgIGNzcy50b0NvbG9yKCcjNzI5ZmNmJyksXG4gICAgY3NzLnRvQ29sb3IoJyNhZDdmYTgnKSxcbiAgICBjc3MudG9Db2xvcignIzM0ZTJlMicpLFxuICAgIGNzcy50b0NvbG9yKCcjZWVlZWVjJylcbiAgXTtcblxuICAvLyBGaWxsIGluIHRoZSByZW1haW5pbmcgMjQwIEFOU0kgY29sb3JzLlxuICAvLyBHZW5lcmF0ZSBjb2xvcnMgKDE2LTIzMSlcbiAgY29uc3QgdiA9IFsweDAwLCAweDVmLCAweDg3LCAweGFmLCAweGQ3LCAweGZmXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTY7IGkrKykge1xuICAgIGNvbnN0IHIgPSB2WyhpIC8gMzYpICUgNiB8IDBdO1xuICAgIGNvbnN0IGcgPSB2WyhpIC8gNikgJSA2IHwgMF07XG4gICAgY29uc3QgYiA9IHZbaSAlIDZdO1xuICAgIGNvbG9ycy5wdXNoKHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MociwgZywgYiksXG4gICAgICByZ2JhOiBjaGFubmVscy50b1JnYmEociwgZywgYilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGdyZXlzICgyMzItMjU1KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBjb25zdCBjID0gOCArIGkgKiAxMDtcbiAgICBjb2xvcnMucHVzaCh7XG4gICAgICBjc3M6IGNoYW5uZWxzLnRvQ3NzKGMsIGMsIGMpLFxuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKGMsIGMsIGMpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufSkoKSk7XG5cbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2UgZXh0ZW5kcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSVRoZW1lU2VydmljZSB7XG4gIHB1YmxpYyBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9jb2xvcnM6IElDb2xvclNldDtcbiAgcHJpdmF0ZSBfY29udHJhc3RDYWNoZTogSUNvbG9yQ29udHJhc3RDYWNoZSA9IG5ldyBDb2xvckNvbnRyYXN0Q2FjaGUoKTtcbiAgcHJpdmF0ZSBfaGFsZkNvbnRyYXN0Q2FjaGU6IElDb2xvckNvbnRyYXN0Q2FjaGUgPSBuZXcgQ29sb3JDb250cmFzdENhY2hlKCk7XG4gIHByaXZhdGUgX3Jlc3RvcmVDb2xvcnMhOiBJUmVzdG9yZUNvbG9yU2V0O1xuXG4gIHB1YmxpYyBnZXQgY29sb3JzKCk6IFJlYWRvbmx5Q29sb3JTZXQgeyByZXR1cm4gdGhpcy5fY29sb3JzOyB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25DaGFuZ2VDb2xvcnMgPSB0aGlzLnJlZ2lzdGVyKG5ldyBFdmVudEVtaXR0ZXI8UmVhZG9ubHlDb2xvclNldD4oKSk7XG4gIHB1YmxpYyByZWFkb25seSBvbkNoYW5nZUNvbG9ycyA9IHRoaXMuX29uQ2hhbmdlQ29sb3JzLmV2ZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJT3B0aW9uc1NlcnZpY2UgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uc1NlcnZpY2U6IElPcHRpb25zU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fY29sb3JzID0ge1xuICAgICAgZm9yZWdyb3VuZDogREVGQVVMVF9GT1JFR1JPVU5ELFxuICAgICAgYmFja2dyb3VuZDogREVGQVVMVF9CQUNLR1JPVU5ELFxuICAgICAgY3Vyc29yOiBERUZBVUxUX0NVUlNPUixcbiAgICAgIGN1cnNvckFjY2VudDogREVGQVVMVF9DVVJTT1JfQUNDRU5ULFxuICAgICAgc2VsZWN0aW9uRm9yZWdyb3VuZDogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50OiBERUZBVUxUX1NFTEVDVElPTixcbiAgICAgIHNlbGVjdGlvbkJhY2tncm91bmRPcGFxdWU6IGNvbG9yLmJsZW5kKERFRkFVTFRfQkFDS0dST1VORCwgREVGQVVMVF9TRUxFQ1RJT04pLFxuICAgICAgc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQ6IERFRkFVTFRfU0VMRUNUSU9OLFxuICAgICAgc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kT3BhcXVlOiBjb2xvci5ibGVuZChERUZBVUxUX0JBQ0tHUk9VTkQsIERFRkFVTFRfU0VMRUNUSU9OKSxcbiAgICAgIGFuc2k6IERFRkFVTFRfQU5TSV9DT0xPUlMuc2xpY2UoKSxcbiAgICAgIGNvbnRyYXN0Q2FjaGU6IHRoaXMuX2NvbnRyYXN0Q2FjaGUsXG4gICAgICBoYWxmQ29udHJhc3RDYWNoZTogdGhpcy5faGFsZkNvbnRyYXN0Q2FjaGVcbiAgICB9O1xuICAgIHRoaXMuX3VwZGF0ZVJlc3RvcmVDb2xvcnMoKTtcbiAgICB0aGlzLl9zZXRUaGVtZSh0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnRoZW1lKTtcblxuICAgIHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZSgnbWluaW11bUNvbnRyYXN0UmF0aW8nLCAoKSA9PiB0aGlzLl9jb250cmFzdENhY2hlLmNsZWFyKCkpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9uU3BlY2lmaWNPcHRpb25DaGFuZ2UoJ3RoZW1lJywgKCkgPT4gdGhpcy5fc2V0VGhlbWUodGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy50aGVtZSkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZXJtaW5hbCdzIHRoZW1lLlxuICAgKiBAcGFyYW0gdGhlbWUgVGhlICB0aGVtZSB0byB1c2UuIElmIGEgcGFydGlhbCB0aGVtZSBpcyBwcm92aWRlZCB0aGVuIGRlZmF1bHRcbiAgICogY29sb3JzIHdpbGwgYmUgdXNlZCB3aGVyZSBjb2xvcnMgYXJlIG5vdCBkZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0VGhlbWUodGhlbWU6IElUaGVtZSA9IHt9KTogdm9pZCB7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5fY29sb3JzO1xuICAgIGNvbG9ycy5mb3JlZ3JvdW5kID0gcGFyc2VDb2xvcih0aGVtZS5mb3JlZ3JvdW5kLCBERUZBVUxUX0ZPUkVHUk9VTkQpO1xuICAgIGNvbG9ycy5iYWNrZ3JvdW5kID0gcGFyc2VDb2xvcih0aGVtZS5iYWNrZ3JvdW5kLCBERUZBVUxUX0JBQ0tHUk9VTkQpO1xuICAgIGNvbG9ycy5jdXJzb3IgPSBwYXJzZUNvbG9yKHRoZW1lLmN1cnNvciwgREVGQVVMVF9DVVJTT1IpO1xuICAgIGNvbG9ycy5jdXJzb3JBY2NlbnQgPSBwYXJzZUNvbG9yKHRoZW1lLmN1cnNvckFjY2VudCwgREVGQVVMVF9DVVJTT1JfQUNDRU5UKTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50ID0gcGFyc2VDb2xvcih0aGVtZS5zZWxlY3Rpb25CYWNrZ3JvdW5kLCBERUZBVUxUX1NFTEVDVElPTik7XG4gICAgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRPcGFxdWUgPSBjb2xvci5ibGVuZChjb2xvcnMuYmFja2dyb3VuZCwgY29sb3JzLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCk7XG4gICAgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50ID0gcGFyc2VDb2xvcih0aGVtZS5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmQsIGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQpO1xuICAgIGNvbG9ycy5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRPcGFxdWUgPSBjb2xvci5ibGVuZChjb2xvcnMuYmFja2dyb3VuZCwgY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50KTtcbiAgICBjb2xvcnMuc2VsZWN0aW9uRm9yZWdyb3VuZCA9IHRoZW1lLnNlbGVjdGlvbkZvcmVncm91bmQgPyBwYXJzZUNvbG9yKHRoZW1lLnNlbGVjdGlvbkZvcmVncm91bmQsIE5VTExfQ09MT1IpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xvcnMuc2VsZWN0aW9uRm9yZWdyb3VuZCA9PT0gTlVMTF9DT0xPUikge1xuICAgICAgY29sb3JzLnNlbGVjdGlvbkZvcmVncm91bmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgc2VsZWN0aW9uIGNvbG9yIGlzIG9wYXF1ZSwgYmxlbmQgaXQgd2l0aCBiYWNrZ3JvdW5kIHdpdGggMC4zIG9wYWNpdHlcbiAgICAgKiBJc3N1ZSAjMjczN1xuICAgICAqL1xuICAgIGlmIChjb2xvci5pc09wYXF1ZShjb2xvcnMuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50KSkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IDAuMztcbiAgICAgIGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQgPSBjb2xvci5vcGFjaXR5KGNvbG9ycy5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQsIG9wYWNpdHkpO1xuICAgIH1cbiAgICBpZiAoY29sb3IuaXNPcGFxdWUoY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50KSkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IDAuMztcbiAgICAgIGNvbG9ycy5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRUcmFuc3BhcmVudCA9IGNvbG9yLm9wYWNpdHkoY29sb3JzLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50LCBvcGFjaXR5KTtcbiAgICB9XG4gICAgY29sb3JzLmFuc2kgPSBERUZBVUxUX0FOU0lfQ09MT1JTLnNsaWNlKCk7XG4gICAgY29sb3JzLmFuc2lbMF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJsYWNrLCBERUZBVUxUX0FOU0lfQ09MT1JTWzBdKTtcbiAgICBjb2xvcnMuYW5zaVsxXSA9IHBhcnNlQ29sb3IodGhlbWUucmVkLCBERUZBVUxUX0FOU0lfQ09MT1JTWzFdKTtcbiAgICBjb2xvcnMuYW5zaVsyXSA9IHBhcnNlQ29sb3IodGhlbWUuZ3JlZW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbMl0pO1xuICAgIGNvbG9ycy5hbnNpWzNdID0gcGFyc2VDb2xvcih0aGVtZS55ZWxsb3csIERFRkFVTFRfQU5TSV9DT0xPUlNbM10pO1xuICAgIGNvbG9ycy5hbnNpWzRdID0gcGFyc2VDb2xvcih0aGVtZS5ibHVlLCBERUZBVUxUX0FOU0lfQ09MT1JTWzRdKTtcbiAgICBjb2xvcnMuYW5zaVs1XSA9IHBhcnNlQ29sb3IodGhlbWUubWFnZW50YSwgREVGQVVMVF9BTlNJX0NPTE9SU1s1XSk7XG4gICAgY29sb3JzLmFuc2lbNl0gPSBwYXJzZUNvbG9yKHRoZW1lLmN5YW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbNl0pO1xuICAgIGNvbG9ycy5hbnNpWzddID0gcGFyc2VDb2xvcih0aGVtZS53aGl0ZSwgREVGQVVMVF9BTlNJX0NPTE9SU1s3XSk7XG4gICAgY29sb3JzLmFuc2lbOF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEJsYWNrLCBERUZBVUxUX0FOU0lfQ09MT1JTWzhdKTtcbiAgICBjb2xvcnMuYW5zaVs5XSA9IHBhcnNlQ29sb3IodGhlbWUuYnJpZ2h0UmVkLCBERUZBVUxUX0FOU0lfQ09MT1JTWzldKTtcbiAgICBjb2xvcnMuYW5zaVsxMF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEdyZWVuLCBERUZBVUxUX0FOU0lfQ09MT1JTWzEwXSk7XG4gICAgY29sb3JzLmFuc2lbMTFdID0gcGFyc2VDb2xvcih0aGVtZS5icmlnaHRZZWxsb3csIERFRkFVTFRfQU5TSV9DT0xPUlNbMTFdKTtcbiAgICBjb2xvcnMuYW5zaVsxMl0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEJsdWUsIERFRkFVTFRfQU5TSV9DT0xPUlNbMTJdKTtcbiAgICBjb2xvcnMuYW5zaVsxM10gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodE1hZ2VudGEsIERFRkFVTFRfQU5TSV9DT0xPUlNbMTNdKTtcbiAgICBjb2xvcnMuYW5zaVsxNF0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodEN5YW4sIERFRkFVTFRfQU5TSV9DT0xPUlNbMTRdKTtcbiAgICBjb2xvcnMuYW5zaVsxNV0gPSBwYXJzZUNvbG9yKHRoZW1lLmJyaWdodFdoaXRlLCBERUZBVUxUX0FOU0lfQ09MT1JTWzE1XSk7XG4gICAgaWYgKHRoZW1lLmV4dGVuZGVkQW5zaSkge1xuICAgICAgY29uc3QgY29sb3JDb3VudCA9IE1hdGgubWluKGNvbG9ycy5hbnNpLmxlbmd0aCAtIDE2LCB0aGVtZS5leHRlbmRlZEFuc2kubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbG9ycy5hbnNpW2kgKyAxNl0gPSBwYXJzZUNvbG9yKHRoZW1lLmV4dGVuZGVkQW5zaVtpXSwgREVGQVVMVF9BTlNJX0NPTE9SU1tpICsgMTZdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2xlYXIgb3VyIHRoZSBjYWNoZVxuICAgIHRoaXMuX2NvbnRyYXN0Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLl9oYWxmQ29udHJhc3RDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuX3VwZGF0ZVJlc3RvcmVDb2xvcnMoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNvbG9ycy5maXJlKHRoaXMuY29sb3JzKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN0b3JlQ29sb3Ioc2xvdD86IEFsbENvbG9ySW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXN0b3JlQ29sb3Ioc2xvdCk7XG4gICAgdGhpcy5fb25DaGFuZ2VDb2xvcnMuZmlyZSh0aGlzLmNvbG9ycyk7XG4gIH1cblxuICBwcml2YXRlIF9yZXN0b3JlQ29sb3Ioc2xvdDogQWxsQ29sb3JJbmRleCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIC8vIHVuc2V0IHNsb3QgcmVzdG9yZXMgYWxsIGFuc2kgY29sb3JzXG4gICAgaWYgKHNsb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2kubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fY29sb3JzLmFuc2lbaV0gPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2lbaV07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAoc2xvdCkge1xuICAgICAgY2FzZSBTcGVjaWFsQ29sb3JJbmRleC5GT1JFR1JPVU5EOlxuICAgICAgICB0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZCA9IHRoaXMuX3Jlc3RvcmVDb2xvcnMuZm9yZWdyb3VuZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNwZWNpYWxDb2xvckluZGV4LkJBQ0tHUk9VTkQ6XG4gICAgICAgIHRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kID0gdGhpcy5fcmVzdG9yZUNvbG9ycy5iYWNrZ3JvdW5kO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3BlY2lhbENvbG9ySW5kZXguQ1VSU09SOlxuICAgICAgICB0aGlzLl9jb2xvcnMuY3Vyc29yID0gdGhpcy5fcmVzdG9yZUNvbG9ycy5jdXJzb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5fY29sb3JzLmFuc2lbc2xvdF0gPSB0aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2lbc2xvdF07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vZGlmeUNvbG9ycyhjYWxsYmFjazogKGNvbG9yczogSUNvbG9yU2V0KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY2FsbGJhY2sodGhpcy5fY29sb3JzKTtcbiAgICAvLyBBc3N1bWUgdGhlIGNoYW5nZSBoYXBwZW5lZFxuICAgIHRoaXMuX29uQ2hhbmdlQ29sb3JzLmZpcmUodGhpcy5jb2xvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUmVzdG9yZUNvbG9ycygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXN0b3JlQ29sb3JzID0ge1xuICAgICAgZm9yZWdyb3VuZDogdGhpcy5fY29sb3JzLmZvcmVncm91bmQsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLl9jb2xvcnMuYmFja2dyb3VuZCxcbiAgICAgIGN1cnNvcjogdGhpcy5fY29sb3JzLmN1cnNvcixcbiAgICAgIGFuc2k6IHRoaXMuX2NvbG9ycy5hbnNpLnNsaWNlKClcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29sb3IoXG4gIGNzc1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBmYWxsYmFjazogSUNvbG9yXG4pOiBJQ29sb3Ige1xuICBpZiAoY3NzU3RyaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNzcy50b0NvbG9yKGNzc1N0cmluZyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBuby1vcFxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsbGJhY2s7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IElDb2xvciwgSUNvbG9yUkdCIH0gZnJvbSAnY29tbW9uL1R5cGVzJztcblxubGV0ICRyID0gMDtcbmxldCAkZyA9IDA7XG5sZXQgJGIgPSAwO1xubGV0ICRhID0gMDtcblxuZXhwb3J0IGNvbnN0IE5VTExfQ09MT1I6IElDb2xvciA9IHtcbiAgY3NzOiAnIzAwMDAwMDAwJyxcbiAgcmdiYTogMFxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBcImNoYW5uZWxzXCIgKGluZGl2aWR1YWwgY29sb3IgY2hhbm5lbHMgYXMgbnVtYmVycykuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgY2hhbm5lbHMge1xuICBleHBvcnQgZnVuY3Rpb24gdG9Dc3MocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYT86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGAjJHt0b1BhZGRlZEhleChyKX0ke3RvUGFkZGVkSGV4KGcpfSR7dG9QYWRkZWRIZXgoYil9JHt0b1BhZGRlZEhleChhKX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCMke3RvUGFkZGVkSGV4KHIpfSR7dG9QYWRkZWRIZXgoZyl9JHt0b1BhZGRlZEhleChiKX1gO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmdiYShyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIgPSAweEZGKTogbnVtYmVyIHtcbiAgICAvLyBOb3RlOiBUaGUgYWdncmVnYXRlZCBudW1iZXIgaXMgUkdCQTMyIChCRSksIHRodXMgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIEFCR1IzMlxuICAgIC8vIG9uIExFIHN5c3RlbXMsIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBmb3IgZGlyZWN0IDMyLWJpdCBidWZmZXIgd3JpdGVzLlxuICAgIC8vID4+PiAwIGZvcmNlcyBhbiB1bnNpZ25lZCBpbnRcbiAgICByZXR1cm4gKHIgPDwgMjQgfCBnIDw8IDE2IHwgYiA8PCA4IHwgYSkgPj4+IDA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9Db2xvcihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhPzogbnVtYmVyKTogSUNvbG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3NzOiBjaGFubmVscy50b0NzcyhyLCBnLCBiLCBhKSxcbiAgICAgIHJnYmE6IGNoYW5uZWxzLnRvUmdiYShyLCBnLCBiLCBhKVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBgSUNvbG9yYC5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBjb2xvciB7XG4gIGV4cG9ydCBmdW5jdGlvbiBibGVuZChiZzogSUNvbG9yLCBmZzogSUNvbG9yKTogSUNvbG9yIHtcbiAgICAkYSA9IChmZy5yZ2JhICYgMHhGRikgLyAyNTU7XG4gICAgaWYgKCRhID09PSAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjc3M6IGZnLmNzcyxcbiAgICAgICAgcmdiYTogZmcucmdiYVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmdSID0gKGZnLnJnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBmZ0cgPSAoZmcucmdiYSA+PiAxNikgJiAweEZGO1xuICAgIGNvbnN0IGZnQiA9IChmZy5yZ2JhID4+IDgpICYgMHhGRjtcbiAgICBjb25zdCBiZ1IgPSAoYmcucmdiYSA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGJnRyA9IChiZy5yZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnLnJnYmEgPj4gOCkgJiAweEZGO1xuICAgICRyID0gYmdSICsgTWF0aC5yb3VuZCgoZmdSIC0gYmdSKSAqICRhKTtcbiAgICAkZyA9IGJnRyArIE1hdGgucm91bmQoKGZnRyAtIGJnRykgKiAkYSk7XG4gICAgJGIgPSBiZ0IgKyBNYXRoLnJvdW5kKChmZ0IgLSBiZ0IpICogJGEpO1xuICAgIGNvbnN0IGNzcyA9IGNoYW5uZWxzLnRvQ3NzKCRyLCAkZywgJGIpO1xuICAgIGNvbnN0IHJnYmEgPSBjaGFubmVscy50b1JnYmEoJHIsICRnLCAkYik7XG4gICAgcmV0dXJuIHsgY3NzLCByZ2JhIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNPcGFxdWUoY29sb3I6IElDb2xvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoY29sb3IucmdiYSAmIDB4RkYpID09PSAweEZGO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnRyYXN0UmF0aW8oYmc6IElDb2xvciwgZmc6IElDb2xvciwgcmF0aW86IG51bWJlcik6IElDb2xvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmdiYS5lbnN1cmVDb250cmFzdFJhdGlvKGJnLnJnYmEsIGZnLnJnYmEsIHJhdGlvKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoXG4gICAgICAocmVzdWx0ID4+IDI0ICYgMHhGRiksXG4gICAgICAocmVzdWx0ID4+IDE2ICYgMHhGRiksXG4gICAgICAocmVzdWx0ID4+IDggICYgMHhGRilcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9wYXF1ZShjb2xvcjogSUNvbG9yKTogSUNvbG9yIHtcbiAgICBjb25zdCByZ2JhQ29sb3IgPSAoY29sb3IucmdiYSB8IDB4RkYpID4+PiAwO1xuICAgIFskciwgJGcsICRiXSA9IHJnYmEudG9DaGFubmVscyhyZ2JhQ29sb3IpO1xuICAgIHJldHVybiB7XG4gICAgICBjc3M6IGNoYW5uZWxzLnRvQ3NzKCRyLCAkZywgJGIpLFxuICAgICAgcmdiYTogcmdiYUNvbG9yXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGFjaXR5KGNvbG9yOiBJQ29sb3IsIG9wYWNpdHk6IG51bWJlcik6IElDb2xvciB7XG4gICAgJGEgPSBNYXRoLnJvdW5kKG9wYWNpdHkgKiAweEZGKTtcbiAgICBbJHIsICRnLCAkYl0gPSByZ2JhLnRvQ2hhbm5lbHMoY29sb3IucmdiYSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNzczogY2hhbm5lbHMudG9Dc3MoJHIsICRnLCAkYiwgJGEpLFxuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKCRyLCAkZywgJGIsICRhKVxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlPcGFjaXR5KGNvbG9yOiBJQ29sb3IsIGZhY3RvcjogbnVtYmVyKTogSUNvbG9yIHtcbiAgICAkYSA9IGNvbG9yLnJnYmEgJiAweEZGO1xuICAgIHJldHVybiBvcGFjaXR5KGNvbG9yLCAoJGEgKiBmYWN0b3IpIC8gMHhGRik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9Db2xvclJHQihjb2xvcjogSUNvbG9yKTogSUNvbG9yUkdCIHtcbiAgICByZXR1cm4gWyhjb2xvci5yZ2JhID4+IDI0KSAmIDB4RkYsIChjb2xvci5yZ2JhID4+IDE2KSAmIDB4RkYsIChjb2xvci5yZ2JhID4+IDgpICYgMHhGRl07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBcImNzc1wiIChzdHJpbmc6ICcjcmdiJywgJyNyZ2JhJywgJyNycmdnYmInLFxuICogJyNycmdnYmJhYScpLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIGNzcyB7XG4gIC8vIEF0dGVtcHQgdG8gc2V0IGdldCB0aGUgc2hhcmVkIGNhbnZhcyBjb250ZXh0XG4gIGxldCAkY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQ7XG4gIGxldCAkbGl0bXVzQ29sb3I6IENhbnZhc0dyYWRpZW50IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBydW4gaW4gdGhlIGZpcnN0IHdpbmRvdywgc28gZG9jdW1lbnQgc2hvdWxkIGJlIGNvcnJlY3RcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSAxO1xuICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChjdHgpIHtcbiAgICAgICRjdHggPSBjdHg7XG4gICAgICAkY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICAgICRsaXRtdXNDb2xvciA9ICRjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMSwgMSk7XG4gICAgfVxuICB9XG4gIGNhdGNoIHtcbiAgICAvLyBub29wXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBjc3Mgc3RyaW5nIHRvIGFuIElDb2xvciwgdGhpcyBzaG91bGQgaGFuZGxlIGFsbCB2YWxpZCBDU1MgY29sb3Igc3RyaW5ncyBhbmQgd2lsbFxuICAgKiB0aHJvdyBpZiBpdCdzIGludmFsaWQuIFRoZSBpZGVhbCBmb3JtYXQgdG8gdXNlIGlzIGAjcnJnZ2JiW2FhXWAgYXMgaXQncyB0aGUgZmFzdGVzdCB0byBwYXJzZS5cbiAgICpcbiAgICogT25seSBgI3JnYlthXWAsIGAjcnJnZ2JiW2FhXWAsIGByZ2IoKWAgYW5kIGByZ2JhKClgIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCB3aGVuIHJ1biBpbiBhIE5vZGVcbiAgICogZW52aXJvbm1lbnQuXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gdG9Db2xvcihjc3M6IHN0cmluZyk6IElDb2xvciB7XG4gICAgLy8gRm9ybWF0czogI3JnYlthXSBhbmQgI3JyZ2diYlthYV1cbiAgICBpZiAoY3NzLm1hdGNoKC8jW1xcZGEtZl17Myw4fS9pKSkge1xuICAgICAgc3dpdGNoIChjc3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgNDogeyAvLyAjcmdiXG4gICAgICAgICAgJHIgPSBwYXJzZUludChjc3Muc2xpY2UoMSwgMikucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGcgPSBwYXJzZUludChjc3Muc2xpY2UoMiwgMykucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGIgPSBwYXJzZUludChjc3Muc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoJHIsICRnLCAkYik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA1OiB7IC8vICNyZ2JhXG4gICAgICAgICAgJHIgPSBwYXJzZUludChjc3Muc2xpY2UoMSwgMikucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGcgPSBwYXJzZUludChjc3Muc2xpY2UoMiwgMykucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGIgPSBwYXJzZUludChjc3Muc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgJGEgPSBwYXJzZUludChjc3Muc2xpY2UoNCwgNSkucmVwZWF0KDIpLCAxNik7XG4gICAgICAgICAgcmV0dXJuIGNoYW5uZWxzLnRvQ29sb3IoJHIsICRnLCAkYiwgJGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgNzogLy8gI3JyZ2diYlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjc3MsXG4gICAgICAgICAgICByZ2JhOiAocGFyc2VJbnQoY3NzLnNsaWNlKDEpLCAxNikgPDwgOCB8IDB4RkYpID4+PiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSA5OiAvLyAjcnJnZ2JiYWFcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3NzLFxuICAgICAgICAgICAgcmdiYTogcGFyc2VJbnQoY3NzLnNsaWNlKDEpLCAxNikgPj4+IDBcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcm1hdHM6IHJnYigpIG9yIHJnYmEoKVxuICAgIGNvbnN0IHJnYmFNYXRjaCA9IGNzcy5tYXRjaCgvcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKigsXFxzKigwfDF8XFxkP1xcLihcXGQrKSlcXHMqKT9cXCkvKTtcbiAgICBpZiAocmdiYU1hdGNoKSB7XG4gICAgICAkciA9IHBhcnNlSW50KHJnYmFNYXRjaFsxXSk7XG4gICAgICAkZyA9IHBhcnNlSW50KHJnYmFNYXRjaFsyXSk7XG4gICAgICAkYiA9IHBhcnNlSW50KHJnYmFNYXRjaFszXSk7XG4gICAgICAkYSA9IE1hdGgucm91bmQoKHJnYmFNYXRjaFs1XSA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnNlRmxvYXQocmdiYU1hdGNoWzVdKSkgKiAweEZGKTtcbiAgICAgIHJldHVybiBjaGFubmVscy50b0NvbG9yKCRyLCAkZywgJGIsICRhKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29udGV4dCBpcyBhdmFpbGFibGUgZm9yIGNhbnZhcy1iYXNlZCBjb2xvciBwYXJzaW5nXG4gICAgaWYgKCEkY3R4IHx8ICEkbGl0bXVzQ29sb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzLnRvQ29sb3I6IFVuc3VwcG9ydGVkIGNzcyBmb3JtYXQnKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgY29sb3IgdXNpbmcgY2FudmFzIGZpbGxTdHlsZVxuICAgIC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jYW52YXMuaHRtbCNmaWxsLWFuZC1zdHJva2Utc3R5bGVzXG4gICAgJGN0eC5maWxsU3R5bGUgPSAkbGl0bXVzQ29sb3I7XG4gICAgJGN0eC5maWxsU3R5bGUgPSBjc3M7XG4gICAgaWYgKHR5cGVvZiAkY3R4LmZpbGxTdHlsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzLnRvQ29sb3I6IFVuc3VwcG9ydGVkIGNzcyBmb3JtYXQnKTtcbiAgICB9XG5cbiAgICAkY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgIFskciwgJGcsICRiLCAkYV0gPSAkY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGNvbG9yIGlzIG5vbi10cmFuc3BhcmVudCBhcyBjb2xvciBodWUgZ2V0cyBsb3N0IHdoZW4gZHJhd24gdG8gdGhlIGNhbnZhc1xuICAgIGlmICgkYSAhPT0gMHhGRikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MudG9Db2xvcjogVW5zdXBwb3J0ZWQgY3NzIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgdGhlIGNvbG9yIGZyb20gdGhlIGNhbnZhcycgZmlsbFN0eWxlIHByb3BlcnR5IHdoaWNoIGV4cG9zZXMgdGhlIGNvbG9yIHZhbHVlIGluIHJnYmEoKVxuICAgIC8vIGZvcm1hdFxuICAgIC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jYW52YXMuaHRtbCNzZXJpYWxpc2F0aW9uLW9mLWEtY29sb3JcbiAgICByZXR1cm4ge1xuICAgICAgcmdiYTogY2hhbm5lbHMudG9SZ2JhKCRyLCAkZywgJGIsICRhKSxcbiAgICAgIGNzc1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgdHlwZSBpcyBcInJnYlwiIChudW1iZXI6IDB4cnJnZ2JiKS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSByZ2Ige1xuICAvKipcbiAgICogR2V0cyB0aGUgcmVsYXRpdmUgbHVtaW5hbmNlIG9mIGFuIFJHQiBjb2xvciwgdGhpcyBpcyB1c2VmdWwgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbnRyYXN0IHJhdGlvXG4gICAqIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAgICogQHBhcmFtIHJnYiBUaGUgY29sb3IgdG8gdXNlLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UocmdiOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWxhdGl2ZUx1bWluYW5jZTIoXG4gICAgICAocmdiID4+IDE2KSAmIDB4RkYsXG4gICAgICAocmdiID4+IDggKSAmIDB4RkYsXG4gICAgICAocmdiICAgICAgKSAmIDB4RkYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlbGF0aXZlIGx1bWluYW5jZSBvZiBhbiBSR0IgY29sb3IsIHRoaXMgaXMgdXNlZnVsIGluIGRldGVybWluaW5nIHRoZSBjb250cmFzdCByYXRpb1xuICAgKiBiZXR3ZWVuIHR3byBjb2xvcnMuXG4gICAqIEBwYXJhbSByIFRoZSByZWQgY2hhbm5lbCAoMHgwMCB0byAweEZGKS5cbiAgICogQHBhcmFtIGcgVGhlIGdyZWVuIGNoYW5uZWwgKDB4MDAgdG8gMHhGRikuXG4gICAqIEBwYXJhbSBiIFRoZSBibHVlIGNoYW5uZWwgKDB4MDAgdG8gMHhGRikuXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZTIocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcnMgPSByIC8gMjU1O1xuICAgIGNvbnN0IGdzID0gZyAvIDI1NTtcbiAgICBjb25zdCBicyA9IGIgLyAyNTU7XG4gICAgY29uc3QgcnIgPSBycyA8PSAwLjAzOTI4ID8gcnMgLyAxMi45MiA6IE1hdGgucG93KChycyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGNvbnN0IHJnID0gZ3MgPD0gMC4wMzkyOCA/IGdzIC8gMTIuOTIgOiBNYXRoLnBvdygoZ3MgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICBjb25zdCByYiA9IGJzIDw9IDAuMDM5MjggPyBicyAvIDEyLjkyIDogTWF0aC5wb3coKGJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgcmV0dXJuIHJyICogMC4yMTI2ICsgcmcgKiAwLjcxNTIgKyByYiAqIDAuMDcyMjtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgd2hlcmUgdGhlIHNvdXJjZSB0eXBlIGlzIFwicmdiYVwiIChudW1iZXI6IDB4cnJnZ2JiYWEpLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIHJnYmEge1xuICBleHBvcnQgZnVuY3Rpb24gYmxlbmQoYmc6IG51bWJlciwgZmc6IG51bWJlcik6IG51bWJlciB7XG4gICAgJGEgPSAoZmcgJiAweEZGKSAvIDB4RkY7XG4gICAgaWYgKCRhID09PSAxKSB7XG4gICAgICByZXR1cm4gZmc7XG4gICAgfVxuICAgIGNvbnN0IGZnUiA9IChmZyA+PiAyNCkgJiAweEZGO1xuICAgIGNvbnN0IGZnRyA9IChmZyA+PiAxNikgJiAweEZGO1xuICAgIGNvbnN0IGZnQiA9IChmZyA+PiA4KSAmIDB4RkY7XG4gICAgY29uc3QgYmdSID0gKGJnID4+IDI0KSAmIDB4RkY7XG4gICAgY29uc3QgYmdHID0gKGJnID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnID4+IDgpICYgMHhGRjtcbiAgICAkciA9IGJnUiArIE1hdGgucm91bmQoKGZnUiAtIGJnUikgKiAkYSk7XG4gICAgJGcgPSBiZ0cgKyBNYXRoLnJvdW5kKChmZ0cgLSBiZ0cpICogJGEpO1xuICAgICRiID0gYmdCICsgTWF0aC5yb3VuZCgoZmdCIC0gYmdCKSAqICRhKTtcbiAgICByZXR1cm4gY2hhbm5lbHMudG9SZ2JhKCRyLCAkZywgJGIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZm9yZWdyb3VuZCBjb2xvciBhbmQgYSBiYWNrZ3JvdW5kIGNvbG9yLCBlaXRoZXIgaW5jcmVhc2Ugb3IgcmVkdWNlIHRoZSBsdW1pbmFuY2Ugb2YgdGhlXG4gICAqIGZvcmVncm91bmQgY29sb3IgdW50aWwgdGhlIHNwZWNpZmllZCBjb250cmFzdCByYXRpbyBpcyBtZXQuIElmIHB1cmUgd2hpdGUgb3IgYmxhY2sgaXMgaGl0XG4gICAqIHdpdGhvdXQgdGhlIGNvbnRyYXN0IHJhdGlvIGJlaW5nIG1ldCwgZ28gdGhlIG90aGVyIGRpcmVjdGlvbiB1c2luZyB0aGUgYmFja2dyb3VuZCBjb2xvciBhcyB0aGVcbiAgICogZm9yZWdyb3VuZCBjb2xvciBhbmQgdGFrZSBlaXRoZXIgdGhlIGZpcnN0IG9yIHNlY29uZCByZXN1bHQgZGVwZW5kaW5nIG9uIHdoaWNoIGhhcyB0aGUgaGlnaGVyXG4gICAqIGNvbnRyYXN0IHJhdGlvLlxuICAgKlxuICAgKiBgdW5kZWZpbmVkYCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjb250cmFzdCByYXRpbyBpcyBhbHJlYWR5IG1ldC5cbiAgICpcbiAgICogQHBhcmFtIGJnUmdiYSBUaGUgYmFja2dyb3VuZCBjb2xvciBpbiByZ2JhIGZvcm1hdC5cbiAgICogQHBhcmFtIGZnUmdiYSBUaGUgZm9yZWdyb3VuZCBjb2xvciBpbiByZ2JhIGZvcm1hdC5cbiAgICogQHBhcmFtIHJhdGlvIFRoZSBjb250cmFzdCByYXRpbyB0byBhY2hpZXZlLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnRyYXN0UmF0aW8oYmdSZ2JhOiBudW1iZXIsIGZnUmdiYTogbnVtYmVyLCByYXRpbzogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBiZ0wgPSByZ2IucmVsYXRpdmVMdW1pbmFuY2UoYmdSZ2JhID4+IDgpO1xuICAgIGNvbnN0IGZnTCA9IHJnYi5yZWxhdGl2ZUx1bWluYW5jZShmZ1JnYmEgPj4gOCk7XG4gICAgY29uc3QgY3IgPSBjb250cmFzdFJhdGlvKGJnTCwgZmdMKTtcbiAgICBpZiAoY3IgPCByYXRpbykge1xuICAgICAgaWYgKGZnTCA8IGJnTCkge1xuICAgICAgICBjb25zdCByZXN1bHRBID0gcmVkdWNlTHVtaW5hbmNlKGJnUmdiYSwgZmdSZ2JhLCByYXRpbyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdEFSYXRpbyA9IGNvbnRyYXN0UmF0aW8oYmdMLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UocmVzdWx0QSA+PiA4KSk7XG4gICAgICAgIGlmIChyZXN1bHRBUmF0aW8gPCByYXRpbykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdEIgPSBpbmNyZWFzZUx1bWluYW5jZShiZ1JnYmEsIGZnUmdiYSwgcmF0aW8pO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdEJSYXRpbyA9IGNvbnRyYXN0UmF0aW8oYmdMLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UocmVzdWx0QiA+PiA4KSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdEFSYXRpbyA+IHJlc3VsdEJSYXRpbyA/IHJlc3VsdEEgOiByZXN1bHRCO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRBO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0QSA9IGluY3JlYXNlTHVtaW5hbmNlKGJnUmdiYSwgZmdSZ2JhLCByYXRpbyk7XG4gICAgICBjb25zdCByZXN1bHRBUmF0aW8gPSBjb250cmFzdFJhdGlvKGJnTCwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlKHJlc3VsdEEgPj4gOCkpO1xuICAgICAgaWYgKHJlc3VsdEFSYXRpbyA8IHJhdGlvKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdEIgPSByZWR1Y2VMdW1pbmFuY2UoYmdSZ2JhLCBmZ1JnYmEsIHJhdGlvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0QlJhdGlvID0gY29udHJhc3RSYXRpbyhiZ0wsIHJnYi5yZWxhdGl2ZUx1bWluYW5jZShyZXN1bHRCID4+IDgpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdEFSYXRpbyA+IHJlc3VsdEJSYXRpbyA/IHJlc3VsdEEgOiByZXN1bHRCO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdEE7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVkdWNlTHVtaW5hbmNlKGJnUmdiYTogbnVtYmVyLCBmZ1JnYmE6IG51bWJlciwgcmF0aW86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gVGhpcyBpcyBhIG5haXZlIGJ1dCBmYXN0IGFwcHJvYWNoIHRvIHJlZHVjaW5nIGx1bWluYW5jZSBhcyBjb252ZXJ0aW5nIHRvXG4gICAgLy8gSFNMIGFuZCBiYWNrIGlzIGV4cGVuc2l2ZVxuICAgIGNvbnN0IGJnUiA9IChiZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBiZ0cgPSAoYmdSZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBmZ1IgPSAoZmdSZ2JhID4+IDI0KSAmIDB4RkY7XG4gICAgbGV0IGZnRyA9IChmZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBsZXQgZmdCID0gKGZnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBjciA9IGNvbnRyYXN0UmF0aW8ocmdiLnJlbGF0aXZlTHVtaW5hbmNlMihmZ1IsIGZnRywgZmdCKSwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlMihiZ1IsIGJnRywgYmdCKSk7XG4gICAgd2hpbGUgKGNyIDwgcmF0aW8gJiYgKGZnUiA+IDAgfHwgZmdHID4gMCB8fCBmZ0IgPiAwKSkge1xuICAgICAgLy8gUmVkdWNlIGJ5IDEwJSB1bnRpbCB0aGUgcmF0aW8gaXMgaGl0XG4gICAgICBmZ1IgLT0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGZnUiAqIDAuMSkpO1xuICAgICAgZmdHIC09IE1hdGgubWF4KDAsIE1hdGguY2VpbChmZ0cgKiAwLjEpKTtcbiAgICAgIGZnQiAtPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoZmdCICogMC4xKSk7XG4gICAgICBjciA9IGNvbnRyYXN0UmF0aW8ocmdiLnJlbGF0aXZlTHVtaW5hbmNlMihmZ1IsIGZnRywgZmdCKSwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlMihiZ1IsIGJnRywgYmdCKSk7XG4gICAgfVxuICAgIHJldHVybiAoZmdSIDw8IDI0IHwgZmdHIDw8IDE2IHwgZmdCIDw8IDggfCAweEZGKSA+Pj4gMDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmNyZWFzZUx1bWluYW5jZShiZ1JnYmE6IG51bWJlciwgZmdSZ2JhOiBudW1iZXIsIHJhdGlvOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFRoaXMgaXMgYSBuYWl2ZSBidXQgZmFzdCBhcHByb2FjaCB0byBpbmNyZWFzaW5nIGx1bWluYW5jZSBhcyBjb252ZXJ0aW5nIHRvXG4gICAgLy8gSFNMIGFuZCBiYWNrIGlzIGV4cGVuc2l2ZVxuICAgIGNvbnN0IGJnUiA9IChiZ1JnYmEgPj4gMjQpICYgMHhGRjtcbiAgICBjb25zdCBiZ0cgPSAoYmdSZ2JhID4+IDE2KSAmIDB4RkY7XG4gICAgY29uc3QgYmdCID0gKGJnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBmZ1IgPSAoZmdSZ2JhID4+IDI0KSAmIDB4RkY7XG4gICAgbGV0IGZnRyA9IChmZ1JnYmEgPj4gMTYpICYgMHhGRjtcbiAgICBsZXQgZmdCID0gKGZnUmdiYSA+PiAgOCkgJiAweEZGO1xuICAgIGxldCBjciA9IGNvbnRyYXN0UmF0aW8ocmdiLnJlbGF0aXZlTHVtaW5hbmNlMihmZ1IsIGZnRywgZmdCKSwgcmdiLnJlbGF0aXZlTHVtaW5hbmNlMihiZ1IsIGJnRywgYmdCKSk7XG4gICAgd2hpbGUgKGNyIDwgcmF0aW8gJiYgKGZnUiA8IDB4RkYgfHwgZmdHIDwgMHhGRiB8fCBmZ0IgPCAweEZGKSkge1xuICAgICAgLy8gSW5jcmVhc2UgYnkgMTAlIHVudGlsIHRoZSByYXRpbyBpcyBoaXRcbiAgICAgIGZnUiA9IE1hdGgubWluKDB4RkYsIGZnUiArIE1hdGguY2VpbCgoMjU1IC0gZmdSKSAqIDAuMSkpO1xuICAgICAgZmdHID0gTWF0aC5taW4oMHhGRiwgZmdHICsgTWF0aC5jZWlsKCgyNTUgLSBmZ0cpICogMC4xKSk7XG4gICAgICBmZ0IgPSBNYXRoLm1pbigweEZGLCBmZ0IgKyBNYXRoLmNlaWwoKDI1NSAtIGZnQikgKiAwLjEpKTtcbiAgICAgIGNyID0gY29udHJhc3RSYXRpbyhyZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGZnUiwgZmdHLCBmZ0IpLCByZ2IucmVsYXRpdmVMdW1pbmFuY2UyKGJnUiwgYmdHLCBiZ0IpKTtcbiAgICB9XG4gICAgcmV0dXJuIChmZ1IgPDwgMjQgfCBmZ0cgPDwgMTYgfCBmZ0IgPDwgOCB8IDB4RkYpID4+PiAwO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvQ2hhbm5lbHModmFsdWU6IG51bWJlcik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gWyh2YWx1ZSA+PiAyNCkgJiAweEZGLCAodmFsdWUgPj4gMTYpICYgMHhGRiwgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9QYWRkZWRIZXgoYzogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcyA9IGMudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gcy5sZW5ndGggPCAyID8gJzAnICsgcyA6IHM7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gcmVsYXRpdmUgbHVtaW5hbmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBsMSBUaGUgZmlyc3QgcmVsYXRpdmUgbHVtaW5hbmNlLlxuICogQHBhcmFtIGwyIFRoZSBmaXJzdCByZWxhdGl2ZSBsdW1pbmFuY2UuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI2NvbnRyYXN0LXJhdGlvZGVmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFzdFJhdGlvKGwxOiBudW1iZXIsIGwyOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAobDEgPCBsMikge1xuICAgIHJldHVybiAobDIgKyAwLjA1KSAvIChsMSArIDAuMDUpO1xuICB9XG4gIHJldHVybiAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gJ2NvbW1vbi9UeXBlcyc7XG5cbmludGVyZmFjZSBJTGlzdGVuZXI8VCwgVSA9IHZvaWQ+IHtcbiAgKGFyZzE6IFQsIGFyZzI6IFUpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudDxULCBVID0gdm9pZD4ge1xuICAobGlzdGVuZXI6IChhcmcxOiBULCBhcmcyOiBVKSA9PiBhbnkpOiBJRGlzcG9zYWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRFbWl0dGVyPFQsIFUgPSB2b2lkPiB7XG4gIGV2ZW50OiBJRXZlbnQ8VCwgVT47XG4gIGZpcmUoYXJnMTogVCwgYXJnMjogVSk6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50RW1pdHRlcjxULCBVID0gdm9pZD4gaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyPFQsIFU+IHtcbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiBJTGlzdGVuZXI8VCwgVT5bXSA9IFtdO1xuICBwcml2YXRlIF9ldmVudD86IElFdmVudDxULCBVPjtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGV2ZW50KCk6IElFdmVudDxULCBVPiB7XG4gICAgaWYgKCF0aGlzLl9ldmVudCkge1xuICAgICAgdGhpcy5fZXZlbnQgPSAobGlzdGVuZXI6IChhcmcxOiBULCBhcmcyOiBVKSA9PiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICBjb25zdCBkaXNwb3NhYmxlID0ge1xuICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzW2ldID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50O1xuICB9XG5cbiAgcHVibGljIGZpcmUoYXJnMTogVCwgYXJnMjogVSk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlOiBJTGlzdGVuZXI8VCwgVT5bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWV1ZS5wdXNoKHRoaXMuX2xpc3RlbmVyc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXVlW2ldLmNhbGwodW5kZWZpbmVkLCBhcmcxLCBhcmcyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGNsZWFyTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZEV2ZW50PFQ+KGZyb206IElFdmVudDxUPiwgdG86IElFdmVudEVtaXR0ZXI8VD4pOiBJRGlzcG9zYWJsZSB7XG4gIHJldHVybiBmcm9tKGUgPT4gdG8uZmlyZShlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5BbmRTdWJzY3JpYmU8VD4oZXZlbnQ6IElFdmVudDxUPiwgaGFuZGxlcjogKGU6IFQgfCB1bmRlZmluZWQpID0+IGFueSk6IElEaXNwb3NhYmxlIHtcbiAgaGFuZGxlcih1bmRlZmluZWQpO1xuICByZXR1cm4gZXZlbnQoZSA9PiBoYW5kbGVyKGUpKTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZCB0byBwcm92aWRlIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgYW5cbiAqIG9iamVjdCBhbmQgaXRzIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcm90ZWN0ZWQgX2Rpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XG4gIHByb3RlY3RlZCBfaXNEaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LCB0cmlnZ2VyaW5nIHRoZSBgZGlzcG9zZWAgbWV0aG9kIG9uIGFsbCByZWdpc3RlcmVkIElEaXNwb3NhYmxlcy5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgZCBvZiB0aGlzLl9kaXNwb3NhYmxlcykge1xuICAgICAgZC5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgZGlzcG9zYWJsZSBvYmplY3QuXG4gICAqIEBwYXJhbSBkIFRoZSBkaXNwb3NhYmxlIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzcG9zYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcjxUIGV4dGVuZHMgSURpc3Bvc2FibGU+KGQ6IFQpOiBUIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5wdXNoKGQpO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIGEgZGlzcG9zYWJsZSBvYmplY3QgaWYgaXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgaWYgbm90IGRvXG4gICAqIG5vdGhpbmcuXG4gICAqIEBwYXJhbSBkIFRoZSBkaXNwb3NhYmxlIHRvIHVucmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgdW5yZWdpc3RlcjxUIGV4dGVuZHMgSURpc3Bvc2FibGU+KGQ6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2Rpc3Bvc2FibGVzLmluZGV4T2YoZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11dGFibGVEaXNwb3NhYmxlPFQgZXh0ZW5kcyBJRGlzcG9zYWJsZT4gaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3ZhbHVlPzogVDtcbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBpZiBpdCBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkID8gdW5kZWZpbmVkIDogdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUsIGRpc3Bvc2luZyBvZiB0aGUgb2xkIHZhbHVlIGlmIGl0IGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5faXNEaXNwb3NlZCB8fCB2YWx1ZSA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWU/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIHZhbHVlIGFuZCBkaXNwb3NlcyBvZiB0aGUgcHJldmlvdXNseSBzdG9yZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX3ZhbHVlPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwIGEgZnVuY3Rpb24gaW4gYSBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EaXNwb3NhYmxlKGY6ICgpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gIHJldHVybiB7IGRpc3Bvc2U6IGYgfTtcbn1cblxuLyoqXG4gKiBEaXNwb3NlIG9mIGFsbCBkaXNwb3NhYmxlcyBpbiBhbiBhcnJheSBhbmQgc2V0IGl0cyBsZW5ndGggdG8gMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VBcnJheShkaXNwb3NhYmxlczogSURpc3Bvc2FibGVbXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGQgb2YgZGlzcG9zYWJsZXMpIHtcbiAgICBkLmRpc3Bvc2UoKTtcbiAgfVxuICBkaXNwb3NhYmxlcy5sZW5ndGggPSAwO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkaXNwb3NhYmxlIHRoYXQgd2lsbCBkaXNwb3NlIG9mIGFuIGFycmF5IG9mIGRpc3Bvc2FibGVzIHdoZW4gZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwb3NlQXJyYXlEaXNwb3NhYmxlKGFycmF5OiBJRGlzcG9zYWJsZVtdKTogSURpc3Bvc2FibGUge1xuICByZXR1cm4geyBkaXNwb3NlOiAoKSA9PiBkaXNwb3NlQXJyYXkoYXJyYXkpIH07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMiBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmV4cG9ydCBjbGFzcyBUd29LZXlNYXA8VEZpcnN0IGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBUU2Vjb25kIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyLCBUVmFsdWU+IHtcbiAgcHJpdmF0ZSBfZGF0YTogeyBbYmc6IHN0cmluZyB8IG51bWJlcl06IHsgW2ZnOiBzdHJpbmcgfCBudW1iZXJdOiBUVmFsdWUgfCB1bmRlZmluZWQgfSB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgcHVibGljIHNldChmaXJzdDogVEZpcnN0LCBzZWNvbmQ6IFRTZWNvbmQsIHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RhdGFbZmlyc3RdKSB7XG4gICAgICB0aGlzLl9kYXRhW2ZpcnN0XSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLl9kYXRhW2ZpcnN0IGFzIHN0cmluZyB8IG51bWJlcl0hW3NlY29uZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoZmlyc3Q6IFRGaXJzdCwgc2Vjb25kOiBUU2Vjb25kKTogVFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVtmaXJzdCBhcyBzdHJpbmcgfCBudW1iZXJdID8gdGhpcy5fZGF0YVtmaXJzdCBhcyBzdHJpbmcgfCBudW1iZXJdIVtzZWNvbmRdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRm91cktleU1hcDxURmlyc3QgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRTZWNvbmQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIsIFRUaGlyZCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVEZvdXJ0aCBleHRlbmRzIHN0cmluZyB8IG51bWJlciwgVFZhbHVlPiB7XG4gIHByaXZhdGUgX2RhdGE6IFR3b0tleU1hcDxURmlyc3QsIFRTZWNvbmQsIFR3b0tleU1hcDxUVGhpcmQsIFRGb3VydGgsIFRWYWx1ZT4+ID0gbmV3IFR3b0tleU1hcCgpO1xuXG4gIHB1YmxpYyBzZXQoZmlyc3Q6IFRGaXJzdCwgc2Vjb25kOiBUU2Vjb25kLCB0aGlyZDogVFRoaXJkLCBmb3VydGg6IFRGb3VydGgsIHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEuZ2V0KGZpcnN0LCBzZWNvbmQpKSB7XG4gICAgICB0aGlzLl9kYXRhLnNldChmaXJzdCwgc2Vjb25kLCBuZXcgVHdvS2V5TWFwKCkpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhLmdldChmaXJzdCwgc2Vjb25kKSEuc2V0KHRoaXJkLCBmb3VydGgsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoZmlyc3Q6IFRGaXJzdCwgc2Vjb25kOiBUU2Vjb25kLCB0aGlyZDogVFRoaXJkLCBmb3VydGg6IFRGb3VydGgpOiBUVmFsdWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldChmaXJzdCwgc2Vjb25kKT8uZ2V0KHRoaXJkLCBmb3VydGgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIHh0ZXJtLmpzIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAbGljZW5zZSBNSVRcbiAqXG4gKiBUaGlzIHdhcyBoZWF2aWx5IGluc3BpcmVkIGZyb20gbWljcm9zb2Z0L3ZzY29kZSdzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbSAoTUlUKS5cbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmltcG9ydCB7IElTZXJ2aWNlSWRlbnRpZmllciB9IGZyb20gJ2NvbW1vbi9zZXJ2aWNlcy9TZXJ2aWNlcyc7XG5cbmNvbnN0IERJX1RBUkdFVCA9ICdkaSR0YXJnZXQnO1xuY29uc3QgRElfREVQRU5ERU5DSUVTID0gJ2RpJGRlcGVuZGVuY2llcyc7XG5cbmV4cG9ydCBjb25zdCBzZXJ2aWNlUmVnaXN0cnk6IE1hcDxzdHJpbmcsIElTZXJ2aWNlSWRlbnRpZmllcjxhbnk+PiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VEZXBlbmRlbmNpZXMoY3RvcjogYW55KTogeyBpZDogSVNlcnZpY2VJZGVudGlmaWVyPGFueT4sIGluZGV4OiBudW1iZXIsIG9wdGlvbmFsOiBib29sZWFuIH1bXSB7XG4gIHJldHVybiBjdG9yW0RJX0RFUEVOREVOQ0lFU10gfHwgW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWNvcmF0b3I8VD4oaWQ6IHN0cmluZyk6IElTZXJ2aWNlSWRlbnRpZmllcjxUPiB7XG4gIGlmIChzZXJ2aWNlUmVnaXN0cnkuaGFzKGlkKSkge1xuICAgIHJldHVybiBzZXJ2aWNlUmVnaXN0cnkuZ2V0KGlkKSE7XG4gIH1cblxuICBjb25zdCBkZWNvcmF0b3I6IGFueSA9IGZ1bmN0aW9uICh0YXJnZXQ6IEZ1bmN0aW9uLCBrZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQElTZXJ2aWNlTmFtZS1kZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCB0byBkZWNvcmF0ZSBhIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIHN0b3JlU2VydmljZURlcGVuZGVuY3koZGVjb3JhdG9yLCB0YXJnZXQsIGluZGV4KTtcbiAgfTtcblxuICBkZWNvcmF0b3IudG9TdHJpbmcgPSAoKSA9PiBpZDtcblxuICBzZXJ2aWNlUmVnaXN0cnkuc2V0KGlkLCBkZWNvcmF0b3IpO1xuICByZXR1cm4gZGVjb3JhdG9yO1xufVxuXG5mdW5jdGlvbiBzdG9yZVNlcnZpY2VEZXBlbmRlbmN5KGlkOiBGdW5jdGlvbiwgdGFyZ2V0OiBGdW5jdGlvbiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICBpZiAoKHRhcmdldCBhcyBhbnkpW0RJX1RBUkdFVF0gPT09IHRhcmdldCkge1xuICAgICh0YXJnZXQgYXMgYW55KVtESV9ERVBFTkRFTkNJRVNdLnB1c2goeyBpZCwgaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgKHRhcmdldCBhcyBhbnkpW0RJX0RFUEVOREVOQ0lFU10gPSBbeyBpZCwgaW5kZXggfV07XG4gICAgKHRhcmdldCBhcyBhbnkpW0RJX1RBUkdFVF0gPSB0YXJnZXQ7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgSUV2ZW50LCBJRXZlbnRFbWl0dGVyIH0gZnJvbSAnY29tbW9uL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBJQnVmZmVyLCBJQnVmZmVyU2V0IH0gZnJvbSAnY29tbW9uL2J1ZmZlci9UeXBlcyc7XG5pbXBvcnQgeyBJRGVjUHJpdmF0ZU1vZGVzLCBJQ29yZU1vdXNlRXZlbnQsIENvcmVNb3VzZUVuY29kaW5nLCBJQ29yZU1vdXNlUHJvdG9jb2wsIENvcmVNb3VzZUV2ZW50VHlwZSwgSUNoYXJzZXQsIElXaW5kb3dPcHRpb25zLCBJTW9kZXMsIElBdHRyaWJ1dGVEYXRhLCBTY3JvbGxTb3VyY2UsIElEaXNwb3NhYmxlLCBJQ29sb3IsIEN1cnNvclN0eWxlLCBDdXJzb3JJbmFjdGl2ZVN0eWxlLCBJT3NjTGlua0RhdGEgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAnY29tbW9uL3NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBJRGVjb3JhdGlvbk9wdGlvbnMsIElEZWNvcmF0aW9uLCBJTGlua0hhbmRsZXIsIElXaW5kb3dzUHR5LCBJTG9nZ2VyIH0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcblxuZXhwb3J0IGNvbnN0IElCdWZmZXJTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElCdWZmZXJTZXJ2aWNlPignQnVmZmVyU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJQnVmZmVyU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IGNvbHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgcm93czogbnVtYmVyO1xuICByZWFkb25seSBidWZmZXI6IElCdWZmZXI7XG4gIHJlYWRvbmx5IGJ1ZmZlcnM6IElCdWZmZXJTZXQ7XG4gIGlzVXNlclNjcm9sbGluZzogYm9vbGVhbjtcbiAgb25SZXNpemU6IElFdmVudDx7IGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyIH0+O1xuICBvblNjcm9sbDogSUV2ZW50PG51bWJlcj47XG4gIHNjcm9sbChlcmFzZUF0dHI6IElBdHRyaWJ1dGVEYXRhLCBpc1dyYXBwZWQ/OiBib29sZWFuKTogdm9pZDtcbiAgc2Nyb2xsTGluZXMoZGlzcDogbnVtYmVyLCBzdXBwcmVzc1Njcm9sbEV2ZW50PzogYm9vbGVhbiwgc291cmNlPzogU2Nyb2xsU291cmNlKTogdm9pZDtcbiAgcmVzaXplKGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyKTogdm9pZDtcbiAgcmVzZXQoKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IElDb3JlTW91c2VTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElDb3JlTW91c2VTZXJ2aWNlPignQ29yZU1vdXNlU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJQ29yZU1vdXNlU2VydmljZSB7XG4gIGFjdGl2ZVByb3RvY29sOiBzdHJpbmc7XG4gIGFjdGl2ZUVuY29kaW5nOiBzdHJpbmc7XG4gIGFyZU1vdXNlRXZlbnRzQWN0aXZlOiBib29sZWFuO1xuICBhZGRQcm90b2NvbChuYW1lOiBzdHJpbmcsIHByb3RvY29sOiBJQ29yZU1vdXNlUHJvdG9jb2wpOiB2b2lkO1xuICBhZGRFbmNvZGluZyhuYW1lOiBzdHJpbmcsIGVuY29kaW5nOiBDb3JlTW91c2VFbmNvZGluZyk6IHZvaWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbW91c2UgZXZlbnQgdG8gYmUgc2VudC5cbiAgICpcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBwYXNzZWQgYWxsIHByb3RvY29sIHJlc3RyaWN0aW9ucyBhbmQgYSByZXBvcnRcbiAgICogd2FzIHNlbnQsIG90aGVyd2lzZSBmYWxzZS4gVGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgdXNlZCB0byBkZWNpZGUgd2hldGhlclxuICAgKiB0aGUgZGVmYXVsdCBldmVudCBhY3Rpb24gaW4gdGhlIGJvd3NlciBjb21wb25lbnQgc2hvdWxkIGJlIG9taXR0ZWQuXG4gICAqXG4gICAqIE5vdGU6IFRoZSBtZXRob2Qgd2lsbCBjaGFuZ2UgdmFsdWVzIG9mIHRoZSBnaXZlbiBldmVudCBvYmplY3RcbiAgICogdG8gZnVsbGZpbGwgcHJvdG9jb2wgYW5kIGVuY29kaW5nIHJlc3RyaWN0aW9ucy5cbiAgICovXG4gIHRyaWdnZXJNb3VzZUV2ZW50KGV2ZW50OiBJQ29yZU1vdXNlRXZlbnQpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFdmVudCB0byBhbm5vdW5jZSBjaGFuZ2VzIGluIG1vdXNlIHRyYWNraW5nLlxuICAgKi9cbiAgb25Qcm90b2NvbENoYW5nZTogSUV2ZW50PENvcmVNb3VzZUV2ZW50VHlwZT47XG5cbiAgLyoqXG4gICAqIEh1bWFuIHJlYWRhYmxlIHZlcnNpb24gb2YgbW91c2UgZXZlbnRzLlxuICAgKi9cbiAgZXhwbGFpbkV2ZW50cyhldmVudHM6IENvcmVNb3VzZUV2ZW50VHlwZSk6IHsgW2V2ZW50OiBzdHJpbmddOiBib29sZWFuIH07XG59XG5cbmV4cG9ydCBjb25zdCBJQ29yZVNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUNvcmVTZXJ2aWNlPignQ29yZVNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxseSB0aGUgY3Vyc29yIHdpbGwgbm90IGJlIHZpc2libGUgdW50aWwgdGhlIGZpcnN0IHRpbWUgdGhlIHRlcm1pbmFsXG4gICAqIGlzIGZvY3VzZWQuXG4gICAqL1xuICBpc0N1cnNvckluaXRpYWxpemVkOiBib29sZWFuO1xuICBpc0N1cnNvckhpZGRlbjogYm9vbGVhbjtcblxuICByZWFkb25seSBtb2RlczogSU1vZGVzO1xuICByZWFkb25seSBkZWNQcml2YXRlTW9kZXM6IElEZWNQcml2YXRlTW9kZXM7XG5cbiAgcmVhZG9ubHkgb25EYXRhOiBJRXZlbnQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgb25Vc2VySW5wdXQ6IElFdmVudDx2b2lkPjtcbiAgcmVhZG9ubHkgb25CaW5hcnk6IElFdmVudDxzdHJpbmc+O1xuICByZWFkb25seSBvblJlcXVlc3RTY3JvbGxUb0JvdHRvbTogSUV2ZW50PHZvaWQ+O1xuXG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBvbkRhdGEgZXZlbnQgaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgZW1pdHRlZC5cbiAgICogQHBhcmFtIHdhc1VzZXJJbnB1dCBXaGV0aGVyIHRoZSBkYXRhIG9yaWdpbmF0ZWQgZnJvbSB0aGUgdXNlciAoYXMgb3Bwb3NlZCB0b1xuICAgKiByZXN1bHRpbmcgZnJvbSBwYXJzaW5nIGluY29taW5nIGRhdGEpLiBXaGVuIHRydWUgdGhpcyB3aWxsIGFsc286XG4gICAqIC0gU2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGJ1ZmZlciBpZiBvcHRpb24gc2Nyb2xsT25Vc2VySW5wdXQgaXMgdHJ1ZS5cbiAgICogLSBGaXJlIHRoZSBgb25Vc2VySW5wdXRgIGV2ZW50IChzbyBzZWxlY3Rpb24gY2FuIGJlIGNsZWFyZWQpLlxuICAgKi9cbiAgdHJpZ2dlckRhdGFFdmVudChkYXRhOiBzdHJpbmcsIHdhc1VzZXJJbnB1dD86IGJvb2xlYW4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyB0aGUgb25CaW5hcnkgZXZlbnQgaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgZW1pdHRlZC5cbiAgICovXG4gIHRyaWdnZXJCaW5hcnlFdmVudChkYXRhOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgSUNoYXJzZXRTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElDaGFyc2V0U2VydmljZT4oJ0NoYXJzZXRTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElDaGFyc2V0U2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuXG4gIGNoYXJzZXQ6IElDaGFyc2V0IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBnbGV2ZWw6IG51bWJlcjtcblxuICByZXNldCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEcgbGV2ZWwgb2YgdGhlIHRlcm1pbmFsLlxuICAgKiBAcGFyYW0gZ1xuICAgKi9cbiAgc2V0Z0xldmVsKGc6IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2hhcnNldCBmb3IgdGhlIGdpdmVuIEcgbGV2ZWwgb2YgdGhlIHRlcm1pbmFsLlxuICAgKiBAcGFyYW0gZ1xuICAgKiBAcGFyYW0gY2hhcnNldFxuICAgKi9cbiAgc2V0Z0NoYXJzZXQoZzogbnVtYmVyLCBjaGFyc2V0OiBJQ2hhcnNldCB8IHVuZGVmaW5lZCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZpY2VJZGVudGlmaWVyPFQ+IHtcbiAgKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgdHlwZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnJhbmRlZFNlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcbn1cblxudHlwZSBHZXRMZWFkaW5nTm9uU2VydmljZUFyZ3M8VEFyZ3MgZXh0ZW5kcyBhbnlbXT4gPSBUQXJncyBleHRlbmRzIFtdID8gW11cbiAgOiBUQXJncyBleHRlbmRzIFsuLi5pbmZlciBURmlyc3QsIGluZmVyIFRMYXN0XSA/IFRMYXN0IGV4dGVuZHMgSUJyYW5kZWRTZXJ2aWNlID8gR2V0TGVhZGluZ05vblNlcnZpY2VBcmdzPFRGaXJzdD4gOiBUQXJnc1xuICAgIDogbmV2ZXI7XG5cbmV4cG9ydCBjb25zdCBJSW5zdGFudGlhdGlvblNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SUluc3RhbnRpYXRpb25TZXJ2aWNlPignSW5zdGFudGlhdGlvblNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUluc3RhbnRpYXRpb25TZXJ2aWNlIHtcbiAgc2VydmljZUJyYW5kOiB1bmRlZmluZWQ7XG5cbiAgc2V0U2VydmljZTxUPihpZDogSVNlcnZpY2VJZGVudGlmaWVyPFQ+LCBpbnN0YW5jZTogVCk6IHZvaWQ7XG4gIGdldFNlcnZpY2U8VD4oaWQ6IElTZXJ2aWNlSWRlbnRpZmllcjxUPik6IFQgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZUluc3RhbmNlPEN0b3IgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIFIgZXh0ZW5kcyBJbnN0YW5jZVR5cGU8Q3Rvcj4+KHQ6IEN0b3IsIC4uLmFyZ3M6IEdldExlYWRpbmdOb25TZXJ2aWNlQXJnczxDb25zdHJ1Y3RvclBhcmFtZXRlcnM8Q3Rvcj4+KTogUjtcbn1cblxuZXhwb3J0IGVudW0gTG9nTGV2ZWxFbnVtIHtcbiAgVFJBQ0UgPSAwLFxuICBERUJVRyA9IDEsXG4gIElORk8gPSAyLFxuICBXQVJOID0gMyxcbiAgRVJST1IgPSA0LFxuICBPRkYgPSA1XG59XG5cbmV4cG9ydCBjb25zdCBJTG9nU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJTG9nU2VydmljZT4oJ0xvZ1NlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ1NlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICByZWFkb25seSBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtO1xuXG4gIHRyYWNlKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBpbmZvKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IElPcHRpb25zU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJT3B0aW9uc1NlcnZpY2U+KCdPcHRpb25zU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9uc1NlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgcmF3IG9wdGlvbnMgb2JqZWN0LCB0aGlzIGlzIGFuIGludGVybmFsLW9ubHkgZmFzdCBwYXRoIGZvciBhY2Nlc3NpbmdcbiAgICogc2luZ2xlIG9wdGlvbnMgd2l0aG91dCBhbnkgdmFsaWRhdGlvbiBhcyB3ZSB0cnVzdCBUeXBlU2NyaXB0IHRvIGVuZm9yY2UgY29ycmVjdCB1c2FnZVxuICAgKiBpbnRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3T3B0aW9uczogUmVxdWlyZWQ8SVRlcm1pbmFsT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgYXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBwdWJsaWMgQVBJLCB0aGlzIHByb3BlcnR5IHVzZXMgZ2V0dGVycyBhbmQgc2V0dGVycyB3aXRoXG4gICAqIHZhbGlkYXRpb24gd2hpY2ggbWFrZXMgaXQgc2FmZXIgYnV0IHNsb3dlci4ge0BsaW5rIHJhd09wdGlvbnN9IHNob3VsZCBiZSB1c2VkIGZvciBwcmV0dHkgbXVjaFxuICAgKiBhbGwgaW50ZXJuYWwgdXNhZ2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxJVGVybWluYWxPcHRpb25zPjtcblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciBmb3Igd2hlbiBhbnkgb3B0aW9uIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBvbk9wdGlvbkNoYW5nZTogSUV2ZW50PGtleW9mIElUZXJtaW5hbE9wdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB3aGVuIGEgc3BlY2lmaWMgb3B0aW9uIGNoYW5nZXMsIHRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBpc1xuICAgKiBwcmVmZXJyZWQgb3ZlciB7QGxpbmsgb25PcHRpb25DaGFuZ2V9IHdoZW4gb25seSBhIHNpbmdsZSBvcHRpb24gaXMgYmVpbmcgbGlzdGVuZWQgdG8uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIG9uU3BlY2lmaWNPcHRpb25DaGFuZ2U8VCBleHRlbmRzIGtleW9mIElUZXJtaW5hbE9wdGlvbnM+KGtleTogVCwgbGlzdGVuZXI6IChhcmcxOiBSZXF1aXJlZDxJVGVybWluYWxPcHRpb25zPltUXSkgPT4gYW55KTogSURpc3Bvc2FibGU7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIHdoZW4gYSBzZXQgb2Ygc3BlY2lmaWMgb3B0aW9ucyBjaGFuZ2UsIHRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2RcbiAgICogdGhhdCBpcyBwcmVmZXJyZWQgb3ZlciB7QGxpbmsgb25PcHRpb25DaGFuZ2V9IHdoZW4gbXVsdGlwbGUgb3B0aW9ucyBhcmUgYmVpbmcgbGlzdGVuZWQgdG8gYW5kXG4gICAqIGhhbmRsZWQgdGhlIHNhbWUgd2F5LlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICBvbk11bHRpcGxlT3B0aW9uQ2hhbmdlKGtleXM6IChrZXlvZiBJVGVybWluYWxPcHRpb25zKVtdLCBsaXN0ZW5lcjogKCkgPT4gYW55KTogSURpc3Bvc2FibGU7XG59XG5cbmV4cG9ydCB0eXBlIEZvbnRXZWlnaHQgPSAnbm9ybWFsJyB8ICdib2xkJyB8ICcxMDAnIHwgJzIwMCcgfCAnMzAwJyB8ICc0MDAnIHwgJzUwMCcgfCAnNjAwJyB8ICc3MDAnIHwgJzgwMCcgfCAnOTAwJyB8IG51bWJlcjtcbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ3RyYWNlJyB8ICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ29mZic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsT3B0aW9ucyB7XG4gIGFsbG93UHJvcG9zZWRBcGk/OiBib29sZWFuO1xuICBhbGxvd1RyYW5zcGFyZW5jeT86IGJvb2xlYW47XG4gIGFsdENsaWNrTW92ZXNDdXJzb3I/OiBib29sZWFuO1xuICBjb2xzPzogbnVtYmVyO1xuICBjb252ZXJ0RW9sPzogYm9vbGVhbjtcbiAgY3Vyc29yQmxpbms/OiBib29sZWFuO1xuICBjdXJzb3JTdHlsZT86IEN1cnNvclN0eWxlO1xuICBjdXJzb3JXaWR0aD86IG51bWJlcjtcbiAgY3Vyc29ySW5hY3RpdmVTdHlsZT86IEN1cnNvckluYWN0aXZlU3R5bGU7XG4gIGN1c3RvbUdseXBocz86IGJvb2xlYW47XG4gIGRpc2FibGVTdGRpbj86IGJvb2xlYW47XG4gIGRvY3VtZW50T3ZlcnJpZGU/OiBhbnkgfCBudWxsO1xuICBkcmF3Qm9sZFRleHRJbkJyaWdodENvbG9ycz86IGJvb2xlYW47XG4gIGZhc3RTY3JvbGxNb2RpZmllcj86ICdub25lJyB8ICdhbHQnIHwgJ2N0cmwnIHwgJ3NoaWZ0JztcbiAgZmFzdFNjcm9sbFNlbnNpdGl2aXR5PzogbnVtYmVyO1xuICBmb250U2l6ZT86IG51bWJlcjtcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgZm9udFdlaWdodD86IEZvbnRXZWlnaHQ7XG4gIGZvbnRXZWlnaHRCb2xkPzogRm9udFdlaWdodDtcbiAgaWdub3JlQnJhY2tldGVkUGFzdGVNb2RlPzogYm9vbGVhbjtcbiAgbGV0dGVyU3BhY2luZz86IG51bWJlcjtcbiAgbGluZUhlaWdodD86IG51bWJlcjtcbiAgbGlua0hhbmRsZXI/OiBJTGlua0hhbmRsZXIgfCBudWxsO1xuICBsb2dMZXZlbD86IExvZ0xldmVsO1xuICBsb2dnZXI/OiBJTG9nZ2VyIHwgbnVsbDtcbiAgbWFjT3B0aW9uSXNNZXRhPzogYm9vbGVhbjtcbiAgbWFjT3B0aW9uQ2xpY2tGb3JjZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuICBtaW5pbXVtQ29udHJhc3RSYXRpbz86IG51bWJlcjtcbiAgcmVzY2FsZU92ZXJsYXBwaW5nR2x5cGhzPzogYm9vbGVhbjtcbiAgcmlnaHRDbGlja1NlbGVjdHNXb3JkPzogYm9vbGVhbjtcbiAgcm93cz86IG51bWJlcjtcbiAgc2NyZWVuUmVhZGVyTW9kZT86IGJvb2xlYW47XG4gIHNjcm9sbGJhY2s/OiBudW1iZXI7XG4gIHNjcm9sbE9uVXNlcklucHV0PzogYm9vbGVhbjtcbiAgc2Nyb2xsU2Vuc2l0aXZpdHk/OiBudW1iZXI7XG4gIHNtb290aFNjcm9sbER1cmF0aW9uPzogbnVtYmVyO1xuICB0YWJTdG9wV2lkdGg/OiBudW1iZXI7XG4gIHRoZW1lPzogSVRoZW1lO1xuICB3aW5kb3dzTW9kZT86IGJvb2xlYW47XG4gIHdpbmRvd3NQdHk/OiBJV2luZG93c1B0eTtcbiAgd2luZG93T3B0aW9ucz86IElXaW5kb3dPcHRpb25zO1xuICB3b3JkU2VwYXJhdG9yPzogc3RyaW5nO1xuICBvdmVydmlld1J1bGVyV2lkdGg/OiBudW1iZXI7XG5cbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBjYW5jZWxFdmVudHM6IGJvb2xlYW47XG4gIHRlcm1OYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRoZW1lIHtcbiAgZm9yZWdyb3VuZD86IHN0cmluZztcbiAgYmFja2dyb3VuZD86IHN0cmluZztcbiAgY3Vyc29yPzogc3RyaW5nO1xuICBjdXJzb3JBY2NlbnQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkZvcmVncm91bmQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZD86IHN0cmluZztcbiAgYmxhY2s/OiBzdHJpbmc7XG4gIHJlZD86IHN0cmluZztcbiAgZ3JlZW4/OiBzdHJpbmc7XG4gIHllbGxvdz86IHN0cmluZztcbiAgYmx1ZT86IHN0cmluZztcbiAgbWFnZW50YT86IHN0cmluZztcbiAgY3lhbj86IHN0cmluZztcbiAgd2hpdGU/OiBzdHJpbmc7XG4gIGJyaWdodEJsYWNrPzogc3RyaW5nO1xuICBicmlnaHRSZWQ/OiBzdHJpbmc7XG4gIGJyaWdodEdyZWVuPzogc3RyaW5nO1xuICBicmlnaHRZZWxsb3c/OiBzdHJpbmc7XG4gIGJyaWdodEJsdWU/OiBzdHJpbmc7XG4gIGJyaWdodE1hZ2VudGE/OiBzdHJpbmc7XG4gIGJyaWdodEN5YW4/OiBzdHJpbmc7XG4gIGJyaWdodFdoaXRlPzogc3RyaW5nO1xuICBleHRlbmRlZEFuc2k/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IElPc2NMaW5rU2VydmljZSA9IGNyZWF0ZURlY29yYXRvcjxJT3NjTGlua1NlcnZpY2U+KCdPc2NMaW5rU2VydmljZScpO1xuZXhwb3J0IGludGVyZmFjZSBJT3NjTGlua1NlcnZpY2Uge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxpbmsgdG8gdGhlIHNlcnZpY2UsIHJldHVybmluZyB0aGUgbGluayBJRC4gVGhlIGxpbmsgZGF0YSBpcyBtYW5hZ2VkIGJ5IHRoaXNcbiAgICogc2VydmljZSBhbmQgd2lsbCBiZSBmcmVlZCB3aGVuIHRoaXMgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgdHJpbW1lZCBvZmYgdGhlIGJ1ZmZlci5cbiAgICovXG4gIHJlZ2lzdGVyTGluayhsaW5rRGF0YTogSU9zY0xpbmtEYXRhKTogbnVtYmVyO1xuICAvKipcbiAgICogQWRkcyBhIGxpbmUgdG8gYSBsaW5rIGlmIG5lZWRlZC5cbiAgICovXG4gIGFkZExpbmVUb0xpbmsobGlua0lkOiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQ7XG4gIC8qKiBHZXQgdGhlIGxpbmsgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBsaW5rIElELiAqL1xuICBnZXRMaW5rRGF0YShsaW5rSWQ6IG51bWJlcik6IElPc2NMaW5rRGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuLypcbiAqIFdpZHRoIGFuZCBHcmFwaGVtZV9DbHVzdGVyX0JyZWFrIHByb3BlcnRpZXMgb2YgYSBjaGFyYWN0ZXIgYXMgYSBiaXQgbWFzay5cbiAqXG4gKiBiaXQgMDogc2hvdWxkSm9pbiAtIHNob3VsZCBjb21iaW5lIHdpdGggcHJlY2VkaW5nIGNoYXJhY3Rlci5cbiAqIGJpdCAxLi4yOiB3Y3dpZHRoIC0gc2VlIFVuaWNvZGVDaGFyV2lkdGguXG4gKiBiaXQgMy4uMzE6IGNsYXNzIG9mIGNoYXJhY3RlciAoY3VycmVudGx5IG9ubHkgNCBiaXRzIGFyZSB1c2VkKS5cbiAqICAgVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZWQgZ3JhcGhlbWUgY2x1c3RlcmluZyAtIGkuZS4gd2hpY2ggY29kZXBvaW50c1xuICogICBhcmUgdG8gYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBjb21wb3VuZCBjaGFyYWN0ZXIuXG4gKlxuICogVXNlIHRoZSBVbmljb2RlU2VydmljZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlWYWx1ZSB0byBjcmVhdGUgYVxuICogVW5pY29kZUNoYXJQcm9wZXJ0aWVzOyB1c2UgZXh0cmFjdFNob3VsZEpvaW4sIGV4dHJhY3RXaWR0aCwgYW5kXG4gKiBleHRyYWN0Q2hhcktpbmQgdG8gZXh0cmFjdCB0aGUgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgVW5pY29kZUNoYXJQcm9wZXJ0aWVzID0gbnVtYmVyO1xuXG4vKipcbiAqIFdpZHRoIGluIGNvbHVtbnMgb2YgYSBjaGFyYWN0ZXIuXG4gKiBJbiBhIENKSyBjb250ZXh0LCBcImhhbGYtd2lkdGhcIiBjaGFyYWN0ZXJzIChzdWNoIGFzIExhdGluKSBhcmUgd2lkdGggMSxcbiAqIHdoaWxlIFwiZnVsbC13aWR0aFwiIGNoYXJhY3RlcnMgKHN1Y2ggYXMgS2FuamkpIGFyZSAyIGNvbHVtbnMgd2lkZS5cbiAqIENvbWJpbmluZyBjaGFyYWN0ZXJzIChzdWNoIGFzIGFjY2VudHMpIGFyZSB3aWR0aCAwLlxuICovXG5leHBvcnQgdHlwZSBVbmljb2RlQ2hhcldpZHRoID0gMCB8IDEgfCAyO1xuXG5leHBvcnQgY29uc3QgSVVuaWNvZGVTZXJ2aWNlID0gY3JlYXRlRGVjb3JhdG9yPElVbmljb2RlU2VydmljZT4oJ1VuaWNvZGVTZXJ2aWNlJyk7XG5leHBvcnQgaW50ZXJmYWNlIElVbmljb2RlU2VydmljZSB7XG4gIHNlcnZpY2VCcmFuZDogdW5kZWZpbmVkO1xuICAvKiogUmVnaXN0ZXIgYW4gVW5pY29kZSB2ZXJzaW9uIHByb3ZpZGVyLiAqL1xuICByZWdpc3Rlcihwcm92aWRlcjogSVVuaWNvZGVWZXJzaW9uUHJvdmlkZXIpOiB2b2lkO1xuICAvKiogUmVnaXN0ZXJlZCBVbmljb2RlIHZlcnNpb25zLiAqL1xuICByZWFkb25seSB2ZXJzaW9uczogc3RyaW5nW107XG4gIC8qKiBDdXJyZW50bHkgYWN0aXZlIHZlcnNpb24uICovXG4gIGFjdGl2ZVZlcnNpb246IHN0cmluZztcbiAgLyoqIEV2ZW50IHRyaWdnZXJlZCwgd2hlbiBhY3RpdmF0ZSB2ZXJzaW9uIGNoYW5nZWQuICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiBJRXZlbnQ8c3RyaW5nPjtcblxuICAvKipcbiAgICogVW5pY29kZSB2ZXJzaW9uIGRlcGVuZGVudFxuICAgKi9cbiAgd2N3aWR0aChjb2RlcG9pbnQ6IG51bWJlcik6IFVuaWNvZGVDaGFyV2lkdGg7XG4gIGdldFN0cmluZ0NlbGxXaWR0aChzOiBzdHJpbmcpOiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXR1cm4gY2hhcmFjdGVyIHdpZHRoIGFuZCB0eXBlIGZvciBncmFwaGVtZSBjbHVzdGVyaW5nLlxuICAgKiBJZiBwcmVjZWRpbmcgIT0gMCwgaXQgaXMgdGhlIHJldHVybiBjb2RlIGZyb20gdGhlIHByZXZpb3VzIGNoYXJhY3RlcjtcbiAgICogaW4gdGhhdCBjYXNlIHRoZSByZXN1bHQgc3BlY2lmaWVzIGlmIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBqb2luZWQuXG4gICAqL1xuICBjaGFyUHJvcGVydGllcyhjb2RlcG9pbnQ6IG51bWJlciwgcHJlY2VkaW5nOiBVbmljb2RlQ2hhclByb3BlcnRpZXMpOiBVbmljb2RlQ2hhclByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVuaWNvZGVWZXJzaW9uUHJvdmlkZXIge1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHdjd2lkdGgodWNzOiBudW1iZXIpOiBVbmljb2RlQ2hhcldpZHRoO1xuICBjaGFyUHJvcGVydGllcyhjb2RlcG9pbnQ6IG51bWJlciwgcHJlY2VkaW5nOiBVbmljb2RlQ2hhclByb3BlcnRpZXMpOiBVbmljb2RlQ2hhclByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBjb25zdCBJRGVjb3JhdGlvblNlcnZpY2UgPSBjcmVhdGVEZWNvcmF0b3I8SURlY29yYXRpb25TZXJ2aWNlPignRGVjb3JhdGlvblNlcnZpY2UnKTtcbmV4cG9ydCBpbnRlcmZhY2UgSURlY29yYXRpb25TZXJ2aWNlIGV4dGVuZHMgSURpc3Bvc2FibGUge1xuICBzZXJ2aWNlQnJhbmQ6IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZGVjb3JhdGlvbnM6IEl0ZXJhYmxlSXRlcmF0b3I8SUludGVybmFsRGVjb3JhdGlvbj47XG4gIHJlYWRvbmx5IG9uRGVjb3JhdGlvblJlZ2lzdGVyZWQ6IElFdmVudDxJSW50ZXJuYWxEZWNvcmF0aW9uPjtcbiAgcmVhZG9ubHkgb25EZWNvcmF0aW9uUmVtb3ZlZDogSUV2ZW50PElJbnRlcm5hbERlY29yYXRpb24+O1xuICByZWdpc3RlckRlY29yYXRpb24oZGVjb3JhdGlvbk9wdGlvbnM6IElEZWNvcmF0aW9uT3B0aW9ucyk6IElEZWNvcmF0aW9uIHwgdW5kZWZpbmVkO1xuICByZXNldCgpOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhIGNhbGxiYWNrIG92ZXIgdGhlIGRlY29yYXRpb24gYXQgYSBjZWxsIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKS4gVGhpcyB1c2VzIGEgY2FsbGJhY2tcbiAgICogaW5zdGVhZCBvZiBhbiBpdGVyYXRvciBhcyBpdCdzIHR5cGljYWxseSB1c2VkIGluIGhvdCBjb2RlIHBhdGhzLlxuICAgKi9cbiAgZm9yRWFjaERlY29yYXRpb25BdENlbGwoeDogbnVtYmVyLCBsaW5lOiBudW1iZXIsIGxheWVyOiAnYm90dG9tJyB8ICd0b3AnIHwgdW5kZWZpbmVkLCBjYWxsYmFjazogKGRlY29yYXRpb246IElJbnRlcm5hbERlY29yYXRpb24pID0+IHZvaWQpOiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJuYWxEZWNvcmF0aW9uIGV4dGVuZHMgSURlY29yYXRpb24ge1xuICByZWFkb25seSBvcHRpb25zOiBJRGVjb3JhdGlvbk9wdGlvbnM7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRDb2xvclJHQjogSUNvbG9yIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBmb3JlZ3JvdW5kQ29sb3JSR0I6IElDb2xvciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgb25SZW5kZXJFbWl0dGVyOiBJRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50Pjtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOSBUaGUgeHRlcm0uanMgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEBsaWNlbnNlIE1JVFxuICpcbiAqIChFWFBFUklNRU5UQUwpIFRoaXMgQWRkb24gaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElCdWZmZXIsIElCdWZmZXJDZWxsLCBJQnVmZmVyUmFuZ2UsIElUZXJtaW5hbEFkZG9uLCBUZXJtaW5hbCB9IGZyb20gJ0B4dGVybS94dGVybSc7XG5pbXBvcnQgdHlwZSB7IElIVE1MU2VyaWFsaXplT3B0aW9ucywgU2VyaWFsaXplQWRkb24gYXMgSVNlcmlhbGl6ZUFwaSwgSVNlcmlhbGl6ZU9wdGlvbnMsIElTZXJpYWxpemVSYW5nZSB9IGZyb20gJ0B4dGVybS9hZGRvbi1zZXJpYWxpemUnO1xuaW1wb3J0IHsgREVGQVVMVF9BTlNJX0NPTE9SUyB9IGZyb20gJ2Jyb3dzZXIvc2VydmljZXMvVGhlbWVTZXJ2aWNlJztcbmltcG9ydCB7IElBdHRyaWJ1dGVEYXRhLCBJQ29sb3IgfSBmcm9tICdjb21tb24vVHlwZXMnO1xuXG5mdW5jdGlvbiBjb25zdHJhaW4odmFsdWU6IG51bWJlciwgbG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChsb3csIE1hdGgubWluKHZhbHVlLCBoaWdoKSk7XG59XG5cbi8vIFRPRE86IFJlZmluZSB0aGlzIHRlbXBsYXRlIGNsYXNzIGxhdGVyXG5hYnN0cmFjdCBjbGFzcyBCYXNlU2VyaWFsaXplSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBfYnVmZmVyOiBJQnVmZmVyXG4gICkge1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZShyYW5nZTogSUJ1ZmZlclJhbmdlLCBleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIC8vIHdlIG5lZWQgdHdvIG9mIHRoZW0gdG8gZmxpcCBiZXR3ZWVuIG9sZCBhbmQgbmV3IGNlbGxcbiAgICBjb25zdCBjZWxsMSA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuICAgIGNvbnN0IGNlbGwyID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gICAgbGV0IG9sZENlbGwgPSBjZWxsMTtcblxuICAgIGNvbnN0IHN0YXJ0Um93ID0gcmFuZ2Uuc3RhcnQueTtcbiAgICBjb25zdCBlbmRSb3cgPSByYW5nZS5lbmQueTtcbiAgICBjb25zdCBzdGFydENvbHVtbiA9IHJhbmdlLnN0YXJ0Lng7XG4gICAgY29uc3QgZW5kQ29sdW1uID0gcmFuZ2UuZW5kLng7XG5cbiAgICB0aGlzLl9iZWZvcmVTZXJpYWxpemUoZW5kUm93IC0gc3RhcnRSb3csIHN0YXJ0Um93LCBlbmRSb3cpO1xuXG4gICAgZm9yIChsZXQgcm93ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93KTtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TGluZUNvbHVtbiA9IHJvdyA9PT0gcmFuZ2Uuc3RhcnQueSA/IHN0YXJ0Q29sdW1uIDogMDtcbiAgICAgICAgY29uc3QgZW5kTGluZUNvbHVtbiA9IHJvdyA9PT0gcmFuZ2UuZW5kLnkgPyBlbmRDb2x1bW46IGxpbmUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBjb2wgPSBzdGFydExpbmVDb2x1bW47IGNvbCA8IGVuZExpbmVDb2x1bW47IGNvbCsrKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGxpbmUuZ2V0Q2VsbChjb2wsIG9sZENlbGwgPT09IGNlbGwxID8gY2VsbDIgOiBjZWxsMSk7XG4gICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENhbid0IGdldCBjZWxsIGF0IHJvdz0ke3Jvd30sIGNvbD0ke2NvbH1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9uZXh0Q2VsbChjLCBvbGRDZWxsLCByb3csIGNvbCk7XG4gICAgICAgICAgb2xkQ2VsbCA9IGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX3Jvd0VuZChyb3csIHJvdyA9PT0gZW5kUm93KTtcbiAgICB9XG5cbiAgICB0aGlzLl9hZnRlclNlcmlhbGl6ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZVN0cmluZyhleGNsdWRlRmluYWxDdXJzb3JQb3NpdGlvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgX25leHRDZWxsKGNlbGw6IElCdWZmZXJDZWxsLCBvbGRDZWxsOiBJQnVmZmVyQ2VsbCwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIF9yb3dFbmQocm93OiBudW1iZXIsIGlzTGFzdFJvdzogYm9vbGVhbik6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBfYmVmb3JlU2VyaWFsaXplKHJvd3M6IG51bWJlciwgc3RhcnRSb3c6IG51bWJlciwgZW5kUm93OiBudW1iZXIpOiB2b2lkIHsgfVxuICBwcm90ZWN0ZWQgX2FmdGVyU2VyaWFsaXplKCk6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBfc2VyaWFsaXplU3RyaW5nKGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7IHJldHVybiAnJzsgfVxufVxuXG5mdW5jdGlvbiBlcXVhbEZnKGNlbGwxOiBJQnVmZmVyQ2VsbCB8IElBdHRyaWJ1dGVEYXRhLCBjZWxsMjogSUJ1ZmZlckNlbGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNlbGwxLmdldEZnQ29sb3JNb2RlKCkgPT09IGNlbGwyLmdldEZnQ29sb3JNb2RlKClcbiAgICAmJiBjZWxsMS5nZXRGZ0NvbG9yKCkgPT09IGNlbGwyLmdldEZnQ29sb3IoKTtcbn1cblxuZnVuY3Rpb24gZXF1YWxCZyhjZWxsMTogSUJ1ZmZlckNlbGwgfCBJQXR0cmlidXRlRGF0YSwgY2VsbDI6IElCdWZmZXJDZWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBjZWxsMS5nZXRCZ0NvbG9yTW9kZSgpID09PSBjZWxsMi5nZXRCZ0NvbG9yTW9kZSgpXG4gICAgJiYgY2VsbDEuZ2V0QmdDb2xvcigpID09PSBjZWxsMi5nZXRCZ0NvbG9yKCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsRmxhZ3MoY2VsbDE6IElCdWZmZXJDZWxsIHwgSUF0dHJpYnV0ZURhdGEsIGNlbGwyOiBJQnVmZmVyQ2VsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2VsbDEuaXNJbnZlcnNlKCkgPT09IGNlbGwyLmlzSW52ZXJzZSgpXG4gICAgJiYgY2VsbDEuaXNCb2xkKCkgPT09IGNlbGwyLmlzQm9sZCgpXG4gICAgJiYgY2VsbDEuaXNVbmRlcmxpbmUoKSA9PT0gY2VsbDIuaXNVbmRlcmxpbmUoKVxuICAgICYmIGNlbGwxLmlzT3ZlcmxpbmUoKSA9PT0gY2VsbDIuaXNPdmVybGluZSgpXG4gICAgJiYgY2VsbDEuaXNCbGluaygpID09PSBjZWxsMi5pc0JsaW5rKClcbiAgICAmJiBjZWxsMS5pc0ludmlzaWJsZSgpID09PSBjZWxsMi5pc0ludmlzaWJsZSgpXG4gICAgJiYgY2VsbDEuaXNJdGFsaWMoKSA9PT0gY2VsbDIuaXNJdGFsaWMoKVxuICAgICYmIGNlbGwxLmlzRGltKCkgPT09IGNlbGwyLmlzRGltKClcbiAgICAmJiBjZWxsMS5pc1N0cmlrZXRocm91Z2goKSA9PT0gY2VsbDIuaXNTdHJpa2V0aHJvdWdoKCk7XG59XG5cbmNsYXNzIFN0cmluZ1NlcmlhbGl6ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlU2VyaWFsaXplSGFuZGxlciB7XG4gIHByaXZhdGUgX3Jvd0luZGV4OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9hbGxSb3dzOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2FsbFJvd1NlcGFyYXRvcnM6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFJvdzogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX251bGxDZWxsQ291bnQ6IG51bWJlciA9IDA7XG5cbiAgLy8gd2UgY2FuIHNlZSBhIGZ1bGwgY29sb3JlZCBjZWxsIGFuZCBhIG51bGwgY2VsbCB0aGF0IG9ubHkgaGF2ZSBiYWNrZ3JvdW5kIHRoZSBzYW1lIHN0eWxlXG4gIC8vIGJ1dCB0aGUgaW5mb3JtYXRpb24gaXNuJ3QgcHJlc2VydmVkIGJ5IG51bGwgY2VsbCBpdHNlbGZcbiAgLy8gc28gd2VlIG5lZWQgdG8gcmVjb3JkIGl0IHdoZW4gcmVxdWlyZWQuXG4gIHByaXZhdGUgX2N1cnNvclN0eWxlOiBJQnVmZmVyQ2VsbCA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuXG4gIC8vIHdoZXJlIGV4YWN0IHRoZSBjdXJzb3Igc3R5bGVzIGNvbWVzIGZyb21cbiAgLy8gYmVjYXVzZSB3ZSBjYW4ndCBjb3B5IHRoZSBjZWxsIGRpcmVjdGx5XG4gIC8vIHNvIHdlIHJlbWVtYmVyIHdoZXJlIHRoZSBjb250ZW50IGNvbWVzIGZyb20gaW5zdGVhZFxuICBwcml2YXRlIF9jdXJzb3JTdHlsZVJvdzogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfY3Vyc29yU3R5bGVDb2w6IG51bWJlciA9IDA7XG5cbiAgLy8gdGhpcyBpcyBhIG51bGwgY2VsbCBmb3IgcmVmZXJlbmNlIGZvciBjaGVja2luZyB3aGV0aGVyIGJhY2tncm91bmQgaXMgZW1wdHkgb3Igbm90XG4gIHByaXZhdGUgX2JhY2tncm91bmRDZWxsOiBJQnVmZmVyQ2VsbCA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuXG4gIHByaXZhdGUgX2ZpcnN0Um93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q3Vyc29yUm93OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q3Vyc29yQ29sOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0Q29udGVudEN1cnNvclJvdzogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbGFzdENvbnRlbnRDdXJzb3JDb2w6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVmZmVyOiBJQnVmZmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlcm1pbmFsOiBUZXJtaW5hbFxuICApIHtcbiAgICBzdXBlcihidWZmZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9iZWZvcmVTZXJpYWxpemUocm93czogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2FsbFJvd3MgPSBuZXcgQXJyYXk8c3RyaW5nPihyb3dzKTtcbiAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvclJvdyA9IHN0YXJ0O1xuICAgIHRoaXMuX2xhc3RDdXJzb3JSb3cgPSBzdGFydDtcbiAgICB0aGlzLl9maXJzdFJvdyA9IHN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBfdGhpc1Jvd0xhc3RDaGFyOiBJQnVmZmVyQ2VsbCA9IHRoaXMuX2J1ZmZlci5nZXROdWxsQ2VsbCgpO1xuICBwcml2YXRlIF90aGlzUm93TGFzdFNlY29uZENoYXI6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gIHByaXZhdGUgX25leHRSb3dGaXJzdENoYXI6IElCdWZmZXJDZWxsID0gdGhpcy5fYnVmZmVyLmdldE51bGxDZWxsKCk7XG4gIHByb3RlY3RlZCBfcm93RW5kKHJvdzogbnVtYmVyLCBpc0xhc3RSb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBjb2xvcmZ1bCBlbXB0eSBjZWxsIGF0IGxpbmUgZW5kLCB3aGUgbXVzdCBwYWQgaXQgYmFjaywgb3IgdGhlIHRoZSBjb2xvciBibG9ja1xuICAgIC8vIHdpbGwgbWlzc2luZ1xuICAgIGlmICh0aGlzLl9udWxsQ2VsbENvdW50ID4gMCAmJiAhZXF1YWxCZyh0aGlzLl9jdXJzb3JTdHlsZSwgdGhpcy5fYmFja2dyb3VuZENlbGwpKSB7XG4gICAgICAvLyB1c2UgY2xlYXIgcmlnaHQgdG8gc2V0IGJhY2tncm91bmQuXG4gICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICB9XG5cbiAgICBsZXQgcm93U2VwYXJhdG9yID0gJyc7XG5cbiAgICAvLyBoYW5kbGUgcm93IHNlcGFyYXRvclxuICAgIGlmICghaXNMYXN0Um93KSB7XG4gICAgICAvLyBFbmFibGUgQkNFXG4gICAgICBpZiAocm93IC0gdGhpcy5fZmlyc3RSb3cgPj0gdGhpcy5fdGVybWluYWwucm93cykge1xuICAgICAgICB0aGlzLl9idWZmZXIuZ2V0TGluZSh0aGlzLl9jdXJzb3JTdHlsZVJvdyk/LmdldENlbGwodGhpcy5fY3Vyc29yU3R5bGVDb2wsIHRoaXMuX2JhY2tncm91bmRDZWxsKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmV0Y2ggY3VycmVudCBsaW5lXG4gICAgICBjb25zdCBjdXJyZW50TGluZSA9IHRoaXMuX2J1ZmZlci5nZXRMaW5lKHJvdykhO1xuICAgICAgLy8gRmV0Y2ggbmV4dCBsaW5lXG4gICAgICBjb25zdCBuZXh0TGluZSA9IHRoaXMuX2J1ZmZlci5nZXRMaW5lKHJvdyArIDEpITtcblxuICAgICAgaWYgKCFuZXh0TGluZS5pc1dyYXBwZWQpIHtcbiAgICAgICAgLy8ganVzdCBpbnNlcnQgdGhlIGxpbmUgYnJlYWtcbiAgICAgICAgcm93U2VwYXJhdG9yID0gJ1xcclxcbic7XG4gICAgICAgIC8vIHdlIHNlbmRlZCB0aGUgZW50ZXJcbiAgICAgICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHJvdyArIDE7XG4gICAgICAgIHRoaXMuX2xhc3RDdXJzb3JDb2wgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93U2VwYXJhdG9yID0gJyc7XG4gICAgICAgIGNvbnN0IHRoaXNSb3dMYXN0Q2hhciA9IGN1cnJlbnRMaW5lLmdldENlbGwoY3VycmVudExpbmUubGVuZ3RoIC0gMSwgdGhpcy5fdGhpc1Jvd0xhc3RDaGFyKSE7XG4gICAgICAgIGNvbnN0IHRoaXNSb3dMYXN0U2Vjb25kQ2hhciA9IGN1cnJlbnRMaW5lLmdldENlbGwoY3VycmVudExpbmUubGVuZ3RoIC0gMiwgdGhpcy5fdGhpc1Jvd0xhc3RTZWNvbmRDaGFyKSE7XG4gICAgICAgIGNvbnN0IG5leHRSb3dGaXJzdENoYXIgPSBuZXh0TGluZS5nZXRDZWxsKDAsIHRoaXMuX25leHRSb3dGaXJzdENoYXIpITtcbiAgICAgICAgY29uc3QgaXNOZXh0Um93Rmlyc3RDaGFyRG91YmxlV2lkdGggPSBuZXh0Um93Rmlyc3RDaGFyLmdldFdpZHRoKCkgPiAxO1xuXG4gICAgICAgIC8vIHZhbGlkYXRlIHdoZXRoZXIgdGhpcyBsaW5lIHdyYXAgaXMgZXZlciBwb3NzaWJsZVxuICAgICAgICAvLyB3aGljaCBtZWFuIHdoZXRoZXIgY3Vyc29yIGNhbiBwbGFjZWQgYXQgYSBvdmVyZmxvdyBwb3NpdGlvbiAoeCA9PT0gcm93KSBuYXR1cmFsbHlcbiAgICAgICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8geW91IG11c3Qgb3V0cHV0IGNoYXJhY3RlciB0byBjYXVzZSBvdmVyZmxvdywgY29udHJvbCBzZXF1ZW5jZSBjYW4ndCBkbyB0aGlzXG4gICAgICAgICAgbmV4dFJvd0ZpcnN0Q2hhci5nZXRDaGFycygpICYmXG4gICAgICAgICAgICBpc05leHRSb3dGaXJzdENoYXJEb3VibGVXaWR0aCA/IHRoaXMuX251bGxDZWxsQ291bnQgPD0gMSA6IHRoaXMuX251bGxDZWxsQ291bnQgPD0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyB0aGUgbGFzdCBjaGFyYWN0ZXIgY2FuJ3QgYmUgbnVsbCxcbiAgICAgICAgICAgIC8vIHlvdSBjYW4ndCB1c2UgY29udHJvbCBzZXF1ZW5jZSB0byBtb3ZlIGN1cnNvciB0byAoeCA9PT0gcm93KVxuICAgICAgICAgICAgKHRoaXNSb3dMYXN0Q2hhci5nZXRDaGFycygpIHx8IHRoaXNSb3dMYXN0Q2hhci5nZXRXaWR0aCgpID09PSAwKSAmJlxuICAgICAgICAgICAgLy8gY2hhbmdlIGJhY2tncm91bmQgb2YgdGhlIGZpcnN0IHdyYXBwZWQgY2VsbCBhbHNvIGFmZmVjdHMgQkNFXG4gICAgICAgICAgICAvLyBzbyB3ZSBtYXJrIGl0IGFzIGludmFsaWQgdG8gc2ltcGx5IHRoZSBwcm9jZXNzIHRvIGRldGVybWluZSBsaW5lIHNlcGFyYXRvclxuICAgICAgICAgICAgZXF1YWxCZyh0aGlzUm93TGFzdENoYXIsIG5leHRSb3dGaXJzdENoYXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyB0aGUgc2Vjb25kIHRvIGxhc3QgY2hhcmFjdGVyIGNhbid0IGJlIG51bGwgaWYgdGhlIG5leHQgbGluZSBzdGFydHMgd2l0aCBDSkssXG4gICAgICAgICAgICAvLyB5b3UgY2FuJ3QgdXNlIGNvbnRyb2wgc2VxdWVuY2UgdG8gbW92ZSBjdXJzb3IgdG8gKHggPT09IHJvdylcbiAgICAgICAgICAgIGlzTmV4dFJvd0ZpcnN0Q2hhckRvdWJsZVdpZHRoICYmXG4gICAgICAgICAgICAodGhpc1Jvd0xhc3RTZWNvbmRDaGFyLmdldENoYXJzKCkgfHwgdGhpc1Jvd0xhc3RTZWNvbmRDaGFyLmdldFdpZHRoKCkgPT09IDApICYmXG4gICAgICAgICAgICAvLyBjaGFuZ2UgYmFja2dyb3VuZCBvZiB0aGUgZmlyc3Qgd3JhcHBlZCBjZWxsIGFsc28gYWZmZWN0cyBCQ0VcbiAgICAgICAgICAgIC8vIHNvIHdlIG1hcmsgaXQgYXMgaW52YWxpZCB0byBzaW1wbHkgdGhlIHByb2Nlc3MgdG8gZGV0ZXJtaW5lIGxpbmUgc2VwYXJhdG9yXG4gICAgICAgICAgICBlcXVhbEJnKHRoaXNSb3dMYXN0Q2hhciwgbmV4dFJvd0ZpcnN0Q2hhcikgJiZcbiAgICAgICAgICAgIGVxdWFsQmcodGhpc1Jvd0xhc3RTZWNvbmRDaGFyLCBuZXh0Um93Rmlyc3RDaGFyKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgLy8gZm9yY2UgdGhlIHdyYXAgd2l0aCBtYWdpY1xuICAgICAgICAgIC8vIGluc2VydCBlbm91Z2ggY2hhcmFjdGVyIHRvIGZvcmNlIHRoZSB3cmFwXG4gICAgICAgICAgcm93U2VwYXJhdG9yID0gJy0nLnJlcGVhdCh0aGlzLl9udWxsQ2VsbENvdW50ICsgMSk7XG4gICAgICAgICAgLy8gbW92ZSBiYWNrIGFuZCBlcmFzZSBuZXh0IGxpbmUgaGVhZFxuICAgICAgICAgIHJvd1NlcGFyYXRvciArPSAnXFx1MDAxYlsxRFxcdTAwMWJbMVgnO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX251bGxDZWxsQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBkbyB0aGVzZSBiZWNhdXNlIHdlIGZpbGxlZCB0aGUgbGFzdCBzZXZlcmFsIG51bGwgc2xvdCwgd2hpY2ggd2Ugc2hvdWxkbid0XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gJ1xcdTAwMWJbQSc7XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gYFxcdTAwMWJbJHtjdXJyZW50TGluZS5sZW5ndGggLSB0aGlzLl9udWxsQ2VsbENvdW50fUNgO1xuICAgICAgICAgICAgcm93U2VwYXJhdG9yICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICAgICAgICAgIHJvd1NlcGFyYXRvciArPSBgXFx1MDAxYlske2N1cnJlbnRMaW5lLmxlbmd0aCAtIHRoaXMuX251bGxDZWxsQ291bnR9RGA7XG4gICAgICAgICAgICByb3dTZXBhcmF0b3IgKz0gJ1xcdTAwMWJbQic7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhpcyBpcyBjb250ZW50IGFuZCBuZWVkIHRoZSBiZSBzZXJpYWxpemVkIGV2ZW4gaXQgaXMgaW52aXNpYmxlLlxuICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcywgd3JhcCB3aWxsIGJlIG1pc3NpbmcgZnJvbSBvdXRwdXRzLlxuICAgICAgICAgIHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ID0gcm93ICsgMTtcbiAgICAgICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvckNvbCA9IDA7XG5cbiAgICAgICAgICAvLyBmb3JjZSBjb21taXQgdGhlIGN1cnNvciBwb3NpdGlvblxuICAgICAgICAgIHRoaXMuX2xhc3RDdXJzb3JSb3cgPSByb3cgKyAxO1xuICAgICAgICAgIHRoaXMuX2xhc3RDdXJzb3JDb2wgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYWxsUm93c1t0aGlzLl9yb3dJbmRleF0gPSB0aGlzLl9jdXJyZW50Um93O1xuICAgIHRoaXMuX2FsbFJvd1NlcGFyYXRvcnNbdGhpcy5fcm93SW5kZXgrK10gPSByb3dTZXBhcmF0b3I7XG4gICAgdGhpcy5fY3VycmVudFJvdyA9ICcnO1xuICAgIHRoaXMuX251bGxDZWxsQ291bnQgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlmZlN0eWxlKGNlbGw6IElCdWZmZXJDZWxsIHwgSUF0dHJpYnV0ZURhdGEsIG9sZENlbGw6IElCdWZmZXJDZWxsKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNnclNlcTogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBmZ0NoYW5nZWQgPSAhZXF1YWxGZyhjZWxsLCBvbGRDZWxsKTtcbiAgICBjb25zdCBiZ0NoYW5nZWQgPSAhZXF1YWxCZyhjZWxsLCBvbGRDZWxsKTtcbiAgICBjb25zdCBmbGFnc0NoYW5nZWQgPSAhZXF1YWxGbGFncyhjZWxsLCBvbGRDZWxsKTtcblxuICAgIGlmIChmZ0NoYW5nZWQgfHwgYmdDaGFuZ2VkIHx8IGZsYWdzQ2hhbmdlZCkge1xuICAgICAgaWYgKGNlbGwuaXNBdHRyaWJ1dGVEZWZhdWx0KCkpIHtcbiAgICAgICAgaWYgKCFvbGRDZWxsLmlzQXR0cmlidXRlRGVmYXVsdCgpKSB7XG4gICAgICAgICAgc2dyU2VxLnB1c2goMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmZ0NoYW5nZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IGNlbGwuZ2V0RmdDb2xvcigpO1xuICAgICAgICAgIGlmIChjZWxsLmlzRmdSR0IoKSkgeyBzZ3JTZXEucHVzaCgzOCwgMiwgKGNvbG9yID4+PiAxNikgJiAweEZGLCAoY29sb3IgPj4+IDgpICYgMHhGRiwgY29sb3IgJiAweEZGKTsgfVxuICAgICAgICAgIGVsc2UgaWYgKGNlbGwuaXNGZ1BhbGV0dGUoKSkge1xuICAgICAgICAgICAgaWYgKGNvbG9yID49IDE2KSB7IHNnclNlcS5wdXNoKDM4LCA1LCBjb2xvcik7IH1cbiAgICAgICAgICAgIGVsc2UgeyBzZ3JTZXEucHVzaChjb2xvciAmIDggPyA5MCArIChjb2xvciAmIDcpIDogMzAgKyAoY29sb3IgJiA3KSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7IHNnclNlcS5wdXNoKDM5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZ0NoYW5nZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IGNlbGwuZ2V0QmdDb2xvcigpO1xuICAgICAgICAgIGlmIChjZWxsLmlzQmdSR0IoKSkgeyBzZ3JTZXEucHVzaCg0OCwgMiwgKGNvbG9yID4+PiAxNikgJiAweEZGLCAoY29sb3IgPj4+IDgpICYgMHhGRiwgY29sb3IgJiAweEZGKTsgfVxuICAgICAgICAgIGVsc2UgaWYgKGNlbGwuaXNCZ1BhbGV0dGUoKSkge1xuICAgICAgICAgICAgaWYgKGNvbG9yID49IDE2KSB7IHNnclNlcS5wdXNoKDQ4LCA1LCBjb2xvcik7IH1cbiAgICAgICAgICAgIGVsc2UgeyBzZ3JTZXEucHVzaChjb2xvciAmIDggPyAxMDAgKyAoY29sb3IgJiA3KSA6IDQwICsgKGNvbG9yICYgNykpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgeyBzZ3JTZXEucHVzaCg0OSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxhZ3NDaGFuZ2VkKSB7XG4gICAgICAgICAgaWYgKGNlbGwuaXNJbnZlcnNlKCkgIT09IG9sZENlbGwuaXNJbnZlcnNlKCkpIHsgc2dyU2VxLnB1c2goY2VsbC5pc0ludmVyc2UoKSA/IDcgOiAyNyk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0JvbGQoKSAhPT0gb2xkQ2VsbC5pc0JvbGQoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzQm9sZCgpID8gMSA6IDIyKTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzVW5kZXJsaW5lKCkgIT09IG9sZENlbGwuaXNVbmRlcmxpbmUoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzVW5kZXJsaW5lKCkgPyA0IDogMjQpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNPdmVybGluZSgpICE9PSBvbGRDZWxsLmlzT3ZlcmxpbmUoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzT3ZlcmxpbmUoKSA/IDUzIDogNTUpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNCbGluaygpICE9PSBvbGRDZWxsLmlzQmxpbmsoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzQmxpbmsoKSA/IDUgOiAyNSk7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc0ludmlzaWJsZSgpICE9PSBvbGRDZWxsLmlzSW52aXNpYmxlKCkpIHsgc2dyU2VxLnB1c2goY2VsbC5pc0ludmlzaWJsZSgpID8gOCA6IDI4KTsgfVxuICAgICAgICAgIGlmIChjZWxsLmlzSXRhbGljKCkgIT09IG9sZENlbGwuaXNJdGFsaWMoKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzSXRhbGljKCkgPyAzIDogMjMpOyB9XG4gICAgICAgICAgaWYgKGNlbGwuaXNEaW0oKSAhPT0gb2xkQ2VsbC5pc0RpbSgpKSB7IHNnclNlcS5wdXNoKGNlbGwuaXNEaW0oKSA/IDIgOiAyMik7IH1cbiAgICAgICAgICBpZiAoY2VsbC5pc1N0cmlrZXRocm91Z2goKSAhPT0gb2xkQ2VsbC5pc1N0cmlrZXRocm91Z2goKSkgeyBzZ3JTZXEucHVzaChjZWxsLmlzU3RyaWtldGhyb3VnaCgpID8gOSA6IDI5KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNnclNlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV4dENlbGwoY2VsbDogSUJ1ZmZlckNlbGwsIG9sZENlbGw6IElCdWZmZXJDZWxsLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhIHdpZHRoIDAgY2VsbCBkb24ndCBuZWVkIHRvIGJlIGNvdW50IGJlY2F1c2UgaXQgaXMganVzdCBhIHBsYWNlaG9sZGVyIGFmdGVyIGEgQ0pLIGNoYXJhY3RlcjtcbiAgICBjb25zdCBpc1BsYWNlSG9sZGVyQ2VsbCA9IGNlbGwuZ2V0V2lkdGgoKSA9PT0gMDtcblxuICAgIGlmIChpc1BsYWNlSG9sZGVyQ2VsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRoaXMgY2VsbCBkb24ndCBoYXZlIGNvbnRlbnRcbiAgICBjb25zdCBpc0VtcHR5Q2VsbCA9IGNlbGwuZ2V0Q2hhcnMoKSA9PT0gJyc7XG5cbiAgICBjb25zdCBzZ3JTZXEgPSB0aGlzLl9kaWZmU3R5bGUoY2VsbCwgdGhpcy5fY3Vyc29yU3R5bGUpO1xuXG4gICAgLy8gdGhlIGVtcHR5IGNlbGwgc3R5bGUgaXMgb25seSBhc3N1bWVkIHRvIGJlIGNoYW5nZWQgd2hlbiBiYWNrZ3JvdW5kIGNoYW5nZWQsIGJlY2F1c2VcbiAgICAvLyBmb3JlZ3JvdW5kIGlzIGFsd2F5cyAwLlxuICAgIGNvbnN0IHN0eWxlQ2hhbmdlZCA9IGlzRW1wdHlDZWxsID8gIWVxdWFsQmcodGhpcy5fY3Vyc29yU3R5bGUsIGNlbGwpIDogc2dyU2VxLmxlbmd0aCA+IDA7XG5cbiAgICAvKipcbiAgICAgKiAgaGFuZGxlcyBzdHlsZSBjaGFuZ2VcbiAgICAgKi9cbiAgICBpZiAoc3R5bGVDaGFuZ2VkKSB7XG4gICAgICAvLyBiZWZvcmUgdXBkYXRlIHRoZSBzdHlsZSwgd2UgbmVlZCB0byBmaWxsIGVtcHR5IGNlbGwgYmFja1xuICAgICAgaWYgKHRoaXMuX251bGxDZWxsQ291bnQgPiAwKSB7XG4gICAgICAgIC8vIHVzZSBjbGVhciByaWdodCB0byBzZXQgYmFja2dyb3VuZC5cbiAgICAgICAgaWYgKCFlcXVhbEJnKHRoaXMuX2N1cnNvclN0eWxlLCB0aGlzLl9iYWNrZ3JvdW5kQ2VsbCkpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Um93ICs9IGBcXHUwMDFiWyR7dGhpcy5fbnVsbENlbGxDb3VudH1YYDtcbiAgICAgICAgfVxuICAgICAgICAvLyB1c2UgbW92ZSByaWdodCB0byBtb3ZlIGN1cnNvci5cbiAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgIHRoaXMuX251bGxDZWxsQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvclJvdyA9IHRoaXMuX2xhc3RDdXJzb3JSb3cgPSByb3c7XG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvckNvbCA9IHRoaXMuX2xhc3RDdXJzb3JDb2wgPSBjb2w7XG5cbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gYFxcdTAwMWJbJHtzZ3JTZXEuam9pbignOycpfW1gO1xuXG4gICAgICAvLyB1cGRhdGUgdGhlIGxhc3QgY3Vyc29yIHN0eWxlXG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5fYnVmZmVyLmdldExpbmUocm93KTtcbiAgICAgIGlmIChsaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGluZS5nZXRDZWxsKGNvbCwgdGhpcy5fY3Vyc29yU3R5bGUpO1xuICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZVJvdyA9IHJvdztcbiAgICAgICAgdGhpcy5fY3Vyc29yU3R5bGVDb2wgPSBjb2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIGhhbmRsZXMgYWN0dWFsIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAoaXNFbXB0eUNlbGwpIHtcbiAgICAgIHRoaXMuX251bGxDZWxsQ291bnQgKz0gY2VsbC5nZXRXaWR0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fbnVsbENlbGxDb3VudCA+IDApIHtcbiAgICAgICAgLy8gd2UgY2FuIGp1c3QgYXNzdW1lIHdlIGhhdmUgc2FtZSBzdHlsZSB3aXRoIHByZXZpb3VzIG9uZSBoZXJlXG4gICAgICAgIC8vIGJlY2F1c2Ugc3R5bGUgY2hhbmdlIGlzIGhhbmRsZWQgYnkgcHJldmlvdXMgc3RhZ2VcbiAgICAgICAgLy8gdXNlIG1vdmUgcmlnaHQgd2hlbiBiYWNrZ3JvdW5kIGlzIGVtcHR5LCB1c2UgY2xlYXIgcmlnaHQgd2hlbiB0aGVyZSBpcyBiYWNrZ3JvdW5kLlxuICAgICAgICBpZiAoZXF1YWxCZyh0aGlzLl9jdXJzb3JTdHlsZSwgdGhpcy5fYmFja2dyb3VuZENlbGwpKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9WGA7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJvdyArPSBgXFx1MDAxYlske3RoaXMuX251bGxDZWxsQ291bnR9Q2A7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbnVsbENlbGxDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gY2VsbC5nZXRDaGFycygpO1xuXG4gICAgICAvLyB1cGRhdGUgY3Vyc29yXG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvclJvdyA9IHRoaXMuX2xhc3RDdXJzb3JSb3cgPSByb3c7XG4gICAgICB0aGlzLl9sYXN0Q29udGVudEN1cnNvckNvbCA9IHRoaXMuX2xhc3RDdXJzb3JDb2wgPSBjb2wgKyBjZWxsLmdldFdpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXJpYWxpemVTdHJpbmcoZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb246IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCByb3dFbmQgPSB0aGlzLl9hbGxSb3dzLmxlbmd0aDtcblxuICAgIC8vIHRoZSBmaXh1cCBpcyBvbmx5IHJlcXVpcmVkIGZvciBkYXRhIHdpdGhvdXQgc2Nyb2xsYmFja1xuICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgcGxhY2VkIGF0IGxhc3QgbGluZSBvdGhlcndpc2VcbiAgICBpZiAodGhpcy5fYnVmZmVyLmxlbmd0aCAtIHRoaXMuX2ZpcnN0Um93IDw9IHRoaXMuX3Rlcm1pbmFsLnJvd3MpIHtcbiAgICAgIHJvd0VuZCA9IHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93ICsgMSAtIHRoaXMuX2ZpcnN0Um93O1xuICAgICAgdGhpcy5fbGFzdEN1cnNvckNvbCA9IHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yQ29sO1xuICAgICAgdGhpcy5fbGFzdEN1cnNvclJvdyA9IHRoaXMuX2xhc3RDb250ZW50Q3Vyc29yUm93O1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0VuZDsgaSsrKSB7XG4gICAgICBjb250ZW50ICs9IHRoaXMuX2FsbFJvd3NbaV07XG4gICAgICBpZiAoaSArIDEgPCByb3dFbmQpIHtcbiAgICAgICAgY29udGVudCArPSB0aGlzLl9hbGxSb3dTZXBhcmF0b3JzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIGN1cnNvclxuICAgIGlmICghZXhjbHVkZUZpbmFsQ3Vyc29yUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHJlYWxDdXJzb3JSb3cgPSB0aGlzLl9idWZmZXIuYmFzZVkgKyB0aGlzLl9idWZmZXIuY3Vyc29yWTtcbiAgICAgIGNvbnN0IHJlYWxDdXJzb3JDb2wgPSB0aGlzLl9idWZmZXIuY3Vyc29yWDtcblxuICAgICAgY29uc3QgY3Vyc29yTW92ZWQgPSAocmVhbEN1cnNvclJvdyAhPT0gdGhpcy5fbGFzdEN1cnNvclJvdyB8fCByZWFsQ3Vyc29yQ29sICE9PSB0aGlzLl9sYXN0Q3Vyc29yQ29sKTtcblxuICAgICAgY29uc3QgbW92ZVJpZ2h0ID0gKG9mZnNldDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlske29mZnNldH1DYDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgY29udGVudCArPSBgXFx1MDAxYlskey1vZmZzZXR9RGA7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBtb3ZlRG93biA9IChvZmZzZXQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgIGNvbnRlbnQgKz0gYFxcdTAwMWJbJHtvZmZzZXR9QmA7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgIGNvbnRlbnQgKz0gYFxcdTAwMWJbJHstb2Zmc2V0fUFgO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoY3Vyc29yTW92ZWQpIHtcbiAgICAgICAgbW92ZURvd24ocmVhbEN1cnNvclJvdyAtIHRoaXMuX2xhc3RDdXJzb3JSb3cpO1xuICAgICAgICBtb3ZlUmlnaHQocmVhbEN1cnNvckNvbCAtIHRoaXMuX2xhc3RDdXJzb3JDb2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgc3R5bGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20veHRlcm1qcy94dGVybS5qcy9pc3N1ZXMvMzY3N1xuICAgIC8vIEhBQ0s6IEludGVybmFsIEFQSSBhY2Nlc3Mgc2luY2UgaXQncyBhd2t3YXJkIHRvIGV4cG9zZSB0aGlzIGluIHRoZSBBUEkgYW5kIHNlcmlhbGl6ZSB3aWxsXG4gICAgLy8gbGlrZWx5IGJlIHRoZSBvbmx5IGNvbnN1bWVyXG4gICAgY29uc3QgY3VyQXR0ckRhdGE6IElBdHRyaWJ1dGVEYXRhID0gKHRoaXMuX3Rlcm1pbmFsIGFzIGFueSkuX2NvcmUuX2lucHV0SGFuZGxlci5fY3VyQXR0ckRhdGE7XG4gICAgY29uc3Qgc2dyU2VxID0gdGhpcy5fZGlmZlN0eWxlKGN1ckF0dHJEYXRhLCB0aGlzLl9jdXJzb3JTdHlsZSk7XG4gICAgaWYgKHNnclNlcS5sZW5ndGggPiAwKSB7XG4gICAgICBjb250ZW50ICs9IGBcXHUwMDFiWyR7c2dyU2VxLmpvaW4oJzsnKX1tYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VyaWFsaXplQWRkb24gaW1wbGVtZW50cyBJVGVybWluYWxBZGRvbiAsIElTZXJpYWxpemVBcGkge1xuICBwcml2YXRlIF90ZXJtaW5hbDogVGVybWluYWwgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFjdGl2YXRlKHRlcm1pbmFsOiBUZXJtaW5hbCk6IHZvaWQge1xuICAgIHRoaXMuX3Rlcm1pbmFsID0gdGVybWluYWw7XG4gIH1cblxuICBwcml2YXRlIF9zZXJpYWxpemVCdWZmZXJCeVNjcm9sbGJhY2sodGVybWluYWw6IFRlcm1pbmFsLCBidWZmZXI6IElCdWZmZXIsIHNjcm9sbGJhY2s/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1heFJvd3MgPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IGNvcnJlY3RSb3dzID0gKHNjcm9sbGJhY2sgPT09IHVuZGVmaW5lZCkgPyBtYXhSb3dzIDogY29uc3RyYWluKHNjcm9sbGJhY2sgKyB0ZXJtaW5hbC5yb3dzLCAwLCBtYXhSb3dzKTtcbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlSYW5nZSh0ZXJtaW5hbCwgYnVmZmVyLCB7XG4gICAgICBzdGFydDogbWF4Um93cyAtIGNvcnJlY3RSb3dzLFxuICAgICAgZW5kOiBtYXhSb3dzIC0gMVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZUJ1ZmZlckJ5UmFuZ2UodGVybWluYWw6IFRlcm1pbmFsLCBidWZmZXI6IElCdWZmZXIsIHJhbmdlOiBJU2VyaWFsaXplUmFuZ2UsIGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IFN0cmluZ1NlcmlhbGl6ZUhhbmRsZXIoYnVmZmVyLCB0ZXJtaW5hbCk7XG4gICAgcmV0dXJuIGhhbmRsZXIuc2VyaWFsaXplKHtcbiAgICAgIHN0YXJ0OiB7IHg6IDAsICAgICAgICAgICAgIHk6IHR5cGVvZiByYW5nZS5zdGFydCA9PT0gJ251bWJlcicgPyByYW5nZS5zdGFydCA6IHJhbmdlLnN0YXJ0LmxpbmUgfSxcbiAgICAgIGVuZDogICB7IHg6IHRlcm1pbmFsLmNvbHMsIHk6IHR5cGVvZiByYW5nZS5lbmQgICA9PT0gJ251bWJlcicgPyByYW5nZS5lbmQgICA6IHJhbmdlLmVuZC5saW5lICAgfVxuICAgIH0sIGV4Y2x1ZGVGaW5hbEN1cnNvclBvc2l0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcmlhbGl6ZUJ1ZmZlckFzSFRNTCh0ZXJtaW5hbDogVGVybWluYWwsIG9wdGlvbnM6IFBhcnRpYWw8SUhUTUxTZXJpYWxpemVPcHRpb25zPik6IHN0cmluZyB7XG4gICAgY29uc3QgYnVmZmVyID0gdGVybWluYWwuYnVmZmVyLmFjdGl2ZTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEhUTUxTZXJpYWxpemVIYW5kbGVyKGJ1ZmZlciwgdGVybWluYWwsIG9wdGlvbnMpO1xuICAgIGNvbnN0IG9ubHlTZWxlY3Rpb24gPSBvcHRpb25zLm9ubHlTZWxlY3Rpb24gPz8gZmFsc2U7XG4gICAgaWYgKCFvbmx5U2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCBtYXhSb3dzID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGNvbnN0IHNjcm9sbGJhY2sgPSBvcHRpb25zLnNjcm9sbGJhY2s7XG4gICAgICBjb25zdCBjb3JyZWN0Um93cyA9IChzY3JvbGxiYWNrID09PSB1bmRlZmluZWQpID8gbWF4Um93cyA6IGNvbnN0cmFpbihzY3JvbGxiYWNrICsgdGVybWluYWwucm93cywgMCwgbWF4Um93cyk7XG4gICAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUoe1xuICAgICAgICBzdGFydDogeyB4OiAwLCAgICAgICAgICAgICB5OiBtYXhSb3dzIC0gY29ycmVjdFJvd3MgfSxcbiAgICAgICAgZW5kOiAgIHsgeDogdGVybWluYWwuY29scywgeTogbWF4Um93cyAtIDEgICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuX3Rlcm1pbmFsPy5nZXRTZWxlY3Rpb25Qb3NpdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGhhbmRsZXIuc2VyaWFsaXplKHtcbiAgICAgICAgc3RhcnQ6IHsgeDogc2VsZWN0aW9uLnN0YXJ0LngsIHk6IHNlbGVjdGlvbi5zdGFydC55IH0sXG4gICAgICAgIGVuZDogICB7IHg6IHNlbGVjdGlvbi5lbmQueCwgICB5OiBzZWxlY3Rpb24uZW5kLnkgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIF9zZXJpYWxpemVNb2Rlcyh0ZXJtaW5hbDogVGVybWluYWwpOiBzdHJpbmcge1xuICAgIGxldCBjb250ZW50ID0gJyc7XG4gICAgY29uc3QgbW9kZXMgPSB0ZXJtaW5hbC5tb2RlcztcblxuICAgIC8vIERlZmF1bHQ6IGZhbHNlXG4gICAgaWYgKG1vZGVzLmFwcGxpY2F0aW9uQ3Vyc29yS2V5c01vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz8xaCc7XG4gICAgaWYgKG1vZGVzLmFwcGxpY2F0aW9uS2V5cGFkTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzY2aCc7XG4gICAgaWYgKG1vZGVzLmJyYWNrZXRlZFBhc3RlTW9kZSkgY29udGVudCArPSAnXFx4MWJbPzIwMDRoJztcbiAgICBpZiAobW9kZXMuaW5zZXJ0TW9kZSkgY29udGVudCArPSAnXFx4MWJbNGgnO1xuICAgIGlmIChtb2Rlcy5vcmlnaW5Nb2RlKSBjb250ZW50ICs9ICdcXHgxYls/NmgnO1xuICAgIGlmIChtb2Rlcy5yZXZlcnNlV3JhcGFyb3VuZE1vZGUpIGNvbnRlbnQgKz0gJ1xceDFiWz80NWgnO1xuICAgIGlmIChtb2Rlcy5zZW5kRm9jdXNNb2RlKSBjb250ZW50ICs9ICdcXHgxYls/MTAwNGgnO1xuXG4gICAgLy8gRGVmYXVsdDogdHJ1ZVxuICAgIGlmIChtb2Rlcy53cmFwYXJvdW5kTW9kZSA9PT0gZmFsc2UpIGNvbnRlbnQgKz0gJ1xceDFiWz83bCc7XG5cbiAgICAvLyBEZWZhdWx0OiAnbm9uZSdcbiAgICBpZiAobW9kZXMubW91c2VUcmFja2luZ01vZGUgIT09ICdub25lJykge1xuICAgICAgc3dpdGNoIChtb2Rlcy5tb3VzZVRyYWNraW5nTW9kZSkge1xuICAgICAgICBjYXNlICd4MTAnOiBjb250ZW50ICs9ICdcXHgxYls/OWgnOyBicmVhaztcbiAgICAgICAgY2FzZSAndnQyMDAnOiBjb250ZW50ICs9ICdcXHgxYls/MTAwMGgnOyBicmVhaztcbiAgICAgICAgY2FzZSAnZHJhZyc6IGNvbnRlbnQgKz0gJ1xceDFiWz8xMDAyaCc7IGJyZWFrO1xuICAgICAgICBjYXNlICdhbnknOiBjb250ZW50ICs9ICdcXHgxYls/MTAwM2gnOyBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXJpYWxpemUob3B0aW9ucz86IElTZXJpYWxpemVPcHRpb25zKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBBZGQgY29tYmluZWREYXRhIHN1cHBvcnRcbiAgICBpZiAoIXRoaXMuX3Rlcm1pbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYWRkb24gdW50aWwgaXQgaGFzIGJlZW4gbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsIGJ1ZmZlclxuICAgIGxldCBjb250ZW50ID0gb3B0aW9ucz8ucmFuZ2VcbiAgICAgID8gdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlSYW5nZSh0aGlzLl90ZXJtaW5hbCwgdGhpcy5fdGVybWluYWwuYnVmZmVyLm5vcm1hbCwgb3B0aW9ucy5yYW5nZSwgdHJ1ZSlcbiAgICAgIDogdGhpcy5fc2VyaWFsaXplQnVmZmVyQnlTY3JvbGxiYWNrKHRoaXMuX3Rlcm1pbmFsLCB0aGlzLl90ZXJtaW5hbC5idWZmZXIubm9ybWFsLCBvcHRpb25zPy5zY3JvbGxiYWNrKTtcblxuICAgIC8vIEFsdGVybmF0ZSBidWZmZXJcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVBbHRCdWZmZXIpIHtcbiAgICAgIGlmICh0aGlzLl90ZXJtaW5hbC5idWZmZXIuYWN0aXZlLnR5cGUgPT09ICdhbHRlcm5hdGUnKSB7XG4gICAgICAgIGNvbnN0IGFsdGVybmF0aXZlU2NyZWVuQ29udGVudCA9IHRoaXMuX3NlcmlhbGl6ZUJ1ZmZlckJ5U2Nyb2xsYmFjayh0aGlzLl90ZXJtaW5hbCwgdGhpcy5fdGVybWluYWwuYnVmZmVyLmFsdGVybmF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgY29udGVudCArPSBgXFx1MDAxYls/MTA0OWhcXHUwMDFiW0gke2FsdGVybmF0aXZlU2NyZWVuQ29udGVudH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1vZGVzXG4gICAgaWYgKCFvcHRpb25zPy5leGNsdWRlTW9kZXMpIHtcbiAgICAgIGNvbnRlbnQgKz0gdGhpcy5fc2VyaWFsaXplTW9kZXModGhpcy5fdGVybWluYWwpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZUFzSFRNTChvcHRpb25zPzogUGFydGlhbDxJSFRNTFNlcmlhbGl6ZU9wdGlvbnM+KTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3Rlcm1pbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYWRkb24gdW50aWwgaXQgaGFzIGJlZW4gbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZUJ1ZmZlckFzSFRNTCh0aGlzLl90ZXJtaW5hbCwgb3B0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHsgfVxufVxuXG5leHBvcnQgY2xhc3MgSFRNTFNlcmlhbGl6ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlU2VyaWFsaXplSGFuZGxlciB7XG4gIHByaXZhdGUgX2N1cnJlbnRSb3c6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgX2h0bWxDb250ZW50ID0gJyc7XG5cbiAgcHJpdmF0ZSBfYW5zaUNvbG9yczogUmVhZG9ubHk8SUNvbG9yW10+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJ1ZmZlcjogSUJ1ZmZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXJtaW5hbDogVGVybWluYWwsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogUGFydGlhbDxJSFRNTFNlcmlhbGl6ZU9wdGlvbnM+XG4gICkge1xuICAgIHN1cGVyKGJ1ZmZlcik7XG5cbiAgICAvLyBGb3IgeHRlcm0gaGVhZGxlc3M6IGZhbGxiYWNrIHRvIGFuc2kgY29sb3JzXG4gICAgaWYgKChfdGVybWluYWwgYXMgYW55KS5fY29yZS5fdGhlbWVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLl9hbnNpQ29sb3JzID0gKF90ZXJtaW5hbCBhcyBhbnkpLl9jb3JlLl90aGVtZVNlcnZpY2UuY29sb3JzLmFuc2k7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fYW5zaUNvbG9ycyA9IERFRkFVTFRfQU5TSV9DT0xPUlM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFkU3RhcnQodGFyZ2V0OiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gcGFkU3RyaW5nID8/ICcgJztcbiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggLT0gdGFyZ2V0Lmxlbmd0aDtcbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIHRhcmdldDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfYmVmb3JlU2VyaWFsaXplKHJvd3M6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPGh0bWw+PGJvZHk+PCEtLVN0YXJ0RnJhZ21lbnQtLT48cHJlPic7XG5cbiAgICBsZXQgZm9yZWdyb3VuZCA9ICcjMDAwMDAwJztcbiAgICBsZXQgYmFja2dyb3VuZCA9ICcjZmZmZmZmJztcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5pbmNsdWRlR2xvYmFsQmFja2dyb3VuZCA/PyBmYWxzZSkge1xuICAgICAgZm9yZWdyb3VuZCA9IHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMudGhlbWU/LmZvcmVncm91bmQgPz8gJyNmZmZmZmYnO1xuICAgICAgYmFja2dyb3VuZCA9IHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMudGhlbWU/LmJhY2tncm91bmQgPz8gJyMwMDAwMDAnO1xuICAgIH1cblxuICAgIGNvbnN0IGdsb2JhbFN0eWxlRGVmaW5pdGlvbnMgPSBbXTtcbiAgICBnbG9iYWxTdHlsZURlZmluaXRpb25zLnB1c2goJ2NvbG9yOiAnICsgZm9yZWdyb3VuZCArICc7Jyk7XG4gICAgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucy5wdXNoKCdiYWNrZ3JvdW5kLWNvbG9yOiAnICsgYmFja2dyb3VuZCArICc7Jyk7XG4gICAgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucy5wdXNoKCdmb250LWZhbWlseTogJyArIHRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMuZm9udEZhbWlseSArICc7Jyk7XG4gICAgZ2xvYmFsU3R5bGVEZWZpbml0aW9ucy5wdXNoKCdmb250LXNpemU6ICcgKyB0aGlzLl90ZXJtaW5hbC5vcHRpb25zLmZvbnRTaXplICsgJ3B4OycpO1xuICAgIHRoaXMuX2h0bWxDb250ZW50ICs9ICc8ZGl2IHN0eWxlPVxcJycgKyBnbG9iYWxTdHlsZURlZmluaXRpb25zLmpvaW4oJyAnKSArICdcXCc+JztcbiAgfVxuXG4gIHByb3RlY3RlZCBfYWZ0ZXJTZXJpYWxpemUoKTogdm9pZCB7XG4gICAgdGhpcy5faHRtbENvbnRlbnQgKz0gJzwvZGl2Pic7XG4gICAgdGhpcy5faHRtbENvbnRlbnQgKz0gJzwvcHJlPjwhLS1FbmRGcmFnbWVudC0tPjwvYm9keT48L2h0bWw+JztcbiAgfVxuXG4gIHByb3RlY3RlZCBfcm93RW5kKHJvdzogbnVtYmVyLCBpc0xhc3RSb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9odG1sQ29udGVudCArPSAnPGRpdj48c3Bhbj4nICsgdGhpcy5fY3VycmVudFJvdyArICc8L3NwYW4+PC9kaXY+JztcbiAgICB0aGlzLl9jdXJyZW50Um93ID0gJyc7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIZXhDb2xvcihjZWxsOiBJQnVmZmVyQ2VsbCwgaXNGZzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29sb3IgPSBpc0ZnID8gY2VsbC5nZXRGZ0NvbG9yKCkgOiBjZWxsLmdldEJnQ29sb3IoKTtcbiAgICBpZiAoaXNGZyA/IGNlbGwuaXNGZ1JHQigpIDogY2VsbC5pc0JnUkdCKCkpIHtcbiAgICAgIGNvbnN0IHJnYiA9IFtcbiAgICAgICAgKGNvbG9yID4+IDE2KSAmIDI1NSxcbiAgICAgICAgKGNvbG9yID4+ICA4KSAmIDI1NSxcbiAgICAgICAgKGNvbG9yICAgICAgKSAmIDI1NVxuICAgICAgXTtcbiAgICAgIHJldHVybiAnIycgKyByZ2IubWFwKHggPT4gdGhpcy5fcGFkU3RhcnQoeC50b1N0cmluZygxNiksIDIsICcwJykpLmpvaW4oJycpO1xuICAgIH1cbiAgICBpZiAoaXNGZyA/IGNlbGwuaXNGZ1BhbGV0dGUoKSA6IGNlbGwuaXNCZ1BhbGV0dGUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Fuc2lDb2xvcnNbY29sb3JdLmNzcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX2RpZmZTdHlsZShjZWxsOiBJQnVmZmVyQ2VsbCwgb2xkQ2VsbDogSUJ1ZmZlckNlbGwpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnN0IGZnQ2hhbmdlZCA9ICFlcXVhbEZnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGJnQ2hhbmdlZCA9ICFlcXVhbEJnKGNlbGwsIG9sZENlbGwpO1xuICAgIGNvbnN0IGZsYWdzQ2hhbmdlZCA9ICFlcXVhbEZsYWdzKGNlbGwsIG9sZENlbGwpO1xuXG4gICAgaWYgKGZnQ2hhbmdlZCB8fCBiZ0NoYW5nZWQgfHwgZmxhZ3NDaGFuZ2VkKSB7XG4gICAgICBjb25zdCBmZ0hleENvbG9yID0gdGhpcy5fZ2V0SGV4Q29sb3IoY2VsbCwgdHJ1ZSk7XG4gICAgICBpZiAoZmdIZXhDb2xvcikge1xuICAgICAgICBjb250ZW50LnB1c2goJ2NvbG9yOiAnICsgZmdIZXhDb2xvciArICc7Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJnSGV4Q29sb3IgPSB0aGlzLl9nZXRIZXhDb2xvcihjZWxsLCBmYWxzZSk7XG4gICAgICBpZiAoYmdIZXhDb2xvcikge1xuICAgICAgICBjb250ZW50LnB1c2goJ2JhY2tncm91bmQtY29sb3I6ICcgKyBiZ0hleENvbG9yICsgJzsnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwuaXNJbnZlcnNlKCkpIHsgY29udGVudC5wdXNoKCdjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0JGQkZCRjsnKTsgfVxuICAgICAgaWYgKGNlbGwuaXNCb2xkKCkpIHsgY29udGVudC5wdXNoKCdmb250LXdlaWdodDogYm9sZDsnKTsgfVxuICAgICAgaWYgKGNlbGwuaXNVbmRlcmxpbmUoKSAmJiBjZWxsLmlzT3ZlcmxpbmUoKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmUgdW5kZXJsaW5lOycpOyB9XG4gICAgICBlbHNlIGlmIChjZWxsLmlzVW5kZXJsaW5lKCkpIHsgY29udGVudC5wdXNoKCd0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsnKTsgfVxuICAgICAgZWxzZSBpZiAoY2VsbC5pc092ZXJsaW5lKCkpIHsgY29udGVudC5wdXNoKCd0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0JsaW5rKCkpIHsgY29udGVudC5wdXNoKCd0ZXh0LWRlY29yYXRpb246IGJsaW5rOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0ludmlzaWJsZSgpKSB7IGNvbnRlbnQucHVzaCgndmlzaWJpbGl0eTogaGlkZGVuOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0l0YWxpYygpKSB7IGNvbnRlbnQucHVzaCgnZm9udC1zdHlsZTogaXRhbGljOycpOyB9XG4gICAgICBpZiAoY2VsbC5pc0RpbSgpKSB7IGNvbnRlbnQucHVzaCgnb3BhY2l0eTogMC41OycpOyB9XG4gICAgICBpZiAoY2VsbC5pc1N0cmlrZXRocm91Z2goKSkgeyBjb250ZW50LnB1c2goJ3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOycpOyB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgX25leHRDZWxsKGNlbGw6IElCdWZmZXJDZWxsLCBvbGRDZWxsOiBJQnVmZmVyQ2VsbCwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYSB3aWR0aCAwIGNlbGwgZG9uJ3QgbmVlZCB0byBiZSBjb3VudCBiZWNhdXNlIGl0IGlzIGp1c3QgYSBwbGFjZWhvbGRlciBhZnRlciBhIENKSyBjaGFyYWN0ZXI7XG4gICAgY29uc3QgaXNQbGFjZUhvbGRlckNlbGwgPSBjZWxsLmdldFdpZHRoKCkgPT09IDA7XG4gICAgaWYgKGlzUGxhY2VIb2xkZXJDZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjZWxsIGRvbid0IGhhdmUgY29udGVudFxuICAgIGNvbnN0IGlzRW1wdHlDZWxsID0gY2VsbC5nZXRDaGFycygpID09PSAnJztcblxuICAgIGNvbnN0IHN0eWxlRGVmaW5pdGlvbnMgPSB0aGlzLl9kaWZmU3R5bGUoY2VsbCwgb2xkQ2VsbCk7XG5cbiAgICAvLyBoYW5kbGVzIHN0eWxlIGNoYW5nZVxuICAgIGlmIChzdHlsZURlZmluaXRpb25zKSB7XG4gICAgICB0aGlzLl9jdXJyZW50Um93ICs9IHN0eWxlRGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID9cbiAgICAgICAgJzwvc3Bhbj48c3Bhbj4nIDpcbiAgICAgICAgJzwvc3Bhbj48c3BhbiBzdHlsZT1cXCcnICsgc3R5bGVEZWZpbml0aW9ucy5qb2luKCcgJykgKyAnXFwnPic7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlcyBhY3R1YWwgY29udGVudFxuICAgIGlmIChpc0VtcHR5Q2VsbCkge1xuICAgICAgdGhpcy5fY3VycmVudFJvdyArPSAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRSb3cgKz0gY2VsbC5nZXRDaGFycygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfc2VyaWFsaXplU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2h0bWxDb250ZW50O1xuICB9XG59XG4iXX0=