@schneideress/dashboardframework 0.0.228 → 0.0.230

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.
@@ -52,6 +52,8 @@ const RAEvent = {
52
52
  HideDashboardBanner: "HideDashboardBanner",
53
53
  /**To launch flyout from custom widget library */
54
54
  LaunchCustomWidgetFlyout: "LaunchCustomWidgetFlyout",
55
+ /**update applied filter badge for inaplicable filters */
56
+ UpdateAppledFiterForInapplicableFilter: "UpdateAppledFiterForInapplicableFilter",
55
57
  };
56
58
  export { RAEvent };
57
59
  /** @enum {string} */
@@ -60,4 +62,4 @@ const RAEventKey = {
60
62
  WidgetInstanceId: "widgetInstanceId",
61
63
  };
62
64
  export { RAEventKey };
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZXZlbnQuZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2huZWlkZXJlc3MvZGFzaGJvYXJkZnJhbWV3b3JrLyIsInNvdXJjZXMiOlsibGliL3JhLmV2ZW50LmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBWSxPQUFPO0lBRWYsK0NBQStDO0lBQy9DLGNBQWMsa0JBQW1CO0lBRWpDLG9FQUFvRTtJQUNwRSxpQkFBaUIscUJBQXNCO0lBRXZDLGlGQUFpRjtJQUNqRixpQkFBaUIscUJBQXNCO0lBRXZDLGtGQUFrRjtJQUNsRixnQkFBZ0Isb0JBQXFCO0lBRXJDLHNEQUFzRDtJQUN0RCxjQUFjLGtCQUFtQjtJQUVqQyxtRkFBbUY7SUFDbkYsYUFBYSxpQkFBa0I7SUFFL0IseUNBQXlDO0lBQ3pDLGdCQUFnQixvQkFBcUI7SUFFckMsc0NBQXNDO0lBQ3RDLHVCQUF1QiwyQkFBNEI7SUFFbkQsOEVBQThFO0lBQzlFLGdCQUFnQixvQkFBcUI7SUFFckMsNERBQTREO0lBQzVELDRCQUE0QixnQ0FBaUM7SUFFN0QsaURBQWlEO0lBQ2pELGFBQWEsaUJBQWtCO0lBRS9CLDhDQUE4QztJQUM5QyxVQUFVLGNBQWU7SUFFekIsOENBQThDO0lBQzlDLFVBQVUsY0FBZTtJQUV6QixrREFBa0Q7SUFDbEQsWUFBWSxnQkFBaUI7SUFFN0Isc0ZBQXNGO0lBQ3RGLFNBQVMsYUFBYztJQUV2QixpREFBaUQ7SUFDakQsc0JBQXNCLDBCQUEyQjtJQUVqRCxpRUFBaUU7SUFDakUsbUJBQW1CLHVCQUF3QjtJQUUzQyw2QkFBNkI7SUFDN0IsZ0JBQWdCLG9CQUFxQjtJQUVyQyxpQ0FBaUM7SUFDakMsV0FBVyxlQUFnQjtJQUUzQixnRUFBZ0U7SUFDaEUsK0JBQStCLG1DQUFvQztJQUVuRSxzQ0FBc0M7SUFDdEMsdUJBQXVCLDJCQUE0QjtJQUVuRCx5Q0FBeUM7SUFDekMsdUJBQXVCLDJCQUE0QjtJQUVuRCxtQkFBbUIsdUJBQXdCO0lBRTNDLGlEQUFpRDtJQUNqRCx3QkFBd0IsNEJBQTJCO0VBQ3REOzs7QUFFRCxNQUFZLFVBQVU7SUFDbEIsMkJBQTJCO0lBQzNCLGdCQUFnQixvQkFBcUI7RUFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBSQUV2ZW50IHtcclxuXHJcbiAgICAvKiogd2lkZ2V0IHNlbGVjdGlvbiBjbGljayBvbiB3aWRnZXQgbGlicmFyeSAqL1xyXG4gICAgV2lkZ2V0U2VsZWN0ZWQgPSBcIndpZGdldFNlbGVjdGVkXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGljayBvbiB0aGUgZWRpdCBsaW5rIGluIHdpZGdldCBjb250YWluZXIgKi9cclxuICAgIFdpZGdldEVkaXRDbGlja2VkID0gXCJ3aWRnZXRFZGl0Q2xpY2tlZFwiLFxyXG5cclxuICAgIC8qKiB0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjYW5jZWwgYnV0dG9uIG9uIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQ2FuY2VsQ2xpY2sgPSBcImNvbmZpZ0NhbmNlbENsaWNrXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGljayBvbiB0aGUgY2xvc2UgYnV0dG9uIG9uIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQ2xvc2VDbGljayA9IFwiY29uZmlnQ2xvc2VDbGlja1wiLFxyXG5cclxuICAgIC8qKiBhZGQgYnV0dG9uIGNsaWNrIG9uIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQWRkQ2xpY2sgPSBcImNvbmZpZ0FkZENsaWNrXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gYSB1c2VyIGNsaWNrIG9uIHRoZSBzYXZlIGJ1dHRvbiBpbiB3aWRnZXQgY29uZmlndXJhdGlvbiB3aW5kb3cgKi9cclxuICAgIENvbmZpZ0NoYW5nZWQgPSBcImNvbmZpZ0NoYW5nZWRcIixcclxuXHJcbiAgICAvKipUbyByZWFycmFuZ2Ugd2lkZ2V0cyBpbiBhIGRhc2hib2FyZCAqL1xyXG4gICAgUmVhcnJhbmdlQ2xpY2tlZCA9IFwicmVhcnJhbmdlQ2xpY2tlZFwiLFxyXG5cclxuICAgIC8qKmRhc2hib2FyZCBjdXN0b21pemUgYnV0dG9uIGNsaWNrICovXHJcbiAgICBEYXNoYm9hcmRDdXN0b21pemVDbGljayA9IFwiZGFzaGJvYXJkQ3VzdG9taXplQ2xpY2tcIixcclxuXHJcbiAgICAvKip0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIG9uIHRoZSBkYXNoYm9hcmQgY2hhbmdlIGljb24gaW4gaGVhZGVyIHNlY3Rpb24gKi9cclxuICAgIERhc2hib2FyZENoYW5nZWQgPSBcImRhc2hib2FyZENoYW5nZWRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xvc2UgYnV0dG9uIG9uIGxpYnJhcnkgKi9cclxuICAgIFdpZGdldExpYnJhcnlDbG9zZUJ0bkNsaWNrZWQgPSBcIldpZGdldExpYnJhcnlDbG9zZUJ0bkNsaWNrZWRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyBvbiB2aWV3IGRhc2hib2FyZCovXHJcbiAgICBMb2FkRGFzaGJvYXJkID0gXCJMb2FkRGFzaGJvYXJkXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3Mgb24gY29weXdpZGdldCAqL1xyXG4gICAgQ29weVdpZGdldCA9IFwiQ29weVdpZGdldFwiLFxyXG5cclxuICAgIC8qKnRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3Mgb24gTW92ZSB3aWRnZXQgKi9cclxuICAgIE1vdmVXaWRnZXQgPSBcIk1vdmVXaWRnZXRcIixcclxuXHJcbiAgICAvKip0cmlnZ2VycyB3aGVuIHVzZXIgcmFpc2UgZGVsZXRlIHdpZGdldCBldmVudCAqL1xyXG4gICAgV2lkZ2V0RGVsZXRlID0gXCJXaWRnZXREZWxldGVcIixcclxuXHJcbiAgICAvKiogdXNlZCB0byBhZGQgd2lkZ2V0IHRvIHdpZGdldGxpc3Qgd2hlbiB1c2VyIGNvcGllcyBhIHdpZGdldCB0byBjdXJyZW50IGRhc2hib2FyZCAqL1xyXG4gICAgQWRkV2lkZ2V0ID0gXCJBZGRXaWRnZXRcIixcclxuXHJcbiAgICAvKiogZG9uZSBidXR0b24gY2xpY2sgb24gd2lkZ2V0IGxpYnJhcnkgZmx5b3V0ICovXHJcbiAgICB3aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gXCJ3aWRnZXRMaWJyYXJ5RG9uZUNsaWNrXCIsXHJcblxyXG4gICAgLyoqcmVmcmVzaCBmYXZvcml0ZSBpY29uIGFmdGVyIHNydHRpbmcgYW5kIHJlc2V0dGluZyBmYXZvcml0ZXMgKi9cclxuICAgIGZhdm9yaXRlSWNvblJlZnJlc2ggPSBcImZhdm9yaXRlSWNvblJlZnJlc2hcIixcclxuXHJcbiAgICAvKip0byByZWZyZXNoIG1lbnUgY29udGVudCAqL1xyXG4gICAgUXVpY2tMaW5rUmVmcmVzaCA9IFwiUXVpY2tMaW5rUmVmcmVzaFwiLFxyXG5cclxuICAgIC8qKlRvIHJhaXNlIHdpZGdldCBhZGRlZCBldmVudCAqL1xyXG4gICAgV2lkZ2V0QWRkZWQgPSBcIldpZGdldEFkZGVkXCIsXHJcblxyXG4gICAgLyoqVG8gdXBkYXRlIGdsb2JhbCBmaWx0ZXIgc2l0ZSBmcm9tIG1hcCB3aWRnZXQgc2VsZWN0ZWQgc2l0ZSAqL1xyXG4gICAgVXBkYXRlR2xvYmFsRmlsdGVyRnJvbU1hcFdpZGdldCA9IFwiVXBkYXRlR2xvYmFsRmlsdGVyRnJvbU1hcFdpZGdldFwiLFxyXG5cclxuICAgIC8qKlRvIGFkZCB3aWRnZXQgb24gZW1wdHkgZGFzaGJvYXJkICovXHJcbiAgICBBZGRXaWRnZXRFbXB0eURhc2hib2FyZCA9IFwiQWRkV2lkZ2V0RW1wdHlEYXNoYm9hcmRcIixcclxuXHJcbiAgICAvKipUbyByYWlzZSBuZXcgd2lkZ2V0IGFkZCBjbGljayBldmVudCAqL1xyXG4gICAgQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmQgPSBcIkFkZE5ld1dpZGdldFRvRGFzaGJvYXJkXCIsXHJcblxyXG4gICAgSGlkZURhc2hib2FyZEJhbm5lciA9IFwiSGlkZURhc2hib2FyZEJhbm5lclwiLFxyXG5cclxuICAgIC8qKlRvIGxhdW5jaCBmbHlvdXQgZnJvbSBjdXN0b20gd2lkZ2V0IGxpYnJhcnkgKi9cclxuICAgIExhdW5jaEN1c3RvbVdpZGdldEZseW91dD1cIkxhdW5jaEN1c3RvbVdpZGdldEZseW91dFwiXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJBRXZlbnRLZXkge1xyXG4gICAgLyoqIG9uIGVkaXQgd2lkZ2V0IGNsaWNrICovXHJcbiAgICBXaWRnZXRJbnN0YW5jZUlkID0gXCJ3aWRnZXRJbnN0YW5jZUlkXCJcclxufVxyXG5cclxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZXZlbnQuZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2huZWlkZXJlc3MvZGFzaGJvYXJkZnJhbWV3b3JrLyIsInNvdXJjZXMiOlsibGliL3JhLmV2ZW50LmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBWSxPQUFPO0lBRWYsK0NBQStDO0lBQy9DLGNBQWMsa0JBQW1CO0lBRWpDLG9FQUFvRTtJQUNwRSxpQkFBaUIscUJBQXNCO0lBRXZDLGlGQUFpRjtJQUNqRixpQkFBaUIscUJBQXNCO0lBRXZDLGtGQUFrRjtJQUNsRixnQkFBZ0Isb0JBQXFCO0lBRXJDLHNEQUFzRDtJQUN0RCxjQUFjLGtCQUFtQjtJQUVqQyxtRkFBbUY7SUFDbkYsYUFBYSxpQkFBa0I7SUFFL0IseUNBQXlDO0lBQ3pDLGdCQUFnQixvQkFBcUI7SUFFckMsc0NBQXNDO0lBQ3RDLHVCQUF1QiwyQkFBNEI7SUFFbkQsOEVBQThFO0lBQzlFLGdCQUFnQixvQkFBcUI7SUFFckMsNERBQTREO0lBQzVELDRCQUE0QixnQ0FBaUM7SUFFN0QsaURBQWlEO0lBQ2pELGFBQWEsaUJBQWtCO0lBRS9CLDhDQUE4QztJQUM5QyxVQUFVLGNBQWU7SUFFekIsOENBQThDO0lBQzlDLFVBQVUsY0FBZTtJQUV6QixrREFBa0Q7SUFDbEQsWUFBWSxnQkFBaUI7SUFFN0Isc0ZBQXNGO0lBQ3RGLFNBQVMsYUFBYztJQUV2QixpREFBaUQ7SUFDakQsc0JBQXNCLDBCQUEyQjtJQUVqRCxpRUFBaUU7SUFDakUsbUJBQW1CLHVCQUF3QjtJQUUzQyw2QkFBNkI7SUFDN0IsZ0JBQWdCLG9CQUFxQjtJQUVyQyxpQ0FBaUM7SUFDakMsV0FBVyxlQUFnQjtJQUUzQixnRUFBZ0U7SUFDaEUsK0JBQStCLG1DQUFvQztJQUVuRSxzQ0FBc0M7SUFDdEMsdUJBQXVCLDJCQUE0QjtJQUVuRCx5Q0FBeUM7SUFDekMsdUJBQXVCLDJCQUE0QjtJQUVuRCxtQkFBbUIsdUJBQXdCO0lBRTNDLGlEQUFpRDtJQUNqRCx3QkFBd0IsNEJBQTJCO0lBRW5ELHlEQUF5RDtJQUN6RCxzQ0FBc0MsMENBQTJDO0VBQ3BGOzs7QUFFRCxNQUFZLFVBQVU7SUFDbEIsMkJBQTJCO0lBQzNCLGdCQUFnQixvQkFBcUI7RUFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBSQUV2ZW50IHtcclxuXHJcbiAgICAvKiogd2lkZ2V0IHNlbGVjdGlvbiBjbGljayBvbiB3aWRnZXQgbGlicmFyeSAqL1xyXG4gICAgV2lkZ2V0U2VsZWN0ZWQgPSBcIndpZGdldFNlbGVjdGVkXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGljayBvbiB0aGUgZWRpdCBsaW5rIGluIHdpZGdldCBjb250YWluZXIgKi9cclxuICAgIFdpZGdldEVkaXRDbGlja2VkID0gXCJ3aWRnZXRFZGl0Q2xpY2tlZFwiLFxyXG5cclxuICAgIC8qKiB0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjYW5jZWwgYnV0dG9uIG9uIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQ2FuY2VsQ2xpY2sgPSBcImNvbmZpZ0NhbmNlbENsaWNrXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGljayBvbiB0aGUgY2xvc2UgYnV0dG9uIG9uIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQ2xvc2VDbGljayA9IFwiY29uZmlnQ2xvc2VDbGlja1wiLFxyXG5cclxuICAgIC8qKiBhZGQgYnV0dG9uIGNsaWNrIG9uIHdpZGdldCBjb25maWd1cmF0aW9uIHdpbmRvdyAqL1xyXG4gICAgQ29uZmlnQWRkQ2xpY2sgPSBcImNvbmZpZ0FkZENsaWNrXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gYSB1c2VyIGNsaWNrIG9uIHRoZSBzYXZlIGJ1dHRvbiBpbiB3aWRnZXQgY29uZmlndXJhdGlvbiB3aW5kb3cgKi9cclxuICAgIENvbmZpZ0NoYW5nZWQgPSBcImNvbmZpZ0NoYW5nZWRcIixcclxuXHJcbiAgICAvKipUbyByZWFycmFuZ2Ugd2lkZ2V0cyBpbiBhIGRhc2hib2FyZCAqL1xyXG4gICAgUmVhcnJhbmdlQ2xpY2tlZCA9IFwicmVhcnJhbmdlQ2xpY2tlZFwiLFxyXG5cclxuICAgIC8qKmRhc2hib2FyZCBjdXN0b21pemUgYnV0dG9uIGNsaWNrICovXHJcbiAgICBEYXNoYm9hcmRDdXN0b21pemVDbGljayA9IFwiZGFzaGJvYXJkQ3VzdG9taXplQ2xpY2tcIixcclxuXHJcbiAgICAvKip0cmlnZ2VycyB3aGVuIHVzZXIgY2xpY2tzIG9uIHRoZSBkYXNoYm9hcmQgY2hhbmdlIGljb24gaW4gaGVhZGVyIHNlY3Rpb24gKi9cclxuICAgIERhc2hib2FyZENoYW5nZWQgPSBcImRhc2hib2FyZENoYW5nZWRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xvc2UgYnV0dG9uIG9uIGxpYnJhcnkgKi9cclxuICAgIFdpZGdldExpYnJhcnlDbG9zZUJ0bkNsaWNrZWQgPSBcIldpZGdldExpYnJhcnlDbG9zZUJ0bkNsaWNrZWRcIixcclxuXHJcbiAgICAvKiogdHJpZ2dlcnMgd2hlbiB1c2VyIGNsaWNrcyBvbiB2aWV3IGRhc2hib2FyZCovXHJcbiAgICBMb2FkRGFzaGJvYXJkID0gXCJMb2FkRGFzaGJvYXJkXCIsXHJcblxyXG4gICAgLyoqIHRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3Mgb24gY29weXdpZGdldCAqL1xyXG4gICAgQ29weVdpZGdldCA9IFwiQ29weVdpZGdldFwiLFxyXG5cclxuICAgIC8qKnRyaWdnZXJzIHdoZW4gdXNlciBjbGlja3Mgb24gTW92ZSB3aWRnZXQgKi9cclxuICAgIE1vdmVXaWRnZXQgPSBcIk1vdmVXaWRnZXRcIixcclxuXHJcbiAgICAvKip0cmlnZ2VycyB3aGVuIHVzZXIgcmFpc2UgZGVsZXRlIHdpZGdldCBldmVudCAqL1xyXG4gICAgV2lkZ2V0RGVsZXRlID0gXCJXaWRnZXREZWxldGVcIixcclxuXHJcbiAgICAvKiogdXNlZCB0byBhZGQgd2lkZ2V0IHRvIHdpZGdldGxpc3Qgd2hlbiB1c2VyIGNvcGllcyBhIHdpZGdldCB0byBjdXJyZW50IGRhc2hib2FyZCAqL1xyXG4gICAgQWRkV2lkZ2V0ID0gXCJBZGRXaWRnZXRcIixcclxuXHJcbiAgICAvKiogZG9uZSBidXR0b24gY2xpY2sgb24gd2lkZ2V0IGxpYnJhcnkgZmx5b3V0ICovXHJcbiAgICB3aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gXCJ3aWRnZXRMaWJyYXJ5RG9uZUNsaWNrXCIsXHJcblxyXG4gICAgLyoqcmVmcmVzaCBmYXZvcml0ZSBpY29uIGFmdGVyIHNydHRpbmcgYW5kIHJlc2V0dGluZyBmYXZvcml0ZXMgKi9cclxuICAgIGZhdm9yaXRlSWNvblJlZnJlc2ggPSBcImZhdm9yaXRlSWNvblJlZnJlc2hcIixcclxuXHJcbiAgICAvKip0byByZWZyZXNoIG1lbnUgY29udGVudCAqL1xyXG4gICAgUXVpY2tMaW5rUmVmcmVzaCA9IFwiUXVpY2tMaW5rUmVmcmVzaFwiLFxyXG5cclxuICAgIC8qKlRvIHJhaXNlIHdpZGdldCBhZGRlZCBldmVudCAqL1xyXG4gICAgV2lkZ2V0QWRkZWQgPSBcIldpZGdldEFkZGVkXCIsXHJcblxyXG4gICAgLyoqVG8gdXBkYXRlIGdsb2JhbCBmaWx0ZXIgc2l0ZSBmcm9tIG1hcCB3aWRnZXQgc2VsZWN0ZWQgc2l0ZSAqL1xyXG4gICAgVXBkYXRlR2xvYmFsRmlsdGVyRnJvbU1hcFdpZGdldCA9IFwiVXBkYXRlR2xvYmFsRmlsdGVyRnJvbU1hcFdpZGdldFwiLFxyXG5cclxuICAgIC8qKlRvIGFkZCB3aWRnZXQgb24gZW1wdHkgZGFzaGJvYXJkICovXHJcbiAgICBBZGRXaWRnZXRFbXB0eURhc2hib2FyZCA9IFwiQWRkV2lkZ2V0RW1wdHlEYXNoYm9hcmRcIixcclxuXHJcbiAgICAvKipUbyByYWlzZSBuZXcgd2lkZ2V0IGFkZCBjbGljayBldmVudCAqL1xyXG4gICAgQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmQgPSBcIkFkZE5ld1dpZGdldFRvRGFzaGJvYXJkXCIsXHJcblxyXG4gICAgSGlkZURhc2hib2FyZEJhbm5lciA9IFwiSGlkZURhc2hib2FyZEJhbm5lclwiLFxyXG5cclxuICAgIC8qKlRvIGxhdW5jaCBmbHlvdXQgZnJvbSBjdXN0b20gd2lkZ2V0IGxpYnJhcnkgKi9cclxuICAgIExhdW5jaEN1c3RvbVdpZGdldEZseW91dD1cIkxhdW5jaEN1c3RvbVdpZGdldEZseW91dFwiLFxyXG5cclxuICAgIC8qKnVwZGF0ZSBhcHBsaWVkIGZpbHRlciBiYWRnZSBmb3IgaW5hcGxpY2FibGUgZmlsdGVycyAqL1xyXG4gICAgVXBkYXRlQXBwbGVkRml0ZXJGb3JJbmFwcGxpY2FibGVGaWx0ZXIgPSBcIlVwZGF0ZUFwcGxlZEZpdGVyRm9ySW5hcHBsaWNhYmxlRmlsdGVyXCIsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJBRXZlbnRLZXkge1xyXG4gICAgLyoqIG9uIGVkaXQgd2lkZ2V0IGNsaWNrICovXHJcbiAgICBXaWRnZXRJbnN0YW5jZUlkID0gXCJ3aWRnZXRJbnN0YW5jZUlkXCJcclxufVxyXG5cclxuIl19
@@ -47,8 +47,6 @@ var RADashboardArea = /** @class */ (function () {
47
47
  * @return {?}
48
48
  */
49
49
  function (isDesktop) {
50
- console.log('in responsive service subscribe');
51
- console.log(isDesktop);
52
50
  if (isDesktop) {
53
51
  setTimeout((/**
54
52
  * @return {?}
@@ -512,14 +510,16 @@ var RADashboardArea = /** @class */ (function () {
512
510
  for (var i = 0; i < this.userWidgets.length; i++) {
513
511
  this.userWidgets[i].position_x = 0;
514
512
  this.userWidgets[i].position_y = 0;
515
- this.widgetList = this.mapObjectListToGridsterItemList(this.userWidgets);
516
- setTimeout((/**
517
- * @return {?}
518
- */
519
- function () {
520
- _this.setAreaHeight();
521
- }));
522
513
  }
514
+ this.widgetList = this.mapObjectListToGridsterItemList(this.userWidgets);
515
+ if (this.widgetList.length > 0)
516
+ this.updateWidgetPosition(this.widgetList[0].widgetInfo.widgetInstanceId);
517
+ setTimeout((/**
518
+ * @return {?}
519
+ */
520
+ function () {
521
+ _this.setAreaHeight();
522
+ }));
523
523
  };
524
524
  /**To add widget instance to the database with the next available position and to make changes in
525
525
  * dashboard area.
@@ -717,10 +717,21 @@ var RADashboardArea = /** @class */ (function () {
717
717
  function () {
718
718
  this.raDashboardEventBus.publish(RAEvent.AddNewWidgetToDashboard, null);
719
719
  };
720
+ /**
721
+ * @param {?} data
722
+ * @return {?}
723
+ */
724
+ RADashboardArea.prototype.updateAppliedFilters = /**
725
+ * @param {?} data
726
+ * @return {?}
727
+ */
728
+ function (data) {
729
+ this.raDashboardEventBus.publish(RAEvent.UpdateAppledFiterForInapplicableFilter, data);
730
+ };
720
731
  RADashboardArea.decorators = [
721
732
  { type: Component, args: [{
722
733
  selector: 'ra-dashboard-area',
723
- template: "<div #gridWrapper class=\"wrap gridster gridster-mobile\" [ngStyle]=\"{'height': userWidgets.length > 0 ? (gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container [app-config]=\"appConfig\" [event-bus]=\"raDashboardEventBus\"\r\n (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\" [global-filter]=\"globalFilter\"\r\n [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\" [widget-width]=\"item.cols\"\r\n [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\" [dom-resized]=\"domResized\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"m-1 empty-prefix\">\r\n <i class=\"fal fa-edit edit-icon\"></i>\r\n <span class=\"empty-title\">{{'dashboard.emptydashboard'|translate}}</span>\r\n </div>\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{'dashboard.emptydashboardmessage'|translate}} <br />\r\n {{'dashboard.emptydashboardmessage2'|translate}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm m-1 dashboard-button light\" (click)=\"addNewWidget()\">\r\n <i class=\"fal fa-plus m-1\"></i>{{'dashboard.addawidgets'|translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <notifier-container></notifier-container>\r\n</div>",
734
+ template: "<div #gridWrapper class=\"wrap gridster gridster-mobile\" [ngStyle]=\"{'height': userWidgets.length > 0 ? (gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container [app-config]=\"appConfig\" [event-bus]=\"raDashboardEventBus\"\r\n (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\" [global-filter]=\"globalFilter\"\r\n [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\" [widget-width]=\"item.cols\"\r\n [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\" [dom-resized]=\"domResized\"\r\n (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"m-1 empty-prefix\">\r\n <i class=\"fal fa-edit edit-icon\"></i>\r\n <span class=\"empty-title\">{{'dashboard.emptydashboard'|translate}}</span>\r\n </div>\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{'dashboard.emptydashboardmessage'|translate}} <br />\r\n {{'dashboard.emptydashboardmessage2'|translate}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm m-1 dashboard-button light\" (click)=\"addNewWidget()\">\r\n <i class=\"fal fa-plus m-1\"></i>{{'dashboard.addawidgets'|translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <notifier-container></notifier-container>\r\n</div>",
724
735
  styles: ["gridster{width:inherit;resize:height;display:flex;background-color:#ededed;overflow-y:hidden!important}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:0 1px 10px rgba(0,0,0,.05)}gridster-item:hover{box-shadow:0 1px 10px rgba(0,0,0,.15)}@media screen and (max-width:685px){.gridster-mobile{height:auto!important;margin-bottom:50px!important}}@media screen and (max-width:350px){.gridster-mobile{min-height:330px!important;margin-bottom:0!important}}.empty-padding{padding:40px 20px 20px;background-color:#ededed;display:flex;justify-content:center;align-content:center}.empty-wrapper{display:flex;background-color:#fff;border-radius:8px;min-height:125px;width:72%}.empty-prefix{color:#32ad3c;font-size:18px;display:flex;align-items:center;padding:10px 30px;min-width:-webkit-max-content;min-width:max-content;min-width:-moz-max-content}.empty-content{color:#333;border-left:1px solid #a9afb1;width:100%;display:flex;align-items:center;padding:15px 30px 10px 40px}.empty-msg{padding:0 0 5px;font-size:16px}.dashboard-button{padding:5px 10px 5px 5px!important}.btnLib{background-color:#ededed;color:#333!important}.btn-group-sm>.btn,.btn-sm{padding:5px 20px 5px 5px}.edit-icon{color:#32ad3c;font-size:24px;margin-right:15px}.empty-title{margin-top:10px}@media screen and (max-width:600px){.empty-padding{padding:10px;background-color:#ededed;width:100%;display:block}.empty-wrapper{display:flex;background-color:#fff;border-radius:8px;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:16px;display:flex;height:40px;padding:6px 10px 8px}.empty-content{color:#333;display:flex;padding:5px 10px 10px;margin-top:44px;margin-left:-185px;border-left:none}.empty-msg{padding:12px 10px 10px 5px;font-size:14px;border-top:1px solid #a9afb1}.edit-icon{color:#32ad3c;font-size:20px;margin-right:6px}.empty-title{margin-top:6px}}"]
725
736
  }] }
726
737
  ];
@@ -849,4 +860,4 @@ if (false) {
849
860
  */
850
861
  RADashboardArea.prototype.permissionService;
851
862
  }
852
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUE0QixNQUFNLEVBQWEsU0FBUyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRjtJQWtDRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUIsRUFDekIsaUJBQStDLEVBQy9DLGlCQUFzQztRQU41QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBOEI7UUFDL0Msc0JBQWlCLEdBQWpCLGlC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MEJBQ3pCLEtBQUssU0FBQyxVQUFVOytCQUNoQixLQUFLLFNBQUMsZUFBZTtzQ0FDckIsS0FBSyxTQUFDLFdBQVc7K0JBQ2pCLEtBQUssU0FBQyxlQUFlOzhCQUNyQixLQUFLLFNBQUMsY0FBYzs0QkFDcEIsS0FBSyxTQUFDLFlBQVk7c0NBQ2xCLE1BQU07OEJBRU4sU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0lBK1o3QyxzQkFBQztDQUFBLEFBL2JELElBK2JDO1NBMWJZLGVBQWU7OztJQUUxQixxQ0FBMEM7O0lBQzFDLGtDQUErQjs7SUFDL0IscUNBQWdDOztJQUNoQyx5Q0FBa0M7O0lBQ2xDLHNDQUErQjs7Ozs7SUFFL0IseUNBQTRCOzs7OztJQUM1QiwrQ0FBa0M7Ozs7O0lBQ2xDLDRDQUErQjs7Ozs7SUFDL0IseUNBQTRCOzs7OztJQUM1QixpREFBb0M7Ozs7O0lBQ3BDLHlDQUF3Qzs7SUFDeEMscUNBQW1DOztJQUNuQyw2Q0FBMkM7O0lBQzNDLHdDQUFzQzs7SUFFdEMsMENBQW9EOztJQUNwRCxrQ0FBbUM7O0lBQ25DLHVDQUEwQzs7SUFDMUMsOENBQTZEOztJQUM3RCx1Q0FBaUQ7O0lBQ2pELHNDQUErQzs7SUFDL0Msb0NBQTJDOztJQUMzQyw4Q0FBbUQ7O0lBRW5ELHNDQUFxRTs7Ozs7SUFFekQsMkNBQTRDOzs7OztJQUN0RCxpQ0FBc0I7Ozs7O0lBQ3RCLHFDQUFzQzs7Ozs7SUFDdEMsMkNBQTRDOzs7OztJQUM1QyxtQ0FBaUM7Ozs7O0lBQ2pDLDRDQUF1RDs7Ozs7SUFDdkQsNENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQsIE9uSW5pdCwgQ29tcG9uZW50LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEdyaWRzdGVyQ29uZmlnLCBHcmlkc3Rlckl0ZW0gfSBmcm9tICcuLi8uLi9ncmlkc3Rlci9pbmRleCc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgSVdpZGdldEluZm8sIElBcHBDb25maWcgfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgUkFUcmFuc2xhdGVTZXJ2aWNlLCBSQVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQHNjaG5laWRlcmVzcy9yYS1jb21tb24nO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZFJlc3BvbnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnJlc3BvbnNpdmUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLWRhc2hib2FyZC1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmEuZGFzaGJvYXJkLmFyZWEuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgd2lkZ2V0TGlzdCA9IEFycmF5PEdyaWRzdGVySXRlbT4oKTtcclxuICBwdWJsaWMgb3B0aW9uczogR3JpZHN0ZXJDb25maWc7XHJcbiAgcHVibGljIGdyaWRoZWlnaHQ6IG51bWJlciA9IDMwMDtcclxuICBwdWJsaWMgZ3JpZGNlbGxIZWlnaHQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHVzZXJXaWRnZXRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSByZWFycmFuZ2VXaWRnZXRDbGljazogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0RGVsZXRlRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldEFkZEV2ZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRMaWJyYXJ5RG9uZUNsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb21SZXNpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dFbXB0eURhc2hib2FyZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2FyZWEta2V5JykgYXJlYUtleTogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSB3aWRnZXRIZWlnaHQ6IG51bWJlciA9IDI7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWRnZXRXaWR0aDogbnVtYmVyID0gNDtcclxuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XHJcbiAgQE91dHB1dCgpIGhpZGVEYXNoYm9hcmRCYW5uZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyaWRXcmFwcGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaXZlU2VydmljZTogUkFEYXNoYm9hcmRSZXNwb25zaXZlU2VydmljZSxcclxuICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFJBUGVybWlzc2lvblNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLnJlc2l6ZWQuc3Vic2NyaWJlKChpc0Rlc2t0b3ApID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ2luIHJlc3BvbnNpdmUgc2VydmljZSBzdWJzY3JpYmUnKTtcclxuICAgICAgY29uc29sZS5sb2coaXNEZXNrdG9wKTtcclxuXHJcbiAgICAgIGlmIChpc0Rlc2t0b3ApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKTtcclxuICAgICAgICAgIHRoaXMuZG9tUmVzaXplZCA9ICF0aGlzLmRvbVJlc2l6ZWQ7XHJcbiAgICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgICB9LDEwMCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRMaXN0ID0gW107XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnVzZXJXaWRnZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0TGlzdCA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh0aGlzLnVzZXJXaWRnZXRzKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFdpZGdldHModGhpcy51c2VyRGFzaGJvYXJkSWQsIHRoaXMuYXJlYUtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXHJcbiAgcHVibGljIGluaXRpYXRlR3JpZHN0ZXJDb25maWcoKSB7XHJcbiAgICAvKipUbyBvdmVycmlkZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzIHRvIHRoZSBncmlkc3RlciBjb250cm9sICovXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVyQ29uZmlnKHRoaXMuaXNXaWRnZXRNZ21udCk7XHJcbiAgICB0aGlzLm9wdGlvbnMuaW5pdENhbGxiYWNrID0gKGdyaWRzdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLm9wdGlvbnMuaXRlbUNoYW5nZUNhbGxiYWNrID0gKGl0ZW06IEdyaWRzdGVySXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ud2lkZ2V0SW5mbyAmJiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbihpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBpbml0aWF0ZSBldmVudGJ1cyBzdWJzY3RpcHRpb25zICovXHJcbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XHJcbiAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LldpZGdldERlbGV0ZSkuc3Vic2NyaWJlKChpbnN0YW5jZUlkKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRBZGRFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5BZGRXaWRnZXQpLnN1YnNjcmliZSgod2lkZ2V0SW5mbykgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmlmZ0FkZENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkNvbmZpZ0FkZENsaWNrKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlYXJyYW5nZVdpZGdldENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LlJlYXJyYW5nZUNsaWNrZWQpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0cygpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKS5zdWJzY3JpYmUoKHdpZGdldExpc3QpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBpZiAod2lkZ2V0TGlzdCkge1xyXG4gICAgICAgICAgdGhpcy5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0ZW1wIGZpeC0gcmVjdXJzaXZlIG1ldGhvZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgaXRlbXNcclxuICAgKiBhbmQgYWRkIHRoZW0gdG8gZ3JpZHN0ZXIgaW4gdGhlIGdpdmVuIG9yZGVyXHJcbiAgICogQHBhcmFtIHdpZGdldExpc3QgIC1saXN0IG9mIHdpZGdldHNcclxuICAgKiBAcGFyYW0gaW5kZXggLWluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG4gICAgbGV0IGluZGV4VmFsID0gaW5kZXggKyAxO1xyXG4gICAgaWYgKGluZGV4ID4gd2lkZ2V0TGlzdC5sZW5ndGggLSAxKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uaWZnQWRkQ2xpY2spXHJcbiAgICAgIHRoaXMuY29uaWZnQWRkQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRBZGRFdmVudClcclxuICAgICAgdGhpcy53aWRnZXRBZGRFdmVudC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldERlbGV0ZUV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljaylcclxuICAgICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2spXHJcbiAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgcG9zaXRpb24vZGltZW50aW9uIG9mIGFsbCB3aWRnZXRzIGluIHRoZSBhcmVhICovXHJcbiAgdXBkYXRlV2lkZ2V0cygpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCkpLFxyXG4gICAgICB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gdXBkYXRlIHdpZGdldCBkaW1lbnNpb25zICovXHJcbiAgdXBkYXRlV2lkZ2V0UG9zaXRpb24od2lkZ2V0SW5zdGFuY2VJZDogbnVtYmVyKSB7XHJcblxyXG4gICAgbGV0IHdpZGdldEZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZmlsdGVyZWQgPT4gZmlsdGVyZWQud2lkZ2V0SW5mbyAmJiBmaWx0ZXJlZC53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgPT0gd2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHdpZGdldEZpbHRlcmVkTGlzdC5wdXNoKHdpZGdldFswXSk7XHJcbiAgICAgIGxldCB3aWRnZXRMaXN0ID0gdGhpcy5tYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRGaWx0ZXJlZExpc3QpO1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLmZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHMod2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipUbyByZXN0cmljdCByZXF1ZXN0IHBheWxvYWQgdG8gYmUgb2YgbWluIHNpemUgKHBvc2l0aW9uICYgc2l6ZSBkZXRhaWxzKSAqL1xyXG4gIGZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHMod2lkZ2V0SXRlbUxpc3Q6IElXaWRnZXRJbmZvW10pIHtcclxuICAgIGxldCBpdGVtTGlzdDogYW55ID0gW107XHJcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKGZ1bmN0aW9uICh3aWRnZXRJdGVtKSB7XHJcbiAgICAgIGxldCBpdGVtID0ge30gYXMgSVdpZGdldEluZm87XHJcbiAgICAgIGl0ZW0ud2lkZ2V0SW5zdGFuY2VJZCA9IHdpZGdldEl0ZW0ud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgaXRlbS5wb3NpdGlvbl94ID0gd2lkZ2V0SXRlbS5wb3NpdGlvbl94O1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3k7XHJcbiAgICAgIGl0ZW0ud2lkdGggPSB3aWRnZXRJdGVtLndpZHRoO1xyXG4gICAgICBpdGVtLmhlaWdodCA9IHdpZGdldEl0ZW0uaGVpZ2h0O1xyXG4gICAgICBpdGVtTGlzdC5wdXNoKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbUxpc3Q7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmV0cmlldmUgd2lkZ2V0cyBiYXNlZCBvbiB1c2VyRGFzaGJvYXJkaWQgYW5kIGFyZWEgbmFtZSAqL1xyXG4gIGxvYWRXaWRnZXRzKHVzZXJEYXNoYm9hcklkOiBudW1iZXIsIGFyZWFLZXk6IHN0cmluZykge1xyXG5cclxuICAgIGxldCB3aWRnZXRJbmZvID0gPElXaWRnZXRJbmZvPntcclxuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXHJcbiAgICAgIGRhc2hib2FyZEFyZWFLZXk6IGFyZWFLZXlcclxuICAgIH1cclxuICAgIHRoaXMud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFdpZGdldHNCeURhc2hib2FyZEFyZWEod2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuXHJcbiAgICAgIHRoaXMudXNlcldpZGdldHMgPSB3aWRnZXRzO1xyXG5cclxuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRMaXN0ID0gdGhpcy5tYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHdpZGdldHMpO1xyXG4gICAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIHNldCBBcmVhKEdyaWRzdGVyKSBoZWlnaHQgZHluYW1pY2FsbHkgYXMgd2lkZ2V0cyBhcmUgYWRkZWQvcmVtb3ZlZCAqL1xyXG4gIHNldEFyZWFIZWlnaHQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGlzTW9iaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubW9iaWxlQnJlYWtwb2ludCA+IHRoaXMuZ3JpZFdyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgIGlzTW9iaWxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgYXJlYVNjcm9sbEhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IGN1clJvd0hlaWdodCA9IDA7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgdGhpcy53aWRnZXRMaXN0LmZvckVhY2goKHQpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSArIHQucm93cztcclxuICAgICAgICBpZiAoY3VycmVudEhlaWdodCA+IGFyZWFTY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgIGFyZWFTY3JvbGxIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID09IDApIHtcclxuICAgICAgICAgIGN1cnJlbnRIZWlnaHQgPSB0aGlzLndpZGdldExpc3RbMF0uY3VyUm93SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0LndpZGdldEluZm8ucm93SGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5ncmlkY2VsbEhlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTAwO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gMDtcclxuICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgYXJlYVNjcm9sbEhlaWdodE1vYiA9IHRoaXMud2lkZ2V0TGlzdC5sZW5ndGggKiAzMDAgKyAyMDA7XHJcbiAgICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHRNb2I7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFyZWFIZWlnaHQgPCA2MDApIHtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gNjAwO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ3JpZGhlaWdodCA9IGFyZWFIZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXHJcbiAgZGVsZXRlV2lkZ2V0KHdpZGdldEluc3RhbmNlSWQ6IGFueSwgaXNhbGVydERpc2FibGVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGdyaWRzdGVySXRlbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCB3aWRnZXQgPSB0aGlzLnVzZXJXaWRnZXRzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLndpZGdldEluc3RhbmNlSWQgPT09IHdpZGdldEluc3RhbmNlSWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnVzZXJXaWRnZXRzLnNwbGljZSh0aGlzLnVzZXJXaWRnZXRzLmluZGV4T2Yod2lkZ2V0WzBdKSwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2YoZ3JpZHN0ZXJJdGVtWzBdKSwgMSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICBpZiAoIWlzYWxlcnREaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uV2lkZ2V0dGV4dCcpICsgXCIgXCIgKyBncmlkc3Rlckl0ZW1bMF0ud2lkZ2V0SW5mby53aWRnZXRUaXRsZSArIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9IHRoaXMudXNlcldpZGdldHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGlmICh0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gcmVhcnJhbmdlIHdpZGdldHMgcG9zaXRpb24gaW4gdGhlIGRhc2hib2FyZCwgY29tcGFjdExlZnQmVXAsY29tcGFjdExlZnQsY29tcGFjdFVwLGV0YyovXHJcbiAgcmVhcnJhbmdlV2lkZ2V0cygpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzW2ldLnBvc2l0aW9uX3ggPSAwO1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzW2ldLnBvc2l0aW9uX3kgPSAwO1xyXG4gICAgICB0aGlzLndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3QodGhpcy51c2VyV2lkZ2V0cyk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGFkZCB3aWRnZXQgaW5zdGFuY2UgdG8gdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIHBvc2l0aW9uIGFuZCB0byBtYWtlIGNoYW5nZXMgaW5cclxuICAgKiBkYXNoYm9hcmQgYXJlYS5cclxuICAgKi9cclxuICBhZGRXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhLmhlaWdodCA9IHRoaXMud2lkZ2V0SGVpZ2h0O1xyXG4gICAgZGF0YS53aWR0aCA9IHRoaXMud2lkZ2V0V2lkdGg7XHJcblxyXG5cclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgZmFsc2UpO1xyXG4gICAgaWYgKGRhdGEud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgaWYgKHR5cGVvZiBkYXRhLndpZGdldFNldHRpbmdzID09PSAnc3RyaW5nJylcclxuICAgICAgICBkYXRhLndpZGdldFNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhLndpZGdldFNldHRpbmdzKTtcclxuXHJcbiAgICAgIGlmIChkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRDb2xzKSB7XHJcbiAgICAgICAgZGF0YS53aWR0aCA9IGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdENvbHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdFJvd3MpIHtcclxuICAgICAgICBkYXRhLmhlaWdodCA9IGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdFJvd3M7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YS53aWRnZXRTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBkYXRhID0gdGhpcy5zZXRQb3NpdGlvbnMoZGF0YSk7XHJcblxyXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xyXG4gICAgZGF0YS5kYXNoYm9hcmRBcmVhS2V5ID0gdGhpcy5hcmVhS2V5O1xyXG4gICAgZGF0YS5kYXNoYm9hcmRJZCA9IHRoaXMudXNlckRhc2hib2FyZElkO1xyXG4gICAgdGhpcy5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0KGRhdGEsIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0ID0+IHtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cy5wdXNoKHdpZGdldCk7XHJcbiAgICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVySXRlbSh3aWRnZXQpO1xyXG4gICAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgbGV0IGN1clJvd0hlaWdodDogbnVtYmVyID0gTnVtYmVyKHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpKTtcclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgd2lkZ2V0LnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciB3aWRnZXRJbnN0YW5jZUlkID0gMDtcclxuICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlSWQgPSB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgICAvKipUbyBzYXZlIGFkZGVkIHdpZGdldCBwb3NpdGlvbiBpbiBkYiAqL1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldFBvc2l0aW9uKHdpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEFkZGVkLCB3aWRnZXQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBvc2l0aW9ucyhkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEucG9zaXRpb25feCA9IDA7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3kgPSAwO1xyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgaWYgKHRoaXMudXNlcldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCB3aWRnZXQgPSB0aGlzLnVzZXJXaWRnZXRzW3RoaXMudXNlcldpZGdldHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKHdpZGdldC5wb3NpdGlvbl94ICsgd2lkZ2V0LndpZHRoID4gKHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UubWF4Q29sc0Rlc2t0b3AgLyAyKSkge1xyXG4gICAgICAgICAgZGF0YS5wb3NpdGlvbl95ID0gd2lkZ2V0LnBvc2l0aW9uX3kgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRhdGEucG9zaXRpb25feSA9IHdpZGdldC5wb3NpdGlvbl95O1xyXG4gICAgICAgICAgZGF0YS5wb3NpdGlvbl94ID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5tYXhDb2xzRGVza3RvcCAtICh3aWRnZXQucG9zaXRpb25feCArIHdpZGdldC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBhZGQgd2lkZ2V0IHRvIGN1cnJlbnQgd2lkZ2V0IGxpc3QgLGludm9rZWQgZnJvbSBjb3B5IHdpZGdldCB3aW5kb3cqL1xyXG4gIGNvcHlXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhID0gdGhpcy5zZXRQb3NpdGlvbnMoZGF0YSk7XHJcbiAgICBpZiAoIXRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLmZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHMoW2RhdGFdKSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVzZXJXaWRnZXRzLnB1c2goZGF0YSk7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0oZGF0YSk7XHJcbiAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBtYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHdpZGdldExpc3Q6IEFycmF5PElXaWRnZXRJbmZvPikge1xyXG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gICAgd2lkZ2V0TGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldEFycmF5LnB1c2godGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0od2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRBcnJheTtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldEl0ZW06IEdyaWRzdGVySXRlbSkge1xyXG4gICAgbGV0IHdpZGdldDogSVdpZGdldEluZm87XHJcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XHJcbiAgICB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0SXRlbS5yb3dzO1xyXG4gICAgd2lkZ2V0LndpZHRoID0gd2lkZ2V0SXRlbS5jb2xzO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLng7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ueTtcclxuICAgIHdpZGdldC5yb3dIZWlnaHQgPSB3aWRnZXRJdGVtLmN1clJvd0hlaWdodDtcclxuICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xyXG4gICAgbGV0IHdpZGdldExpc3RBcnJheSA9IEFycmF5PElXaWRnZXRJbmZvPigpO1xyXG4gICAgd2lkZ2V0SXRlbUxpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0TGlzdEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZE5ld1dpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmQsIG51bGwpO1xyXG4gIH1cclxuXHJcbn0iXX0=
863
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUE0QixNQUFNLEVBQWEsU0FBUyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRjtJQWtDRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUIsRUFDekIsaUJBQStDLEVBQy9DLGlCQUFzQztRQU41QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBOEI7UUFDL0Msc0JBQWlCLEdBQWpCLGlC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bnB1dCwgT25Jbml0LCBDb21wb25lbnQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgTmdab25lLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uLy4uL2dyaWRzdGVyL2luZGV4JztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkUmVzcG9uc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi9yYS5kYXNoYm9hcmQucmVzcG9uc2l2ZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmEtZGFzaGJvYXJkLWFyZWEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS5kYXNoYm9hcmQuYXJlYS5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYS5kYXNoYm9hcmQuYXJlYS5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFEYXNoYm9hcmRBcmVhIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyB3aWRnZXRMaXN0ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcclxuICBwdWJsaWMgZ3JpZGhlaWdodDogbnVtYmVyID0gMzAwO1xyXG4gIHB1YmxpYyBncmlkY2VsbEhlaWdodDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgdXNlcldpZGdldHM6IGFueVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgY29uaWZnQWRkQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIHJlYXJyYW5nZVdpZGdldENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXREZWxldGVFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0QWRkRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0VtcHR5RGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzV2lkZ2V0TWdtbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCd1c2VyLWRhc2hib2FyZC1pZCcpIHVzZXJEYXNoYm9hcmRJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnYXJlYS1rZXknKSBhcmVhS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIHdpZGdldEhlaWdodDogbnVtYmVyID0gMjtcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA0O1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuICBAT3V0cHV0KCkgaGlkZURhc2hib2FyZEJhbm5lciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JpZFdyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JpZFdyYXBwZXI6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogUmFEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNpdmVTZXJ2aWNlOiBSQURhc2hib2FyZFJlc3BvbnNpdmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZTogUkFQZXJtaXNzaW9uU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG5cclxuICAgIHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UucmVzaXplZC5zdWJzY3JpYmUoKGlzRGVza3RvcCkgPT4ge1xyXG4gICAgICBpZiAoaXNEZXNrdG9wKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XHJcbiAgICAgICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLndpZGdldExpc3QgPSBbXTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMudXNlcldpZGdldHMpIHtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRMaXN0ID0gdGhpcy5tYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHRoaXMudXNlcldpZGdldHMpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZG9tUmVzaXplZCA9ICF0aGlzLmRvbVJlc2l6ZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAodGhpcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIHRoaXMuYXBwQ29uZmlnICYmICF0aGlzLmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgR3JpZHN0ZXJDb25maWcgKi9cclxuICBwdWJsaWMgaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpIHtcclxuICAgIC8qKlRvIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gdGhlIGdyaWRzdGVyIGNvbnRyb2wgKi9cclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJDb25maWcodGhpcy5pc1dpZGdldE1nbW50KTtcclxuICAgIHRoaXMub3B0aW9ucy5pbml0Q2FsbGJhY2sgPSAoZ3JpZHN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMub3B0aW9ucy5pdGVtQ2hhbmdlQ2FsbGJhY2sgPSAoaXRlbTogR3JpZHN0ZXJJdGVtKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgICBpZiAoaXRlbS53aWRnZXRJbmZvICYmIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldFBvc2l0aW9uKGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIGluaXRpYXRlIGV2ZW50YnVzIHN1YnNjdGlwdGlvbnMgKi9cclxuICBpbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpIHtcclxuICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuV2lkZ2V0RGVsZXRlKS5zdWJzY3JpYmUoKGluc3RhbmNlSWQpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpZGdldChpbnN0YW5jZUlkLCB0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLndpZGdldEFkZEV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkFkZFdpZGdldCkuc3Vic2NyaWJlKCh3aWRnZXRJbmZvKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uaWZnQWRkQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQ29uZmlnQWRkQ2xpY2spLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkV2lkZ2V0KGUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuUmVhcnJhbmdlQ2xpY2tlZCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRlbXAgZml4LSByZWN1cnNpdmUgbWV0aG9kIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBpdGVtc1xyXG4gICAqIGFuZCBhZGQgdGhlbSB0byBncmlkc3RlciBpbiB0aGUgZ2l2ZW4gb3JkZXJcclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xyXG4gICAqIEBwYXJhbSBpbmRleCAtaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgdG8gYmUgYWRkZWRcclxuICAgKi9cclxuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcbiAgICBsZXQgaW5kZXhWYWwgPSBpbmRleCArIDE7XHJcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25pZmdBZGRDbGljaylcclxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEFkZEV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKVxyXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljaylcclxuICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cclxuICB1cGRhdGVXaWRnZXRzKCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5mb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKHRoaXMubWFwR3JpZHN0ZXJMaXN0VG9PYmplY3QodGhpcy53aWRnZXRMaXN0KSksXHJcbiAgICAgIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgd2lkZ2V0IGRpbWVuc2lvbnMgKi9cclxuICB1cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcclxuXHJcbiAgICBsZXQgd2lkZ2V0RmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC53aWRnZXRJbmZvICYmIGZpbHRlcmVkLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgd2lkZ2V0RmlsdGVyZWRMaXN0LnB1c2god2lkZ2V0WzBdKTtcclxuICAgICAgbGV0IHdpZGdldExpc3QgPSB0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEZpbHRlcmVkTGlzdCk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRMaXN0KSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHJlc3RyaWN0IHJlcXVlc3QgcGF5bG9hZCB0byBiZSBvZiBtaW4gc2l6ZSAocG9zaXRpb24gJiBzaXplIGRldGFpbHMpICovXHJcbiAgZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRJdGVtTGlzdDogSVdpZGdldEluZm9bXSkge1xyXG4gICAgbGV0IGl0ZW1MaXN0OiBhbnkgPSBbXTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKHdpZGdldEl0ZW0pIHtcclxuICAgICAgbGV0IGl0ZW0gPSB7fSBhcyBJV2lkZ2V0SW5mbztcclxuICAgICAgaXRlbS53aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0SXRlbS53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3g7XHJcbiAgICAgIGl0ZW0ucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ucG9zaXRpb25feTtcclxuICAgICAgaXRlbS53aWR0aCA9IHdpZGdldEl0ZW0ud2lkdGg7XHJcbiAgICAgIGl0ZW0uaGVpZ2h0ID0gd2lkZ2V0SXRlbS5oZWlnaHQ7XHJcbiAgICAgIGl0ZW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZXRyaWV2ZSB3aWRnZXRzIGJhc2VkIG9uIHVzZXJEYXNoYm9hcmRpZCBhbmQgYXJlYSBuYW1lICovXHJcbiAgbG9hZFdpZGdldHModXNlckRhc2hib2FySWQ6IG51bWJlciwgYXJlYUtleTogc3RyaW5nKSB7XHJcblxyXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xyXG4gICAgICBkYXNoYm9hcmRJZDogdXNlckRhc2hib2FySWQudG9TdHJpbmcoKSxcclxuICAgICAgZGFzaGJvYXJkQXJlYUtleTogYXJlYUtleVxyXG4gICAgfVxyXG4gICAgdGhpcy53aWRnZXRMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG5cclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cyA9IHdpZGdldHM7XHJcblxyXG4gICAgICBpZiAod2lkZ2V0cyAmJiB3aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XHJcbiAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXHJcbiAgc2V0QXJlYUhlaWdodCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgaXNNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2JpbGVCcmVha3BvaW50ID4gdGhpcy5ncmlkV3JhcHBlci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgaXNNb2JpbGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IGFyZWFIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBjdXJSb3dIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPSB0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWU7XHJcblxyXG4gICAgICB0aGlzLndpZGdldExpc3QuZm9yRWFjaCgodCkgPT4ge1xyXG4gICAgICAgIGxldCBjdXJyZW50SGVpZ2h0ID0gdC55ICsgdC5yb3dzO1xyXG4gICAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgYXJlYVNjcm9sbEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xyXG4gICAgICAgICAgY3VycmVudEhlaWdodCA9IHRoaXMud2lkZ2V0TGlzdFswXS5jdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIGFyZWFIZWlnaHQgPSBhcmVhU2Nyb2xsSGVpZ2h0ICogdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCkgKyAxMDA7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFyZWFTY3JvbGxIZWlnaHRNb2IgPSAwO1xyXG4gICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gdGhpcy53aWRnZXRMaXN0Lmxlbmd0aCAqIDMwMCArIDIwMDtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodE1vYjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXJlYUhlaWdodCA8IDYwMCkge1xyXG4gICAgICAgIGFyZWFIZWlnaHQgPSA2MDA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gcmVtb3ZlIGEgd2lkZ2V0IGluc3RhbmNlIGZyb20gZGFzaGJvYXJkIGFuZCB0byBzYXZlIGluZm8gaW4gZGF0YWJhc2UgKi9cclxuICBkZWxldGVXaWRnZXQod2lkZ2V0SW5zdGFuY2VJZDogYW55LCBpc2FsZXJ0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09PSB3aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoZ3JpZHN0ZXJJdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHdpZGdldCA9IHRoaXMudXNlcldpZGdldHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh3aWRnZXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMudXNlcldpZGdldHMuc3BsaWNlKHRoaXMudXNlcldpZGdldHMuaW5kZXhPZih3aWRnZXRbMF0pLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnNwbGljZSh0aGlzLndpZGdldExpc3QuaW5kZXhPZihncmlkc3Rlckl0ZW1bMF0pLCAxKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmllci5ub3RpZnkoJ3N1Y2Nlc3MnLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5XaWRnZXR0ZXh0JykgKyBcIiBcIiArIGdyaWRzdGVySXRlbVswXS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlZFN1Y2Nlc2Z1bGx5JykgKyBcIiBcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgaWYgKHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID09IHRydWUpIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCB0aGlzLnNob3dFbXB0eURhc2hib2FyZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyByZWFycmFuZ2Ugd2lkZ2V0cyBwb3NpdGlvbiBpbiB0aGUgZGFzaGJvYXJkLCBjb21wYWN0TGVmdCZVcCxjb21wYWN0TGVmdCxjb21wYWN0VXAsZXRjKi9cclxuICByZWFycmFuZ2VXaWRnZXRzKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHNbaV0ucG9zaXRpb25feCA9IDA7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHNbaV0ucG9zaXRpb25feSA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3QodGhpcy51c2VyV2lkZ2V0cyk7XHJcbiAgICBpZiAodGhpcy53aWRnZXRMaXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMudXBkYXRlV2lkZ2V0UG9zaXRpb24odGhpcy53aWRnZXRMaXN0WzBdLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXHJcbiAgICogZGFzaGJvYXJkIGFyZWEuXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcclxuICAgIGRhdGEud2lkdGggPSB0aGlzLndpZGdldFdpZHRoO1xyXG5cclxuXHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIGZhbHNlKTtcclxuICAgIGlmIChkYXRhLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZGF0YS53aWRnZXRTZXR0aW5ncyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgZGF0YS53aWRnZXRTZXR0aW5ncyA9IEpTT04ucGFyc2UoZGF0YS53aWRnZXRTZXR0aW5ncyk7XHJcblxyXG4gICAgICBpZiAoZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Q29scykge1xyXG4gICAgICAgIGRhdGEud2lkdGggPSBkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRDb2xzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRSb3dzKSB7XHJcbiAgICAgICAgZGF0YS5oZWlnaHQgPSBkYXRhLndpZGdldFNldHRpbmdzLmRlZmF1bHRSb3dzO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGEud2lkZ2V0U2V0dGluZ3MgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZGF0YSA9IHRoaXMuc2V0UG9zaXRpb25zKGRhdGEpO1xyXG5cclxuICAgIC8qKiB0byBmaW5kIHRoZSBhdmFpbGFibGUgcG9zaXRpb24gaW4gZ3JpZHN0ZXIsIHRlbXAgY29tbWVudGluZyB0aGUgY29kZS1yZXR1cm5pbmcgaGlnaGVyIHkgdmFsdWUgdGhhbiBub3JtYWwgKi9cclxuICAgIGRhdGEuZGFzaGJvYXJkQXJlYUtleSA9IHRoaXMuYXJlYUtleTtcclxuICAgIGRhdGEuZGFzaGJvYXJkSWQgPSB0aGlzLnVzZXJEYXNoYm9hcmRJZDtcclxuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZFdpZGdldChkYXRhLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldCA9PiB7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHMucHVzaCh3aWRnZXQpO1xyXG4gICAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0od2lkZ2V0KTtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIGxldCBjdXJSb3dIZWlnaHQ6IG51bWJlciA9IE51bWJlcih0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKSk7XHJcbiAgICAgICAgaWYgKGN1clJvd0hlaWdodCA+IDApIHtcclxuICAgICAgICAgIHdpZGdldC5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgd2lkZ2V0SW5zdGFuY2VJZCA9IDA7XHJcbiAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LndpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0LndpZGdldEluc3RhbmNlSWQ7XHJcbiAgICAgICAgLyoqVG8gc2F2ZSBhZGRlZCB3aWRnZXQgcG9zaXRpb24gaW4gZGIgKi9cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRBZGRlZCwgd2lkZ2V0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbnMoZGF0YTogYW55KSB7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSAwO1xyXG4gICAgZGF0YS5wb3NpdGlvbl95ID0gMDtcclxuICAgIGlmICghdGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgd2lkZ2V0ID0gdGhpcy51c2VyV2lkZ2V0c1t0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmICh3aWRnZXQucG9zaXRpb25feCArIHdpZGdldC53aWR0aCA+ICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLm1heENvbHNEZXNrdG9wIC8gMikpIHtcclxuICAgICAgICAgIGRhdGEucG9zaXRpb25feSA9IHdpZGdldC5wb3NpdGlvbl95ICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uX3kgPSB3aWRnZXQucG9zaXRpb25feTtcclxuICAgICAgICAgIGRhdGEucG9zaXRpb25feCA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UubWF4Q29sc0Rlc2t0b3AgLSAod2lkZ2V0LnBvc2l0aW9uX3ggKyB3aWRnZXQud2lkdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gYWRkIHdpZGdldCB0byBjdXJyZW50IHdpZGdldCBsaXN0ICxpbnZva2VkIGZyb20gY29weSB3aWRnZXQgd2luZG93Ki9cclxuICBjb3B5V2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgZGF0YSA9IHRoaXMuc2V0UG9zaXRpb25zKGRhdGEpO1xyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5mb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKFtkYXRhXSksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyV2lkZ2V0cy5wdXNoKGRhdGEpO1xyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJJdGVtKGRhdGEpO1xyXG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcclxuICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgbWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh3aWRnZXRMaXN0OiBBcnJheTxJV2lkZ2V0SW5mbz4pIHtcclxuICAgIGxldCB3aWRnZXRBcnJheSA9IEFycmF5PEdyaWRzdGVySXRlbT4oKTtcclxuICAgIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRBcnJheS5wdXNoKHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJJdGVtKHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXRJdGVtOiBHcmlkc3Rlckl0ZW0pIHtcclxuICAgIGxldCB3aWRnZXQ6IElXaWRnZXRJbmZvO1xyXG4gICAgd2lkZ2V0ID0gd2lkZ2V0SXRlbS53aWRnZXRJbmZvO1xyXG4gICAgd2lkZ2V0LmhlaWdodCA9IHdpZGdldEl0ZW0ucm93cztcclxuICAgIHdpZGdldC53aWR0aCA9IHdpZGdldEl0ZW0uY29scztcclxuICAgIHdpZGdldC5wb3NpdGlvbl94ID0gd2lkZ2V0SXRlbS54O1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnk7XHJcbiAgICB3aWRnZXQucm93SGVpZ2h0ID0gd2lkZ2V0SXRlbS5jdXJSb3dIZWlnaHQ7XHJcbiAgICByZXR1cm4gd2lkZ2V0O1xyXG4gIH1cclxuXHJcbiAgbWFwR3JpZHN0ZXJMaXN0VG9PYmplY3Qod2lkZ2V0SXRlbUxpc3Q6IEFycmF5PEdyaWRzdGVySXRlbT4pIHtcclxuICAgIGxldCB3aWRnZXRMaXN0QXJyYXkgPSBBcnJheTxJV2lkZ2V0SW5mbz4oKTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2god2lkZ2V0ID0+IHtcclxuICAgICAgd2lkZ2V0TGlzdEFycmF5LnB1c2godGhpcy5tYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXQpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdpZGdldExpc3RBcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGROZXdXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkFkZE5ld1dpZGdldFRvRGFzaGJvYXJkLCBudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVBcHBsaWVkRmlsdGVycyhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuVXBkYXRlQXBwbGVkRml0ZXJGb3JJbmFwcGxpY2FibGVGaWx0ZXIsIGRhdGEpO1xyXG4gIH1cclxuXHJcbn0iXX0=