You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
30KB

  1. (self["webpackChunk"] = self["webpackChunk"] || []).push([["adminlte-index"],{
  2. /***/ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/app.index.js":
  3. /*!**********************************************************************************!*\
  4. !*** ../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/app.index.js ***!
  5. \**********************************************************************************/
  6. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7. "use strict";
  8. __webpack_require__.r(__webpack_exports__);
  9. /* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.js");
  10. /* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_index_js__WEBPACK_IMPORTED_MODULE_0__);
  11. /* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.scss */ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.scss");
  12. /***/ }),
  13. /***/ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.js":
  14. /*!******************************************************************************!*\
  15. !*** ../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.js ***!
  16. \******************************************************************************/
  17. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  18. __webpack_require__(/*! core-js/modules/es.date.to-string.js */ "./node_modules/core-js/modules/es.date.to-string.js");
  19. __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
  20. __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js");
  21. __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js");
  22. __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js");
  23. __webpack_require__(/*! core-js/modules/es.string.split.js */ "./node_modules/core-js/modules/es.string.split.js");
  24. __webpack_require__(/*! core-js/modules/es.array.index-of.js */ "./node_modules/core-js/modules/es.array.index-of.js");
  25. __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js");
  26. __webpack_require__(/*! core-js/modules/es.array.join.js */ "./node_modules/core-js/modules/es.array.join.js");
  27. __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js");
  28. $(document).ready(function () {
  29. lcCrudIndexToggle();
  30. lcCrudIndexBatchActions();
  31. lcCrudIndexInitFilter();
  32. });
  33. function lcCrudIndexToggle() {
  34. var toggles = document.querySelectorAll('.custom-switch input[type="checkbox"]');
  35. for (i = 0; i < toggles.length; i++) {
  36. toggles[i].addEventListener('change', function () {
  37. var toggle = this;
  38. var newValue = this.checked;
  39. var oldValue = !newValue;
  40. var toggleUrl = this.closest('.custom-switch').dataset.url + "&newValue=" + newValue.toString();
  41. var toggleRequest = $.ajax({
  42. type: "POST",
  43. url: toggleUrl,
  44. data: {},
  45. dataType: 'json'
  46. });
  47. toggleRequest.done(function (response) {
  48. SovNotification.add('success', 'La propriété a bien été mise à jour.');
  49. });
  50. toggleRequest.fail(function () {
  51. toggle.checked = oldValue;
  52. toggle.disabled = true;
  53. toggle.closest('.checkbox-switch').classList.add('disabled');
  54. SovNotification.add('error', 'Une erreur est survenue.');
  55. });
  56. });
  57. }
  58. }
  59. function lcCrudIndexBatchActions() {
  60. var titleContent = $('.content-header-title > .title').html();
  61. $(document).on('click', '.deselect-batch-button', function () {
  62. $(this).closest('.content').find(':checkbox.form-batch-checkbox-all').prop('checked', false).trigger('change');
  63. });
  64. $(document).on('change', '.form-batch-checkbox-all', function () {
  65. $(this).closest('.content').find(':checkbox.form-batch-checkbox').prop('checked', $(this).prop('checked')).trigger('change');
  66. });
  67. $(document).on('change', '.form-batch-checkbox', function () {
  68. var $content = $(this).closest('.content-wrapper');
  69. var $input = $content.find(':hidden#batch_form_entityIds');
  70. var ids = $input.val() ? $input.val().split(',') : [];
  71. var id = $(this).val();
  72. if ($(this).prop('checked')) {
  73. $(this).closest('tr').addClass('selected-row');
  74. if (-1 === ids.indexOf(id)) {
  75. ids.push(id);
  76. }
  77. } else {
  78. $(this).closest('tr').removeClass('selected-row');
  79. ids = ids.filter(function (value) {
  80. return value !== id;
  81. });
  82. $content.find(':checkbox.form-batch-checkbox-all').prop('checked', false);
  83. }
  84. if (0 === ids.length) {
  85. $content.find('.global-actions').show();
  86. $content.find('.batch-actions').hide();
  87. $content.find('table').removeClass('table-batch');
  88. } else {
  89. $content.find('.batch-actions').show();
  90. $content.find('.global-actions').hide();
  91. $content.find('table').addClass('table-batch');
  92. }
  93. $input.val(ids.join(','));
  94. $content.find('.content-header-title > .title').html(0 === ids.length ? titleContent : '');
  95. });
  96. var modalTitle = $('#batch-action-confirmation-title');
  97. var titleContentWithPlaceholders = modalTitle.text();
  98. $('[data-action-batch]').on('click', function (event) {
  99. event.preventDefault();
  100. event.stopPropagation();
  101. var $actionElement = $(this);
  102. var actionName = $actionElement.attr('data-action-name');
  103. var selectedItems = $('input[type="checkbox"].form-batch-checkbox:checked');
  104. modalTitle.text(titleContentWithPlaceholders.replace('%action_name%', actionName).replace('%num_items%', selectedItems.length));
  105. $('#modal-batch-action').modal({
  106. backdrop: true,
  107. keyboard: true
  108. }).off('click', '#modal-batch-action-button').on('click', '#modal-batch-action-button', function () {
  109. $actionElement.unbind('click');
  110. $form = document.createElement('form');
  111. $form.setAttribute('action', $actionElement.attr('data-action-url'));
  112. $form.setAttribute('method', 'POST');
  113. $actionNameInput = document.createElement('input');
  114. $actionNameInput.setAttribute('type', 'hidden');
  115. $actionNameInput.setAttribute('name', 'batchActionName');
  116. $actionNameInput.setAttribute('value', $actionElement.attr('data-action-name'));
  117. $form.appendChild($actionNameInput);
  118. $entityFqcnInput = document.createElement('input');
  119. $entityFqcnInput.setAttribute('type', 'hidden');
  120. $entityFqcnInput.setAttribute('name', 'entityFqcn');
  121. $entityFqcnInput.setAttribute('value', $actionElement.attr('data-entity-fqcn'));
  122. $form.appendChild($entityFqcnInput);
  123. $actionUrlInput = document.createElement('input');
  124. $actionUrlInput.setAttribute('type', 'hidden');
  125. $actionUrlInput.setAttribute('name', 'batchActionUrl');
  126. $actionUrlInput.setAttribute('value', $actionElement.attr('data-action-url'));
  127. $form.appendChild($actionUrlInput);
  128. $csrfTokenInput = document.createElement('input');
  129. $csrfTokenInput.setAttribute('type', 'hidden');
  130. $csrfTokenInput.setAttribute('name', 'batchActionCsrfToken');
  131. $csrfTokenInput.setAttribute('value', $actionElement.attr('data-action-csrf-token'));
  132. $form.appendChild($csrfTokenInput);
  133. selectedItems.each(function (i, item) {
  134. $entityIdInput = document.createElement('input');
  135. $entityIdInput.setAttribute('type', 'hidden');
  136. $entityIdInput.setAttribute('name', "batchActionEntityIds[".concat(i, "]"));
  137. $entityIdInput.setAttribute('value', item.value);
  138. $form.appendChild($entityIdInput);
  139. });
  140. document.body.appendChild($form); //modalTitle.text(titleContentWithPlaceholders);
  141. $form.submit();
  142. });
  143. });
  144. }
  145. function lcCrudIndexInitFilter() {
  146. $('#filters_form_reset').val('');
  147. $('.lc-reset-filters').on('click', function (e) {
  148. //e.preventDefault();
  149. $(this).parents('.table-filters-line').find('select,input').val('').trigger('change');
  150. $('#filters_form_reset').val('clearAll');
  151. Tools.log($(this).prop('form'));
  152. $(this).prop('form').submit(); //$(this).parents('form').submit();
  153. });
  154. }
  155. /***/ }),
  156. /***/ "./node_modules/core-js/modules/es.date.to-string.js":
  157. /*!***********************************************************!*\
  158. !*** ./node_modules/core-js/modules/es.date.to-string.js ***!
  159. \***********************************************************/
  160. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  161. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  162. var DatePrototype = Date.prototype;
  163. var INVALID_DATE = 'Invalid Date';
  164. var TO_STRING = 'toString';
  165. var nativeDateToString = DatePrototype[TO_STRING];
  166. var getTime = DatePrototype.getTime;
  167. // `Date.prototype.toString` method
  168. // https://tc39.es/ecma262/#sec-date.prototype.tostring
  169. if (new Date(NaN) + '' != INVALID_DATE) {
  170. redefine(DatePrototype, TO_STRING, function toString() {
  171. var value = getTime.call(this);
  172. // eslint-disable-next-line no-self-compare -- NaN check
  173. return value === value ? nativeDateToString.call(this) : INVALID_DATE;
  174. });
  175. }
  176. /***/ }),
  177. /***/ "../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.scss":
  178. /*!********************************************************************************!*\
  179. !*** ../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/index.scss ***!
  180. \********************************************************************************/
  181. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  182. "use strict";
  183. __webpack_require__.r(__webpack_exports__);
  184. // extracted by mini-css-extract-plugin
  185. /***/ })
  186. },
  187. /******/ __webpack_require__ => { // webpackRuntimeModules
  188. /******/ "use strict";
  189. /******/
  190. /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
  191. /******/ __webpack_require__.O(0, ["vendors-node_modules_core-js_internals_export_js","vendors-node_modules_core-js_modules_es_string_replace_js","vendors-node_modules_core-js_modules_es_array_find_js","vendors-node_modules_core-js_modules_es_array_filter_js-node_modules_core-js_modules_es_array-f7c72f"], () => (__webpack_exec__("../LaClicBundle/SovBundle/Resources/assets/app/adminlte/index/app.index.js")));
  192. /******/ var __webpack_exports__ = __webpack_require__.O();
  193. /******/ }
  194. ]);
  195. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vTGFDbGljQnVuZGxlL1NvdkJ1bmRsZS9SZXNvdXJjZXMvYXNzZXRzL2FwcC9hZG1pbmx0ZS9pbmRleC9hcHAuaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL0xhQ2xpY0J1bmRsZS9Tb3ZCdW5kbGUvUmVzb3VyY2VzL2Fzc2V0cy9hcHAvYWRtaW5sdGUvaW5kZXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi4vTGFDbGljQnVuZGxlL1NvdkJ1bmRsZS9SZXNvdXJjZXMvYXNzZXRzL2FwcC9hZG1pbmx0ZS9pbmRleC9pbmRleC5zY3NzIl0sIm5hbWVzIjpbIiQiLCJkb2N1bWVudCIsInJlYWR5IiwibGNDcnVkSW5kZXhUb2dnbGUiLCJsY0NydWRJbmRleEJhdGNoQWN0aW9ucyIsImxjQ3J1ZEluZGV4SW5pdEZpbHRlciIsInRvZ2dsZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaSIsImxlbmd0aCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0b2dnbGUiLCJuZXdWYWx1ZSIsImNoZWNrZWQiLCJvbGRWYWx1ZSIsInRvZ2dsZVVybCIsImNsb3Nlc3QiLCJkYXRhc2V0IiwidXJsIiwidG9TdHJpbmciLCJ0b2dnbGVSZXF1ZXN0IiwiYWpheCIsInR5cGUiLCJkYXRhIiwiZGF0YVR5cGUiLCJkb25lIiwicmVzcG9uc2UiLCJTb3ZOb3RpZmljYXRpb24iLCJhZGQiLCJmYWlsIiwiZGlzYWJsZWQiLCJjbGFzc0xpc3QiLCJ0aXRsZUNvbnRlbnQiLCJodG1sIiwib24iLCJmaW5kIiwicHJvcCIsInRyaWdnZXIiLCIkY29udGVudCIsIiRpbnB1dCIsImlkcyIsInZhbCIsInNwbGl0IiwiaWQiLCJhZGRDbGFzcyIsImluZGV4T2YiLCJwdXNoIiwicmVtb3ZlQ2xhc3MiLCJmaWx0ZXIiLCJ2YWx1ZSIsInNob3ciLCJoaWRlIiwiam9pbiIsIm1vZGFsVGl0bGUiLCJ0aXRsZUNvbnRlbnRXaXRoUGxhY2Vob2xkZXJzIiwidGV4dCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCIkYWN0aW9uRWxlbWVudCIsImFjdGlvbk5hbWUiLCJhdHRyIiwic2VsZWN0ZWRJdGVtcyIsInJlcGxhY2UiLCJtb2RhbCIsImJhY2tkcm9wIiwia2V5Ym9hcmQiLCJvZmYiLCJ1bmJpbmQiLCIkZm9ybSIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCIkYWN0aW9uTmFtZUlucHV0IiwiYXBwZW5kQ2hpbGQiLCIkZW50aXR5RnFjbklucHV0IiwiJGFjdGlvblVybElucHV0IiwiJGNzcmZUb2tlbklucHV0IiwiZWFjaCIsIml0ZW0iLCIkZW50aXR5SWRJbnB1dCIsImJvZHkiLCJzdWJtaXQiLCJlIiwicGFyZW50cyIsIlRvb2xzIiwibG9nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNDQUEsQ0FBQyxDQUFDQyxRQUFELENBQUQsQ0FBWUMsS0FBWixDQUFrQixZQUFXO0FBQ3pCQyxtQkFBaUI7QUFDakJDLHlCQUF1QjtBQUN2QkMsdUJBQXFCO0FBQ3hCLENBSkQ7O0FBTUEsU0FBU0YsaUJBQVQsR0FBNkI7QUFDekIsTUFBTUcsT0FBTyxHQUFHTCxRQUFRLENBQUNNLGdCQUFULENBQTBCLHVDQUExQixDQUFoQjs7QUFDQSxPQUFLQyxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdGLE9BQU8sQ0FBQ0csTUFBeEIsRUFBZ0NELENBQUMsRUFBakMsRUFBcUM7QUFDakNGLFdBQU8sQ0FBQ0UsQ0FBRCxDQUFQLENBQVdFLGdCQUFYLENBQTRCLFFBQTVCLEVBQXNDLFlBQVk7QUFDOUMsVUFBTUMsTUFBTSxHQUFHLElBQWY7QUFDQSxVQUFNQyxRQUFRLEdBQUcsS0FBS0MsT0FBdEI7QUFDQSxVQUFNQyxRQUFRLEdBQUcsQ0FBQ0YsUUFBbEI7QUFDQSxVQUFNRyxT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QXBDLEtBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUW9DLElBQVIsQ0FBYSxNQUFiLEVBQXFCNkMsTUFBckIsR0FMNEMsQ0FNNUM7QUFDSCxHQVBEO0FBU0gsQzs7Ozs7Ozs7OztBQ3JKRCxlQUFlLG1CQUFPLENBQUMsMkVBQXVCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7Ozs7O0FDaEJBIiwiZmlsZSI6ImFkbWlubHRlLWluZGV4LjNkZTQ4ZDMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgJy4vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcyciLCJcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgbGNDcnVkSW5kZXhUb2dnbGUoKSA7XG4gICAgbGNDcnVkSW5kZXhCYXRjaEFjdGlvbnMoKSA7XG4gICAgbGNDcnVkSW5kZXhJbml0RmlsdGVyKCk7XG59KSA7XG5cbmZ1bmN0aW9uIGxjQ3J1ZEluZGV4VG9nZ2xlKCkge1xuICAgIGNvbnN0IHRvZ2dsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3VzdG9tLXN3aXRjaCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdG9nZ2xlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b2dnbGVzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gIW5ld1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdG9nZ2xlVXJsID0gdGhpcy5jbG9zZXN0KCcuY3VzdG9tLXN3aXRjaCcpLmRhdGFzZXQudXJsICsgXCImbmV3VmFsdWU9XCIgKyBuZXdWYWx1ZS50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBsZXQgdG9nZ2xlUmVxdWVzdCA9ICQuYWpheCh7dHlwZTogXCJQT1NUXCIsIHVybDogdG9nZ2xlVXJsLCBkYXRhOiB7fSwgZGF0YVR5cGU6ICdqc29uJ30pO1xuXG4gICAgICAgICAgICB0b2dnbGVSZXF1ZXN0LmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgU292Tm90aWZpY2F0aW9uLmFkZCgnc3VjY2VzcycsICdMYSBwcm9wcmnDqXTDqSBhIGJpZW4gw6l0w6kgbWlzZSDDoCBqb3VyLicpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVJlcXVlc3QuZmFpbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLmNoZWNrZWQgPSBvbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0b2dnbGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5jbG9zZXN0KCcuY2hlY2tib3gtc3dpdGNoJykuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBTb3ZOb3RpZmljYXRpb24uYWRkKCdlcnJvcicsICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxjQ3J1ZEluZGV4QmF0Y2hBY3Rpb25zKCkge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudCA9ICQoJy5jb250ZW50LWhlYWRlci10aXRsZSA+IC50aXRsZScpLmh0bWwoKTtcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmRlc2VsZWN0LWJhdGNoLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuY29udGVudCcpLmZpbmQoJzpjaGVja2JveC5mb3JtLWJhdGNoLWNoZWNrYm94LWFsbCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSk7XG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcuZm9ybS1iYXRjaC1jaGVja2JveC1hbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQodGhpcykuY2xvc2VzdCgnLmNvbnRlbnQnKS5maW5kKCc6Y2hlY2tib3guZm9ybS1iYXRjaC1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnKSkudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSk7XG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcuZm9ybS1iYXRjaC1jaGVja2JveCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgJGNvbnRlbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5jb250ZW50LXdyYXBwZXInKTtcbiAgICAgICAgbGV0ICRpbnB1dCA9ICRjb250ZW50LmZpbmQoJzpoaWRkZW4jYmF0Y2hfZm9ybV9lbnRpdHlJZHMnKTtcbiAgICAgICAgbGV0IGlkcyA9ICRpbnB1dC52YWwoKSA/ICRpbnB1dC52YWwoKS5zcGxpdCgnLCcpIDogW107XG4gICAgICAgIGNvbnN0IGlkID0gJCh0aGlzKS52YWwoKTtcblxuICAgICAgICBpZiAoJCh0aGlzKS5wcm9wKCdjaGVja2VkJykpIHtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5hZGRDbGFzcygnc2VsZWN0ZWQtcm93Jyk7XG4gICAgICAgICAgICBpZiAoLTEgPT09IGlkcy5pbmRleE9mKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQtcm93Jyk7XG4gICAgICAgICAgICBpZHMgPSBpZHMuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJGNvbnRlbnQuZmluZCgnOmNoZWNrYm94LmZvcm0tYmF0Y2gtY2hlY2tib3gtYWxsJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgwID09PSBpZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAkY29udGVudC5maW5kKCcuZ2xvYmFsLWFjdGlvbnMnKS5zaG93KCk7XG4gICAgICAgICAgICAkY29udGVudC5maW5kKCcuYmF0Y2gtYWN0aW9ucycpLmhpZGUoKTtcbiAgICAgICAgICAgICRjb250ZW50LmZpbmQoJ3RhYmxlJykucmVtb3ZlQ2xhc3MoJ3RhYmxlLWJhdGNoJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkY29udGVudC5maW5kKCcuYmF0Y2gtYWN0aW9ucycpLnNob3coKTtcbiAgICAgICAgICAgICRjb250ZW50LmZpbmQoJy5nbG9iYWwtYWN0aW9ucycpLmhpZGUoKTtcbiAgICAgICAgICAgICRjb250ZW50LmZpbmQoJ3RhYmxlJykuYWRkQ2xhc3MoJ3RhYmxlLWJhdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkaW5wdXQudmFsKGlkcy5qb2luKCcsJykpO1xuICAgICAgICAkY29udGVudC5maW5kKCcuY29udGVudC1oZWFkZXItdGl0bGUgPiAudGl0bGUnKS5odG1sKDAgPT09IGlkcy5sZW5ndGggPyB0aXRsZUNvbnRlbnQgOiAnJyk7XG4gICAgfSk7XG5cbiAgICBsZXQgbW9kYWxUaXRsZSA9ICQoJyNiYXRjaC1hY3Rpb24tY29uZmlybWF0aW9uLXRpdGxlJyk7XG4gICAgY29uc3QgdGl0bGVDb250ZW50V2l0aFBsYWNlaG9sZGVycyA9IG1vZGFsVGl0bGUudGV4dCgpO1xuXG4gICAgJCgnW2RhdGEtYWN0aW9uLWJhdGNoXScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgbGV0ICRhY3Rpb25FbGVtZW50ID0gJCh0aGlzKTtcblxuICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gJGFjdGlvbkVsZW1lbnQuYXR0cignZGF0YS1hY3Rpb24tbmFtZScpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gJCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmZvcm0tYmF0Y2gtY2hlY2tib3g6Y2hlY2tlZCcpO1xuICAgICAgICBtb2RhbFRpdGxlLnRleHQodGl0bGVDb250ZW50V2l0aFBsYWNlaG9sZGVyc1xuICAgICAgICAgICAgLnJlcGxhY2UoJyVhY3Rpb25fbmFtZSUnLCBhY3Rpb25OYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoJyVudW1faXRlbXMlJywgc2VsZWN0ZWRJdGVtcy5sZW5ndGgpKTtcblxuICAgICAgICAkKCcjbW9kYWwtYmF0Y2gtYWN0aW9uJykubW9kYWwoe2JhY2tkcm9wOiB0cnVlLCBrZXlib2FyZDogdHJ1ZX0pXG4gICAgICAgICAgICAub2ZmKCdjbGljaycsICcjbW9kYWwtYmF0Y2gtYWN0aW9uLWJ1dHRvbicpXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgJyNtb2RhbC1iYXRjaC1hY3Rpb24tYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICRhY3Rpb25FbGVtZW50LnVuYmluZCgnY2xpY2snKTtcblxuICAgICAgICAgICAgICAgICRmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICAgICAgICAgICAgICAgICRmb3JtLnNldEF0dHJpYnV0ZSgnYWN0aW9uJywgJGFjdGlvbkVsZW1lbnQuYXR0cignZGF0YS1hY3Rpb24tdXJsJykpO1xuICAgICAgICAgICAgICAgICRmb3JtLnNldEF0dHJpYnV0ZSgnbWV0aG9kJywgJ1BPU1QnKTtcblxuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2JhdGNoQWN0aW9uTmFtZScpO1xuICAgICAgICAgICAgICAgICRhY3Rpb25OYW1lSW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsICRhY3Rpb25FbGVtZW50LmF0dHIoJ2RhdGEtYWN0aW9uLW5hbWUnKSk7XG4gICAgICAgICAgICAgICAgJGZvcm0uYXBwZW5kQ2hpbGQoJGFjdGlvbk5hbWVJbnB1dCk7XG5cbiAgICAgICAgICAgICAgICAkZW50aXR5RnFjbklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAkZW50aXR5RnFjbklucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkZW50aXR5RnFjbklucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICdlbnRpdHlGcWNuJyk7XG4gICAgICAgICAgICAgICAgJGVudGl0eUZxY25JbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJGFjdGlvbkVsZW1lbnQuYXR0cignZGF0YS1lbnRpdHktZnFjbicpKTtcbiAgICAgICAgICAgICAgICAkZm9ybS5hcHBlbmRDaGlsZCgkZW50aXR5RnFjbklucHV0KTtcblxuICAgICAgICAgICAgICAgICRhY3Rpb25VcmxJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgJGFjdGlvblVybElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkYWN0aW9uVXJsSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2JhdGNoQWN0aW9uVXJsJyk7XG4gICAgICAgICAgICAgICAgJGFjdGlvblVybElucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAkYWN0aW9uRWxlbWVudC5hdHRyKCdkYXRhLWFjdGlvbi11cmwnKSk7XG4gICAgICAgICAgICAgICAgJGZvcm0uYXBwZW5kQ2hpbGQoJGFjdGlvblVybElucHV0KTtcblxuICAgICAgICAgICAgICAgICRjc3JmVG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgJGNzcmZUb2tlbklucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkY3NyZlRva2VuSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2JhdGNoQWN0aW9uQ3NyZlRva2VuJyk7XG4gICAgICAgICAgICAgICAgJGNzcmZUb2tlbklucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAkYWN0aW9uRWxlbWVudC5hdHRyKCdkYXRhLWFjdGlvbi1jc3JmLXRva2VuJykpO1xuICAgICAgICAgICAgICAgICRmb3JtLmFwcGVuZENoaWxkKCRjc3JmVG9rZW5JbnB1dCk7XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmVhY2goKGksIGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJGVudGl0eUlkSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICAkZW50aXR5SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICRlbnRpdHlJZElucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGBiYXRjaEFjdGlvbkVudGl0eUlkc1ske2l9XWApO1xuICAgICAgICAgICAgICAgICAgICAkZW50aXR5SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICRmb3JtLmFwcGVuZENoaWxkKCRlbnRpdHlJZElucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoJGZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy9tb2RhbFRpdGxlLnRleHQodGl0bGVDb250ZW50V2l0aFBsYWNlaG9sZGVycyk7XG4gICAgICAgICAgICAgICAgJGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbGNDcnVkSW5kZXhJbml0RmlsdGVyKCkge1xuICAgICQoJyNmaWx0ZXJzX2Zvcm1fcmVzZXQnKS52YWwoJycpO1xuXG4gICAgJCgnLmxjLXJlc2V0LWZpbHRlcnMnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcudGFibGUtZmlsdGVycy1saW5lJykuZmluZCgnc2VsZWN0LGlucHV0JykudmFsKCcnKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgJCgnI2ZpbHRlcnNfZm9ybV9yZXNldCcpLnZhbCgnY2xlYXJBbGwnKTtcbiAgICAgICAgVG9vbHMubG9nKCQodGhpcykucHJvcCgnZm9ybScpKTtcbiAgICAgICAgJCh0aGlzKS5wcm9wKCdmb3JtJykuc3VibWl0KCk7XG4gICAgICAgIC8vJCh0aGlzKS5wYXJlbnRzKCdmb3JtJykuc3VibWl0KCk7XG4gICAgfSlcblxufSIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgbmF0aXZlRGF0ZVRvU3RyaW5nID0gRGF0ZVByb3RvdHlwZVtUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG90eXBlLmdldFRpbWU7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAobmV3IERhdGUoTmFOKSArICcnICE9IElOVkFMSURfREFURSkge1xuICByZWRlZmluZShEYXRlUHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyBuYXRpdmVEYXRlVG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwic291cmNlUm9vdCI6IiJ9