Skip to content

Instantly share code, notes, and snippets.

@simevidas
Created March 2, 2014 05:00
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save simevidas/9302143 to your computer and use it in GitHub Desktop.
"Exception caught during observer callback: @data:text/javascript;base64,CiAgICBQb2x5bWVyKCdwb2x5bWVyLXNlbGVjdG9yJywgewogICAgICAvKioKICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBzZWxlY3RlZCBlbGVtZW50LiAgRGVmYXVsdCB0byB1c2UgdGhlIGluZGV4CiAgICAgICAqIG9mIHRoZSBpdGVtIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIElmIHlvdSB3YW50IGEgc3BlY2lmaWMgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIGJlCiAgICAgICAqIHVzZWQgaW5zdGVhZCBvZiBpbmRleCwgc2V0ICJ2YWx1ZWF0dHIiIHRvIHRoYXQgYXR0cmlidXRlIG5hbWUuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB2YWx1ZWF0dHI9ImxhYmVsIiBzZWxlY3RlZD0iZm9vIj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iZm9vIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iYmFyIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iem90Ij48L2Rpdj4KICAgICAgICogICAgIDwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICoKICAgICAgICogSW4gbXVsdGktc2VsZWN0aW9uIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHZhbHVlcy4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICAgIDxwb2x5bWVyLXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgdmFsdWVhdHRyPSJsYWJlbCIgbXVsdGk+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImZvbyI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImJhciI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9InpvdCI+PC9kaXY+CiAgICAgICAqICAgICA8L3BvbHltZXItc2VsZWN0b3I+CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLiQuc2VsZWN0b3Iuc2VsZWN0ZWQgPSBbJ2ZvbycsICd6b3QnXTsKICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZAogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICogQGRlZmF1bHQgbnVsbAogICAgICAgKi8KICAgICAgc2VsZWN0ZWQ6IG51bGwsCiAgICAgIC8qKgogICAgICAgKiBJZiB0cnVlLCBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBhbGxvd2VkLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIG11bHRpCiAgICAgICAqIEB0eXBlIGJvb2xlYW4KICAgICAgICogQGRlZmF1bHQgZmFsc2UKICAgICAgICovCiAgICAgIG11bHRpOiBmYWxzZSwKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yICJzZWxlY3RlZCIgYXR0cmlidXRlLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIHZhbHVlYXR0cgogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ25hbWUnCiAgICAgICAqLwogICAgICB2YWx1ZWF0dHI6ICduYW1lJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgQ1NTIGNsYXNzIHRvIGJlIHVzZWQgdG8gYWRkIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZENsYXNzCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAncG9seW1lci1zZWxlY3RlZCcKICAgICAgICovCiAgICAgIHNlbGVjdGVkQ2xhc3M6ICdwb2x5bWVyLXNlbGVjdGVkJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCB0byBzZXQgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQKICAgICAgICogdG8gaW5kaWNhdGUgaXRzIGFjdGl2ZSBzdGF0ZS4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZFByb3BlcnR5CiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgc2VsZWN0ZWRQcm9wZXJ0eTogJycsCiAgICAgIC8qKgogICAgICAgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgdG8gc2V0IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50CiAgICAgICAqIHRvIGluZGljYXRlIGl0cyBhY3RpdmUgc3RhdGUuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgc2VsZWN0ZWRQcm9wZXJ0eQogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ2FjdGl2ZScKICAgICAgICovCiAgICAgIHNlbGVjdGVkQXR0cmlidXRlOiAnYWN0aXZlJywKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50LiBJbiBtdWx0aS1zZWxlY3Rpb24gdGhpcyByZXR1cm5zCiAgICAgICAqIGFuIGFycmF5IG9mIHNlbGVjdGVkIGVsZW1lbnRzLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEl0ZW0KICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHNlbGVjdGVkSXRlbTogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIEluIHNpbmdsZSBzZWxlY3Rpb24sIHRoaXMgcmV0dXJucyB0aGUgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAgICAgKiBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZE1vZGVsCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKiBAZGVmYXVsdCBudWxsCiAgICAgICAqLwogICAgICBzZWxlY3RlZE1vZGVsOiBudWxsLAogICAgICAvKioKICAgICAgICogSW4gc2luZ2xlIHNlbGVjdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBzZWxlY3RlZCBpbmRleC4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEluZGV4CiAgICAgICAqIEB0eXBlIG51bWJlcgogICAgICAgKiBAZGVmYXVsdCAtMQogICAgICAgKi8KICAgICAgc2VsZWN0ZWRJbmRleDogLTEsCiAgICAgIC8qKgogICAgICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgdGhhdCBjb250YWlucyBpdGVtcy4gIElmIHRoaXMgaXMgbm90IHNldCAKICAgICAgICogcG9seW1lci1zZWxlY3RvciBpcyB0aGUgY29udGFpbmVyLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSB0YXJnZXQKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcXVlcnkgbm9kZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdG8gYmUgdXNlZCBmb3IgCiAgICAgICAqIHNlbGVjdGlvbiBpdGVtcy4gIE5vdGUgdGhpcyBvbmx5IHdvcmtzIGlmIHRoZSAndGFyZ2V0JyBwcm9wZXJ0eSBpcyBzZXQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB0YXJnZXQ9Int7JC5teUZvcm19fSIgaXRlbXNTZWxlY3Rvcj0iaW5wdXRbdHlwZT1yYWRpb10iPjwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICogICAgIDxmb3JtIGlkPSJteUZvcm0iPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9InJlZCI+IFJlZDwvbGFiZWw+IDxicj4KICAgICAgICogICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iY29sb3IiIHZhbHVlPSJncmVlbiI+IEdyZWVuPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9ImJsdWUiPiBCbHVlPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8cD5jb2xvciA9IHt7Y29sb3J9fTwvcD4KICAgICAgICogICAgIDwvZm9ybT4KICAgICAgICogCiAgICAgICAqIEBhdHRyaWJ1dGUgaXRlbVNlbGVjdG9yCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgaXRlbXNTZWxlY3RvcjogJycsCiAgICAgIC8qKgogICAgICAgKiBUaGUgZXZlbnQgdGhhdCB3b3VsZCBiZSBmaXJlZCBmcm9tIHRoZSBpdGVtIGVsZW1lbnQgdG8gaW5kaWNhdGUKICAgICAgICogaXQgaXMgYmVpbmcgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgYWN0aXZhdGVFdmVudAogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ3RhcCcKICAgICAgICovCiAgICAgIGFjdGl2YXRlRXZlbnQ6ICd0YXAnLAogICAgICBub3RhcDogZmFsc2UsCiAgICAgIHJlYWR5OiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmFjdGl2YXRlTGlzdGVuZXIgPSB0aGlzLmFjdGl2YXRlSGFuZGxlci5iaW5kKHRoaXMpOwogICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnVwZGF0ZVNlbGVjdGVkLmJpbmQodGhpcykpOwogICAgICAgIGlmICghdGhpcy50YXJnZXQpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpczsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdldCBpdGVtcygpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnRhcmdldCAhPT0gdGhpcyA/ICh0aGlzLml0ZW1zU2VsZWN0b3IgPyAKICAgICAgICAgICAgdGhpcy50YXJnZXQucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpIDogCiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5jaGlsZHJlbikgOiB0aGlzLiQuaXRlbXMuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOwogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwobm9kZXMgfHwgW10sIGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiBuICYmIG4ubG9jYWxOYW1lICE9PSAndGVtcGxhdGUnOwogICAgICAgIH0pOwogICAgICB9LAogICAgICB0YXJnZXRDaGFuZ2VkOiBmdW5jdGlvbihvbGQpIHsKICAgICAgICBpZiAob2xkKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKG9sZCk7CiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7CiAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyKHRoaXMudGFyZ2V0KTsKICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhcmdldCwge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50LCB0aGlzLmFjdGl2YXRlTGlzdGVuZXIpOwogICAgICB9LAogICAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSkgewogICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQsIHRoaXMuYWN0aXZhdGVMaXN0ZW5lcik7CiAgICAgIH0sCiAgICAgIGdldCBzZWxlY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCk7CiAgICAgIH0sCiAgICAgIHNlbGVjdGVkQ2hhbmdlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZCgpOwogICAgICB9LAogICAgICB1cGRhdGVTZWxlY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy52YWxpZGF0ZVNlbGVjdGVkKCk7CiAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZVRvU2VsZWN0aW9uKHMpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudmFsdWVUb1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZhbGlkYXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gYXJyYXkgZm9yIG11bHRpLXNlbGVjdGlvbgogICAgICAgIGlmICh0aGlzLm11bHRpICYmICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpICYmIAogICAgICAgICAgICB0aGlzLnNlbGVjdGVkICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFt0aGlzLnNlbGVjdGVkXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy4kLnNlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQocywgZmFsc2UpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJC5zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHZhbHVlVG9TZWxlY3Rpb246IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGl0ZW0gPSAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyAKICAgICAgICAgICAgbnVsbCA6IHRoaXMuaXRlbXNbdGhpcy52YWx1ZVRvSW5kZXgodmFsdWUpXTsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLnNlbGVjdChpdGVtKTsKICAgICAgfSwKICAgICAgdXBkYXRlU2VsZWN0ZWRJdGVtOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0aW9uOwogICAgICB9LAogICAgICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIHZhciB0ID0gdGhpcy5zZWxlY3RlZEl0ZW0udGVtcGxhdGVJbnN0YW5jZTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IHQgPyB0Lm1vZGVsIDogdW5kZWZpbmVkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBudWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbSA/IAogICAgICAgICAgICBwYXJzZUludCh0aGlzLnZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkgOiAtMTsKICAgICAgfSwKICAgICAgdmFsdWVUb0luZGV4OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIC8vIGZpbmQgYW4gaXRlbSB3aXRoIHZhbHVlID09IHZhbHVlIGFuZCByZXR1cm4gaXQncyBpbmRleAogICAgICAgIGZvciAodmFyIGk9MCwgaXRlbXM9dGhpcy5pdGVtcywgYzsgKGM9aXRlbXNbaV0pOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlRm9yTm9kZShjKSA9PSB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gaWYgbm8gaXRlbSBmb3VuZCwgdGhlIHZhbHVlIGl0c2VsZiBpcyBwcm9iYWJseSB0aGUgaW5kZXgKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0sCiAgICAgIHZhbHVlRm9yTm9kZTogZnVuY3Rpb24obm9kZSkgewogICAgICAgIHJldHVybiBub2RlW3RoaXMudmFsdWVhdHRyXSB8fCBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnZhbHVlYXR0cik7CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50cyBmaXJlZCBmcm9tIDxwb2x5bWVyLXNlbGVjdGlvbj4gb2JqZWN0CiAgICAgIHNlbGVjdGlvblNlbGVjdDogZnVuY3Rpb24oZSwgZGV0YWlsKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBpZiAoZGV0YWlsLml0ZW0pIHsKICAgICAgICAgIHRoaXMuYXBwbHlTZWxlY3Rpb24oZGV0YWlsLml0ZW0sIGRldGFpbC5pc1NlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFwcGx5U2VsZWN0aW9uOiBmdW5jdGlvbihpdGVtLCBpc1NlbGVjdGVkKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykgewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuc2VsZWN0ZWRDbGFzcywgaXNTZWxlY3RlZCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvcGVydHkpIHsKICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZFByb3BlcnR5XSA9IGlzU2VsZWN0ZWQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0cmlidXRlICYmIGl0ZW0uc2V0QXR0cmlidXRlKSB7CiAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkgewogICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlLCAnJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50IGZpcmVkIGZyb20gaG9zdAogICAgICBhY3RpdmF0ZUhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIXRoaXMubm90YXApIHsKICAgICAgICAgIHZhciBpID0gdGhpcy5maW5kRGlzdHJpYnV0ZWRUYXJnZXQoZS50YXJnZXQsIHRoaXMuaXRlbXMpOwogICAgICAgICAgaWYgKGkgPj0gMCkgewogICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07CiAgICAgICAgICAgIHZhciBzID0gdGhpcy52YWx1ZUZvck5vZGUoaXRlbSkgfHwgaTsKICAgICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgdGhpcy5hZGRSZW1vdmVTZWxlY3RlZChzKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtzXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hc3luY0ZpcmUoJ3BvbHltZXItYWN0aXZhdGUnLCB7aXRlbTogaXRlbX0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkUmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGkgPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodmFsdWUpOwogICAgICAgIGlmIChpID49IDApIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGksIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2godmFsdWUpOwogICAgICAgIH0KICAgICAgICB0aGlzLnZhbHVlVG9TZWxlY3Rpb24odmFsdWUpOwogICAgICB9LAogICAgICBmaW5kRGlzdHJpYnV0ZWRUYXJnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgbm9kZXMpIHsKICAgICAgICAvLyBmaW5kIGZpcnN0IGFuY2VzdG9yIG9mIHRhcmdldCAoaW5jbHVkaW5nIGl0c2VsZikgdGhhdAogICAgICAgIC8vIGlzIGluIG5vZGVzLCBpZiBhbnkKICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSB0aGlzKSB7CiAgICAgICAgICB2YXIgaSA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobm9kZXMsIHRhcmdldCk7CiAgICAgICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfQogICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAKLy8jIHNvdXJjZVVSTD1odHRwOi8vYWRkeW9zbWFuaS5naXRodWIuaW8vcG9seW1lci11aS1jYXJvdXNlbC9ib3dlcl9jb21wb25lbnRzL3BvbHltZXItc2VsZWN0b3IvcG9seW1lci1zZWxlY3Rvci5odG1sL3BvbHltZXItc2VsZWN0b3IuanMK:151
@data:text/javascript;base64,CiAgICBQb2x5bWVyKCdwb2x5bWVyLXNlbGVjdG9yJywgewogICAgICAvKioKICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBzZWxlY3RlZCBlbGVtZW50LiAgRGVmYXVsdCB0byB1c2UgdGhlIGluZGV4CiAgICAgICAqIG9mIHRoZSBpdGVtIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIElmIHlvdSB3YW50IGEgc3BlY2lmaWMgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIGJlCiAgICAgICAqIHVzZWQgaW5zdGVhZCBvZiBpbmRleCwgc2V0ICJ2YWx1ZWF0dHIiIHRvIHRoYXQgYXR0cmlidXRlIG5hbWUuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB2YWx1ZWF0dHI9ImxhYmVsIiBzZWxlY3RlZD0iZm9vIj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iZm9vIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iYmFyIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iem90Ij48L2Rpdj4KICAgICAgICogICAgIDwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICoKICAgICAgICogSW4gbXVsdGktc2VsZWN0aW9uIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHZhbHVlcy4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICAgIDxwb2x5bWVyLXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgdmFsdWVhdHRyPSJsYWJlbCIgbXVsdGk+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImZvbyI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImJhciI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9InpvdCI+PC9kaXY+CiAgICAgICAqICAgICA8L3BvbHltZXItc2VsZWN0b3I+CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLiQuc2VsZWN0b3Iuc2VsZWN0ZWQgPSBbJ2ZvbycsICd6b3QnXTsKICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZAogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICogQGRlZmF1bHQgbnVsbAogICAgICAgKi8KICAgICAgc2VsZWN0ZWQ6IG51bGwsCiAgICAgIC8qKgogICAgICAgKiBJZiB0cnVlLCBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBhbGxvd2VkLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIG11bHRpCiAgICAgICAqIEB0eXBlIGJvb2xlYW4KICAgICAgICogQGRlZmF1bHQgZmFsc2UKICAgICAgICovCiAgICAgIG11bHRpOiBmYWxzZSwKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yICJzZWxlY3RlZCIgYXR0cmlidXRlLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIHZhbHVlYXR0cgogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ25hbWUnCiAgICAgICAqLwogICAgICB2YWx1ZWF0dHI6ICduYW1lJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgQ1NTIGNsYXNzIHRvIGJlIHVzZWQgdG8gYWRkIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZENsYXNzCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAncG9seW1lci1zZWxlY3RlZCcKICAgICAgICovCiAgICAgIHNlbGVjdGVkQ2xhc3M6ICdwb2x5bWVyLXNlbGVjdGVkJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCB0byBzZXQgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQKICAgICAgICogdG8gaW5kaWNhdGUgaXRzIGFjdGl2ZSBzdGF0ZS4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZFByb3BlcnR5CiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgc2VsZWN0ZWRQcm9wZXJ0eTogJycsCiAgICAgIC8qKgogICAgICAgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgdG8gc2V0IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50CiAgICAgICAqIHRvIGluZGljYXRlIGl0cyBhY3RpdmUgc3RhdGUuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgc2VsZWN0ZWRQcm9wZXJ0eQogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ2FjdGl2ZScKICAgICAgICovCiAgICAgIHNlbGVjdGVkQXR0cmlidXRlOiAnYWN0aXZlJywKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50LiBJbiBtdWx0aS1zZWxlY3Rpb24gdGhpcyByZXR1cm5zCiAgICAgICAqIGFuIGFycmF5IG9mIHNlbGVjdGVkIGVsZW1lbnRzLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEl0ZW0KICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHNlbGVjdGVkSXRlbTogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIEluIHNpbmdsZSBzZWxlY3Rpb24sIHRoaXMgcmV0dXJucyB0aGUgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAgICAgKiBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZE1vZGVsCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKiBAZGVmYXVsdCBudWxsCiAgICAgICAqLwogICAgICBzZWxlY3RlZE1vZGVsOiBudWxsLAogICAgICAvKioKICAgICAgICogSW4gc2luZ2xlIHNlbGVjdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBzZWxlY3RlZCBpbmRleC4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEluZGV4CiAgICAgICAqIEB0eXBlIG51bWJlcgogICAgICAgKiBAZGVmYXVsdCAtMQogICAgICAgKi8KICAgICAgc2VsZWN0ZWRJbmRleDogLTEsCiAgICAgIC8qKgogICAgICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgdGhhdCBjb250YWlucyBpdGVtcy4gIElmIHRoaXMgaXMgbm90IHNldCAKICAgICAgICogcG9seW1lci1zZWxlY3RvciBpcyB0aGUgY29udGFpbmVyLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSB0YXJnZXQKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcXVlcnkgbm9kZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdG8gYmUgdXNlZCBmb3IgCiAgICAgICAqIHNlbGVjdGlvbiBpdGVtcy4gIE5vdGUgdGhpcyBvbmx5IHdvcmtzIGlmIHRoZSAndGFyZ2V0JyBwcm9wZXJ0eSBpcyBzZXQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB0YXJnZXQ9Int7JC5teUZvcm19fSIgaXRlbXNTZWxlY3Rvcj0iaW5wdXRbdHlwZT1yYWRpb10iPjwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICogICAgIDxmb3JtIGlkPSJteUZvcm0iPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9InJlZCI+IFJlZDwvbGFiZWw+IDxicj4KICAgICAgICogICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iY29sb3IiIHZhbHVlPSJncmVlbiI+IEdyZWVuPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9ImJsdWUiPiBCbHVlPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8cD5jb2xvciA9IHt7Y29sb3J9fTwvcD4KICAgICAgICogICAgIDwvZm9ybT4KICAgICAgICogCiAgICAgICAqIEBhdHRyaWJ1dGUgaXRlbVNlbGVjdG9yCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgaXRlbXNTZWxlY3RvcjogJycsCiAgICAgIC8qKgogICAgICAgKiBUaGUgZXZlbnQgdGhhdCB3b3VsZCBiZSBmaXJlZCBmcm9tIHRoZSBpdGVtIGVsZW1lbnQgdG8gaW5kaWNhdGUKICAgICAgICogaXQgaXMgYmVpbmcgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgYWN0aXZhdGVFdmVudAogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ3RhcCcKICAgICAgICovCiAgICAgIGFjdGl2YXRlRXZlbnQ6ICd0YXAnLAogICAgICBub3RhcDogZmFsc2UsCiAgICAgIHJlYWR5OiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmFjdGl2YXRlTGlzdGVuZXIgPSB0aGlzLmFjdGl2YXRlSGFuZGxlci5iaW5kKHRoaXMpOwogICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnVwZGF0ZVNlbGVjdGVkLmJpbmQodGhpcykpOwogICAgICAgIGlmICghdGhpcy50YXJnZXQpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpczsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdldCBpdGVtcygpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnRhcmdldCAhPT0gdGhpcyA/ICh0aGlzLml0ZW1zU2VsZWN0b3IgPyAKICAgICAgICAgICAgdGhpcy50YXJnZXQucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpIDogCiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5jaGlsZHJlbikgOiB0aGlzLiQuaXRlbXMuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOwogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwobm9kZXMgfHwgW10sIGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiBuICYmIG4ubG9jYWxOYW1lICE9PSAndGVtcGxhdGUnOwogICAgICAgIH0pOwogICAgICB9LAogICAgICB0YXJnZXRDaGFuZ2VkOiBmdW5jdGlvbihvbGQpIHsKICAgICAgICBpZiAob2xkKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKG9sZCk7CiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7CiAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyKHRoaXMudGFyZ2V0KTsKICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhcmdldCwge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50LCB0aGlzLmFjdGl2YXRlTGlzdGVuZXIpOwogICAgICB9LAogICAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSkgewogICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQsIHRoaXMuYWN0aXZhdGVMaXN0ZW5lcik7CiAgICAgIH0sCiAgICAgIGdldCBzZWxlY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCk7CiAgICAgIH0sCiAgICAgIHNlbGVjdGVkQ2hhbmdlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZCgpOwogICAgICB9LAogICAgICB1cGRhdGVTZWxlY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy52YWxpZGF0ZVNlbGVjdGVkKCk7CiAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZVRvU2VsZWN0aW9uKHMpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudmFsdWVUb1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZhbGlkYXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gYXJyYXkgZm9yIG11bHRpLXNlbGVjdGlvbgogICAgICAgIGlmICh0aGlzLm11bHRpICYmICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpICYmIAogICAgICAgICAgICB0aGlzLnNlbGVjdGVkICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFt0aGlzLnNlbGVjdGVkXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy4kLnNlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQocywgZmFsc2UpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJC5zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHZhbHVlVG9TZWxlY3Rpb246IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGl0ZW0gPSAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyAKICAgICAgICAgICAgbnVsbCA6IHRoaXMuaXRlbXNbdGhpcy52YWx1ZVRvSW5kZXgodmFsdWUpXTsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLnNlbGVjdChpdGVtKTsKICAgICAgfSwKICAgICAgdXBkYXRlU2VsZWN0ZWRJdGVtOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0aW9uOwogICAgICB9LAogICAgICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIHZhciB0ID0gdGhpcy5zZWxlY3RlZEl0ZW0udGVtcGxhdGVJbnN0YW5jZTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IHQgPyB0Lm1vZGVsIDogdW5kZWZpbmVkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBudWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbSA/IAogICAgICAgICAgICBwYXJzZUludCh0aGlzLnZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkgOiAtMTsKICAgICAgfSwKICAgICAgdmFsdWVUb0luZGV4OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIC8vIGZpbmQgYW4gaXRlbSB3aXRoIHZhbHVlID09IHZhbHVlIGFuZCByZXR1cm4gaXQncyBpbmRleAogICAgICAgIGZvciAodmFyIGk9MCwgaXRlbXM9dGhpcy5pdGVtcywgYzsgKGM9aXRlbXNbaV0pOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlRm9yTm9kZShjKSA9PSB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gaWYgbm8gaXRlbSBmb3VuZCwgdGhlIHZhbHVlIGl0c2VsZiBpcyBwcm9iYWJseSB0aGUgaW5kZXgKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0sCiAgICAgIHZhbHVlRm9yTm9kZTogZnVuY3Rpb24obm9kZSkgewogICAgICAgIHJldHVybiBub2RlW3RoaXMudmFsdWVhdHRyXSB8fCBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnZhbHVlYXR0cik7CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50cyBmaXJlZCBmcm9tIDxwb2x5bWVyLXNlbGVjdGlvbj4gb2JqZWN0CiAgICAgIHNlbGVjdGlvblNlbGVjdDogZnVuY3Rpb24oZSwgZGV0YWlsKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBpZiAoZGV0YWlsLml0ZW0pIHsKICAgICAgICAgIHRoaXMuYXBwbHlTZWxlY3Rpb24oZGV0YWlsLml0ZW0sIGRldGFpbC5pc1NlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFwcGx5U2VsZWN0aW9uOiBmdW5jdGlvbihpdGVtLCBpc1NlbGVjdGVkKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykgewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuc2VsZWN0ZWRDbGFzcywgaXNTZWxlY3RlZCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvcGVydHkpIHsKICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZFByb3BlcnR5XSA9IGlzU2VsZWN0ZWQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0cmlidXRlICYmIGl0ZW0uc2V0QXR0cmlidXRlKSB7CiAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkgewogICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlLCAnJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50IGZpcmVkIGZyb20gaG9zdAogICAgICBhY3RpdmF0ZUhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIXRoaXMubm90YXApIHsKICAgICAgICAgIHZhciBpID0gdGhpcy5maW5kRGlzdHJpYnV0ZWRUYXJnZXQoZS50YXJnZXQsIHRoaXMuaXRlbXMpOwogICAgICAgICAgaWYgKGkgPj0gMCkgewogICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07CiAgICAgICAgICAgIHZhciBzID0gdGhpcy52YWx1ZUZvck5vZGUoaXRlbSkgfHwgaTsKICAgICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgdGhpcy5hZGRSZW1vdmVTZWxlY3RlZChzKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtzXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hc3luY0ZpcmUoJ3BvbHltZXItYWN0aXZhdGUnLCB7aXRlbTogaXRlbX0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkUmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGkgPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodmFsdWUpOwogICAgICAgIGlmIChpID49IDApIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGksIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2godmFsdWUpOwogICAgICAgIH0KICAgICAgICB0aGlzLnZhbHVlVG9TZWxlY3Rpb24odmFsdWUpOwogICAgICB9LAogICAgICBmaW5kRGlzdHJpYnV0ZWRUYXJnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgbm9kZXMpIHsKICAgICAgICAvLyBmaW5kIGZpcnN0IGFuY2VzdG9yIG9mIHRhcmdldCAoaW5jbHVkaW5nIGl0c2VsZikgdGhhdAogICAgICAgIC8vIGlzIGluIG5vZGVzLCBpZiBhbnkKICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSB0aGlzKSB7CiAgICAgICAgICB2YXIgaSA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobm9kZXMsIHRhcmdldCk7CiAgICAgICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfQogICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAKLy8jIHNvdXJjZVVSTD1odHRwOi8vYWRkeW9zbWFuaS5naXRodWIuaW8vcG9seW1lci11aS1jYXJvdXNlbC9ib3dlcl9jb21wb25lbnRzL3BvbHltZXItc2VsZWN0b3IvcG9seW1lci1zZWxlY3Rvci5odG1sL3BvbHltZXItc2VsZWN0b3IuanMK:209
@data:text/javascript;base64,CiAgICBQb2x5bWVyKCdwb2x5bWVyLXNlbGVjdG9yJywgewogICAgICAvKioKICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBzZWxlY3RlZCBlbGVtZW50LiAgRGVmYXVsdCB0byB1c2UgdGhlIGluZGV4CiAgICAgICAqIG9mIHRoZSBpdGVtIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIElmIHlvdSB3YW50IGEgc3BlY2lmaWMgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIGJlCiAgICAgICAqIHVzZWQgaW5zdGVhZCBvZiBpbmRleCwgc2V0ICJ2YWx1ZWF0dHIiIHRvIHRoYXQgYXR0cmlidXRlIG5hbWUuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB2YWx1ZWF0dHI9ImxhYmVsIiBzZWxlY3RlZD0iZm9vIj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iZm9vIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iYmFyIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iem90Ij48L2Rpdj4KICAgICAgICogICAgIDwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICoKICAgICAgICogSW4gbXVsdGktc2VsZWN0aW9uIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHZhbHVlcy4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICAgIDxwb2x5bWVyLXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgdmFsdWVhdHRyPSJsYWJlbCIgbXVsdGk+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImZvbyI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImJhciI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9InpvdCI+PC9kaXY+CiAgICAgICAqICAgICA8L3BvbHltZXItc2VsZWN0b3I+CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLiQuc2VsZWN0b3Iuc2VsZWN0ZWQgPSBbJ2ZvbycsICd6b3QnXTsKICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZAogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICogQGRlZmF1bHQgbnVsbAogICAgICAgKi8KICAgICAgc2VsZWN0ZWQ6IG51bGwsCiAgICAgIC8qKgogICAgICAgKiBJZiB0cnVlLCBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBhbGxvd2VkLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIG11bHRpCiAgICAgICAqIEB0eXBlIGJvb2xlYW4KICAgICAgICogQGRlZmF1bHQgZmFsc2UKICAgICAgICovCiAgICAgIG11bHRpOiBmYWxzZSwKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yICJzZWxlY3RlZCIgYXR0cmlidXRlLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIHZhbHVlYXR0cgogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ25hbWUnCiAgICAgICAqLwogICAgICB2YWx1ZWF0dHI6ICduYW1lJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgQ1NTIGNsYXNzIHRvIGJlIHVzZWQgdG8gYWRkIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZENsYXNzCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAncG9seW1lci1zZWxlY3RlZCcKICAgICAgICovCiAgICAgIHNlbGVjdGVkQ2xhc3M6ICdwb2x5bWVyLXNlbGVjdGVkJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCB0byBzZXQgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQKICAgICAgICogdG8gaW5kaWNhdGUgaXRzIGFjdGl2ZSBzdGF0ZS4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZFByb3BlcnR5CiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgc2VsZWN0ZWRQcm9wZXJ0eTogJycsCiAgICAgIC8qKgogICAgICAgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgdG8gc2V0IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50CiAgICAgICAqIHRvIGluZGljYXRlIGl0cyBhY3RpdmUgc3RhdGUuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgc2VsZWN0ZWRQcm9wZXJ0eQogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ2FjdGl2ZScKICAgICAgICovCiAgICAgIHNlbGVjdGVkQXR0cmlidXRlOiAnYWN0aXZlJywKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50LiBJbiBtdWx0aS1zZWxlY3Rpb24gdGhpcyByZXR1cm5zCiAgICAgICAqIGFuIGFycmF5IG9mIHNlbGVjdGVkIGVsZW1lbnRzLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEl0ZW0KICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHNlbGVjdGVkSXRlbTogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIEluIHNpbmdsZSBzZWxlY3Rpb24sIHRoaXMgcmV0dXJucyB0aGUgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAgICAgKiBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZE1vZGVsCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKiBAZGVmYXVsdCBudWxsCiAgICAgICAqLwogICAgICBzZWxlY3RlZE1vZGVsOiBudWxsLAogICAgICAvKioKICAgICAgICogSW4gc2luZ2xlIHNlbGVjdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBzZWxlY3RlZCBpbmRleC4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEluZGV4CiAgICAgICAqIEB0eXBlIG51bWJlcgogICAgICAgKiBAZGVmYXVsdCAtMQogICAgICAgKi8KICAgICAgc2VsZWN0ZWRJbmRleDogLTEsCiAgICAgIC8qKgogICAgICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgdGhhdCBjb250YWlucyBpdGVtcy4gIElmIHRoaXMgaXMgbm90IHNldCAKICAgICAgICogcG9seW1lci1zZWxlY3RvciBpcyB0aGUgY29udGFpbmVyLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSB0YXJnZXQKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcXVlcnkgbm9kZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdG8gYmUgdXNlZCBmb3IgCiAgICAgICAqIHNlbGVjdGlvbiBpdGVtcy4gIE5vdGUgdGhpcyBvbmx5IHdvcmtzIGlmIHRoZSAndGFyZ2V0JyBwcm9wZXJ0eSBpcyBzZXQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB0YXJnZXQ9Int7JC5teUZvcm19fSIgaXRlbXNTZWxlY3Rvcj0iaW5wdXRbdHlwZT1yYWRpb10iPjwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICogICAgIDxmb3JtIGlkPSJteUZvcm0iPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9InJlZCI+IFJlZDwvbGFiZWw+IDxicj4KICAgICAgICogICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iY29sb3IiIHZhbHVlPSJncmVlbiI+IEdyZWVuPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9ImJsdWUiPiBCbHVlPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8cD5jb2xvciA9IHt7Y29sb3J9fTwvcD4KICAgICAgICogICAgIDwvZm9ybT4KICAgICAgICogCiAgICAgICAqIEBhdHRyaWJ1dGUgaXRlbVNlbGVjdG9yCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgaXRlbXNTZWxlY3RvcjogJycsCiAgICAgIC8qKgogICAgICAgKiBUaGUgZXZlbnQgdGhhdCB3b3VsZCBiZSBmaXJlZCBmcm9tIHRoZSBpdGVtIGVsZW1lbnQgdG8gaW5kaWNhdGUKICAgICAgICogaXQgaXMgYmVpbmcgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgYWN0aXZhdGVFdmVudAogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ3RhcCcKICAgICAgICovCiAgICAgIGFjdGl2YXRlRXZlbnQ6ICd0YXAnLAogICAgICBub3RhcDogZmFsc2UsCiAgICAgIHJlYWR5OiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmFjdGl2YXRlTGlzdGVuZXIgPSB0aGlzLmFjdGl2YXRlSGFuZGxlci5iaW5kKHRoaXMpOwogICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnVwZGF0ZVNlbGVjdGVkLmJpbmQodGhpcykpOwogICAgICAgIGlmICghdGhpcy50YXJnZXQpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpczsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdldCBpdGVtcygpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnRhcmdldCAhPT0gdGhpcyA/ICh0aGlzLml0ZW1zU2VsZWN0b3IgPyAKICAgICAgICAgICAgdGhpcy50YXJnZXQucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpIDogCiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5jaGlsZHJlbikgOiB0aGlzLiQuaXRlbXMuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOwogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwobm9kZXMgfHwgW10sIGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiBuICYmIG4ubG9jYWxOYW1lICE9PSAndGVtcGxhdGUnOwogICAgICAgIH0pOwogICAgICB9LAogICAgICB0YXJnZXRDaGFuZ2VkOiBmdW5jdGlvbihvbGQpIHsKICAgICAgICBpZiAob2xkKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKG9sZCk7CiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7CiAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyKHRoaXMudGFyZ2V0KTsKICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhcmdldCwge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50LCB0aGlzLmFjdGl2YXRlTGlzdGVuZXIpOwogICAgICB9LAogICAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSkgewogICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQsIHRoaXMuYWN0aXZhdGVMaXN0ZW5lcik7CiAgICAgIH0sCiAgICAgIGdldCBzZWxlY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCk7CiAgICAgIH0sCiAgICAgIHNlbGVjdGVkQ2hhbmdlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZCgpOwogICAgICB9LAogICAgICB1cGRhdGVTZWxlY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy52YWxpZGF0ZVNlbGVjdGVkKCk7CiAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZVRvU2VsZWN0aW9uKHMpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudmFsdWVUb1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZhbGlkYXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gYXJyYXkgZm9yIG11bHRpLXNlbGVjdGlvbgogICAgICAgIGlmICh0aGlzLm11bHRpICYmICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpICYmIAogICAgICAgICAgICB0aGlzLnNlbGVjdGVkICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFt0aGlzLnNlbGVjdGVkXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy4kLnNlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQocywgZmFsc2UpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJC5zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHZhbHVlVG9TZWxlY3Rpb246IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGl0ZW0gPSAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyAKICAgICAgICAgICAgbnVsbCA6IHRoaXMuaXRlbXNbdGhpcy52YWx1ZVRvSW5kZXgodmFsdWUpXTsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLnNlbGVjdChpdGVtKTsKICAgICAgfSwKICAgICAgdXBkYXRlU2VsZWN0ZWRJdGVtOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0aW9uOwogICAgICB9LAogICAgICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIHZhciB0ID0gdGhpcy5zZWxlY3RlZEl0ZW0udGVtcGxhdGVJbnN0YW5jZTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IHQgPyB0Lm1vZGVsIDogdW5kZWZpbmVkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBudWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbSA/IAogICAgICAgICAgICBwYXJzZUludCh0aGlzLnZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkgOiAtMTsKICAgICAgfSwKICAgICAgdmFsdWVUb0luZGV4OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIC8vIGZpbmQgYW4gaXRlbSB3aXRoIHZhbHVlID09IHZhbHVlIGFuZCByZXR1cm4gaXQncyBpbmRleAogICAgICAgIGZvciAodmFyIGk9MCwgaXRlbXM9dGhpcy5pdGVtcywgYzsgKGM9aXRlbXNbaV0pOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlRm9yTm9kZShjKSA9PSB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gaWYgbm8gaXRlbSBmb3VuZCwgdGhlIHZhbHVlIGl0c2VsZiBpcyBwcm9iYWJseSB0aGUgaW5kZXgKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0sCiAgICAgIHZhbHVlRm9yTm9kZTogZnVuY3Rpb24obm9kZSkgewogICAgICAgIHJldHVybiBub2RlW3RoaXMudmFsdWVhdHRyXSB8fCBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnZhbHVlYXR0cik7CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50cyBmaXJlZCBmcm9tIDxwb2x5bWVyLXNlbGVjdGlvbj4gb2JqZWN0CiAgICAgIHNlbGVjdGlvblNlbGVjdDogZnVuY3Rpb24oZSwgZGV0YWlsKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBpZiAoZGV0YWlsLml0ZW0pIHsKICAgICAgICAgIHRoaXMuYXBwbHlTZWxlY3Rpb24oZGV0YWlsLml0ZW0sIGRldGFpbC5pc1NlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFwcGx5U2VsZWN0aW9uOiBmdW5jdGlvbihpdGVtLCBpc1NlbGVjdGVkKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykgewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuc2VsZWN0ZWRDbGFzcywgaXNTZWxlY3RlZCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvcGVydHkpIHsKICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZFByb3BlcnR5XSA9IGlzU2VsZWN0ZWQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0cmlidXRlICYmIGl0ZW0uc2V0QXR0cmlidXRlKSB7CiAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkgewogICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlLCAnJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50IGZpcmVkIGZyb20gaG9zdAogICAgICBhY3RpdmF0ZUhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIXRoaXMubm90YXApIHsKICAgICAgICAgIHZhciBpID0gdGhpcy5maW5kRGlzdHJpYnV0ZWRUYXJnZXQoZS50YXJnZXQsIHRoaXMuaXRlbXMpOwogICAgICAgICAgaWYgKGkgPj0gMCkgewogICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07CiAgICAgICAgICAgIHZhciBzID0gdGhpcy52YWx1ZUZvck5vZGUoaXRlbSkgfHwgaTsKICAgICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgdGhpcy5hZGRSZW1vdmVTZWxlY3RlZChzKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtzXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hc3luY0ZpcmUoJ3BvbHltZXItYWN0aXZhdGUnLCB7aXRlbTogaXRlbX0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkUmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGkgPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodmFsdWUpOwogICAgICAgIGlmIChpID49IDApIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGksIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2godmFsdWUpOwogICAgICAgIH0KICAgICAgICB0aGlzLnZhbHVlVG9TZWxlY3Rpb24odmFsdWUpOwogICAgICB9LAogICAgICBmaW5kRGlzdHJpYnV0ZWRUYXJnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgbm9kZXMpIHsKICAgICAgICAvLyBmaW5kIGZpcnN0IGFuY2VzdG9yIG9mIHRhcmdldCAoaW5jbHVkaW5nIGl0c2VsZikgdGhhdAogICAgICAgIC8vIGlzIGluIG5vZGVzLCBpZiBhbnkKICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSB0aGlzKSB7CiAgICAgICAgICB2YXIgaSA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobm9kZXMsIHRhcmdldCk7CiAgICAgICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfQogICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAKLy8jIHNvdXJjZVVSTD1odHRwOi8vYWRkeW9zbWFuaS5naXRodWIuaW8vcG9seW1lci11aS1jYXJvdXNlbC9ib3dlcl9jb21wb25lbnRzL3BvbHltZXItc2VsZWN0b3IvcG9seW1lci1zZWxlY3Rvci5odG1sL3BvbHltZXItc2VsZWN0b3IuanMK:186
@data:text/javascript;base64,CiAgICBQb2x5bWVyKCdwb2x5bWVyLXNlbGVjdG9yJywgewogICAgICAvKioKICAgICAgICogR2V0cyBvciBzZXRzIHRoZSBzZWxlY3RlZCBlbGVtZW50LiAgRGVmYXVsdCB0byB1c2UgdGhlIGluZGV4CiAgICAgICAqIG9mIHRoZSBpdGVtIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIElmIHlvdSB3YW50IGEgc3BlY2lmaWMgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIGJlCiAgICAgICAqIHVzZWQgaW5zdGVhZCBvZiBpbmRleCwgc2V0ICJ2YWx1ZWF0dHIiIHRvIHRoYXQgYXR0cmlidXRlIG5hbWUuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB2YWx1ZWF0dHI9ImxhYmVsIiBzZWxlY3RlZD0iZm9vIj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iZm9vIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iYmFyIj48L2Rpdj4KICAgICAgICogICAgICAgPGRpdiBsYWJlbD0iem90Ij48L2Rpdj4KICAgICAgICogICAgIDwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICoKICAgICAgICogSW4gbXVsdGktc2VsZWN0aW9uIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIHZhbHVlcy4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICAgIDxwb2x5bWVyLXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgdmFsdWVhdHRyPSJsYWJlbCIgbXVsdGk+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImZvbyI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9ImJhciI+PC9kaXY+CiAgICAgICAqICAgICAgIDxkaXYgbGFiZWw9InpvdCI+PC9kaXY+CiAgICAgICAqICAgICA8L3BvbHltZXItc2VsZWN0b3I+CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLiQuc2VsZWN0b3Iuc2VsZWN0ZWQgPSBbJ2ZvbycsICd6b3QnXTsKICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZAogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICogQGRlZmF1bHQgbnVsbAogICAgICAgKi8KICAgICAgc2VsZWN0ZWQ6IG51bGwsCiAgICAgIC8qKgogICAgICAgKiBJZiB0cnVlLCBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBhbGxvd2VkLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIG11bHRpCiAgICAgICAqIEB0eXBlIGJvb2xlYW4KICAgICAgICogQGRlZmF1bHQgZmFsc2UKICAgICAgICovCiAgICAgIG11bHRpOiBmYWxzZSwKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yICJzZWxlY3RlZCIgYXR0cmlidXRlLgogICAgICAgKgogICAgICAgKiBAYXR0cmlidXRlIHZhbHVlYXR0cgogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ25hbWUnCiAgICAgICAqLwogICAgICB2YWx1ZWF0dHI6ICduYW1lJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgQ1NTIGNsYXNzIHRvIGJlIHVzZWQgdG8gYWRkIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZENsYXNzCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAncG9seW1lci1zZWxlY3RlZCcKICAgICAgICovCiAgICAgIHNlbGVjdGVkQ2xhc3M6ICdwb2x5bWVyLXNlbGVjdGVkJywKICAgICAgLyoqCiAgICAgICAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCB0byBzZXQgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnQKICAgICAgICogdG8gaW5kaWNhdGUgaXRzIGFjdGl2ZSBzdGF0ZS4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZFByb3BlcnR5CiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgc2VsZWN0ZWRQcm9wZXJ0eTogJycsCiAgICAgIC8qKgogICAgICAgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgdG8gc2V0IG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50CiAgICAgICAqIHRvIGluZGljYXRlIGl0cyBhY3RpdmUgc3RhdGUuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgc2VsZWN0ZWRQcm9wZXJ0eQogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ2FjdGl2ZScKICAgICAgICovCiAgICAgIHNlbGVjdGVkQXR0cmlidXRlOiAnYWN0aXZlJywKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50LiBJbiBtdWx0aS1zZWxlY3Rpb24gdGhpcyByZXR1cm5zCiAgICAgICAqIGFuIGFycmF5IG9mIHNlbGVjdGVkIGVsZW1lbnRzLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEl0ZW0KICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHNlbGVjdGVkSXRlbTogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIEluIHNpbmdsZSBzZWxlY3Rpb24sIHRoaXMgcmV0dXJucyB0aGUgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAgICAgKiBzZWxlY3RlZCBlbGVtZW50LgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZE1vZGVsCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKiBAZGVmYXVsdCBudWxsCiAgICAgICAqLwogICAgICBzZWxlY3RlZE1vZGVsOiBudWxsLAogICAgICAvKioKICAgICAgICogSW4gc2luZ2xlIHNlbGVjdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBzZWxlY3RlZCBpbmRleC4KICAgICAgICoKICAgICAgICogQGF0dHJpYnV0ZSBzZWxlY3RlZEluZGV4CiAgICAgICAqIEB0eXBlIG51bWJlcgogICAgICAgKiBAZGVmYXVsdCAtMQogICAgICAgKi8KICAgICAgc2VsZWN0ZWRJbmRleDogLTEsCiAgICAgIC8qKgogICAgICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgdGhhdCBjb250YWlucyBpdGVtcy4gIElmIHRoaXMgaXMgbm90IHNldCAKICAgICAgICogcG9seW1lci1zZWxlY3RvciBpcyB0aGUgY29udGFpbmVyLgogICAgICAgKiAKICAgICAgICogQGF0dHJpYnV0ZSB0YXJnZXQKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqIEBkZWZhdWx0IG51bGwKICAgICAgICovCiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgLyoqCiAgICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcXVlcnkgbm9kZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdG8gYmUgdXNlZCBmb3IgCiAgICAgICAqIHNlbGVjdGlvbiBpdGVtcy4gIE5vdGUgdGhpcyBvbmx5IHdvcmtzIGlmIHRoZSAndGFyZ2V0JyBwcm9wZXJ0eSBpcyBzZXQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICA8cG9seW1lci1zZWxlY3RvciB0YXJnZXQ9Int7JC5teUZvcm19fSIgaXRlbXNTZWxlY3Rvcj0iaW5wdXRbdHlwZT1yYWRpb10iPjwvcG9seW1lci1zZWxlY3Rvcj4KICAgICAgICogICAgIDxmb3JtIGlkPSJteUZvcm0iPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9InJlZCI+IFJlZDwvbGFiZWw+IDxicj4KICAgICAgICogICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iY29sb3IiIHZhbHVlPSJncmVlbiI+IEdyZWVuPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9ImJsdWUiPiBCbHVlPC9sYWJlbD4gPGJyPgogICAgICAgKiAgICAgICA8cD5jb2xvciA9IHt7Y29sb3J9fTwvcD4KICAgICAgICogICAgIDwvZm9ybT4KICAgICAgICogCiAgICAgICAqIEBhdHRyaWJ1dGUgaXRlbVNlbGVjdG9yCiAgICAgICAqIEB0eXBlIHN0cmluZwogICAgICAgKiBAZGVmYXVsdCAnJwogICAgICAgKi8KICAgICAgaXRlbXNTZWxlY3RvcjogJycsCiAgICAgIC8qKgogICAgICAgKiBUaGUgZXZlbnQgdGhhdCB3b3VsZCBiZSBmaXJlZCBmcm9tIHRoZSBpdGVtIGVsZW1lbnQgdG8gaW5kaWNhdGUKICAgICAgICogaXQgaXMgYmVpbmcgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBhdHRyaWJ1dGUgYWN0aXZhdGVFdmVudAogICAgICAgKiBAdHlwZSBzdHJpbmcKICAgICAgICogQGRlZmF1bHQgJ3RhcCcKICAgICAgICovCiAgICAgIGFjdGl2YXRlRXZlbnQ6ICd0YXAnLAogICAgICBub3RhcDogZmFsc2UsCiAgICAgIHJlYWR5OiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmFjdGl2YXRlTGlzdGVuZXIgPSB0aGlzLmFjdGl2YXRlSGFuZGxlci5iaW5kKHRoaXMpOwogICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnVwZGF0ZVNlbGVjdGVkLmJpbmQodGhpcykpOwogICAgICAgIGlmICghdGhpcy50YXJnZXQpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpczsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdldCBpdGVtcygpIHsKICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnRhcmdldCAhPT0gdGhpcyA/ICh0aGlzLml0ZW1zU2VsZWN0b3IgPyAKICAgICAgICAgICAgdGhpcy50YXJnZXQucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpIDogCiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5jaGlsZHJlbikgOiB0aGlzLiQuaXRlbXMuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOwogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwobm9kZXMgfHwgW10sIGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiBuICYmIG4ubG9jYWxOYW1lICE9PSAndGVtcGxhdGUnOwogICAgICAgIH0pOwogICAgICB9LAogICAgICB0YXJnZXRDaGFuZ2VkOiBmdW5jdGlvbihvbGQpIHsKICAgICAgICBpZiAob2xkKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKG9sZCk7CiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7CiAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyKHRoaXMudGFyZ2V0KTsKICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhcmdldCwge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50LCB0aGlzLmFjdGl2YXRlTGlzdGVuZXIpOwogICAgICB9LAogICAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSkgewogICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQsIHRoaXMuYWN0aXZhdGVMaXN0ZW5lcik7CiAgICAgIH0sCiAgICAgIGdldCBzZWxlY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKCk7CiAgICAgIH0sCiAgICAgIHNlbGVjdGVkQ2hhbmdlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZCgpOwogICAgICB9LAogICAgICB1cGRhdGVTZWxlY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy52YWxpZGF0ZVNlbGVjdGVkKCk7CiAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZVRvU2VsZWN0aW9uKHMpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudmFsdWVUb1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZhbGlkYXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gYXJyYXkgZm9yIG11bHRpLXNlbGVjdGlvbgogICAgICAgIGlmICh0aGlzLm11bHRpICYmICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpICYmIAogICAgICAgICAgICB0aGlzLnNlbGVjdGVkICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFt0aGlzLnNlbGVjdGVkXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdGhpcy4kLnNlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQocywgZmFsc2UpOwogICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJC5zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHZhbHVlVG9TZWxlY3Rpb246IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGl0ZW0gPSAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyAKICAgICAgICAgICAgbnVsbCA6IHRoaXMuaXRlbXNbdGhpcy52YWx1ZVRvSW5kZXgodmFsdWUpXTsKICAgICAgICB0aGlzLiQuc2VsZWN0aW9uLnNlbGVjdChpdGVtKTsKICAgICAgfSwKICAgICAgdXBkYXRlU2VsZWN0ZWRJdGVtOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0aW9uOwogICAgICB9LAogICAgICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIHZhciB0ID0gdGhpcy5zZWxlY3RlZEl0ZW0udGVtcGxhdGVJbnN0YW5jZTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IHQgPyB0Lm1vZGVsIDogdW5kZWZpbmVkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBudWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbSA/IAogICAgICAgICAgICBwYXJzZUludCh0aGlzLnZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkgOiAtMTsKICAgICAgfSwKICAgICAgdmFsdWVUb0luZGV4OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIC8vIGZpbmQgYW4gaXRlbSB3aXRoIHZhbHVlID09IHZhbHVlIGFuZCByZXR1cm4gaXQncyBpbmRleAogICAgICAgIGZvciAodmFyIGk9MCwgaXRlbXM9dGhpcy5pdGVtcywgYzsgKGM9aXRlbXNbaV0pOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlRm9yTm9kZShjKSA9PSB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gaWYgbm8gaXRlbSBmb3VuZCwgdGhlIHZhbHVlIGl0c2VsZiBpcyBwcm9iYWJseSB0aGUgaW5kZXgKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0sCiAgICAgIHZhbHVlRm9yTm9kZTogZnVuY3Rpb24obm9kZSkgewogICAgICAgIHJldHVybiBub2RlW3RoaXMudmFsdWVhdHRyXSB8fCBub2RlLmdldEF0dHJpYnV0ZSh0aGlzLnZhbHVlYXR0cik7CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50cyBmaXJlZCBmcm9tIDxwb2x5bWVyLXNlbGVjdGlvbj4gb2JqZWN0CiAgICAgIHNlbGVjdGlvblNlbGVjdDogZnVuY3Rpb24oZSwgZGV0YWlsKSB7CiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBpZiAoZGV0YWlsLml0ZW0pIHsKICAgICAgICAgIHRoaXMuYXBwbHlTZWxlY3Rpb24oZGV0YWlsLml0ZW0sIGRldGFpbC5pc1NlbGVjdGVkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFwcGx5U2VsZWN0aW9uOiBmdW5jdGlvbihpdGVtLCBpc1NlbGVjdGVkKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDbGFzcykgewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuc2VsZWN0ZWRDbGFzcywgaXNTZWxlY3RlZCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvcGVydHkpIHsKICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZFByb3BlcnR5XSA9IGlzU2VsZWN0ZWQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0cmlidXRlICYmIGl0ZW0uc2V0QXR0cmlidXRlKSB7CiAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkgewogICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlLCAnJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGV2ZW50IGZpcmVkIGZyb20gaG9zdAogICAgICBhY3RpdmF0ZUhhbmRsZXI6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIXRoaXMubm90YXApIHsKICAgICAgICAgIHZhciBpID0gdGhpcy5maW5kRGlzdHJpYnV0ZWRUYXJnZXQoZS50YXJnZXQsIHRoaXMuaXRlbXMpOwogICAgICAgICAgaWYgKGkgPj0gMCkgewogICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07CiAgICAgICAgICAgIHZhciBzID0gdGhpcy52YWx1ZUZvck5vZGUoaXRlbSkgfHwgaTsKICAgICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgdGhpcy5hZGRSZW1vdmVTZWxlY3RlZChzKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtzXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hc3luY0ZpcmUoJ3BvbHltZXItYWN0aXZhdGUnLCB7aXRlbTogaXRlbX0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkUmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGkgPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodmFsdWUpOwogICAgICAgIGlmIChpID49IDApIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGksIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2godmFsdWUpOwogICAgICAgIH0KICAgICAgICB0aGlzLnZhbHVlVG9TZWxlY3Rpb24odmFsdWUpOwogICAgICB9LAogICAgICBmaW5kRGlzdHJpYnV0ZWRUYXJnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgbm9kZXMpIHsKICAgICAgICAvLyBmaW5kIGZpcnN0IGFuY2VzdG9yIG9mIHRhcmdldCAoaW5jbHVkaW5nIGl0c2VsZikgdGhhdAogICAgICAgIC8vIGlzIGluIG5vZGVzLCBpZiBhbnkKICAgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPSB0aGlzKSB7CiAgICAgICAgICB2YXIgaSA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobm9kZXMsIHRhcmdldCk7CiAgICAgICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfQogICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAKLy8jIHNvdXJjZVVSTD1odHRwOi8vYWRkeW9zbWFuaS5naXRodWIuaW8vcG9seW1lci11aS1jYXJvdXNlbC9ib3dlcl9jb21wb25lbnRzL3BvbHltZXItc2VsZWN0b3IvcG9seW1lci1zZWxlY3Rvci5odG1sL3BvbHltZXItc2VsZWN0b3IuanMK:176
d.invokeMethod@http://addyosmani.github.io/polymer-ui-carousel/bower_components/polymer/polymer.js:29
d.notifyPropertyChanges@http://addyosmani.github.io/polymer-ui-carousel/bower_components/polymer/polymer.js:29
t.prototype.report_@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:32
z.prototype<.check_@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:32
a.Platform.performMicrotaskCheckpoint@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:32
b/<@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:37
c@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:34
c@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:32
b@http://addyosmani.github.io/polymer-ui-carousel/bower_components/platform/platform.js:32
" platform.js:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment