qms-angular 1.0.36 → 1.0.40

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.
Files changed (1174) hide show
  1. package/bundles/qms-angular.umd.js +7101 -221
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/breadcrumb/breadcrumb.js +29 -6
  4. package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +2 -2
  5. package/esm2015/lib/components/related/popup/related-popup.component.js +2 -2
  6. package/esm2015/lib/model/en.js +144 -1
  7. package/esm2015/lib/model/no.js +148 -5
  8. package/esm2015/lib/qms-ckeditor-components/common/bpmn/inspector.function.js +2147 -0
  9. package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +200 -0
  10. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +6 -1
  11. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +36 -0
  12. package/esm2015/lib/qms-ckeditor-components/common/constants/iconSvg.constants.js +8 -0
  13. package/esm2015/lib/qms-ckeditor-components/common/enums/flowchart-view-mode.enum.js +6 -0
  14. package/esm2015/lib/qms-ckeditor-components/common/enums/image-mode.enum.js +9 -0
  15. package/esm2015/lib/qms-ckeditor-components/common/enums/protocol-type.enum.js +11 -3
  16. package/esm2015/lib/qms-ckeditor-components/common/enums/related-to-item-type.js +11 -0
  17. package/esm2015/lib/qms-ckeditor-components/common/enums/target-type.enum.js +8 -1
  18. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +6 -2
  19. package/esm2015/lib/qms-ckeditor-components/common/helper/guidHelper.js +14 -0
  20. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn-template.model.js +9 -0
  21. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn.model.js +9 -0
  22. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  23. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-input.model.js +1 -9
  24. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +3 -3
  25. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +266 -0
  26. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +67 -0
  27. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +524 -0
  28. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.lib.js +1948 -0
  29. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.validator.js +7 -0
  30. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +1 -1
  31. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +5 -5
  32. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +1 -1
  33. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +1 -1
  34. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +1 -1
  35. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +1 -1
  36. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.js +22 -0
  37. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +68 -5
  38. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +16 -2
  39. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +26 -0
  40. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +1156 -0
  41. package/esm2015/public-api.js +14 -1
  42. package/esm2015/qms-angular.js +3 -1
  43. package/fesm2015/qms-angular.js +7017 -226
  44. package/fesm2015/qms-angular.js.map +1 -1
  45. package/lib/components/breadcrumb/breadcrumb.d.ts +6 -3
  46. package/lib/model/en.d.ts +143 -0
  47. package/lib/model/no.d.ts +143 -0
  48. package/lib/qms-ckeditor-components/common/bpmn/inspector.function.d.ts +1825 -0
  49. package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +163 -0
  50. package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +5 -0
  51. package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +34 -0
  52. package/lib/qms-ckeditor-components/common/constants/iconSvg.constants.d.ts +7 -0
  53. package/lib/qms-ckeditor-components/common/enums/flowchart-view-mode.enum.d.ts +4 -0
  54. package/lib/qms-ckeditor-components/common/enums/image-mode.enum.d.ts +7 -0
  55. package/lib/qms-ckeditor-components/common/enums/protocol-type.enum.d.ts +9 -2
  56. package/lib/qms-ckeditor-components/common/enums/related-to-item-type.d.ts +9 -0
  57. package/lib/qms-ckeditor-components/common/enums/target-type.enum.d.ts +6 -0
  58. package/lib/qms-ckeditor-components/common/helper/guidHelper.d.ts +6 -0
  59. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn-template.model.d.ts +7 -0
  60. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn.model.d.ts +7 -0
  61. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
  62. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-input.model.d.ts +7 -7
  63. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +37 -0
  64. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +23 -0
  65. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +123 -0
  66. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.lib.d.ts +542 -0
  67. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.validator.d.ts +2 -0
  68. package/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.d.ts +20 -0
  69. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +7 -2
  70. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +10 -0
  71. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +33 -0
  72. package/lib.theme.scss +4 -1
  73. package/package.json +1 -1
  74. package/public-api.d.ts +12 -0
  75. package/qms-angular.d.ts +2 -0
  76. package/qms-angular.metadata.json +1 -1
  77. package/src/assets/images/panel-stencil-container-background-image.png +0 -0
  78. package/src/assets/jointjs/js/backbone/backbone.js +2096 -0
  79. package/src/assets/jointjs/js/client.js +17 -0
  80. package/src/assets/jointjs/js/example.js +42 -0
  81. package/src/assets/jointjs/js/gd.js +135 -0
  82. package/src/assets/jointjs/js/joint.format.raster.js +386 -0
  83. package/src/assets/jointjs/js/joint.format.svg.js +252 -0
  84. package/src/assets/jointjs/js/jquery/jquery.js +10872 -0
  85. package/src/assets/jointjs/js/lodash/LICENSE +47 -0
  86. package/src/assets/jointjs/js/lodash/README.md +39 -0
  87. package/src/assets/jointjs/js/lodash/_DataView.js +7 -0
  88. package/src/assets/jointjs/js/lodash/_Hash.js +32 -0
  89. package/src/assets/jointjs/js/lodash/_LazyWrapper.js +28 -0
  90. package/src/assets/jointjs/js/lodash/_ListCache.js +32 -0
  91. package/src/assets/jointjs/js/lodash/_LodashWrapper.js +22 -0
  92. package/src/assets/jointjs/js/lodash/_Map.js +7 -0
  93. package/src/assets/jointjs/js/lodash/_MapCache.js +32 -0
  94. package/src/assets/jointjs/js/lodash/_Promise.js +7 -0
  95. package/src/assets/jointjs/js/lodash/_Set.js +7 -0
  96. package/src/assets/jointjs/js/lodash/_SetCache.js +27 -0
  97. package/src/assets/jointjs/js/lodash/_Stack.js +27 -0
  98. package/src/assets/jointjs/js/lodash/_Symbol.js +6 -0
  99. package/src/assets/jointjs/js/lodash/_Uint8Array.js +6 -0
  100. package/src/assets/jointjs/js/lodash/_WeakMap.js +7 -0
  101. package/src/assets/jointjs/js/lodash/_apply.js +21 -0
  102. package/src/assets/jointjs/js/lodash/_arrayAggregator.js +22 -0
  103. package/src/assets/jointjs/js/lodash/_arrayEach.js +22 -0
  104. package/src/assets/jointjs/js/lodash/_arrayEachRight.js +21 -0
  105. package/src/assets/jointjs/js/lodash/_arrayEvery.js +23 -0
  106. package/src/assets/jointjs/js/lodash/_arrayFilter.js +25 -0
  107. package/src/assets/jointjs/js/lodash/_arrayIncludes.js +17 -0
  108. package/src/assets/jointjs/js/lodash/_arrayIncludesWith.js +22 -0
  109. package/src/assets/jointjs/js/lodash/_arrayLikeKeys.js +49 -0
  110. package/src/assets/jointjs/js/lodash/_arrayMap.js +21 -0
  111. package/src/assets/jointjs/js/lodash/_arrayPush.js +20 -0
  112. package/src/assets/jointjs/js/lodash/_arrayReduce.js +26 -0
  113. package/src/assets/jointjs/js/lodash/_arrayReduceRight.js +24 -0
  114. package/src/assets/jointjs/js/lodash/_arraySample.js +15 -0
  115. package/src/assets/jointjs/js/lodash/_arraySampleSize.js +17 -0
  116. package/src/assets/jointjs/js/lodash/_arrayShuffle.js +15 -0
  117. package/src/assets/jointjs/js/lodash/_arraySome.js +23 -0
  118. package/src/assets/jointjs/js/lodash/_asciiSize.js +12 -0
  119. package/src/assets/jointjs/js/lodash/_asciiToArray.js +12 -0
  120. package/src/assets/jointjs/js/lodash/_asciiWords.js +15 -0
  121. package/src/assets/jointjs/js/lodash/_assignMergeValue.js +20 -0
  122. package/src/assets/jointjs/js/lodash/_assignValue.js +28 -0
  123. package/src/assets/jointjs/js/lodash/_assocIndexOf.js +21 -0
  124. package/src/assets/jointjs/js/lodash/_baseAggregator.js +21 -0
  125. package/src/assets/jointjs/js/lodash/_baseAssign.js +17 -0
  126. package/src/assets/jointjs/js/lodash/_baseAssignIn.js +17 -0
  127. package/src/assets/jointjs/js/lodash/_baseAssignValue.js +25 -0
  128. package/src/assets/jointjs/js/lodash/_baseAt.js +23 -0
  129. package/src/assets/jointjs/js/lodash/_baseClamp.js +22 -0
  130. package/src/assets/jointjs/js/lodash/_baseClone.js +165 -0
  131. package/src/assets/jointjs/js/lodash/_baseConforms.js +18 -0
  132. package/src/assets/jointjs/js/lodash/_baseConformsTo.js +27 -0
  133. package/src/assets/jointjs/js/lodash/_baseCreate.js +30 -0
  134. package/src/assets/jointjs/js/lodash/_baseDelay.js +21 -0
  135. package/src/assets/jointjs/js/lodash/_baseDifference.js +67 -0
  136. package/src/assets/jointjs/js/lodash/_baseEach.js +14 -0
  137. package/src/assets/jointjs/js/lodash/_baseEachRight.js +14 -0
  138. package/src/assets/jointjs/js/lodash/_baseEvery.js +21 -0
  139. package/src/assets/jointjs/js/lodash/_baseExtremum.js +32 -0
  140. package/src/assets/jointjs/js/lodash/_baseFill.js +32 -0
  141. package/src/assets/jointjs/js/lodash/_baseFilter.js +21 -0
  142. package/src/assets/jointjs/js/lodash/_baseFindIndex.js +24 -0
  143. package/src/assets/jointjs/js/lodash/_baseFindKey.js +23 -0
  144. package/src/assets/jointjs/js/lodash/_baseFlatten.js +38 -0
  145. package/src/assets/jointjs/js/lodash/_baseFor.js +16 -0
  146. package/src/assets/jointjs/js/lodash/_baseForOwn.js +16 -0
  147. package/src/assets/jointjs/js/lodash/_baseForOwnRight.js +16 -0
  148. package/src/assets/jointjs/js/lodash/_baseForRight.js +15 -0
  149. package/src/assets/jointjs/js/lodash/_baseFunctions.js +19 -0
  150. package/src/assets/jointjs/js/lodash/_baseGet.js +24 -0
  151. package/src/assets/jointjs/js/lodash/_baseGetAllKeys.js +20 -0
  152. package/src/assets/jointjs/js/lodash/_baseGetTag.js +28 -0
  153. package/src/assets/jointjs/js/lodash/_baseGt.js +14 -0
  154. package/src/assets/jointjs/js/lodash/_baseHas.js +19 -0
  155. package/src/assets/jointjs/js/lodash/_baseHasIn.js +13 -0
  156. package/src/assets/jointjs/js/lodash/_baseInRange.js +18 -0
  157. package/src/assets/jointjs/js/lodash/_baseIndexOf.js +20 -0
  158. package/src/assets/jointjs/js/lodash/_baseIndexOfWith.js +23 -0
  159. package/src/assets/jointjs/js/lodash/_baseIntersection.js +74 -0
  160. package/src/assets/jointjs/js/lodash/_baseInverter.js +21 -0
  161. package/src/assets/jointjs/js/lodash/_baseInvoke.js +24 -0
  162. package/src/assets/jointjs/js/lodash/_baseIsArguments.js +18 -0
  163. package/src/assets/jointjs/js/lodash/_baseIsArrayBuffer.js +17 -0
  164. package/src/assets/jointjs/js/lodash/_baseIsDate.js +18 -0
  165. package/src/assets/jointjs/js/lodash/_baseIsEqual.js +28 -0
  166. package/src/assets/jointjs/js/lodash/_baseIsEqualDeep.js +83 -0
  167. package/src/assets/jointjs/js/lodash/_baseIsMap.js +18 -0
  168. package/src/assets/jointjs/js/lodash/_baseIsMatch.js +62 -0
  169. package/src/assets/jointjs/js/lodash/_baseIsNaN.js +12 -0
  170. package/src/assets/jointjs/js/lodash/_baseIsNative.js +47 -0
  171. package/src/assets/jointjs/js/lodash/_baseIsRegExp.js +18 -0
  172. package/src/assets/jointjs/js/lodash/_baseIsSet.js +18 -0
  173. package/src/assets/jointjs/js/lodash/_baseIsTypedArray.js +60 -0
  174. package/src/assets/jointjs/js/lodash/_baseIteratee.js +31 -0
  175. package/src/assets/jointjs/js/lodash/_baseKeys.js +30 -0
  176. package/src/assets/jointjs/js/lodash/_baseKeysIn.js +33 -0
  177. package/src/assets/jointjs/js/lodash/_baseLodash.js +10 -0
  178. package/src/assets/jointjs/js/lodash/_baseLt.js +14 -0
  179. package/src/assets/jointjs/js/lodash/_baseMap.js +22 -0
  180. package/src/assets/jointjs/js/lodash/_baseMatches.js +22 -0
  181. package/src/assets/jointjs/js/lodash/_baseMatchesProperty.js +33 -0
  182. package/src/assets/jointjs/js/lodash/_baseMean.js +20 -0
  183. package/src/assets/jointjs/js/lodash/_baseMerge.js +42 -0
  184. package/src/assets/jointjs/js/lodash/_baseMergeDeep.js +94 -0
  185. package/src/assets/jointjs/js/lodash/_baseNth.js +20 -0
  186. package/src/assets/jointjs/js/lodash/_baseOrderBy.js +34 -0
  187. package/src/assets/jointjs/js/lodash/_basePick.js +19 -0
  188. package/src/assets/jointjs/js/lodash/_basePickBy.js +30 -0
  189. package/src/assets/jointjs/js/lodash/_baseProperty.js +14 -0
  190. package/src/assets/jointjs/js/lodash/_basePropertyDeep.js +16 -0
  191. package/src/assets/jointjs/js/lodash/_basePropertyOf.js +14 -0
  192. package/src/assets/jointjs/js/lodash/_basePullAll.js +51 -0
  193. package/src/assets/jointjs/js/lodash/_basePullAt.js +37 -0
  194. package/src/assets/jointjs/js/lodash/_baseRandom.js +18 -0
  195. package/src/assets/jointjs/js/lodash/_baseRange.js +28 -0
  196. package/src/assets/jointjs/js/lodash/_baseReduce.js +23 -0
  197. package/src/assets/jointjs/js/lodash/_baseRepeat.js +35 -0
  198. package/src/assets/jointjs/js/lodash/_baseRest.js +17 -0
  199. package/src/assets/jointjs/js/lodash/_baseSample.js +15 -0
  200. package/src/assets/jointjs/js/lodash/_baseSampleSize.js +18 -0
  201. package/src/assets/jointjs/js/lodash/_baseSet.js +47 -0
  202. package/src/assets/jointjs/js/lodash/_baseSetData.js +17 -0
  203. package/src/assets/jointjs/js/lodash/_baseSetToString.js +22 -0
  204. package/src/assets/jointjs/js/lodash/_baseShuffle.js +15 -0
  205. package/src/assets/jointjs/js/lodash/_baseSlice.js +31 -0
  206. package/src/assets/jointjs/js/lodash/_baseSome.js +22 -0
  207. package/src/assets/jointjs/js/lodash/_baseSortBy.js +21 -0
  208. package/src/assets/jointjs/js/lodash/_baseSortedIndex.js +42 -0
  209. package/src/assets/jointjs/js/lodash/_baseSortedIndexBy.js +64 -0
  210. package/src/assets/jointjs/js/lodash/_baseSortedUniq.js +30 -0
  211. package/src/assets/jointjs/js/lodash/_baseSum.js +24 -0
  212. package/src/assets/jointjs/js/lodash/_baseTimes.js +20 -0
  213. package/src/assets/jointjs/js/lodash/_baseToNumber.js +24 -0
  214. package/src/assets/jointjs/js/lodash/_baseToPairs.js +18 -0
  215. package/src/assets/jointjs/js/lodash/_baseToString.js +37 -0
  216. package/src/assets/jointjs/js/lodash/_baseUnary.js +14 -0
  217. package/src/assets/jointjs/js/lodash/_baseUniq.js +72 -0
  218. package/src/assets/jointjs/js/lodash/_baseUnset.js +20 -0
  219. package/src/assets/jointjs/js/lodash/_baseUpdate.js +18 -0
  220. package/src/assets/jointjs/js/lodash/_baseValues.js +19 -0
  221. package/src/assets/jointjs/js/lodash/_baseWhile.js +26 -0
  222. package/src/assets/jointjs/js/lodash/_baseWrapperValue.js +25 -0
  223. package/src/assets/jointjs/js/lodash/_baseXor.js +36 -0
  224. package/src/assets/jointjs/js/lodash/_baseZipObject.js +23 -0
  225. package/src/assets/jointjs/js/lodash/_cacheHas.js +13 -0
  226. package/src/assets/jointjs/js/lodash/_castArrayLikeObject.js +14 -0
  227. package/src/assets/jointjs/js/lodash/_castFunction.js +14 -0
  228. package/src/assets/jointjs/js/lodash/_castPath.js +21 -0
  229. package/src/assets/jointjs/js/lodash/_castRest.js +14 -0
  230. package/src/assets/jointjs/js/lodash/_castSlice.js +18 -0
  231. package/src/assets/jointjs/js/lodash/_charsEndIndex.js +19 -0
  232. package/src/assets/jointjs/js/lodash/_charsStartIndex.js +20 -0
  233. package/src/assets/jointjs/js/lodash/_cloneArrayBuffer.js +16 -0
  234. package/src/assets/jointjs/js/lodash/_cloneBuffer.js +35 -0
  235. package/src/assets/jointjs/js/lodash/_cloneDataView.js +16 -0
  236. package/src/assets/jointjs/js/lodash/_cloneRegExp.js +17 -0
  237. package/src/assets/jointjs/js/lodash/_cloneSymbol.js +18 -0
  238. package/src/assets/jointjs/js/lodash/_cloneTypedArray.js +16 -0
  239. package/src/assets/jointjs/js/lodash/_compareAscending.js +41 -0
  240. package/src/assets/jointjs/js/lodash/_compareMultiple.js +44 -0
  241. package/src/assets/jointjs/js/lodash/_composeArgs.js +39 -0
  242. package/src/assets/jointjs/js/lodash/_composeArgsRight.js +41 -0
  243. package/src/assets/jointjs/js/lodash/_copyArray.js +20 -0
  244. package/src/assets/jointjs/js/lodash/_copyObject.js +40 -0
  245. package/src/assets/jointjs/js/lodash/_copySymbols.js +16 -0
  246. package/src/assets/jointjs/js/lodash/_copySymbolsIn.js +16 -0
  247. package/src/assets/jointjs/js/lodash/_coreJsData.js +6 -0
  248. package/src/assets/jointjs/js/lodash/_countHolders.js +21 -0
  249. package/src/assets/jointjs/js/lodash/_createAggregator.js +23 -0
  250. package/src/assets/jointjs/js/lodash/_createAssigner.js +37 -0
  251. package/src/assets/jointjs/js/lodash/_createBaseEach.js +32 -0
  252. package/src/assets/jointjs/js/lodash/_createBaseFor.js +25 -0
  253. package/src/assets/jointjs/js/lodash/_createBind.js +28 -0
  254. package/src/assets/jointjs/js/lodash/_createCaseFirst.js +33 -0
  255. package/src/assets/jointjs/js/lodash/_createCompounder.js +24 -0
  256. package/src/assets/jointjs/js/lodash/_createCtor.js +37 -0
  257. package/src/assets/jointjs/js/lodash/_createCurry.js +46 -0
  258. package/src/assets/jointjs/js/lodash/_createFind.js +25 -0
  259. package/src/assets/jointjs/js/lodash/_createFlow.js +78 -0
  260. package/src/assets/jointjs/js/lodash/_createHybrid.js +92 -0
  261. package/src/assets/jointjs/js/lodash/_createInverter.js +17 -0
  262. package/src/assets/jointjs/js/lodash/_createMathOperation.js +38 -0
  263. package/src/assets/jointjs/js/lodash/_createOver.js +27 -0
  264. package/src/assets/jointjs/js/lodash/_createPadding.js +33 -0
  265. package/src/assets/jointjs/js/lodash/_createPartial.js +43 -0
  266. package/src/assets/jointjs/js/lodash/_createRange.js +30 -0
  267. package/src/assets/jointjs/js/lodash/_createRecurry.js +56 -0
  268. package/src/assets/jointjs/js/lodash/_createRelationalOperation.js +20 -0
  269. package/src/assets/jointjs/js/lodash/_createRound.js +35 -0
  270. package/src/assets/jointjs/js/lodash/_createSet.js +19 -0
  271. package/src/assets/jointjs/js/lodash/_createToPairs.js +30 -0
  272. package/src/assets/jointjs/js/lodash/_createWrap.js +106 -0
  273. package/src/assets/jointjs/js/lodash/_customDefaultsAssignIn.js +29 -0
  274. package/src/assets/jointjs/js/lodash/_customDefaultsMerge.js +28 -0
  275. package/src/assets/jointjs/js/lodash/_customOmitClone.js +16 -0
  276. package/src/assets/jointjs/js/lodash/_deburrLetter.js +71 -0
  277. package/src/assets/jointjs/js/lodash/_defineProperty.js +11 -0
  278. package/src/assets/jointjs/js/lodash/_equalArrays.js +83 -0
  279. package/src/assets/jointjs/js/lodash/_equalByTag.js +112 -0
  280. package/src/assets/jointjs/js/lodash/_equalObjects.js +89 -0
  281. package/src/assets/jointjs/js/lodash/_escapeHtmlChar.js +21 -0
  282. package/src/assets/jointjs/js/lodash/_escapeStringChar.js +22 -0
  283. package/src/assets/jointjs/js/lodash/_flatRest.js +16 -0
  284. package/src/assets/jointjs/js/lodash/_freeGlobal.js +4 -0
  285. package/src/assets/jointjs/js/lodash/_getAllKeys.js +16 -0
  286. package/src/assets/jointjs/js/lodash/_getAllKeysIn.js +17 -0
  287. package/src/assets/jointjs/js/lodash/_getData.js +15 -0
  288. package/src/assets/jointjs/js/lodash/_getFuncName.js +31 -0
  289. package/src/assets/jointjs/js/lodash/_getHolder.js +13 -0
  290. package/src/assets/jointjs/js/lodash/_getMapData.js +18 -0
  291. package/src/assets/jointjs/js/lodash/_getMatchData.js +24 -0
  292. package/src/assets/jointjs/js/lodash/_getNative.js +17 -0
  293. package/src/assets/jointjs/js/lodash/_getPrototype.js +6 -0
  294. package/src/assets/jointjs/js/lodash/_getRawTag.js +46 -0
  295. package/src/assets/jointjs/js/lodash/_getSymbols.js +30 -0
  296. package/src/assets/jointjs/js/lodash/_getSymbolsIn.js +25 -0
  297. package/src/assets/jointjs/js/lodash/_getTag.js +58 -0
  298. package/src/assets/jointjs/js/lodash/_getValue.js +13 -0
  299. package/src/assets/jointjs/js/lodash/_getView.js +33 -0
  300. package/src/assets/jointjs/js/lodash/_getWrapDetails.js +17 -0
  301. package/src/assets/jointjs/js/lodash/_hasPath.js +39 -0
  302. package/src/assets/jointjs/js/lodash/_hasUnicode.js +26 -0
  303. package/src/assets/jointjs/js/lodash/_hasUnicodeWord.js +15 -0
  304. package/src/assets/jointjs/js/lodash/_hashClear.js +15 -0
  305. package/src/assets/jointjs/js/lodash/_hashDelete.js +17 -0
  306. package/src/assets/jointjs/js/lodash/_hashGet.js +30 -0
  307. package/src/assets/jointjs/js/lodash/_hashHas.js +23 -0
  308. package/src/assets/jointjs/js/lodash/_hashSet.js +23 -0
  309. package/src/assets/jointjs/js/lodash/_initCloneArray.js +26 -0
  310. package/src/assets/jointjs/js/lodash/_initCloneByTag.js +77 -0
  311. package/src/assets/jointjs/js/lodash/_initCloneObject.js +18 -0
  312. package/src/assets/jointjs/js/lodash/_insertWrapDetails.js +23 -0
  313. package/src/assets/jointjs/js/lodash/_isFlattenable.js +20 -0
  314. package/src/assets/jointjs/js/lodash/_isIndex.js +25 -0
  315. package/src/assets/jointjs/js/lodash/_isIterateeCall.js +30 -0
  316. package/src/assets/jointjs/js/lodash/_isKey.js +29 -0
  317. package/src/assets/jointjs/js/lodash/_isKeyable.js +15 -0
  318. package/src/assets/jointjs/js/lodash/_isLaziable.js +28 -0
  319. package/src/assets/jointjs/js/lodash/_isMaskable.js +14 -0
  320. package/src/assets/jointjs/js/lodash/_isMasked.js +20 -0
  321. package/src/assets/jointjs/js/lodash/_isPrototype.js +18 -0
  322. package/src/assets/jointjs/js/lodash/_isStrictComparable.js +15 -0
  323. package/src/assets/jointjs/js/lodash/_iteratorToArray.js +18 -0
  324. package/src/assets/jointjs/js/lodash/_lazyClone.js +23 -0
  325. package/src/assets/jointjs/js/lodash/_lazyReverse.js +23 -0
  326. package/src/assets/jointjs/js/lodash/_lazyValue.js +69 -0
  327. package/src/assets/jointjs/js/lodash/_listCacheClear.js +13 -0
  328. package/src/assets/jointjs/js/lodash/_listCacheDelete.js +35 -0
  329. package/src/assets/jointjs/js/lodash/_listCacheGet.js +19 -0
  330. package/src/assets/jointjs/js/lodash/_listCacheHas.js +16 -0
  331. package/src/assets/jointjs/js/lodash/_listCacheSet.js +26 -0
  332. package/src/assets/jointjs/js/lodash/_mapCacheClear.js +21 -0
  333. package/src/assets/jointjs/js/lodash/_mapCacheDelete.js +18 -0
  334. package/src/assets/jointjs/js/lodash/_mapCacheGet.js +16 -0
  335. package/src/assets/jointjs/js/lodash/_mapCacheHas.js +16 -0
  336. package/src/assets/jointjs/js/lodash/_mapCacheSet.js +22 -0
  337. package/src/assets/jointjs/js/lodash/_mapToArray.js +18 -0
  338. package/src/assets/jointjs/js/lodash/_matchesStrictComparable.js +20 -0
  339. package/src/assets/jointjs/js/lodash/_memoizeCapped.js +26 -0
  340. package/src/assets/jointjs/js/lodash/_mergeData.js +90 -0
  341. package/src/assets/jointjs/js/lodash/_metaMap.js +6 -0
  342. package/src/assets/jointjs/js/lodash/_nativeCreate.js +6 -0
  343. package/src/assets/jointjs/js/lodash/_nativeKeys.js +6 -0
  344. package/src/assets/jointjs/js/lodash/_nativeKeysIn.js +20 -0
  345. package/src/assets/jointjs/js/lodash/_nodeUtil.js +30 -0
  346. package/src/assets/jointjs/js/lodash/_objectToString.js +22 -0
  347. package/src/assets/jointjs/js/lodash/_overArg.js +15 -0
  348. package/src/assets/jointjs/js/lodash/_overRest.js +36 -0
  349. package/src/assets/jointjs/js/lodash/_parent.js +16 -0
  350. package/src/assets/jointjs/js/lodash/_reEscape.js +4 -0
  351. package/src/assets/jointjs/js/lodash/_reEvaluate.js +4 -0
  352. package/src/assets/jointjs/js/lodash/_reInterpolate.js +4 -0
  353. package/src/assets/jointjs/js/lodash/_realNames.js +4 -0
  354. package/src/assets/jointjs/js/lodash/_reorder.js +29 -0
  355. package/src/assets/jointjs/js/lodash/_replaceHolders.js +29 -0
  356. package/src/assets/jointjs/js/lodash/_root.js +9 -0
  357. package/src/assets/jointjs/js/lodash/_safeGet.js +21 -0
  358. package/src/assets/jointjs/js/lodash/_setCacheAdd.js +19 -0
  359. package/src/assets/jointjs/js/lodash/_setCacheHas.js +14 -0
  360. package/src/assets/jointjs/js/lodash/_setData.js +20 -0
  361. package/src/assets/jointjs/js/lodash/_setToArray.js +18 -0
  362. package/src/assets/jointjs/js/lodash/_setToPairs.js +18 -0
  363. package/src/assets/jointjs/js/lodash/_setToString.js +14 -0
  364. package/src/assets/jointjs/js/lodash/_setWrapToString.js +21 -0
  365. package/src/assets/jointjs/js/lodash/_shortOut.js +37 -0
  366. package/src/assets/jointjs/js/lodash/_shuffleSelf.js +28 -0
  367. package/src/assets/jointjs/js/lodash/_stackClear.js +15 -0
  368. package/src/assets/jointjs/js/lodash/_stackDelete.js +18 -0
  369. package/src/assets/jointjs/js/lodash/_stackGet.js +14 -0
  370. package/src/assets/jointjs/js/lodash/_stackHas.js +14 -0
  371. package/src/assets/jointjs/js/lodash/_stackSet.js +34 -0
  372. package/src/assets/jointjs/js/lodash/_strictIndexOf.js +23 -0
  373. package/src/assets/jointjs/js/lodash/_strictLastIndexOf.js +21 -0
  374. package/src/assets/jointjs/js/lodash/_stringSize.js +18 -0
  375. package/src/assets/jointjs/js/lodash/_stringToArray.js +18 -0
  376. package/src/assets/jointjs/js/lodash/_stringToPath.js +27 -0
  377. package/src/assets/jointjs/js/lodash/_toKey.js +21 -0
  378. package/src/assets/jointjs/js/lodash/_toSource.js +26 -0
  379. package/src/assets/jointjs/js/lodash/_unescapeHtmlChar.js +21 -0
  380. package/src/assets/jointjs/js/lodash/_unicodeSize.js +44 -0
  381. package/src/assets/jointjs/js/lodash/_unicodeToArray.js +40 -0
  382. package/src/assets/jointjs/js/lodash/_unicodeWords.js +69 -0
  383. package/src/assets/jointjs/js/lodash/_updateWrapDetails.js +46 -0
  384. package/src/assets/jointjs/js/lodash/_wrapperClone.js +23 -0
  385. package/src/assets/jointjs/js/lodash/add.js +22 -0
  386. package/src/assets/jointjs/js/lodash/after.js +42 -0
  387. package/src/assets/jointjs/js/lodash/array.js +67 -0
  388. package/src/assets/jointjs/js/lodash/ary.js +29 -0
  389. package/src/assets/jointjs/js/lodash/assign.js +58 -0
  390. package/src/assets/jointjs/js/lodash/assignIn.js +40 -0
  391. package/src/assets/jointjs/js/lodash/assignInWith.js +38 -0
  392. package/src/assets/jointjs/js/lodash/assignWith.js +37 -0
  393. package/src/assets/jointjs/js/lodash/at.js +23 -0
  394. package/src/assets/jointjs/js/lodash/attempt.js +35 -0
  395. package/src/assets/jointjs/js/lodash/before.js +40 -0
  396. package/src/assets/jointjs/js/lodash/bind.js +57 -0
  397. package/src/assets/jointjs/js/lodash/bindAll.js +41 -0
  398. package/src/assets/jointjs/js/lodash/bindKey.js +68 -0
  399. package/src/assets/jointjs/js/lodash/camelCase.js +29 -0
  400. package/src/assets/jointjs/js/lodash/capitalize.js +23 -0
  401. package/src/assets/jointjs/js/lodash/castArray.js +44 -0
  402. package/src/assets/jointjs/js/lodash/ceil.js +26 -0
  403. package/src/assets/jointjs/js/lodash/chain.js +38 -0
  404. package/src/assets/jointjs/js/lodash/chunk.js +50 -0
  405. package/src/assets/jointjs/js/lodash/clamp.js +39 -0
  406. package/src/assets/jointjs/js/lodash/clone.js +36 -0
  407. package/src/assets/jointjs/js/lodash/cloneDeep.js +29 -0
  408. package/src/assets/jointjs/js/lodash/cloneDeepWith.js +40 -0
  409. package/src/assets/jointjs/js/lodash/cloneWith.js +42 -0
  410. package/src/assets/jointjs/js/lodash/collection.js +30 -0
  411. package/src/assets/jointjs/js/lodash/commit.js +33 -0
  412. package/src/assets/jointjs/js/lodash/compact.js +31 -0
  413. package/src/assets/jointjs/js/lodash/concat.js +43 -0
  414. package/src/assets/jointjs/js/lodash/cond.js +60 -0
  415. package/src/assets/jointjs/js/lodash/conforms.js +35 -0
  416. package/src/assets/jointjs/js/lodash/conformsTo.js +32 -0
  417. package/src/assets/jointjs/js/lodash/constant.js +26 -0
  418. package/src/assets/jointjs/js/lodash/core.js +3854 -0
  419. package/src/assets/jointjs/js/lodash/core.min.js +29 -0
  420. package/src/assets/jointjs/js/lodash/countBy.js +40 -0
  421. package/src/assets/jointjs/js/lodash/create.js +43 -0
  422. package/src/assets/jointjs/js/lodash/curry.js +57 -0
  423. package/src/assets/jointjs/js/lodash/curryRight.js +54 -0
  424. package/src/assets/jointjs/js/lodash/date.js +3 -0
  425. package/src/assets/jointjs/js/lodash/debounce.js +191 -0
  426. package/src/assets/jointjs/js/lodash/deburr.js +45 -0
  427. package/src/assets/jointjs/js/lodash/defaultTo.js +25 -0
  428. package/src/assets/jointjs/js/lodash/defaults.js +64 -0
  429. package/src/assets/jointjs/js/lodash/defaultsDeep.js +30 -0
  430. package/src/assets/jointjs/js/lodash/defer.js +26 -0
  431. package/src/assets/jointjs/js/lodash/delay.js +28 -0
  432. package/src/assets/jointjs/js/lodash/difference.js +33 -0
  433. package/src/assets/jointjs/js/lodash/differenceBy.js +44 -0
  434. package/src/assets/jointjs/js/lodash/differenceWith.js +40 -0
  435. package/src/assets/jointjs/js/lodash/divide.js +22 -0
  436. package/src/assets/jointjs/js/lodash/drop.js +38 -0
  437. package/src/assets/jointjs/js/lodash/dropRight.js +39 -0
  438. package/src/assets/jointjs/js/lodash/dropRightWhile.js +45 -0
  439. package/src/assets/jointjs/js/lodash/dropWhile.js +45 -0
  440. package/src/assets/jointjs/js/lodash/each.js +1 -0
  441. package/src/assets/jointjs/js/lodash/eachRight.js +1 -0
  442. package/src/assets/jointjs/js/lodash/endsWith.js +43 -0
  443. package/src/assets/jointjs/js/lodash/entries.js +1 -0
  444. package/src/assets/jointjs/js/lodash/entriesIn.js +1 -0
  445. package/src/assets/jointjs/js/lodash/eq.js +37 -0
  446. package/src/assets/jointjs/js/lodash/escape.js +43 -0
  447. package/src/assets/jointjs/js/lodash/escapeRegExp.js +32 -0
  448. package/src/assets/jointjs/js/lodash/every.js +56 -0
  449. package/src/assets/jointjs/js/lodash/extend.js +1 -0
  450. package/src/assets/jointjs/js/lodash/extendWith.js +1 -0
  451. package/src/assets/jointjs/js/lodash/fill.js +45 -0
  452. package/src/assets/jointjs/js/lodash/filter.js +48 -0
  453. package/src/assets/jointjs/js/lodash/find.js +42 -0
  454. package/src/assets/jointjs/js/lodash/findIndex.js +55 -0
  455. package/src/assets/jointjs/js/lodash/findKey.js +44 -0
  456. package/src/assets/jointjs/js/lodash/findLast.js +25 -0
  457. package/src/assets/jointjs/js/lodash/findLastIndex.js +59 -0
  458. package/src/assets/jointjs/js/lodash/findLastKey.js +44 -0
  459. package/src/assets/jointjs/js/lodash/first.js +1 -0
  460. package/src/assets/jointjs/js/lodash/flatMap.js +29 -0
  461. package/src/assets/jointjs/js/lodash/flatMapDeep.js +31 -0
  462. package/src/assets/jointjs/js/lodash/flatMapDepth.js +31 -0
  463. package/src/assets/jointjs/js/lodash/flatten.js +22 -0
  464. package/src/assets/jointjs/js/lodash/flattenDeep.js +25 -0
  465. package/src/assets/jointjs/js/lodash/flattenDepth.js +33 -0
  466. package/src/assets/jointjs/js/lodash/flip.js +28 -0
  467. package/src/assets/jointjs/js/lodash/floor.js +26 -0
  468. package/src/assets/jointjs/js/lodash/flow.js +27 -0
  469. package/src/assets/jointjs/js/lodash/flowRight.js +26 -0
  470. package/src/assets/jointjs/js/lodash/forEach.js +41 -0
  471. package/src/assets/jointjs/js/lodash/forEachRight.js +31 -0
  472. package/src/assets/jointjs/js/lodash/forIn.js +39 -0
  473. package/src/assets/jointjs/js/lodash/forInRight.js +37 -0
  474. package/src/assets/jointjs/js/lodash/forOwn.js +36 -0
  475. package/src/assets/jointjs/js/lodash/forOwnRight.js +34 -0
  476. package/src/assets/jointjs/js/lodash/fp/F.js +1 -0
  477. package/src/assets/jointjs/js/lodash/fp/T.js +1 -0
  478. package/src/assets/jointjs/js/lodash/fp/__.js +1 -0
  479. package/src/assets/jointjs/js/lodash/fp/_baseConvert.js +569 -0
  480. package/src/assets/jointjs/js/lodash/fp/_convertBrowser.js +18 -0
  481. package/src/assets/jointjs/js/lodash/fp/_falseOptions.js +7 -0
  482. package/src/assets/jointjs/js/lodash/fp/_mapping.js +358 -0
  483. package/src/assets/jointjs/js/lodash/fp/_util.js +16 -0
  484. package/src/assets/jointjs/js/lodash/fp/add.js +5 -0
  485. package/src/assets/jointjs/js/lodash/fp/after.js +5 -0
  486. package/src/assets/jointjs/js/lodash/fp/all.js +1 -0
  487. package/src/assets/jointjs/js/lodash/fp/allPass.js +1 -0
  488. package/src/assets/jointjs/js/lodash/fp/always.js +1 -0
  489. package/src/assets/jointjs/js/lodash/fp/any.js +1 -0
  490. package/src/assets/jointjs/js/lodash/fp/anyPass.js +1 -0
  491. package/src/assets/jointjs/js/lodash/fp/apply.js +1 -0
  492. package/src/assets/jointjs/js/lodash/fp/array.js +2 -0
  493. package/src/assets/jointjs/js/lodash/fp/ary.js +5 -0
  494. package/src/assets/jointjs/js/lodash/fp/assign.js +5 -0
  495. package/src/assets/jointjs/js/lodash/fp/assignAll.js +5 -0
  496. package/src/assets/jointjs/js/lodash/fp/assignAllWith.js +5 -0
  497. package/src/assets/jointjs/js/lodash/fp/assignIn.js +5 -0
  498. package/src/assets/jointjs/js/lodash/fp/assignInAll.js +5 -0
  499. package/src/assets/jointjs/js/lodash/fp/assignInAllWith.js +5 -0
  500. package/src/assets/jointjs/js/lodash/fp/assignInWith.js +5 -0
  501. package/src/assets/jointjs/js/lodash/fp/assignWith.js +5 -0
  502. package/src/assets/jointjs/js/lodash/fp/assoc.js +1 -0
  503. package/src/assets/jointjs/js/lodash/fp/assocPath.js +1 -0
  504. package/src/assets/jointjs/js/lodash/fp/at.js +5 -0
  505. package/src/assets/jointjs/js/lodash/fp/attempt.js +5 -0
  506. package/src/assets/jointjs/js/lodash/fp/before.js +5 -0
  507. package/src/assets/jointjs/js/lodash/fp/bind.js +5 -0
  508. package/src/assets/jointjs/js/lodash/fp/bindAll.js +5 -0
  509. package/src/assets/jointjs/js/lodash/fp/bindKey.js +5 -0
  510. package/src/assets/jointjs/js/lodash/fp/camelCase.js +5 -0
  511. package/src/assets/jointjs/js/lodash/fp/capitalize.js +5 -0
  512. package/src/assets/jointjs/js/lodash/fp/castArray.js +5 -0
  513. package/src/assets/jointjs/js/lodash/fp/ceil.js +5 -0
  514. package/src/assets/jointjs/js/lodash/fp/chain.js +5 -0
  515. package/src/assets/jointjs/js/lodash/fp/chunk.js +5 -0
  516. package/src/assets/jointjs/js/lodash/fp/clamp.js +5 -0
  517. package/src/assets/jointjs/js/lodash/fp/clone.js +5 -0
  518. package/src/assets/jointjs/js/lodash/fp/cloneDeep.js +5 -0
  519. package/src/assets/jointjs/js/lodash/fp/cloneDeepWith.js +5 -0
  520. package/src/assets/jointjs/js/lodash/fp/cloneWith.js +5 -0
  521. package/src/assets/jointjs/js/lodash/fp/collection.js +2 -0
  522. package/src/assets/jointjs/js/lodash/fp/commit.js +5 -0
  523. package/src/assets/jointjs/js/lodash/fp/compact.js +5 -0
  524. package/src/assets/jointjs/js/lodash/fp/complement.js +1 -0
  525. package/src/assets/jointjs/js/lodash/fp/compose.js +1 -0
  526. package/src/assets/jointjs/js/lodash/fp/concat.js +5 -0
  527. package/src/assets/jointjs/js/lodash/fp/cond.js +5 -0
  528. package/src/assets/jointjs/js/lodash/fp/conforms.js +1 -0
  529. package/src/assets/jointjs/js/lodash/fp/conformsTo.js +5 -0
  530. package/src/assets/jointjs/js/lodash/fp/constant.js +5 -0
  531. package/src/assets/jointjs/js/lodash/fp/contains.js +1 -0
  532. package/src/assets/jointjs/js/lodash/fp/convert.js +18 -0
  533. package/src/assets/jointjs/js/lodash/fp/countBy.js +5 -0
  534. package/src/assets/jointjs/js/lodash/fp/create.js +5 -0
  535. package/src/assets/jointjs/js/lodash/fp/curry.js +5 -0
  536. package/src/assets/jointjs/js/lodash/fp/curryN.js +5 -0
  537. package/src/assets/jointjs/js/lodash/fp/curryRight.js +5 -0
  538. package/src/assets/jointjs/js/lodash/fp/curryRightN.js +5 -0
  539. package/src/assets/jointjs/js/lodash/fp/date.js +2 -0
  540. package/src/assets/jointjs/js/lodash/fp/debounce.js +5 -0
  541. package/src/assets/jointjs/js/lodash/fp/deburr.js +5 -0
  542. package/src/assets/jointjs/js/lodash/fp/defaultTo.js +5 -0
  543. package/src/assets/jointjs/js/lodash/fp/defaults.js +5 -0
  544. package/src/assets/jointjs/js/lodash/fp/defaultsAll.js +5 -0
  545. package/src/assets/jointjs/js/lodash/fp/defaultsDeep.js +5 -0
  546. package/src/assets/jointjs/js/lodash/fp/defaultsDeepAll.js +5 -0
  547. package/src/assets/jointjs/js/lodash/fp/defer.js +5 -0
  548. package/src/assets/jointjs/js/lodash/fp/delay.js +5 -0
  549. package/src/assets/jointjs/js/lodash/fp/difference.js +5 -0
  550. package/src/assets/jointjs/js/lodash/fp/differenceBy.js +5 -0
  551. package/src/assets/jointjs/js/lodash/fp/differenceWith.js +5 -0
  552. package/src/assets/jointjs/js/lodash/fp/dissoc.js +1 -0
  553. package/src/assets/jointjs/js/lodash/fp/dissocPath.js +1 -0
  554. package/src/assets/jointjs/js/lodash/fp/divide.js +5 -0
  555. package/src/assets/jointjs/js/lodash/fp/drop.js +5 -0
  556. package/src/assets/jointjs/js/lodash/fp/dropLast.js +1 -0
  557. package/src/assets/jointjs/js/lodash/fp/dropLastWhile.js +1 -0
  558. package/src/assets/jointjs/js/lodash/fp/dropRight.js +5 -0
  559. package/src/assets/jointjs/js/lodash/fp/dropRightWhile.js +5 -0
  560. package/src/assets/jointjs/js/lodash/fp/dropWhile.js +5 -0
  561. package/src/assets/jointjs/js/lodash/fp/each.js +1 -0
  562. package/src/assets/jointjs/js/lodash/fp/eachRight.js +1 -0
  563. package/src/assets/jointjs/js/lodash/fp/endsWith.js +5 -0
  564. package/src/assets/jointjs/js/lodash/fp/entries.js +1 -0
  565. package/src/assets/jointjs/js/lodash/fp/entriesIn.js +1 -0
  566. package/src/assets/jointjs/js/lodash/fp/eq.js +5 -0
  567. package/src/assets/jointjs/js/lodash/fp/equals.js +1 -0
  568. package/src/assets/jointjs/js/lodash/fp/escape.js +5 -0
  569. package/src/assets/jointjs/js/lodash/fp/escapeRegExp.js +5 -0
  570. package/src/assets/jointjs/js/lodash/fp/every.js +5 -0
  571. package/src/assets/jointjs/js/lodash/fp/extend.js +1 -0
  572. package/src/assets/jointjs/js/lodash/fp/extendAll.js +1 -0
  573. package/src/assets/jointjs/js/lodash/fp/extendAllWith.js +1 -0
  574. package/src/assets/jointjs/js/lodash/fp/extendWith.js +1 -0
  575. package/src/assets/jointjs/js/lodash/fp/fill.js +5 -0
  576. package/src/assets/jointjs/js/lodash/fp/filter.js +5 -0
  577. package/src/assets/jointjs/js/lodash/fp/find.js +5 -0
  578. package/src/assets/jointjs/js/lodash/fp/findFrom.js +5 -0
  579. package/src/assets/jointjs/js/lodash/fp/findIndex.js +5 -0
  580. package/src/assets/jointjs/js/lodash/fp/findIndexFrom.js +5 -0
  581. package/src/assets/jointjs/js/lodash/fp/findKey.js +5 -0
  582. package/src/assets/jointjs/js/lodash/fp/findLast.js +5 -0
  583. package/src/assets/jointjs/js/lodash/fp/findLastFrom.js +5 -0
  584. package/src/assets/jointjs/js/lodash/fp/findLastIndex.js +5 -0
  585. package/src/assets/jointjs/js/lodash/fp/findLastIndexFrom.js +5 -0
  586. package/src/assets/jointjs/js/lodash/fp/findLastKey.js +5 -0
  587. package/src/assets/jointjs/js/lodash/fp/first.js +1 -0
  588. package/src/assets/jointjs/js/lodash/fp/flatMap.js +5 -0
  589. package/src/assets/jointjs/js/lodash/fp/flatMapDeep.js +5 -0
  590. package/src/assets/jointjs/js/lodash/fp/flatMapDepth.js +5 -0
  591. package/src/assets/jointjs/js/lodash/fp/flatten.js +5 -0
  592. package/src/assets/jointjs/js/lodash/fp/flattenDeep.js +5 -0
  593. package/src/assets/jointjs/js/lodash/fp/flattenDepth.js +5 -0
  594. package/src/assets/jointjs/js/lodash/fp/flip.js +5 -0
  595. package/src/assets/jointjs/js/lodash/fp/floor.js +5 -0
  596. package/src/assets/jointjs/js/lodash/fp/flow.js +5 -0
  597. package/src/assets/jointjs/js/lodash/fp/flowRight.js +5 -0
  598. package/src/assets/jointjs/js/lodash/fp/forEach.js +5 -0
  599. package/src/assets/jointjs/js/lodash/fp/forEachRight.js +5 -0
  600. package/src/assets/jointjs/js/lodash/fp/forIn.js +5 -0
  601. package/src/assets/jointjs/js/lodash/fp/forInRight.js +5 -0
  602. package/src/assets/jointjs/js/lodash/fp/forOwn.js +5 -0
  603. package/src/assets/jointjs/js/lodash/fp/forOwnRight.js +5 -0
  604. package/src/assets/jointjs/js/lodash/fp/fromPairs.js +5 -0
  605. package/src/assets/jointjs/js/lodash/fp/function.js +2 -0
  606. package/src/assets/jointjs/js/lodash/fp/functions.js +5 -0
  607. package/src/assets/jointjs/js/lodash/fp/functionsIn.js +5 -0
  608. package/src/assets/jointjs/js/lodash/fp/get.js +5 -0
  609. package/src/assets/jointjs/js/lodash/fp/getOr.js +5 -0
  610. package/src/assets/jointjs/js/lodash/fp/groupBy.js +5 -0
  611. package/src/assets/jointjs/js/lodash/fp/gt.js +5 -0
  612. package/src/assets/jointjs/js/lodash/fp/gte.js +5 -0
  613. package/src/assets/jointjs/js/lodash/fp/has.js +5 -0
  614. package/src/assets/jointjs/js/lodash/fp/hasIn.js +5 -0
  615. package/src/assets/jointjs/js/lodash/fp/head.js +5 -0
  616. package/src/assets/jointjs/js/lodash/fp/identical.js +1 -0
  617. package/src/assets/jointjs/js/lodash/fp/identity.js +5 -0
  618. package/src/assets/jointjs/js/lodash/fp/inRange.js +5 -0
  619. package/src/assets/jointjs/js/lodash/fp/includes.js +5 -0
  620. package/src/assets/jointjs/js/lodash/fp/includesFrom.js +5 -0
  621. package/src/assets/jointjs/js/lodash/fp/indexBy.js +1 -0
  622. package/src/assets/jointjs/js/lodash/fp/indexOf.js +5 -0
  623. package/src/assets/jointjs/js/lodash/fp/indexOfFrom.js +5 -0
  624. package/src/assets/jointjs/js/lodash/fp/init.js +1 -0
  625. package/src/assets/jointjs/js/lodash/fp/initial.js +5 -0
  626. package/src/assets/jointjs/js/lodash/fp/intersection.js +5 -0
  627. package/src/assets/jointjs/js/lodash/fp/intersectionBy.js +5 -0
  628. package/src/assets/jointjs/js/lodash/fp/intersectionWith.js +5 -0
  629. package/src/assets/jointjs/js/lodash/fp/invert.js +5 -0
  630. package/src/assets/jointjs/js/lodash/fp/invertBy.js +5 -0
  631. package/src/assets/jointjs/js/lodash/fp/invertObj.js +1 -0
  632. package/src/assets/jointjs/js/lodash/fp/invoke.js +5 -0
  633. package/src/assets/jointjs/js/lodash/fp/invokeArgs.js +5 -0
  634. package/src/assets/jointjs/js/lodash/fp/invokeArgsMap.js +5 -0
  635. package/src/assets/jointjs/js/lodash/fp/invokeMap.js +5 -0
  636. package/src/assets/jointjs/js/lodash/fp/isArguments.js +5 -0
  637. package/src/assets/jointjs/js/lodash/fp/isArray.js +5 -0
  638. package/src/assets/jointjs/js/lodash/fp/isArrayBuffer.js +5 -0
  639. package/src/assets/jointjs/js/lodash/fp/isArrayLike.js +5 -0
  640. package/src/assets/jointjs/js/lodash/fp/isArrayLikeObject.js +5 -0
  641. package/src/assets/jointjs/js/lodash/fp/isBoolean.js +5 -0
  642. package/src/assets/jointjs/js/lodash/fp/isBuffer.js +5 -0
  643. package/src/assets/jointjs/js/lodash/fp/isDate.js +5 -0
  644. package/src/assets/jointjs/js/lodash/fp/isElement.js +5 -0
  645. package/src/assets/jointjs/js/lodash/fp/isEmpty.js +5 -0
  646. package/src/assets/jointjs/js/lodash/fp/isEqual.js +5 -0
  647. package/src/assets/jointjs/js/lodash/fp/isEqualWith.js +5 -0
  648. package/src/assets/jointjs/js/lodash/fp/isError.js +5 -0
  649. package/src/assets/jointjs/js/lodash/fp/isFinite.js +5 -0
  650. package/src/assets/jointjs/js/lodash/fp/isFunction.js +5 -0
  651. package/src/assets/jointjs/js/lodash/fp/isInteger.js +5 -0
  652. package/src/assets/jointjs/js/lodash/fp/isLength.js +5 -0
  653. package/src/assets/jointjs/js/lodash/fp/isMap.js +5 -0
  654. package/src/assets/jointjs/js/lodash/fp/isMatch.js +5 -0
  655. package/src/assets/jointjs/js/lodash/fp/isMatchWith.js +5 -0
  656. package/src/assets/jointjs/js/lodash/fp/isNaN.js +5 -0
  657. package/src/assets/jointjs/js/lodash/fp/isNative.js +5 -0
  658. package/src/assets/jointjs/js/lodash/fp/isNil.js +5 -0
  659. package/src/assets/jointjs/js/lodash/fp/isNull.js +5 -0
  660. package/src/assets/jointjs/js/lodash/fp/isNumber.js +5 -0
  661. package/src/assets/jointjs/js/lodash/fp/isObject.js +5 -0
  662. package/src/assets/jointjs/js/lodash/fp/isObjectLike.js +5 -0
  663. package/src/assets/jointjs/js/lodash/fp/isPlainObject.js +5 -0
  664. package/src/assets/jointjs/js/lodash/fp/isRegExp.js +5 -0
  665. package/src/assets/jointjs/js/lodash/fp/isSafeInteger.js +5 -0
  666. package/src/assets/jointjs/js/lodash/fp/isSet.js +5 -0
  667. package/src/assets/jointjs/js/lodash/fp/isString.js +5 -0
  668. package/src/assets/jointjs/js/lodash/fp/isSymbol.js +5 -0
  669. package/src/assets/jointjs/js/lodash/fp/isTypedArray.js +5 -0
  670. package/src/assets/jointjs/js/lodash/fp/isUndefined.js +5 -0
  671. package/src/assets/jointjs/js/lodash/fp/isWeakMap.js +5 -0
  672. package/src/assets/jointjs/js/lodash/fp/isWeakSet.js +5 -0
  673. package/src/assets/jointjs/js/lodash/fp/iteratee.js +5 -0
  674. package/src/assets/jointjs/js/lodash/fp/join.js +5 -0
  675. package/src/assets/jointjs/js/lodash/fp/juxt.js +1 -0
  676. package/src/assets/jointjs/js/lodash/fp/kebabCase.js +5 -0
  677. package/src/assets/jointjs/js/lodash/fp/keyBy.js +5 -0
  678. package/src/assets/jointjs/js/lodash/fp/keys.js +5 -0
  679. package/src/assets/jointjs/js/lodash/fp/keysIn.js +5 -0
  680. package/src/assets/jointjs/js/lodash/fp/lang.js +2 -0
  681. package/src/assets/jointjs/js/lodash/fp/last.js +5 -0
  682. package/src/assets/jointjs/js/lodash/fp/lastIndexOf.js +5 -0
  683. package/src/assets/jointjs/js/lodash/fp/lastIndexOfFrom.js +5 -0
  684. package/src/assets/jointjs/js/lodash/fp/lowerCase.js +5 -0
  685. package/src/assets/jointjs/js/lodash/fp/lowerFirst.js +5 -0
  686. package/src/assets/jointjs/js/lodash/fp/lt.js +5 -0
  687. package/src/assets/jointjs/js/lodash/fp/lte.js +5 -0
  688. package/src/assets/jointjs/js/lodash/fp/map.js +5 -0
  689. package/src/assets/jointjs/js/lodash/fp/mapKeys.js +5 -0
  690. package/src/assets/jointjs/js/lodash/fp/mapValues.js +5 -0
  691. package/src/assets/jointjs/js/lodash/fp/matches.js +1 -0
  692. package/src/assets/jointjs/js/lodash/fp/matchesProperty.js +5 -0
  693. package/src/assets/jointjs/js/lodash/fp/math.js +2 -0
  694. package/src/assets/jointjs/js/lodash/fp/max.js +5 -0
  695. package/src/assets/jointjs/js/lodash/fp/maxBy.js +5 -0
  696. package/src/assets/jointjs/js/lodash/fp/mean.js +5 -0
  697. package/src/assets/jointjs/js/lodash/fp/meanBy.js +5 -0
  698. package/src/assets/jointjs/js/lodash/fp/memoize.js +5 -0
  699. package/src/assets/jointjs/js/lodash/fp/merge.js +5 -0
  700. package/src/assets/jointjs/js/lodash/fp/mergeAll.js +5 -0
  701. package/src/assets/jointjs/js/lodash/fp/mergeAllWith.js +5 -0
  702. package/src/assets/jointjs/js/lodash/fp/mergeWith.js +5 -0
  703. package/src/assets/jointjs/js/lodash/fp/method.js +5 -0
  704. package/src/assets/jointjs/js/lodash/fp/methodOf.js +5 -0
  705. package/src/assets/jointjs/js/lodash/fp/min.js +5 -0
  706. package/src/assets/jointjs/js/lodash/fp/minBy.js +5 -0
  707. package/src/assets/jointjs/js/lodash/fp/mixin.js +5 -0
  708. package/src/assets/jointjs/js/lodash/fp/multiply.js +5 -0
  709. package/src/assets/jointjs/js/lodash/fp/nAry.js +1 -0
  710. package/src/assets/jointjs/js/lodash/fp/negate.js +5 -0
  711. package/src/assets/jointjs/js/lodash/fp/next.js +5 -0
  712. package/src/assets/jointjs/js/lodash/fp/noop.js +5 -0
  713. package/src/assets/jointjs/js/lodash/fp/now.js +5 -0
  714. package/src/assets/jointjs/js/lodash/fp/nth.js +5 -0
  715. package/src/assets/jointjs/js/lodash/fp/nthArg.js +5 -0
  716. package/src/assets/jointjs/js/lodash/fp/number.js +2 -0
  717. package/src/assets/jointjs/js/lodash/fp/object.js +2 -0
  718. package/src/assets/jointjs/js/lodash/fp/omit.js +5 -0
  719. package/src/assets/jointjs/js/lodash/fp/omitAll.js +1 -0
  720. package/src/assets/jointjs/js/lodash/fp/omitBy.js +5 -0
  721. package/src/assets/jointjs/js/lodash/fp/once.js +5 -0
  722. package/src/assets/jointjs/js/lodash/fp/orderBy.js +5 -0
  723. package/src/assets/jointjs/js/lodash/fp/over.js +5 -0
  724. package/src/assets/jointjs/js/lodash/fp/overArgs.js +5 -0
  725. package/src/assets/jointjs/js/lodash/fp/overEvery.js +5 -0
  726. package/src/assets/jointjs/js/lodash/fp/overSome.js +5 -0
  727. package/src/assets/jointjs/js/lodash/fp/pad.js +5 -0
  728. package/src/assets/jointjs/js/lodash/fp/padChars.js +5 -0
  729. package/src/assets/jointjs/js/lodash/fp/padCharsEnd.js +5 -0
  730. package/src/assets/jointjs/js/lodash/fp/padCharsStart.js +5 -0
  731. package/src/assets/jointjs/js/lodash/fp/padEnd.js +5 -0
  732. package/src/assets/jointjs/js/lodash/fp/padStart.js +5 -0
  733. package/src/assets/jointjs/js/lodash/fp/parseInt.js +5 -0
  734. package/src/assets/jointjs/js/lodash/fp/partial.js +5 -0
  735. package/src/assets/jointjs/js/lodash/fp/partialRight.js +5 -0
  736. package/src/assets/jointjs/js/lodash/fp/partition.js +5 -0
  737. package/src/assets/jointjs/js/lodash/fp/path.js +1 -0
  738. package/src/assets/jointjs/js/lodash/fp/pathEq.js +1 -0
  739. package/src/assets/jointjs/js/lodash/fp/pathOr.js +1 -0
  740. package/src/assets/jointjs/js/lodash/fp/paths.js +1 -0
  741. package/src/assets/jointjs/js/lodash/fp/pick.js +5 -0
  742. package/src/assets/jointjs/js/lodash/fp/pickAll.js +1 -0
  743. package/src/assets/jointjs/js/lodash/fp/pickBy.js +5 -0
  744. package/src/assets/jointjs/js/lodash/fp/pipe.js +1 -0
  745. package/src/assets/jointjs/js/lodash/fp/placeholder.js +6 -0
  746. package/src/assets/jointjs/js/lodash/fp/plant.js +5 -0
  747. package/src/assets/jointjs/js/lodash/fp/pluck.js +1 -0
  748. package/src/assets/jointjs/js/lodash/fp/prop.js +1 -0
  749. package/src/assets/jointjs/js/lodash/fp/propEq.js +1 -0
  750. package/src/assets/jointjs/js/lodash/fp/propOr.js +1 -0
  751. package/src/assets/jointjs/js/lodash/fp/property.js +1 -0
  752. package/src/assets/jointjs/js/lodash/fp/propertyOf.js +5 -0
  753. package/src/assets/jointjs/js/lodash/fp/props.js +1 -0
  754. package/src/assets/jointjs/js/lodash/fp/pull.js +5 -0
  755. package/src/assets/jointjs/js/lodash/fp/pullAll.js +5 -0
  756. package/src/assets/jointjs/js/lodash/fp/pullAllBy.js +5 -0
  757. package/src/assets/jointjs/js/lodash/fp/pullAllWith.js +5 -0
  758. package/src/assets/jointjs/js/lodash/fp/pullAt.js +5 -0
  759. package/src/assets/jointjs/js/lodash/fp/random.js +5 -0
  760. package/src/assets/jointjs/js/lodash/fp/range.js +5 -0
  761. package/src/assets/jointjs/js/lodash/fp/rangeRight.js +5 -0
  762. package/src/assets/jointjs/js/lodash/fp/rangeStep.js +5 -0
  763. package/src/assets/jointjs/js/lodash/fp/rangeStepRight.js +5 -0
  764. package/src/assets/jointjs/js/lodash/fp/rearg.js +5 -0
  765. package/src/assets/jointjs/js/lodash/fp/reduce.js +5 -0
  766. package/src/assets/jointjs/js/lodash/fp/reduceRight.js +5 -0
  767. package/src/assets/jointjs/js/lodash/fp/reject.js +5 -0
  768. package/src/assets/jointjs/js/lodash/fp/remove.js +5 -0
  769. package/src/assets/jointjs/js/lodash/fp/repeat.js +5 -0
  770. package/src/assets/jointjs/js/lodash/fp/replace.js +5 -0
  771. package/src/assets/jointjs/js/lodash/fp/rest.js +5 -0
  772. package/src/assets/jointjs/js/lodash/fp/restFrom.js +5 -0
  773. package/src/assets/jointjs/js/lodash/fp/result.js +5 -0
  774. package/src/assets/jointjs/js/lodash/fp/reverse.js +5 -0
  775. package/src/assets/jointjs/js/lodash/fp/round.js +5 -0
  776. package/src/assets/jointjs/js/lodash/fp/sample.js +5 -0
  777. package/src/assets/jointjs/js/lodash/fp/sampleSize.js +5 -0
  778. package/src/assets/jointjs/js/lodash/fp/seq.js +2 -0
  779. package/src/assets/jointjs/js/lodash/fp/set.js +5 -0
  780. package/src/assets/jointjs/js/lodash/fp/setWith.js +5 -0
  781. package/src/assets/jointjs/js/lodash/fp/shuffle.js +5 -0
  782. package/src/assets/jointjs/js/lodash/fp/size.js +5 -0
  783. package/src/assets/jointjs/js/lodash/fp/slice.js +5 -0
  784. package/src/assets/jointjs/js/lodash/fp/snakeCase.js +5 -0
  785. package/src/assets/jointjs/js/lodash/fp/some.js +5 -0
  786. package/src/assets/jointjs/js/lodash/fp/sortBy.js +5 -0
  787. package/src/assets/jointjs/js/lodash/fp/sortedIndex.js +5 -0
  788. package/src/assets/jointjs/js/lodash/fp/sortedIndexBy.js +5 -0
  789. package/src/assets/jointjs/js/lodash/fp/sortedIndexOf.js +5 -0
  790. package/src/assets/jointjs/js/lodash/fp/sortedLastIndex.js +5 -0
  791. package/src/assets/jointjs/js/lodash/fp/sortedLastIndexBy.js +5 -0
  792. package/src/assets/jointjs/js/lodash/fp/sortedLastIndexOf.js +5 -0
  793. package/src/assets/jointjs/js/lodash/fp/sortedUniq.js +5 -0
  794. package/src/assets/jointjs/js/lodash/fp/sortedUniqBy.js +5 -0
  795. package/src/assets/jointjs/js/lodash/fp/split.js +5 -0
  796. package/src/assets/jointjs/js/lodash/fp/spread.js +5 -0
  797. package/src/assets/jointjs/js/lodash/fp/spreadFrom.js +5 -0
  798. package/src/assets/jointjs/js/lodash/fp/startCase.js +5 -0
  799. package/src/assets/jointjs/js/lodash/fp/startsWith.js +5 -0
  800. package/src/assets/jointjs/js/lodash/fp/string.js +2 -0
  801. package/src/assets/jointjs/js/lodash/fp/stubArray.js +5 -0
  802. package/src/assets/jointjs/js/lodash/fp/stubFalse.js +5 -0
  803. package/src/assets/jointjs/js/lodash/fp/stubObject.js +5 -0
  804. package/src/assets/jointjs/js/lodash/fp/stubString.js +5 -0
  805. package/src/assets/jointjs/js/lodash/fp/stubTrue.js +5 -0
  806. package/src/assets/jointjs/js/lodash/fp/subtract.js +5 -0
  807. package/src/assets/jointjs/js/lodash/fp/sum.js +5 -0
  808. package/src/assets/jointjs/js/lodash/fp/sumBy.js +5 -0
  809. package/src/assets/jointjs/js/lodash/fp/symmetricDifference.js +1 -0
  810. package/src/assets/jointjs/js/lodash/fp/symmetricDifferenceBy.js +1 -0
  811. package/src/assets/jointjs/js/lodash/fp/symmetricDifferenceWith.js +1 -0
  812. package/src/assets/jointjs/js/lodash/fp/tail.js +5 -0
  813. package/src/assets/jointjs/js/lodash/fp/take.js +5 -0
  814. package/src/assets/jointjs/js/lodash/fp/takeLast.js +1 -0
  815. package/src/assets/jointjs/js/lodash/fp/takeLastWhile.js +1 -0
  816. package/src/assets/jointjs/js/lodash/fp/takeRight.js +5 -0
  817. package/src/assets/jointjs/js/lodash/fp/takeRightWhile.js +5 -0
  818. package/src/assets/jointjs/js/lodash/fp/takeWhile.js +5 -0
  819. package/src/assets/jointjs/js/lodash/fp/tap.js +5 -0
  820. package/src/assets/jointjs/js/lodash/fp/template.js +5 -0
  821. package/src/assets/jointjs/js/lodash/fp/templateSettings.js +5 -0
  822. package/src/assets/jointjs/js/lodash/fp/throttle.js +5 -0
  823. package/src/assets/jointjs/js/lodash/fp/thru.js +5 -0
  824. package/src/assets/jointjs/js/lodash/fp/times.js +5 -0
  825. package/src/assets/jointjs/js/lodash/fp/toArray.js +5 -0
  826. package/src/assets/jointjs/js/lodash/fp/toFinite.js +5 -0
  827. package/src/assets/jointjs/js/lodash/fp/toInteger.js +5 -0
  828. package/src/assets/jointjs/js/lodash/fp/toIterator.js +5 -0
  829. package/src/assets/jointjs/js/lodash/fp/toJSON.js +5 -0
  830. package/src/assets/jointjs/js/lodash/fp/toLength.js +5 -0
  831. package/src/assets/jointjs/js/lodash/fp/toLower.js +5 -0
  832. package/src/assets/jointjs/js/lodash/fp/toNumber.js +5 -0
  833. package/src/assets/jointjs/js/lodash/fp/toPairs.js +5 -0
  834. package/src/assets/jointjs/js/lodash/fp/toPairsIn.js +5 -0
  835. package/src/assets/jointjs/js/lodash/fp/toPath.js +5 -0
  836. package/src/assets/jointjs/js/lodash/fp/toPlainObject.js +5 -0
  837. package/src/assets/jointjs/js/lodash/fp/toSafeInteger.js +5 -0
  838. package/src/assets/jointjs/js/lodash/fp/toString.js +5 -0
  839. package/src/assets/jointjs/js/lodash/fp/toUpper.js +5 -0
  840. package/src/assets/jointjs/js/lodash/fp/transform.js +5 -0
  841. package/src/assets/jointjs/js/lodash/fp/trim.js +5 -0
  842. package/src/assets/jointjs/js/lodash/fp/trimChars.js +5 -0
  843. package/src/assets/jointjs/js/lodash/fp/trimCharsEnd.js +5 -0
  844. package/src/assets/jointjs/js/lodash/fp/trimCharsStart.js +5 -0
  845. package/src/assets/jointjs/js/lodash/fp/trimEnd.js +5 -0
  846. package/src/assets/jointjs/js/lodash/fp/trimStart.js +5 -0
  847. package/src/assets/jointjs/js/lodash/fp/truncate.js +5 -0
  848. package/src/assets/jointjs/js/lodash/fp/unapply.js +1 -0
  849. package/src/assets/jointjs/js/lodash/fp/unary.js +5 -0
  850. package/src/assets/jointjs/js/lodash/fp/unescape.js +5 -0
  851. package/src/assets/jointjs/js/lodash/fp/union.js +5 -0
  852. package/src/assets/jointjs/js/lodash/fp/unionBy.js +5 -0
  853. package/src/assets/jointjs/js/lodash/fp/unionWith.js +5 -0
  854. package/src/assets/jointjs/js/lodash/fp/uniq.js +5 -0
  855. package/src/assets/jointjs/js/lodash/fp/uniqBy.js +5 -0
  856. package/src/assets/jointjs/js/lodash/fp/uniqWith.js +5 -0
  857. package/src/assets/jointjs/js/lodash/fp/uniqueId.js +5 -0
  858. package/src/assets/jointjs/js/lodash/fp/unnest.js +1 -0
  859. package/src/assets/jointjs/js/lodash/fp/unset.js +5 -0
  860. package/src/assets/jointjs/js/lodash/fp/unzip.js +5 -0
  861. package/src/assets/jointjs/js/lodash/fp/unzipWith.js +5 -0
  862. package/src/assets/jointjs/js/lodash/fp/update.js +5 -0
  863. package/src/assets/jointjs/js/lodash/fp/updateWith.js +5 -0
  864. package/src/assets/jointjs/js/lodash/fp/upperCase.js +5 -0
  865. package/src/assets/jointjs/js/lodash/fp/upperFirst.js +5 -0
  866. package/src/assets/jointjs/js/lodash/fp/useWith.js +1 -0
  867. package/src/assets/jointjs/js/lodash/fp/util.js +2 -0
  868. package/src/assets/jointjs/js/lodash/fp/value.js +5 -0
  869. package/src/assets/jointjs/js/lodash/fp/valueOf.js +5 -0
  870. package/src/assets/jointjs/js/lodash/fp/values.js +5 -0
  871. package/src/assets/jointjs/js/lodash/fp/valuesIn.js +5 -0
  872. package/src/assets/jointjs/js/lodash/fp/where.js +1 -0
  873. package/src/assets/jointjs/js/lodash/fp/whereEq.js +1 -0
  874. package/src/assets/jointjs/js/lodash/fp/without.js +5 -0
  875. package/src/assets/jointjs/js/lodash/fp/words.js +5 -0
  876. package/src/assets/jointjs/js/lodash/fp/wrap.js +5 -0
  877. package/src/assets/jointjs/js/lodash/fp/wrapperAt.js +5 -0
  878. package/src/assets/jointjs/js/lodash/fp/wrapperChain.js +5 -0
  879. package/src/assets/jointjs/js/lodash/fp/wrapperLodash.js +5 -0
  880. package/src/assets/jointjs/js/lodash/fp/wrapperReverse.js +5 -0
  881. package/src/assets/jointjs/js/lodash/fp/wrapperValue.js +5 -0
  882. package/src/assets/jointjs/js/lodash/fp/xor.js +5 -0
  883. package/src/assets/jointjs/js/lodash/fp/xorBy.js +5 -0
  884. package/src/assets/jointjs/js/lodash/fp/xorWith.js +5 -0
  885. package/src/assets/jointjs/js/lodash/fp/zip.js +5 -0
  886. package/src/assets/jointjs/js/lodash/fp/zipAll.js +5 -0
  887. package/src/assets/jointjs/js/lodash/fp/zipObj.js +1 -0
  888. package/src/assets/jointjs/js/lodash/fp/zipObject.js +5 -0
  889. package/src/assets/jointjs/js/lodash/fp/zipObjectDeep.js +5 -0
  890. package/src/assets/jointjs/js/lodash/fp/zipWith.js +5 -0
  891. package/src/assets/jointjs/js/lodash/fp.js +2 -0
  892. package/src/assets/jointjs/js/lodash/fromPairs.js +28 -0
  893. package/src/assets/jointjs/js/lodash/function.js +25 -0
  894. package/src/assets/jointjs/js/lodash/functions.js +31 -0
  895. package/src/assets/jointjs/js/lodash/functionsIn.js +31 -0
  896. package/src/assets/jointjs/js/lodash/get.js +33 -0
  897. package/src/assets/jointjs/js/lodash/groupBy.js +41 -0
  898. package/src/assets/jointjs/js/lodash/gt.js +29 -0
  899. package/src/assets/jointjs/js/lodash/gte.js +30 -0
  900. package/src/assets/jointjs/js/lodash/has.js +35 -0
  901. package/src/assets/jointjs/js/lodash/hasIn.js +34 -0
  902. package/src/assets/jointjs/js/lodash/head.js +23 -0
  903. package/src/assets/jointjs/js/lodash/identity.js +21 -0
  904. package/src/assets/jointjs/js/lodash/inRange.js +55 -0
  905. package/src/assets/jointjs/js/lodash/includes.js +53 -0
  906. package/src/assets/jointjs/js/lodash/index.js +1 -0
  907. package/src/assets/jointjs/js/lodash/indexOf.js +42 -0
  908. package/src/assets/jointjs/js/lodash/initial.js +22 -0
  909. package/src/assets/jointjs/js/lodash/intersection.js +30 -0
  910. package/src/assets/jointjs/js/lodash/intersectionBy.js +45 -0
  911. package/src/assets/jointjs/js/lodash/intersectionWith.js +41 -0
  912. package/src/assets/jointjs/js/lodash/invert.js +42 -0
  913. package/src/assets/jointjs/js/lodash/invertBy.js +56 -0
  914. package/src/assets/jointjs/js/lodash/invoke.js +24 -0
  915. package/src/assets/jointjs/js/lodash/invokeMap.js +41 -0
  916. package/src/assets/jointjs/js/lodash/isArguments.js +36 -0
  917. package/src/assets/jointjs/js/lodash/isArray.js +26 -0
  918. package/src/assets/jointjs/js/lodash/isArrayBuffer.js +27 -0
  919. package/src/assets/jointjs/js/lodash/isArrayLike.js +33 -0
  920. package/src/assets/jointjs/js/lodash/isArrayLikeObject.js +33 -0
  921. package/src/assets/jointjs/js/lodash/isBoolean.js +29 -0
  922. package/src/assets/jointjs/js/lodash/isBuffer.js +38 -0
  923. package/src/assets/jointjs/js/lodash/isDate.js +27 -0
  924. package/src/assets/jointjs/js/lodash/isElement.js +25 -0
  925. package/src/assets/jointjs/js/lodash/isEmpty.js +77 -0
  926. package/src/assets/jointjs/js/lodash/isEqual.js +35 -0
  927. package/src/assets/jointjs/js/lodash/isEqualWith.js +41 -0
  928. package/src/assets/jointjs/js/lodash/isError.js +36 -0
  929. package/src/assets/jointjs/js/lodash/isFinite.js +36 -0
  930. package/src/assets/jointjs/js/lodash/isFunction.js +37 -0
  931. package/src/assets/jointjs/js/lodash/isInteger.js +33 -0
  932. package/src/assets/jointjs/js/lodash/isLength.js +35 -0
  933. package/src/assets/jointjs/js/lodash/isMap.js +27 -0
  934. package/src/assets/jointjs/js/lodash/isMatch.js +36 -0
  935. package/src/assets/jointjs/js/lodash/isMatchWith.js +41 -0
  936. package/src/assets/jointjs/js/lodash/isNaN.js +38 -0
  937. package/src/assets/jointjs/js/lodash/isNative.js +40 -0
  938. package/src/assets/jointjs/js/lodash/isNil.js +25 -0
  939. package/src/assets/jointjs/js/lodash/isNull.js +22 -0
  940. package/src/assets/jointjs/js/lodash/isNumber.js +38 -0
  941. package/src/assets/jointjs/js/lodash/isObject.js +31 -0
  942. package/src/assets/jointjs/js/lodash/isObjectLike.js +29 -0
  943. package/src/assets/jointjs/js/lodash/isPlainObject.js +62 -0
  944. package/src/assets/jointjs/js/lodash/isRegExp.js +27 -0
  945. package/src/assets/jointjs/js/lodash/isSafeInteger.js +37 -0
  946. package/src/assets/jointjs/js/lodash/isSet.js +27 -0
  947. package/src/assets/jointjs/js/lodash/isString.js +30 -0
  948. package/src/assets/jointjs/js/lodash/isSymbol.js +29 -0
  949. package/src/assets/jointjs/js/lodash/isTypedArray.js +27 -0
  950. package/src/assets/jointjs/js/lodash/isUndefined.js +22 -0
  951. package/src/assets/jointjs/js/lodash/isWeakMap.js +28 -0
  952. package/src/assets/jointjs/js/lodash/isWeakSet.js +28 -0
  953. package/src/assets/jointjs/js/lodash/iteratee.js +53 -0
  954. package/src/assets/jointjs/js/lodash/join.js +26 -0
  955. package/src/assets/jointjs/js/lodash/kebabCase.js +28 -0
  956. package/src/assets/jointjs/js/lodash/keyBy.js +36 -0
  957. package/src/assets/jointjs/js/lodash/keys.js +37 -0
  958. package/src/assets/jointjs/js/lodash/keysIn.js +32 -0
  959. package/src/assets/jointjs/js/lodash/lang.js +58 -0
  960. package/src/assets/jointjs/js/lodash/last.js +20 -0
  961. package/src/assets/jointjs/js/lodash/lastIndexOf.js +46 -0
  962. package/src/assets/jointjs/js/lodash/lodash.js +17112 -0
  963. package/src/assets/jointjs/js/lodash/lodash.min.js +137 -0
  964. package/src/assets/jointjs/js/lodash/lowerCase.js +27 -0
  965. package/src/assets/jointjs/js/lodash/lowerFirst.js +22 -0
  966. package/src/assets/jointjs/js/lodash/lt.js +29 -0
  967. package/src/assets/jointjs/js/lodash/lte.js +30 -0
  968. package/src/assets/jointjs/js/lodash/map.js +53 -0
  969. package/src/assets/jointjs/js/lodash/mapKeys.js +36 -0
  970. package/src/assets/jointjs/js/lodash/mapValues.js +43 -0
  971. package/src/assets/jointjs/js/lodash/matches.js +39 -0
  972. package/src/assets/jointjs/js/lodash/matchesProperty.js +37 -0
  973. package/src/assets/jointjs/js/lodash/math.js +17 -0
  974. package/src/assets/jointjs/js/lodash/max.js +29 -0
  975. package/src/assets/jointjs/js/lodash/maxBy.js +34 -0
  976. package/src/assets/jointjs/js/lodash/mean.js +22 -0
  977. package/src/assets/jointjs/js/lodash/meanBy.js +31 -0
  978. package/src/assets/jointjs/js/lodash/memoize.js +73 -0
  979. package/src/assets/jointjs/js/lodash/merge.js +39 -0
  980. package/src/assets/jointjs/js/lodash/mergeWith.js +39 -0
  981. package/src/assets/jointjs/js/lodash/method.js +34 -0
  982. package/src/assets/jointjs/js/lodash/methodOf.js +33 -0
  983. package/src/assets/jointjs/js/lodash/min.js +29 -0
  984. package/src/assets/jointjs/js/lodash/minBy.js +34 -0
  985. package/src/assets/jointjs/js/lodash/mixin.js +74 -0
  986. package/src/assets/jointjs/js/lodash/multiply.js +22 -0
  987. package/src/assets/jointjs/js/lodash/negate.js +40 -0
  988. package/src/assets/jointjs/js/lodash/next.js +35 -0
  989. package/src/assets/jointjs/js/lodash/noop.js +17 -0
  990. package/src/assets/jointjs/js/lodash/now.js +23 -0
  991. package/src/assets/jointjs/js/lodash/nth.js +29 -0
  992. package/src/assets/jointjs/js/lodash/nthArg.js +32 -0
  993. package/src/assets/jointjs/js/lodash/number.js +5 -0
  994. package/src/assets/jointjs/js/lodash/object.js +49 -0
  995. package/src/assets/jointjs/js/lodash/omit.js +57 -0
  996. package/src/assets/jointjs/js/lodash/omitBy.js +29 -0
  997. package/src/assets/jointjs/js/lodash/once.js +25 -0
  998. package/src/assets/jointjs/js/lodash/orderBy.js +47 -0
  999. package/src/assets/jointjs/js/lodash/org.js +39 -0
  1000. package/src/assets/jointjs/js/lodash/over.js +24 -0
  1001. package/src/assets/jointjs/js/lodash/overArgs.js +61 -0
  1002. package/src/assets/jointjs/js/lodash/overEvery.js +30 -0
  1003. package/src/assets/jointjs/js/lodash/overSome.js +30 -0
  1004. package/src/assets/jointjs/js/lodash/package.json +1 -0
  1005. package/src/assets/jointjs/js/lodash/pad.js +49 -0
  1006. package/src/assets/jointjs/js/lodash/padEnd.js +39 -0
  1007. package/src/assets/jointjs/js/lodash/padStart.js +39 -0
  1008. package/src/assets/jointjs/js/lodash/parseInt.js +43 -0
  1009. package/src/assets/jointjs/js/lodash/partial.js +50 -0
  1010. package/src/assets/jointjs/js/lodash/partialRight.js +49 -0
  1011. package/src/assets/jointjs/js/lodash/partition.js +43 -0
  1012. package/src/assets/jointjs/js/lodash/pick.js +25 -0
  1013. package/src/assets/jointjs/js/lodash/pickBy.js +37 -0
  1014. package/src/assets/jointjs/js/lodash/plant.js +48 -0
  1015. package/src/assets/jointjs/js/lodash/property.js +32 -0
  1016. package/src/assets/jointjs/js/lodash/propertyOf.js +30 -0
  1017. package/src/assets/jointjs/js/lodash/pull.js +29 -0
  1018. package/src/assets/jointjs/js/lodash/pullAll.js +29 -0
  1019. package/src/assets/jointjs/js/lodash/pullAllBy.js +33 -0
  1020. package/src/assets/jointjs/js/lodash/pullAllWith.js +32 -0
  1021. package/src/assets/jointjs/js/lodash/pullAt.js +43 -0
  1022. package/src/assets/jointjs/js/lodash/random.js +82 -0
  1023. package/src/assets/jointjs/js/lodash/range.js +46 -0
  1024. package/src/assets/jointjs/js/lodash/rangeRight.js +41 -0
  1025. package/src/assets/jointjs/js/lodash/rearg.js +33 -0
  1026. package/src/assets/jointjs/js/lodash/reduce.js +51 -0
  1027. package/src/assets/jointjs/js/lodash/reduceRight.js +36 -0
  1028. package/src/assets/jointjs/js/lodash/reject.js +46 -0
  1029. package/src/assets/jointjs/js/lodash/remove.js +53 -0
  1030. package/src/assets/jointjs/js/lodash/repeat.js +37 -0
  1031. package/src/assets/jointjs/js/lodash/replace.js +29 -0
  1032. package/src/assets/jointjs/js/lodash/rest.js +40 -0
  1033. package/src/assets/jointjs/js/lodash/result.js +56 -0
  1034. package/src/assets/jointjs/js/lodash/reverse.js +34 -0
  1035. package/src/assets/jointjs/js/lodash/round.js +26 -0
  1036. package/src/assets/jointjs/js/lodash/sample.js +24 -0
  1037. package/src/assets/jointjs/js/lodash/sampleSize.js +37 -0
  1038. package/src/assets/jointjs/js/lodash/seq.js +16 -0
  1039. package/src/assets/jointjs/js/lodash/set.js +35 -0
  1040. package/src/assets/jointjs/js/lodash/setWith.js +32 -0
  1041. package/src/assets/jointjs/js/lodash/shuffle.js +25 -0
  1042. package/src/assets/jointjs/js/lodash/size.js +46 -0
  1043. package/src/assets/jointjs/js/lodash/slice.js +37 -0
  1044. package/src/assets/jointjs/js/lodash/snakeCase.js +28 -0
  1045. package/src/assets/jointjs/js/lodash/some.js +51 -0
  1046. package/src/assets/jointjs/js/lodash/sortBy.js +48 -0
  1047. package/src/assets/jointjs/js/lodash/sortedIndex.js +24 -0
  1048. package/src/assets/jointjs/js/lodash/sortedIndexBy.js +33 -0
  1049. package/src/assets/jointjs/js/lodash/sortedIndexOf.js +31 -0
  1050. package/src/assets/jointjs/js/lodash/sortedLastIndex.js +25 -0
  1051. package/src/assets/jointjs/js/lodash/sortedLastIndexBy.js +33 -0
  1052. package/src/assets/jointjs/js/lodash/sortedLastIndexOf.js +31 -0
  1053. package/src/assets/jointjs/js/lodash/sortedUniq.js +24 -0
  1054. package/src/assets/jointjs/js/lodash/sortedUniqBy.js +26 -0
  1055. package/src/assets/jointjs/js/lodash/split.js +52 -0
  1056. package/src/assets/jointjs/js/lodash/spread.js +63 -0
  1057. package/src/assets/jointjs/js/lodash/startCase.js +29 -0
  1058. package/src/assets/jointjs/js/lodash/startsWith.js +39 -0
  1059. package/src/assets/jointjs/js/lodash/string.js +33 -0
  1060. package/src/assets/jointjs/js/lodash/stubArray.js +23 -0
  1061. package/src/assets/jointjs/js/lodash/stubFalse.js +18 -0
  1062. package/src/assets/jointjs/js/lodash/stubObject.js +23 -0
  1063. package/src/assets/jointjs/js/lodash/stubString.js +18 -0
  1064. package/src/assets/jointjs/js/lodash/stubTrue.js +18 -0
  1065. package/src/assets/jointjs/js/lodash/subtract.js +22 -0
  1066. package/src/assets/jointjs/js/lodash/sum.js +24 -0
  1067. package/src/assets/jointjs/js/lodash/sumBy.js +33 -0
  1068. package/src/assets/jointjs/js/lodash/tag.js +43 -0
  1069. package/src/assets/jointjs/js/lodash/tail.js +22 -0
  1070. package/src/assets/jointjs/js/lodash/take.js +37 -0
  1071. package/src/assets/jointjs/js/lodash/takeRight.js +39 -0
  1072. package/src/assets/jointjs/js/lodash/takeRightWhile.js +45 -0
  1073. package/src/assets/jointjs/js/lodash/takeWhile.js +45 -0
  1074. package/src/assets/jointjs/js/lodash/tap.js +29 -0
  1075. package/src/assets/jointjs/js/lodash/template.js +253 -0
  1076. package/src/assets/jointjs/js/lodash/templateSettings.js +67 -0
  1077. package/src/assets/jointjs/js/lodash/throttle.js +69 -0
  1078. package/src/assets/jointjs/js/lodash/thru.js +28 -0
  1079. package/src/assets/jointjs/js/lodash/times.js +51 -0
  1080. package/src/assets/jointjs/js/lodash/toArray.js +58 -0
  1081. package/src/assets/jointjs/js/lodash/toFinite.js +42 -0
  1082. package/src/assets/jointjs/js/lodash/toInteger.js +36 -0
  1083. package/src/assets/jointjs/js/lodash/toIterator.js +23 -0
  1084. package/src/assets/jointjs/js/lodash/toJSON.js +1 -0
  1085. package/src/assets/jointjs/js/lodash/toLength.js +38 -0
  1086. package/src/assets/jointjs/js/lodash/toLower.js +28 -0
  1087. package/src/assets/jointjs/js/lodash/toNumber.js +66 -0
  1088. package/src/assets/jointjs/js/lodash/toPairs.js +30 -0
  1089. package/src/assets/jointjs/js/lodash/toPairsIn.js +30 -0
  1090. package/src/assets/jointjs/js/lodash/toPath.js +33 -0
  1091. package/src/assets/jointjs/js/lodash/toPlainObject.js +32 -0
  1092. package/src/assets/jointjs/js/lodash/toSafeInteger.js +37 -0
  1093. package/src/assets/jointjs/js/lodash/toString.js +28 -0
  1094. package/src/assets/jointjs/js/lodash/toUpper.js +28 -0
  1095. package/src/assets/jointjs/js/lodash/transform.js +65 -0
  1096. package/src/assets/jointjs/js/lodash/trim.js +49 -0
  1097. package/src/assets/jointjs/js/lodash/trimEnd.js +43 -0
  1098. package/src/assets/jointjs/js/lodash/trimStart.js +43 -0
  1099. package/src/assets/jointjs/js/lodash/truncate.js +111 -0
  1100. package/src/assets/jointjs/js/lodash/unary.js +22 -0
  1101. package/src/assets/jointjs/js/lodash/unescape.js +34 -0
  1102. package/src/assets/jointjs/js/lodash/union.js +26 -0
  1103. package/src/assets/jointjs/js/lodash/unionBy.js +39 -0
  1104. package/src/assets/jointjs/js/lodash/unionWith.js +34 -0
  1105. package/src/assets/jointjs/js/lodash/uniq.js +25 -0
  1106. package/src/assets/jointjs/js/lodash/uniqBy.js +31 -0
  1107. package/src/assets/jointjs/js/lodash/uniqWith.js +28 -0
  1108. package/src/assets/jointjs/js/lodash/uniqueId.js +28 -0
  1109. package/src/assets/jointjs/js/lodash/unset.js +34 -0
  1110. package/src/assets/jointjs/js/lodash/unzip.js +45 -0
  1111. package/src/assets/jointjs/js/lodash/unzipWith.js +39 -0
  1112. package/src/assets/jointjs/js/lodash/update.js +35 -0
  1113. package/src/assets/jointjs/js/lodash/updateWith.js +33 -0
  1114. package/src/assets/jointjs/js/lodash/upperCase.js +27 -0
  1115. package/src/assets/jointjs/js/lodash/upperFirst.js +22 -0
  1116. package/src/assets/jointjs/js/lodash/util.js +34 -0
  1117. package/src/assets/jointjs/js/lodash/value.js +1 -0
  1118. package/src/assets/jointjs/js/lodash/valueOf.js +1 -0
  1119. package/src/assets/jointjs/js/lodash/values.js +34 -0
  1120. package/src/assets/jointjs/js/lodash/valuesIn.js +32 -0
  1121. package/src/assets/jointjs/js/lodash/without.js +31 -0
  1122. package/src/assets/jointjs/js/lodash/words.js +35 -0
  1123. package/src/assets/jointjs/js/lodash/wrap.js +30 -0
  1124. package/src/assets/jointjs/js/lodash/wrapperAt.js +48 -0
  1125. package/src/assets/jointjs/js/lodash/wrapperChain.js +34 -0
  1126. package/src/assets/jointjs/js/lodash/wrapperLodash.js +147 -0
  1127. package/src/assets/jointjs/js/lodash/wrapperReverse.js +44 -0
  1128. package/src/assets/jointjs/js/lodash/wrapperValue.js +21 -0
  1129. package/src/assets/jointjs/js/lodash/xor.js +28 -0
  1130. package/src/assets/jointjs/js/lodash/xorBy.js +39 -0
  1131. package/src/assets/jointjs/js/lodash/xorWith.js +34 -0
  1132. package/src/assets/jointjs/js/lodash/zip.js +22 -0
  1133. package/src/assets/jointjs/js/lodash/zipObject.js +24 -0
  1134. package/src/assets/jointjs/js/lodash/zipObjectDeep.js +23 -0
  1135. package/src/assets/jointjs/js/lodash/zipWith.js +32 -0
  1136. package/src/assets/jointjs/js/rappid.js +65022 -0
  1137. package/src/assets/jointjs/scss/bpmn.scss +884 -0
  1138. package/src/assets/jointjs/scss/rappid.scss +8879 -0
  1139. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +2 -2
  1140. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  1141. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +7 -4
  1142. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +63 -0
  1143. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +9 -1
  1144. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +20 -0
  1145. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/converters.js +378 -0
  1146. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemap.js +14 -0
  1147. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +183 -0
  1148. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +49 -0
  1149. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +127 -0
  1150. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +82 -0
  1151. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +234 -0
  1152. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +1 -1
  1153. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimage.js +1 -1
  1154. package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkactionsview.js +1 -1
  1155. package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkformview.js +1 -1
  1156. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/inserttooltipcommand.js +1 -1
  1157. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipediting.js +1 -1
  1158. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/ui/actionsview.js +1 -1
  1159. package/src/assets/qms-ckeditor-plugin/src/themes/icons/bpmn.svg +20 -0
  1160. package/src/assets/qms-ckeditor-plugin/src/themes/icons/imagemap.svg +56 -0
  1161. package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/anchor.css +0 -0
  1162. package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/link.css +0 -0
  1163. package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkactions.css +0 -0
  1164. package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkform.css +0 -0
  1165. package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkimage.css +0 -0
  1166. package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/tooltip.css +0 -0
  1167. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +156 -0
  1168. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.scss +0 -0
  1169. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.scss +27 -0
  1170. package/src/lib/qms-ckeditor-components/styles/_modules.scss +19 -1
  1171. package/src/themes/_color.scss +8 -0
  1172. package/src/themes/core/_colors.scss +2 -0
  1173. package/src/themes/core/_side-sheet.scss +1 -0
  1174. package/src/themes/core/_tab.scss +50 -49
@@ -0,0 +1,1156 @@
1
+ /* eslint-disable no-use-before-define */
2
+ /* eslint-disable @typescript-eslint/no-use-before-define */
3
+ /* eslint-disable no-param-reassign */
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ /* eslint-disable @typescript-eslint/no-shadow */
6
+ /* eslint-disable @typescript-eslint/no-unused-vars */
7
+ /* eslint-disable no-new */
8
+ import { Injectable } from '@angular/core';
9
+ import * as $ from 'jquery';
10
+ import * as _ from 'lodash';
11
+ import InspectorFunction from '../common/bpmn/inspector.function';
12
+ import ToolbarFunction from '../common/bpmn/toolbar.function';
13
+ import { FlowChartConst } from '../common/constants/ckeditorFlowchart.const';
14
+ import { FlowchartViewMode } from '../common/enums/flowchart-view-mode.enum';
15
+ import * as i0 from "@angular/core";
16
+ let graph;
17
+ let paper;
18
+ let toolbarConfig;
19
+ const bpmn2 = joint.shapes.bpmn2;
20
+ export class BpmnService {
21
+ constructor() {
22
+ this.isSaveAsTemplate = false;
23
+ this.isDeleteTemplate = false;
24
+ this.isDisableToolbar = false;
25
+ this.isTemp = true;
26
+ this.jsonTempContent = '';
27
+ this.isReset = false;
28
+ this.isSelectedTemplate = false;
29
+ this.jsonOriginalContent = '';
30
+ }
31
+ buildDiagram(diagramTemplates, diagramTemplate, bpmnTheme, jsonContent, editMode, LANG) {
32
+ window[`IS_NOT_SHOW_AGAIN`] = false;
33
+ window[FlowChartConst.EDIT_MODE] = editMode;
34
+ joint.setTheme(bpmnTheme);
35
+ if (jsonContent) {
36
+ jsonContent = JSON.parse(jsonContent);
37
+ }
38
+ else {
39
+ jsonContent = '';
40
+ }
41
+ const gdAuth = window[`gdAuth`];
42
+ const gdLoad = window[`gdLoad`];
43
+ const gdSave = window[`gdSave`];
44
+ const inputs = InspectorFunction.getInspectorConfiguration(bpmn2, LANG);
45
+ let freeTransform = null;
46
+ toolbarConfig = ToolbarFunction.getToolbarConfiguration(LANG);
47
+ /* QMS-1404: Customization: Add template list */
48
+ if (toolbarConfig.tools && diagramTemplates) {
49
+ const arrSelect = toolbarConfig.tools.filter((item) => {
50
+ return item.type === 'select-box';
51
+ });
52
+ if (arrSelect) {
53
+ diagramTemplates.forEach((item) => {
54
+ const option = {
55
+ index: item.index,
56
+ content: item.templateName,
57
+ flowChartId: item.id,
58
+ name: item.templateName,
59
+ jsonContent: item.jsonContent,
60
+ selected: false
61
+ };
62
+ const index = arrSelect[0].options.findIndex((x) => {
63
+ return x.index === option.index;
64
+ });
65
+ if (index < 0) {
66
+ arrSelect[0].options.push(option);
67
+ }
68
+ });
69
+ }
70
+ }
71
+ graph = new joint.dia.Graph({ type: 'bpmn' });
72
+ const commandManager = new joint.dia.CommandManager({ graph });
73
+ const keyboard = new joint.ui.Keyboard();
74
+ const clipboard = new joint.ui.Clipboard();
75
+ paper = new joint.dia.Paper({
76
+ width: 800,
77
+ height: 600,
78
+ model: graph,
79
+ gridSize: 10,
80
+ drawGrid: true,
81
+ async: true,
82
+ sorting: joint.dia.Paper.sorting.APPROX,
83
+ interactive: { linkMove: false },
84
+ snapLabels: true,
85
+ // Connections
86
+ defaultLink(elementView) {
87
+ return new bpmn2.Flow({
88
+ z: elementView.model.get('z') - 1,
89
+ attrs: {
90
+ line: {
91
+ flowType: 'sequence'
92
+ }
93
+ }
94
+ });
95
+ },
96
+ validateConnection(cellViewS, magnetS, cellViewT, magnetT, end) {
97
+ const source = cellViewS.model;
98
+ const target = cellViewT.model;
99
+ // don't allow loop links
100
+ if (source === target) {
101
+ return false;
102
+ }
103
+ // don't allow link to link connection
104
+ if (source.isLink()) {
105
+ return false;
106
+ }
107
+ if (target.isLink()) {
108
+ return false;
109
+ }
110
+ // don't allow group connections
111
+ const sourceType = source.get('type');
112
+ const targetType = target.get('type');
113
+ if (sourceType === 'bpmn2.Group' || targetType === 'bpmn2.Group') {
114
+ return false;
115
+ }
116
+ return true;
117
+ },
118
+ defaultAnchor: {
119
+ name: 'perpendicular'
120
+ },
121
+ defaultConnectionPoint: {
122
+ name: 'boundary',
123
+ args: { stroke: true }
124
+ },
125
+ // Embedding
126
+ embeddingMode: true,
127
+ frontParentOnly: false,
128
+ validateEmbedding(childView, parentView) {
129
+ const parentType = parentView.model.get('type');
130
+ const childType = childView.model.get('type');
131
+ if (parentType === 'bpmn2.HeaderedPool' && childType !== 'bpmn2.HeaderedPool') {
132
+ return true;
133
+ }
134
+ if (parentType === 'bpmn2.Activity' && childType === 'bpmn2.Event') {
135
+ return true;
136
+ }
137
+ return false;
138
+ },
139
+ // Highlighting
140
+ highlighting: {
141
+ default: {
142
+ name: 'mask',
143
+ options: {
144
+ attrs: {
145
+ stroke: '#3498db',
146
+ 'stroke-width': 3,
147
+ 'stroke-linejoin': 'round'
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }).on({
153
+ 'blank:pointerdown': (evt, x, y) => {
154
+ closeTools();
155
+ // selection.startSelecting(evt, x, y);
156
+ if (keyboard.isActive('shift', evt)) {
157
+ selection.startSelecting(evt, x, y);
158
+ }
159
+ else {
160
+ selection.cancelSelection();
161
+ paperScroller.startPanning(evt, x, y);
162
+ }
163
+ },
164
+ 'blank:contextmenu': (evt, x, y) => {
165
+ paperScroller.startPanning(evt, x, y);
166
+ },
167
+ 'cell:pointerup': (cellView) => {
168
+ openTools(cellView);
169
+ },
170
+ 'link:mouseenter': (linkView) => {
171
+ // Open tool only if there is none yet
172
+ if (linkView.hasTools()) {
173
+ return;
174
+ }
175
+ const ns = joint.linkTools;
176
+ const toolsView = new joint.dia.ToolsView({
177
+ name: 'link-hover',
178
+ tools: [
179
+ new ns.Vertices({ vertexAdding: false }),
180
+ new ns.SourceArrowhead(),
181
+ new ns.TargetArrowhead()
182
+ ]
183
+ });
184
+ linkView.addTools(toolsView);
185
+ },
186
+ 'link:mouseleave': (linkView) => {
187
+ // Remove only the hover tool, not the pointerdown tool
188
+ if (linkView.hasTools('link-hover')) {
189
+ linkView.removeTools();
190
+ }
191
+ },
192
+ 'link:connect': (linkView) => {
193
+ // Change the link type based on the connected elements
194
+ const link = linkView.model;
195
+ const source = link.getSourceCell();
196
+ const target = link.getTargetCell();
197
+ if (!source || !target) {
198
+ return;
199
+ }
200
+ link.set('z', -1);
201
+ const types = [source.get('type'), target.get('type')];
202
+ const linkType = link.get('type');
203
+ if (types.indexOf('bpmn2.Annotation') > -1) {
204
+ if (linkType === 'bpmn2.AnnotationLink') {
205
+ return;
206
+ }
207
+ replaceLink(graph, link, bpmn2.AnnotationLink);
208
+ return;
209
+ }
210
+ if (types.indexOf('bpmn2.Conversation') > -1) {
211
+ if (linkType === 'bpmn2.ConversationLink') {
212
+ return;
213
+ }
214
+ replaceLink(graph, link, bpmn2.ConversationLink);
215
+ return;
216
+ }
217
+ if (types.indexOf('bpmn2.DataObject') > -1) {
218
+ if (linkType === 'bpmn2.DataAssociation') {
219
+ return;
220
+ }
221
+ replaceLink(graph, link, bpmn2.DataAssociation);
222
+ return;
223
+ }
224
+ if (types.indexOf('bpmn2.DataStore') > -1) {
225
+ if (linkType === 'bpmn2.DataAssociation') {
226
+ return;
227
+ }
228
+ replaceLink(graph, link, bpmn2.DataAssociation);
229
+ return;
230
+ }
231
+ if (linkType !== 'bpmn2.Flow') {
232
+ replaceLink(graph, link, bpmn2.Flow);
233
+ }
234
+ }
235
+ });
236
+ const snaplines = new joint.ui.Snaplines({ paper });
237
+ const paperScroller = new joint.ui.PaperScroller({
238
+ autoResizePaper: true,
239
+ padding: 20,
240
+ paper,
241
+ scrollWhileDragging: true
242
+ });
243
+ paperScroller.$el.appendTo('#paper-container');
244
+ paperScroller.setCursor('grab');
245
+ paperScroller.render().center();
246
+ paper.on('blank:mousewheel', _.partial(onMousewheel, null), this);
247
+ paper.on('cell:mousewheel', onMousewheel, this);
248
+ function onMousewheel(cellView, evt, x, y, delta) {
249
+ paperScroller.zoom(delta * 0.1, { min: 0.2, max: 5, grid: 0.1, ox: x, oy: y });
250
+ }
251
+ /* SELECTION */
252
+ const selection = new joint.ui.Selection({
253
+ paper,
254
+ graph,
255
+ useModelGeometry: true,
256
+ filter: ['bpmn2.HeaderedPool'] // don't allow to select a pool
257
+ });
258
+ /* STENCIL */
259
+ const stencil = new joint.ui.Stencil({
260
+ graph,
261
+ paper,
262
+ width: '100%',
263
+ height: '100%',
264
+ dragEndClone(cell) {
265
+ const clone = cell.clone();
266
+ const type = clone.get('type');
267
+ // some types of the elements need resizing after they are dropped
268
+ const sizeMultiplier = { 'bpmn2.HeaderedPool': 8, 'bpmn.Choreography': 2 }[type];
269
+ if (sizeMultiplier) {
270
+ const originalSize = clone.get('size');
271
+ clone.set('size', {
272
+ width: originalSize.width * sizeMultiplier,
273
+ height: originalSize.height * sizeMultiplier
274
+ });
275
+ if (type === 'bpmn2.HeaderedPool') {
276
+ clone.set('padding', { top: 0, left: 30, right: 0, bottom: 0 });
277
+ }
278
+ }
279
+ return clone;
280
+ }
281
+ });
282
+ stencil.render().$el.appendTo('#stencil-container');
283
+ stencil.load([
284
+ new bpmn2.Activity({
285
+ attrs: {
286
+ label: {
287
+ stroke: 'white',
288
+ strokeWidth: 2,
289
+ paintOrder: 'stroke'
290
+ }
291
+ }
292
+ }),
293
+ new bpmn2.Gateway({
294
+ attrs: {
295
+ label: {
296
+ stroke: 'white',
297
+ strokeWidth: 2,
298
+ paintOrder: 'stroke'
299
+ }
300
+ }
301
+ }),
302
+ new bpmn2.Event({
303
+ attrs: {
304
+ label: {
305
+ stroke: 'white',
306
+ strokeWidth: 2,
307
+ paintOrder: 'stroke'
308
+ }
309
+ }
310
+ }),
311
+ new bpmn2.Conversation({
312
+ attrs: {
313
+ label: {
314
+ stroke: 'white',
315
+ strokeWidth: 2,
316
+ paintOrder: 'stroke'
317
+ }
318
+ }
319
+ }),
320
+ new bpmn2.DataObject({
321
+ attrs: {
322
+ label: {
323
+ stroke: 'white',
324
+ strokeWidth: 2,
325
+ paintOrder: 'stroke'
326
+ }
327
+ }
328
+ }),
329
+ new bpmn2.DataStore({
330
+ attrs: {
331
+ label: {
332
+ stroke: 'white',
333
+ strokeWidth: 2,
334
+ paintOrder: 'stroke'
335
+ }
336
+ }
337
+ }),
338
+ new bpmn2.Annotation({
339
+ attrs: {
340
+ body: {
341
+ fill: '#ffffff'
342
+ },
343
+ label: {
344
+ stroke: 'white',
345
+ strokeWidth: 2,
346
+ paintOrder: 'stroke'
347
+ }
348
+ }
349
+ }),
350
+ new bpmn2.Group({
351
+ size: {
352
+ width: 80,
353
+ height: 80
354
+ },
355
+ attrs: {
356
+ label: {
357
+ text: 'Group',
358
+ stroke: 'white',
359
+ strokeWidth: 2,
360
+ paintOrder: 'stroke'
361
+ }
362
+ }
363
+ }),
364
+ // Legacy BPMN Shapes
365
+ new bpmn2.HeaderedPool({
366
+ padding: { top: 0, left: 15, right: 0, bottom: 0 },
367
+ size: { width: 80, height: 50 },
368
+ lanes: [{ label: 'Lane 1' }, { label: 'Lane 2' }],
369
+ attrs: {
370
+ body: { fill: '#FFFFFF' },
371
+ headerLabel: { text: 'Header' }
372
+ }
373
+ }),
374
+ new joint.shapes.bpmn.Choreography({
375
+ participants: ['Participant 1', 'Participant 2'],
376
+ attrs: {
377
+ label: {
378
+ stroke: 'white',
379
+ strokeWidth: 2,
380
+ paintOrder: 'stroke'
381
+ }
382
+ }
383
+ }),
384
+ new joint.shapes.bpmn.Message({
385
+ attrs: {
386
+ text: {
387
+ stroke: 'white',
388
+ strokeWidth: 2,
389
+ paintOrder: 'stroke'
390
+ }
391
+ }
392
+ })
393
+ ]);
394
+ joint.layout.GridLayout.layout(stencil.getGraph(), {
395
+ columns: 100,
396
+ columnWidth: 'compact',
397
+ marginX: 20,
398
+ marginY: 20,
399
+ columnGap: 40,
400
+ verticalGap: 20,
401
+ resizeToFit: false
402
+ });
403
+ // Create tooltips for all the shapes in stencil.
404
+ stencil.on('element:drop', (elementView) => {
405
+ // open inspector after a new element dropped from stencil
406
+ openTools(elementView);
407
+ });
408
+ /* KEYBOARD */
409
+ if (editMode === FlowchartViewMode.Edit) {
410
+ initializeKeyboardShortcuts();
411
+ }
412
+ function initializeKeyboardShortcuts() {
413
+ keyboard.on({
414
+ 'ctrl+c': () => {
415
+ // Copy all selected elements and their associated links.
416
+ clipboard.copyElements(selection.collection, graph);
417
+ },
418
+ 'ctrl+v': () => {
419
+ const pastedCells = clipboard.pasteCells(graph, {
420
+ translate: { dx: 20, dy: 20 },
421
+ useLocalStorage: true
422
+ });
423
+ const elements = _.filter(pastedCells, (cell) => {
424
+ return cell.isElement();
425
+ });
426
+ // Make sure pasted elements get selected immediately. This makes the UX better as
427
+ // the user can immediately manipulate the pasted elements.
428
+ selection.collection.reset(elements);
429
+ },
430
+ 'ctrl+x shift+delete': () => {
431
+ clipboard.cutElements(selection.collection, graph);
432
+ },
433
+ 'delete backspace': (evt) => {
434
+ evt.preventDefault();
435
+ graph.removeCells(selection.collection.toArray());
436
+ },
437
+ 'ctrl+z': () => {
438
+ commandManager.undo();
439
+ selection.cancelSelection();
440
+ },
441
+ 'ctrl+y': () => {
442
+ commandManager.redo();
443
+ selection.cancelSelection();
444
+ },
445
+ 'ctrl+a': () => {
446
+ selection.collection.reset(graph.getElements());
447
+ },
448
+ 'ctrl+plus': (evt) => {
449
+ evt.preventDefault();
450
+ paperScroller.zoom(0.2, { max: 5, grid: 0.2 });
451
+ },
452
+ 'ctrl+minus': (evt) => {
453
+ evt.preventDefault();
454
+ paperScroller.zoom(-0.2, { min: 0.2, grid: 0.2 });
455
+ },
456
+ 'keydown:shift': (evt) => {
457
+ paperScroller.setCursor('crosshair');
458
+ },
459
+ 'keyup:shift': () => {
460
+ paperScroller.setCursor('grab');
461
+ }
462
+ }, this);
463
+ }
464
+ function openTools(cellView) {
465
+ if (!cellView) {
466
+ return;
467
+ }
468
+ closeTools();
469
+ window[`my_cellView`] = cellView;
470
+ const cell = cellView.model;
471
+ const type = cell.get('type');
472
+ // const tablName = window[FlowChartConst.TAB_NAME];
473
+ // if (tablName === FlowChartConst.TAB_BPMN_CHOREOGRAPHY) {
474
+ // const inspector = joint.ui.Inspector.create('#inspector-container', {
475
+ // cell,
476
+ // inputs: inputs[type],
477
+ // groups: {
478
+ // general: { label: type, index: 1 },
479
+ // defaults: { index: 2 },
480
+ // fontsize: { index: 3 },
481
+ // appearance: { index: 4 }
482
+ // }
483
+ // });
484
+ // }
485
+ const inspector = joint.ui.Inspector.create('#inspector-container', {
486
+ cell,
487
+ inputs: inputs[type],
488
+ groups: {
489
+ general: { label: type, index: 1 },
490
+ defaults: { index: 2 },
491
+ fontsize: { index: 3 },
492
+ appearance: { index: 4 }
493
+ }
494
+ });
495
+ selection.collection.reset([]);
496
+ // Add the cell into the selection collection silently
497
+ // so no selection box is rendered above the cellView.
498
+ selection.collection.add(cell, { silent: true });
499
+ if (cell.isElement()) {
500
+ let minSize;
501
+ if (cell instanceof bpmn2.HeaderedPool) {
502
+ minSize = cell.getMinimalSize();
503
+ }
504
+ else {
505
+ minSize = { width: 30, height: 30 };
506
+ }
507
+ freeTransform = new joint.ui.FreeTransform({
508
+ cellView,
509
+ allowOrthogonalResize: false,
510
+ allowRotation: false,
511
+ minWidth: minSize.width,
512
+ minHeight: minSize.height
513
+ }).render();
514
+ const halo = new joint.ui.Halo({
515
+ cellView,
516
+ theme: 'default',
517
+ type: 'toolbar',
518
+ useModelGeometry: true,
519
+ boxContent: (cellView) => {
520
+ return cellView.model.get('type');
521
+ }
522
+ });
523
+ if (type === 'bpmn2.HeaderedPool') {
524
+ halo.removeHandle('link');
525
+ halo.removeHandle('fork');
526
+ halo.removeHandle('unlink');
527
+ }
528
+ halo.render();
529
+ }
530
+ if (cell.isLink()) {
531
+ const ns = joint.linkTools;
532
+ const toolsView = new joint.dia.ToolsView({
533
+ name: 'link-pointerdown',
534
+ tools: [
535
+ new ns.Vertices(),
536
+ new ns.SourceAnchor(),
537
+ new ns.TargetAnchor(),
538
+ new ns.SourceArrowhead(),
539
+ new ns.TargetArrowhead(),
540
+ new ns.Segments(),
541
+ new ns.Boundary({ padding: 15 }),
542
+ new ns.Remove({ offset: -20, distance: 40 })
543
+ ]
544
+ });
545
+ cellView.addTools(toolsView);
546
+ }
547
+ /* QMS-2364: show link and poiter change to hand */
548
+ // if (window[`event`][`type`] === 'mouseover' && editMode === FlowchartViewMode.View) {
549
+ // const list = document.getElementsByClassName(`joint-element`);
550
+ // if (list && list.length > 0) {
551
+ // const shapeId = cellView.model.attributes.id;
552
+ // // tslint:disable-next-line:prefer-for-of
553
+ // for (let i = 0; i < list.length; i++) {
554
+ // if (list[i].attributes[0].nodeValue !== shapeId) {
555
+ // list[i][`style`].cursor = 'move';
556
+ // continue;
557
+ // }
558
+ // const shapeDetailModel = window[`SHAPE_DETAIL_MODEL`];
559
+ // if (!shapeDetailModel) {
560
+ // list[i][`style`].cursor = 'move';
561
+ // continue;
562
+ // }
563
+ // const index = shapeDetailModel.findIndex((x) => {
564
+ // return x.shapeId === shapeId;
565
+ // });
566
+ // if (index < 0) {
567
+ // list[i][`style`].cursor = 'move';
568
+ // continue;
569
+ // }
570
+ // const shapeDetail = shapeDetailModel[index];
571
+ // let connectionName = '';
572
+ // if (shapeDetail.connectionTypeId === ShapeFlowChartConnectionType.Activity) {
573
+ // list[i][`style`].cursor = 'move';
574
+ // connectionName = translate.instant('PROCESS.LINK_TO_ACTIVITY');
575
+ // } else if (shapeDetail.connectionTypeId === ShapeFlowChartConnectionType.Link) {
576
+ // connectionName = translate.instant('PROCESS.LINK');
577
+ // } else if (shapeDetail.connectionTypeId === ShapeFlowChartConnectionType.DocumentOrProcess) {
578
+ // // eslint-disable-next-line default-case
579
+ // switch (shapeDetail.documentModel.relatedItems[0].itemType) {
580
+ // case RelatedItemType.document:
581
+ // connectionName = translate.instant('PROCESS.LINK_TO_DOCUMENT');
582
+ // break;
583
+ // case RelatedItemType.process:
584
+ // connectionName = translate.instant('PROCESS.LINK_TO_PROCESS');
585
+ // break;
586
+ // case RelatedItemType.area:
587
+ // connectionName = translate.instant('PROCESS.LINK_TO_AREA');
588
+ // break;
589
+ // case RelatedItemType.handbook:
590
+ // connectionName = translate.instant('PROCESS.LINK_TO_FOLDER');
591
+ // break;
592
+ // }
593
+ // }
594
+ // if (shapeDetail.connectionTypeId !== ShapeFlowChartConnectionType.Activity) {
595
+ // list[i][`style`].cursor = 'pointer';
596
+ // }
597
+ // const halo = new joint.ui.Halo({
598
+ // cellView,
599
+ // theme: 'default',
600
+ // boxContent: connectionName
601
+ // });
602
+ // halo.render();
603
+ // halo.removeHandle('remove');
604
+ // halo.removeHandle('resize');
605
+ // halo.removeHandle('clone');
606
+ // halo.removeHandle('link');
607
+ // halo.removeHandle('fork');
608
+ // halo.removeHandle('unlink');
609
+ // halo.removeHandle('rotate');
610
+ // }
611
+ // }
612
+ // const shapeElement = document.getElementsByClassName('no-rotation');
613
+ // if (shapeElement && shapeElement.length > 0) {
614
+ // for (let i = 0; i < shapeElement.length; i++) {
615
+ // if (!shapeElement[i].classList.contains('joint-free-transform')) {
616
+ // shapeElement[i].classList.add('joint-free-transform');
617
+ // }
618
+ // }
619
+ // }
620
+ // } else if (window[`event`][`type`] === 'mouseout' && editMode === FlowchartViewMode.View) {
621
+ // const halo = new joint.ui.Halo({
622
+ // cellView,
623
+ // theme: 'default',
624
+ // boxContent: ''
625
+ // });
626
+ // halo.render();
627
+ // halo.removeHandle('remove');
628
+ // halo.removeHandle('resize');
629
+ // halo.removeHandle('clone');
630
+ // halo.removeHandle('link');
631
+ // halo.removeHandle('fork');
632
+ // halo.removeHandle('unlink');
633
+ // halo.removeHandle('rotate');
634
+ // const shapeElement = document.getElementsByClassName('no-rotation');
635
+ // if (shapeElement && shapeElement.length > 0) {
636
+ // for (let i = 0; i < shapeElement.length; i++) {
637
+ // shapeElement[i].classList.remove('joint-free-transform');
638
+ // }
639
+ // }
640
+ // } else {
641
+ // /* QMS-2125: Show process connect type */
642
+ // window[FlowChartConst.IS_SHOW_CONNECTYPE] = true;
643
+ // window[FlowChartConst.SELECTED_SHAPE_ID] = cellView.model.attributes.id;
644
+ // window[FlowChartConst.SHAPE_TYPE] = cellView.model.attributes.type;
645
+ // window[FlowChartConst.SHAPE_FLOWCHART_LOADING] = true;
646
+ // }
647
+ /* QMS-2125: Show process connect type */
648
+ window[FlowChartConst.IS_SHOW_CONNECTYPE] = true;
649
+ window[FlowChartConst.SELECTED_SHAPE_ID] = cellView.model.attributes.id;
650
+ window[FlowChartConst.SHAPE_TYPE] = cellView.model.attributes.type;
651
+ window[FlowChartConst.SHAPE_FLOWCHART_LOADING] = true;
652
+ /* QMS-1404: Customization */
653
+ window[FlowChartConst.PAPER] = paper;
654
+ }
655
+ function closeTools() {
656
+ paper.removeTools();
657
+ joint.ui.Inspector.close();
658
+ joint.ui.FreeTransform.clear(paper);
659
+ freeTransform = null;
660
+ joint.ui.Halo.clear(paper);
661
+ }
662
+ function showStatus(message, type) {
663
+ $('.status').removeClass('info error success').addClass(type).html(message);
664
+ $('#statusbar-container')
665
+ .dequeue()
666
+ .addClass('active')
667
+ .delay(3000)
668
+ .queue(() => {
669
+ $(this).removeClass('active');
670
+ });
671
+ }
672
+ function replaceLink(graph, link, linkConstructor) {
673
+ // eslint-disable-next-line new-cap
674
+ const link2 = new linkConstructor({
675
+ source: link.source(),
676
+ target: link.target(),
677
+ vertices: link.vertices()
678
+ });
679
+ link.remove();
680
+ link2.set('z', -1);
681
+ link2.addTo(graph);
682
+ }
683
+ graph.on('change', (cell, opt) => {
684
+ this.onChangeTextInside(cell);
685
+ this.onChangeLinkLabel(cell, 12);
686
+ this.onChangeAlligment(cell, opt);
687
+ if (!opt.inspector || !freeTransform || cell.get('type') !== 'bpmn2.HeaderedPool') {
688
+ return;
689
+ }
690
+ const minSize = cell.getMinimalSize();
691
+ freeTransform.options.minWidth = minSize.width;
692
+ freeTransform.options.minHeight = minSize.height;
693
+ });
694
+ /* TOOLBAR */
695
+ const toolbar = new joint.ui.Toolbar({
696
+ tools: toolbarConfig.tools,
697
+ references: {
698
+ paperScroller,
699
+ commandManager
700
+ }
701
+ });
702
+ const toolbarCommands = {
703
+ toJSON: () => {
704
+ const windowFeatures = 'menubar=no,location=no,resizable=yes,scrollbars=yes,status=no';
705
+ const windowName = _.uniqueId('json_output');
706
+ const jsonWindow = window.open('', windowName, windowFeatures);
707
+ jsonWindow.document.write(JSON.stringify(graph.toJSON()));
708
+ },
709
+ loadGraph: () => {
710
+ gdAuth(() => {
711
+ showStatus('loading..', 'info');
712
+ gdLoad((name, content) => {
713
+ try {
714
+ const json = JSON.parse(content);
715
+ graph.fromJSON(json);
716
+ const elFileName = document.getElementById('fileName');
717
+ elFileName.value = name.replace(/.json$/, '');
718
+ showStatus('loaded.', 'success');
719
+ }
720
+ catch (e) {
721
+ showStatus('failed.', 'error');
722
+ }
723
+ });
724
+ }, true);
725
+ },
726
+ saveGraph: () => {
727
+ gdAuth(() => {
728
+ showStatus('saving..', 'info');
729
+ // let name = document.getElementById('fileName').value;
730
+ const name = document.getElementById('fileName');
731
+ gdSave(name.value, JSON.stringify(graph.toJSON()), (file) => {
732
+ if (file) {
733
+ showStatus('saved.', 'success');
734
+ }
735
+ else {
736
+ showStatus('failed.', 'error');
737
+ }
738
+ });
739
+ }, true);
740
+ },
741
+ onSelected: (event) => {
742
+ if (event.jsonContent) {
743
+ window[FlowChartConst.SELECTED_FLOWCHART_ID] = event.flowChartId;
744
+ window[FlowChartConst.SELECTED_JSON_CONTENT] = event.jsonContent;
745
+ window[FlowChartConst.IS_SELECTED_TEMPLATE] = true;
746
+ this.jsonOriginalContent = JSON.stringify(graph.toJSON());
747
+ window[FlowChartConst.ORG_JSONCONTENT] = this.jsonOriginalContent;
748
+ window.postMessage(FlowChartConst.CHANGING_TEMPLATE, this.getOriginForSelf());
749
+ }
750
+ },
751
+ onDeleteTemplate: () => {
752
+ this.isSelectedTemplate = window[FlowChartConst.IS_SELECTED_TEMPLATE];
753
+ if (this.isSelectedTemplate) {
754
+ window.postMessage(FlowChartConst.DELETE_TEMPLATE, this.getOriginForSelf());
755
+ }
756
+ else {
757
+ window.postMessage(FlowChartConst.MUST_SELECT_TEMPLATE, this.getOriginForSelf());
758
+ }
759
+ },
760
+ onSaveAsTemplate: () => {
761
+ window.postMessage(FlowChartConst.SAVE_AS_TEMPLATE, this.getOriginForSelf());
762
+ },
763
+ onResetToTempTemplate: () => {
764
+ this.isSelectedTemplate = window[FlowChartConst.IS_SELECTED_TEMPLATE];
765
+ if (this.isSelectedTemplate) {
766
+ window.postMessage(FlowChartConst.RESET_TEMPLATE, this.getOriginForSelf());
767
+ }
768
+ },
769
+ changeSnapLines(checked) {
770
+ if (checked) {
771
+ snaplines.startListening();
772
+ stencil.options.snaplines = this.snaplines;
773
+ }
774
+ else {
775
+ snaplines.stopListening();
776
+ stencil.options.snaplines = null;
777
+ }
778
+ },
779
+ applyOnSelection(method) {
780
+ graph.startBatch('selection');
781
+ selection.collection.models.forEach((model) => {
782
+ model[method]();
783
+ });
784
+ graph.stopBatch('selection');
785
+ }
786
+ };
787
+ toolbar.on({
788
+ 'tojson:pointerclick': toolbarCommands.toJSON,
789
+ 'load:pointerclick': toolbarCommands.loadGraph,
790
+ 'save:pointerclick': toolbarCommands.saveGraph,
791
+ 'clear:pointerclick': _.bind(graph.clear, graph),
792
+ 'print:pointerclick': _.bind(paper.print, paper),
793
+ 'saveAsTemplate:pointerclick': toolbarCommands.onSaveAsTemplate,
794
+ 'selectTemplate:option:select': toolbarCommands.onSelected,
795
+ 'deleteTemplate:pointerclick': toolbarCommands.onDeleteTemplate,
796
+ 'resetToTempTemplate:pointerclick': toolbarCommands.onResetToTempTemplate,
797
+ 'to-front:pointerclick': toolbarCommands.applyOnSelection.bind(this, 'toFront'),
798
+ 'to-back:pointerclick': toolbarCommands.applyOnSelection.bind(this, 'toBack'),
799
+ 'snapline:change': toolbarCommands.changeSnapLines.bind(this),
800
+ 'grid-size:change': paper.setGridSize.bind(paper)
801
+ });
802
+ toolbar.render().$el.appendTo('#toolbar-container');
803
+ // const zoomTool = new joint.ui.Toolbar({
804
+ // // initi alize tools with default settings
805
+ // tools: ['zoomToFit', 'zoomIn', 'zoomOut'],
806
+ // references: {
807
+ // paperScroller,
808
+ // commandManager
809
+ // }
810
+ // });
811
+ // zoomTool.render().$el.appendTo('#zoomToolbar');
812
+ new joint.ui.Tooltip({
813
+ target: '[data-tooltip]',
814
+ content(el) {
815
+ return el.dataset.tooltip;
816
+ },
817
+ top: '.joint-toolbar',
818
+ padding: 10,
819
+ direction: 'top'
820
+ });
821
+ // Create tooltips for all the shapes in stencil.
822
+ stencil
823
+ .getGraph()
824
+ .get('cells')
825
+ .each((cell) => {
826
+ new joint.ui.Tooltip({
827
+ target: `.joint-stencil [model-id="${cell.id}"]`,
828
+ content: cell.get('type').split('.')[1],
829
+ bottom: '.joint-stencil',
830
+ direction: 'bottom',
831
+ padding: 0
832
+ });
833
+ });
834
+ Object.assign(joint.shapes.bpmn.icons, this.buildNewIcons());
835
+ /* Load process digram */
836
+ this.loadProcessDiagram(jsonContent);
837
+ this.jsonOriginalContent = JSON.stringify(graph.toJSON());
838
+ paperScroller.positionContent('top-left', { padding: 50, useModelGeometry: true });
839
+ /* Set g raph object */
840
+ window[FlowChartConst.GRAPH] = graph;
841
+ window[FlowChartConst.PAPER] = paper;
842
+ window[FlowChartConst.PAPER_SCROLLER] = paperScroller;
843
+ window[FlowChartConst.ORG_JSONCONTENT] = this.jsonOriginalContent;
844
+ window.postMessage(FlowChartConst.DIAGRAM_LOADED, this.getOriginForSelf());
845
+ }
846
+ buildNewIcons({ color = '#000' } = {}) {
847
+ const svgIcons = {
848
+ message1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="12 12 16 16"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2" d="M12.5 15.313v9.374h15v-9.375zm0 0l7.5 5.624 7.5-5.625"/></svg>`,
849
+ message2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="12 12 16 16"><path fill="${color}" d="M12.5 14.344l7.5 5.625 7.5-5.625zm0 .937v9.375h15v-9.375L20 20.906z"/></svg>`,
850
+ timer1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><g fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><circle cx="20" cy="20" r="10"/><path d="M20 10v3m5-2l-1.5 3m5.5 1l-3 1.5m4 3.5h-3m2 5l-3-1.5M25 29l-1.5-3M20 30v-3m-5 2l1.5-3M11 25l3-1.5M10 20h3m-2-5l3 1.5m1-5.5l1.5 3m5.5-1l-2 7h4"/></g></svg>`,
851
+ conditional1: `<svg xmlns="http://www.w3.org/2000/svg" ><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.563 11.563h16.874v16.874H11.563V11.563m2.813 2.813h11.25m-11.25 3.75h11.25m-11.25 3.75h11.25m-11.25 3.75h11.25z"/></svg>`,
852
+ link1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M14.406 18.125h8.438v-2.813L27.53 20l-4.687 4.688v-2.813h-9.375v-3.75"/></svg>`,
853
+ link2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M14.406 18.125h8.438v-2.813L27.53 20l-4.687 4.688v-2.813h-9.375v-3.75"/></svg>`,
854
+ signal1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.17 24.851h13.706l-6.853-11.879-6.854 11.88z"/></svg>`,
855
+ signal2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.17 24.851h13.706l-6.853-11.879-6.854 11.88z"/></svg>`,
856
+ error1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M26.4 15.455l-3.238 12.58L17.7 18.37 13.76 23.8l3.478-12.412 5.576 8.72 3.586-4.652z"/></svg>`,
857
+ error2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M26.4 15.455l-3.238 12.58L17.7 18.37 13.76 23.8l3.478-12.412 5.576 8.72 3.586-4.652z"/></svg>`,
858
+ escalation1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20 13.219l5.625 14.062L20 20.953l-5.625 6.328z"/></svg>`,
859
+ escalation2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20 13.219l5.625 14.062L20 20.953l-5.625 6.328z"/></svg>`,
860
+ termination1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><circle cx="20" cy="20" r="10.5" fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/></svg>`,
861
+ termination2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><circle cx="20" cy="20" r="10.5" fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/></svg>`,
862
+ compensation1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 13.438v13.124L12.437 20 19 13.437m6.563 0v13.126L19 20l6.563-6.563z"/></svg>`,
863
+ compensation2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 13.438v13.124L12.437 20 19 13.437m6.563 0v13.126L19 20l6.563-6.563z"/></svg>`,
864
+ cancel1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.284 14.274l2.867-2.868 5.735 5.735 5.735-5.735 2.868 2.868-5.735 5.735 5.735 5.735-2.868 2.867-5.735-5.735-5.735 5.735-2.867-2.867 5.735-5.735-5.735-5.735z"/></svg>`,
865
+ cancel2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.284 14.274l2.867-2.868 5.735 5.735 5.735-5.735 2.868 2.868-5.735 5.735 5.735 5.735-2.868 2.867-5.735-5.735-5.735 5.735-2.867-2.867 5.735-5.735-5.735-5.735z"/></svg>`,
866
+ multiple1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M24.52 26.39h-9.443l-2.918-8.982 7.64-5.55 7.64 5.551-2.919 8.98z"/></svg>`,
867
+ multiple2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M24.52 26.39h-9.443l-2.918-8.982 7.64-5.55 7.64 5.551-2.919 8.98z"/></svg>`,
868
+ parallel1: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="none" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.344 17.203v5.625h5.86v6.328h5.624v-6.328h6.328v-5.625h-6.328v-5.86h-5.625v5.86z"/></svg>`,
869
+ parallel2: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="8 8 24 24"><path fill="${color}" stroke="${color}" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.344 17.203v5.625h5.86v6.328h5.624v-6.328h6.328v-5.625h-6.328v-5.86h-5.625v5.86z"/></svg>`
870
+ };
871
+ const icons = {};
872
+ Object.keys(svgIcons).forEach((iconName) => {
873
+ icons[iconName] = `data:image/svg+xml,${encodeURIComponent(svgIcons[iconName])}`;
874
+ });
875
+ return icons;
876
+ }
877
+ loadProcessDiagram(jsonContent) {
878
+ if (!jsonContent) {
879
+ return;
880
+ }
881
+ graph.fromJSON(jsonContent);
882
+ }
883
+ addItemTemplate(flowChartId, diagramTemplate) {
884
+ if (toolbarConfig.tools) {
885
+ const arrSelect = toolbarConfig.tools.filter((item) => {
886
+ return item.type === 'select-box';
887
+ });
888
+ if (arrSelect) {
889
+ const option = {
890
+ index: 1,
891
+ content: diagramTemplate.templateName,
892
+ flowChartId,
893
+ name: diagramTemplate.name,
894
+ jsonContent: diagramTemplate.jsonContent,
895
+ selected: false
896
+ };
897
+ arrSelect[0].options.push(option);
898
+ }
899
+ }
900
+ }
901
+ removeSelectItem(flowChartId) {
902
+ if (toolbarConfig.tools) {
903
+ const arrSelect = toolbarConfig.tools.filter((item) => {
904
+ return item.type === 'select-box';
905
+ });
906
+ if (arrSelect) {
907
+ arrSelect[0].options.splice(arrSelect[0].options.findIndex((i) => {
908
+ return i.flowChartId === flowChartId;
909
+ }), 1);
910
+ }
911
+ }
912
+ }
913
+ getTempGraph() {
914
+ if (this.jsonTempContent) {
915
+ this.loadProcessDiagram(JSON.parse(this.jsonTempContent));
916
+ }
917
+ this.isTemp = true;
918
+ this.isReset = false;
919
+ this.isDisableToolbar = false;
920
+ }
921
+ getOriginForSelf() {
922
+ return '*';
923
+ }
924
+ setDefaultSelectedValue() {
925
+ if (toolbarConfig.tools) {
926
+ const arrSelect = toolbarConfig.tools.filter((item) => {
927
+ return item.type === 'select-box';
928
+ });
929
+ if (arrSelect) {
930
+ arrSelect[0].options[0].selected = true;
931
+ const list = document.getElementsByClassName(`select-box-selection`)[0];
932
+ list.getElementsByClassName(`select-box-option-content`)[0].innerHTML = FlowChartConst.SELECT_TEMPLATE;
933
+ }
934
+ }
935
+ }
936
+ isShowConfirmMessage() {
937
+ const myGraph = window[FlowChartConst.GRAPH];
938
+ const json = myGraph.toJSON();
939
+ if (json.cells.length === 0) {
940
+ window[FlowChartConst.IS_NOT_SHOW_AGAIN] = true;
941
+ return false;
942
+ }
943
+ if (!window[FlowChartConst.IS_NOT_SHOW_AGAIN]) {
944
+ return true;
945
+ }
946
+ return false;
947
+ }
948
+ setTransitionPoint(jsonContent, paperScroller) {
949
+ if (jsonContent) {
950
+ const cells = jsonContent[`cells`];
951
+ if (cells) {
952
+ let x = 0;
953
+ let y = 0;
954
+ cells.forEach((e) => {
955
+ if (e.position && e.position) {
956
+ if (x === 0 && y === 0) {
957
+ x = e.position.x;
958
+ y = e.position.y;
959
+ }
960
+ if (e.position.x < x) {
961
+ x = e.position.x;
962
+ }
963
+ if (e.position.y < y) {
964
+ y = e.position.y;
965
+ }
966
+ }
967
+ });
968
+ if (x !== 0 && y !== 0) {
969
+ x = x > 20 ? x - 20 : x;
970
+ y = y > 20 ? y - 20 : y;
971
+ paperScroller.transitionToPoint(x, y);
972
+ }
973
+ }
974
+ }
975
+ }
976
+ openShapeFunctionality(LANG) {
977
+ const myCellView = window[`my_cellView`];
978
+ const inputs = InspectorFunction.getInspectorConfiguration(bpmn2, LANG);
979
+ const cell = myCellView.model;
980
+ const type = cell.get('type');
981
+ const inspector = joint.ui.Inspector.create('#inspector-container', {
982
+ cell,
983
+ inputs: inputs[type],
984
+ groups: {
985
+ general: { label: type, index: 1 },
986
+ defaults: { index: 2 },
987
+ fontsize: { index: 3 },
988
+ appearance: { index: 4 }
989
+ }
990
+ });
991
+ }
992
+ setZoomToFit(editMode) {
993
+ if (editMode === FlowchartViewMode.View) {
994
+ const paperScroller = window[FlowChartConst.PAPER_SCROLLER];
995
+ paperScroller.zoomToFit({ padding: 20, scaleGrid: 0.2, minScale: 0.2, maxScale: 5 });
996
+ }
997
+ }
998
+ setPaperCenter(editMode) {
999
+ if (editMode === FlowchartViewMode.View) {
1000
+ const paperScroller = window[FlowChartConst.PAPER_SCROLLER];
1001
+ paperScroller.contentToCenter({ padding: 20, scaleGrid: 0.2, minScale: 0.2, maxScale: 5 });
1002
+ }
1003
+ }
1004
+ setPaperTopLeft(editMode) {
1005
+ if (editMode === FlowchartViewMode.View) {
1006
+ const paperScroller = window[FlowChartConst.PAPER_SCROLLER];
1007
+ paperScroller.contentToTopLeft({ padding: 50, scaleGrid: 0.2, minScale: 0.2, maxScale: 5 });
1008
+ }
1009
+ }
1010
+ setScrollToContent() {
1011
+ const graph = window[`graph`];
1012
+ const paperScroller = window[FlowChartConst.PAPER_SCROLLER];
1013
+ if (graph && paperScroller) {
1014
+ const jsonContentObj = graph.toJSON();
1015
+ if (jsonContentObj && jsonContentObj.cells.length > 0) {
1016
+ paperScroller.scrollToContent();
1017
+ }
1018
+ else {
1019
+ paperScroller.center();
1020
+ }
1021
+ }
1022
+ }
1023
+ onChangeTextInside(cell) {
1024
+ if (cell.get('type') === 'bpmn2.Event') {
1025
+ if (cell.attributes.attrs.text.style['text-inside']) {
1026
+ cell.attributes.attrs.label.textVerticalAnchor = 'middle';
1027
+ cell.attributes.attrs.icon.refWidth = '20%';
1028
+ cell.attributes.attrs.icon.refHeight = '20%';
1029
+ }
1030
+ else {
1031
+ cell.attributes.attrs.label.textVerticalAnchor = 'top';
1032
+ cell.attributes.attrs.icon.refWidth = '70%';
1033
+ cell.attributes.attrs.icon.refHeight = '70%';
1034
+ }
1035
+ }
1036
+ else if (cell.get('type') === 'bpmn2.Gateway' ||
1037
+ cell.get('type') === 'bpmn2.Conversation' ||
1038
+ cell.get('type') === 'bpmn2.DataObject' ||
1039
+ cell.get('type') === 'bpmn2.DataStore') {
1040
+ if (cell.attributes.attrs.text.style['text-inside']) {
1041
+ cell.attributes.attrs.label.textVerticalAnchor = 'middle';
1042
+ }
1043
+ else {
1044
+ cell.attributes.attrs.label.textVerticalAnchor = 'top';
1045
+ }
1046
+ }
1047
+ }
1048
+ onChangeLinkLabel(cell, defSize) {
1049
+ if (cell.isLink()) {
1050
+ let size = defSize;
1051
+ let refPos = 0;
1052
+ const linkId = cell.id;
1053
+ // eslint-disable-next-line func-names
1054
+ graph.getLinks().every(function (e) {
1055
+ if (linkId === e.id) {
1056
+ return false;
1057
+ }
1058
+ refPos += 1;
1059
+ return true;
1060
+ });
1061
+ if (graph.getLinks()[refPos].attributes.attrs.text &&
1062
+ graph.getLinks()[refPos].attributes.attrs.text['font-size']) {
1063
+ size = graph.getLinks()[refPos].attributes.attrs.text['font-size'];
1064
+ }
1065
+ graph.getLinks()[refPos].prop('labels/0/attrs/label/fontSize', size);
1066
+ }
1067
+ }
1068
+ onChangeAlligment(cell, opt) {
1069
+ if (cell.get('type') !== 'bpmn2.HeaderedPool') {
1070
+ return;
1071
+ }
1072
+ if (opt.direction &&
1073
+ (opt.direction === 'top-right' ||
1074
+ opt.direction === 'top-right' ||
1075
+ opt.direction === 'bottom-right' ||
1076
+ opt.direction === 'bottom-left')) {
1077
+ const height = cell.attributes.size.height;
1078
+ const headerLabelAnchor = cell.attributes.attrs.headerLabel['text-anchor'];
1079
+ this.setHeaderAttribute(cell, headerLabelAnchor, height);
1080
+ // update last lane value
1081
+ if (!this.isUndefinedSize(cell.attributes)) {
1082
+ const h = cell.attributes.size.height;
1083
+ const t = this.getTotalLaneHeight(cell.attributes);
1084
+ const b = h - t;
1085
+ if (b > 0) {
1086
+ const s = cell.attributes.lanes.slice(-1)[0].size + b;
1087
+ const index = cell.attributes.lanes.length - 1;
1088
+ cell.attributes.lanes[index].size = s;
1089
+ const lane = `lanes_${index}`;
1090
+ cell.metrics.lanes[lane].size = s;
1091
+ cell.metrics.lanes[lane].takenUpSpaceByLaneAndSublanes = s;
1092
+ }
1093
+ else {
1094
+ const s = cell.attributes.lanes.slice(-1)[0].size + b;
1095
+ const index = cell.attributes.lanes.length - 1;
1096
+ cell.attributes.lanes[index].size = s;
1097
+ const lane = `lanes_${index}`;
1098
+ cell.metrics.lanes[lane].size = s;
1099
+ cell.metrics.lanes[lane].takenUpSpaceByLaneAndSublanes = s;
1100
+ }
1101
+ }
1102
+ }
1103
+ else if (opt.propertyPath && opt.propertyPath === 'attrs/headerLabel/text-anchor') {
1104
+ const height = cell.attributes.size.height;
1105
+ const textAnchor = opt.propertyValue;
1106
+ this.setHeaderAttribute(cell, textAnchor, height);
1107
+ }
1108
+ }
1109
+ setHeaderAttribute(cell, textAnchor, height) {
1110
+ switch (textAnchor) {
1111
+ case 'end':
1112
+ cell.attributes.attrs.headerLabel.refY = 8;
1113
+ break;
1114
+ case 'middle':
1115
+ cell.attributes.attrs.headerLabel.refY = height / 2;
1116
+ break;
1117
+ case 'start':
1118
+ cell.attributes.attrs.headerLabel.refY = height - 8;
1119
+ break;
1120
+ default:
1121
+ cell.attributes.attrs.headerLabel.refY = height / 2;
1122
+ break;
1123
+ }
1124
+ }
1125
+ isUndefinedSize(attributes) {
1126
+ let bResult = false;
1127
+ if (attributes && attributes.lanes.length > 0) {
1128
+ attributes.lanes.every((e) => {
1129
+ if (!e.size) {
1130
+ bResult = true;
1131
+ return false;
1132
+ }
1133
+ return true;
1134
+ });
1135
+ }
1136
+ return bResult;
1137
+ }
1138
+ getTotalLaneHeight(attributes) {
1139
+ let total = 0;
1140
+ if (attributes && attributes.lanes.length > 0) {
1141
+ attributes.lanes.forEach((e) => {
1142
+ if (e.size) {
1143
+ total += e.size;
1144
+ }
1145
+ });
1146
+ }
1147
+ return total;
1148
+ }
1149
+ }
1150
+ BpmnService.ɵprov = i0.ɵɵdefineInjectable({ factory: function BpmnService_Factory() { return new BpmnService(); }, token: BpmnService, providedIn: "root" });
1151
+ BpmnService.decorators = [
1152
+ { type: Injectable, args: [{
1153
+ providedIn: 'root'
1154
+ },] }
1155
+ ];
1156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFLN0UsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUlqQyxNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQix3QkFBbUIsR0FBRyxFQUFFLENBQUM7S0Ewc0NqQztJQXhzQ0MsWUFBWSxDQUNWLGdCQUFxQixFQUNyQixlQUFvQixFQUNwQixTQUFpQixFQUNqQixXQUFnQixFQUNoQixRQUFhLEVBQ2IsSUFBUztRQUVULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUM1QyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFCLElBQUksV0FBVyxFQUFFO1lBQ2YsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNMLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDbEI7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGFBQWEsR0FBRyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsZ0RBQWdEO1FBQ2hELElBQUksYUFBYSxDQUFDLEtBQUssSUFBSSxnQkFBZ0IsRUFBRTtZQUMzQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2hDLE1BQU0sTUFBTSxHQUFHO3dCQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO3dCQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWTt3QkFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUM3QixRQUFRLEVBQUUsS0FBSztxQkFDaEIsQ0FBQztvQkFDRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNqRCxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDbEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNuQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFM0MsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDMUIsS0FBSyxFQUFFLEdBQUc7WUFDVixNQUFNLEVBQUUsR0FBRztZQUNYLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsSUFBSTtZQUNkLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ3ZDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDaEMsVUFBVSxFQUFFLElBQUk7WUFDaEIsY0FBYztZQUNkLFdBQVcsQ0FBQyxXQUFXO2dCQUNyQixPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDcEIsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQ2pDLEtBQUssRUFBRTt3QkFDTCxJQUFJLEVBQUU7NEJBQ0osUUFBUSxFQUFFLFVBQVU7eUJBQ3JCO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRztnQkFDNUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDL0IseUJBQXlCO2dCQUN6QixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7b0JBQ3JCLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELHNDQUFzQztnQkFDdEMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ25CLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNuQixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxnQ0FBZ0M7Z0JBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksVUFBVSxLQUFLLGFBQWEsSUFBSSxVQUFVLEtBQUssYUFBYSxFQUFFO29CQUNoRSxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsSUFBSSxFQUFFLGVBQWU7YUFDdEI7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7YUFDdkI7WUFDRCxZQUFZO1lBQ1osYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLEtBQUs7WUFDdEIsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxVQUFVLEtBQUssb0JBQW9CLElBQUksU0FBUyxLQUFLLG9CQUFvQixFQUFFO29CQUM3RSxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxJQUFJLFVBQVUsS0FBSyxnQkFBZ0IsSUFBSSxTQUFTLEtBQUssYUFBYSxFQUFFO29CQUNsRSxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxlQUFlO1lBQ2YsWUFBWSxFQUFFO2dCQUNaLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsS0FBSyxFQUFFOzRCQUNMLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixjQUFjLEVBQUUsQ0FBQzs0QkFDakIsaUJBQWlCLEVBQUUsT0FBTzt5QkFDM0I7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDSixtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLFVBQVUsRUFBRSxDQUFDO2dCQUNiLHVDQUF1QztnQkFDdkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDbkMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNyQztxQkFBTTtvQkFDTCxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzVCLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDdkM7WUFDSCxDQUFDO1lBRUQsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELGdCQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzdCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QixDQUFDO1lBRUQsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDOUIsc0NBQXNDO2dCQUN0QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDdkIsT0FBTztpQkFDUjtnQkFFRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUN4QyxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsS0FBSyxFQUFFO3dCQUNMLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQzt3QkFDeEMsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFO3dCQUN4QixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7cUJBQ3pCO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFFRCxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM5Qix1REFBdUQ7Z0JBQ3ZELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDbkMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUN4QjtZQUNILENBQUM7WUFFRCxjQUFjLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDM0IsdURBQXVEO2dCQUN2RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDdEIsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDMUMsSUFBSSxRQUFRLEtBQUssc0JBQXNCLEVBQUU7d0JBQ3ZDLE9BQU87cUJBQ1I7b0JBQ0QsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUMvQyxPQUFPO2lCQUNSO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUM1QyxJQUFJLFFBQVEsS0FBSyx3QkFBd0IsRUFBRTt3QkFDekMsT0FBTztxQkFDUjtvQkFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDakQsT0FBTztpQkFDUjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDMUMsSUFBSSxRQUFRLEtBQUssdUJBQXVCLEVBQUU7d0JBQ3hDLE9BQU87cUJBQ1I7b0JBQ0QsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNoRCxPQUFPO2lCQUNSO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUN6QyxJQUFJLFFBQVEsS0FBSyx1QkFBdUIsRUFBRTt3QkFDeEMsT0FBTztxQkFDUjtvQkFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ2hELE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxRQUFRLEtBQUssWUFBWSxFQUFFO29CQUM3QixXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3RDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDL0MsZUFBZSxFQUFFLElBQUk7WUFDckIsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLO1lBQ0wsbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUM7UUFFSCxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWhDLEtBQUssQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUs7WUFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsZUFBZTtRQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdkMsS0FBSztZQUNMLEtBQUs7WUFDTCxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLE1BQU0sRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsK0JBQStCO1NBQy9ELENBQUMsQ0FBQztRQUVILGFBQWE7UUFFYixNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ25DLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFlBQVksQ0FBQyxJQUFJO2dCQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFL0Isa0VBQWtFO2dCQUNsRSxNQUFNLGNBQWMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakYsSUFBSSxjQUFjLEVBQUU7b0JBQ2xCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO3dCQUNoQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxjQUFjO3dCQUMxQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxjQUFjO3FCQUM3QyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxJQUFJLEtBQUssb0JBQW9CLEVBQUU7d0JBQ2pDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ2pFO2lCQUNGO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFcEQsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDakIsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNoQixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsRUFBRSxRQUFRO3FCQUNyQjtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUNyQixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsRUFBRSxRQUFRO3FCQUNyQjtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ25CLEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDbEIsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNuQixLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxTQUFTO3FCQUNoQjtvQkFDRCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDZCxJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxJQUFJLEVBQUUsT0FBTzt3QkFDYixNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YscUJBQXFCO1lBQ3JCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDckIsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO2dCQUMvQixLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDakQsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7b0JBQ3pCLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7aUJBQ2hDO2FBQ0YsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNqQyxZQUFZLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDO2dCQUNoRCxLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsRUFBRSxRQUFRO3FCQUNyQjtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDNUIsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqRCxPQUFPLEVBQUUsR0FBRztZQUNaLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7WUFDWCxTQUFTLEVBQUUsRUFBRTtZQUNiLFdBQVcsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDekMsMERBQTBEO1lBQzFELFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILGNBQWM7UUFDZCxJQUFJLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsMkJBQTJCLEVBQUUsQ0FBQztTQUMvQjtRQUVELFNBQVMsMkJBQTJCO1lBQ2xDLFFBQVEsQ0FBQyxFQUFFLENBQ1Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYix5REFBeUQ7b0JBQ3pELFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztnQkFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUNiLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUM5QyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7d0JBQzdCLGVBQWUsRUFBRSxJQUFJO3FCQUN0QixDQUFDLENBQUM7b0JBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxDQUFDO29CQUVILGtGQUFrRjtvQkFDbEYsMkRBQTJEO29CQUMzRCxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7b0JBQzFCLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsQ0FBQztnQkFFRCxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUMxQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3JCLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO2dCQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzlCLENBQUM7Z0JBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3RCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQztnQkFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUNiLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUVELFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNuQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakQsQ0FBQztnQkFFRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDcEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNyQixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFFRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdkIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxhQUFhLEVBQUUsR0FBRyxFQUFFO29CQUNsQixhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsRUFDRCxJQUFJLENBQ0wsQ0FBQztRQUNKLENBQUM7UUFFRCxTQUFTLFNBQVMsQ0FBQyxRQUFRO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsT0FBTzthQUNSO1lBQ0QsVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixvREFBb0Q7WUFDcEQsMkRBQTJEO1lBQzNELDBFQUEwRTtZQUMxRSxZQUFZO1lBQ1osNEJBQTRCO1lBQzVCLGdCQUFnQjtZQUNoQiw0Q0FBNEM7WUFDNUMsZ0NBQWdDO1lBQ2hDLGdDQUFnQztZQUNoQyxpQ0FBaUM7WUFDakMsUUFBUTtZQUNSLFFBQVE7WUFDUixJQUFJO1lBRUosTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFO2dCQUNsRSxJQUFJO2dCQUNKLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUNsQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2lCQUN6QjthQUNGLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLHNEQUFzRDtZQUN0RCxzREFBc0Q7WUFDdEQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksT0FBTyxDQUFDO2dCQUVaLElBQUksSUFBSSxZQUFZLEtBQUssQ0FBQyxZQUFZLEVBQUU7b0JBQ3RDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUNyQztnQkFFRCxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDekMsUUFBUTtvQkFDUixxQkFBcUIsRUFBRSxLQUFLO29CQUM1QixhQUFhLEVBQUUsS0FBSztvQkFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLO29CQUN2QixTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU07aUJBQzFCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFFWixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUM3QixRQUFRO29CQUNSLEtBQUssRUFBRSxTQUFTO29CQUNoQixJQUFJLEVBQUUsU0FBUztvQkFDZixnQkFBZ0IsRUFBRSxJQUFJO29CQUN0QixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTt3QkFDdkIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztpQkFDRixDQUFDLENBQUM7Z0JBRUgsSUFBSSxJQUFJLEtBQUssb0JBQW9CLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzdCO2dCQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNmO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7b0JBQ3hDLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLEtBQUssRUFBRTt3QkFDTCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7d0JBQ2pCLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRTt3QkFDckIsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFO3dCQUNyQixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7d0JBQ3hCLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRTt3QkFDeEIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO3dCQUNqQixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7d0JBQ2hDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7cUJBQzdDO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzlCO1lBRUQsbURBQW1EO1lBQ25ELHdGQUF3RjtZQUN4RixtRUFBbUU7WUFDbkUsbUNBQW1DO1lBQ25DLG9EQUFvRDtZQUNwRCxnREFBZ0Q7WUFDaEQsOENBQThDO1lBQzlDLDJEQUEyRDtZQUMzRCw0Q0FBNEM7WUFDNUMsb0JBQW9CO1lBQ3BCLFVBQVU7WUFDViwrREFBK0Q7WUFDL0QsaUNBQWlDO1lBQ2pDLDRDQUE0QztZQUM1QyxvQkFBb0I7WUFDcEIsVUFBVTtZQUNWLDBEQUEwRDtZQUMxRCx3Q0FBd0M7WUFDeEMsWUFBWTtZQUNaLHlCQUF5QjtZQUN6Qiw0Q0FBNEM7WUFDNUMsb0JBQW9CO1lBQ3BCLFVBQVU7WUFDVixxREFBcUQ7WUFDckQsaUNBQWlDO1lBQ2pDLHNGQUFzRjtZQUN0Riw0Q0FBNEM7WUFDNUMsMEVBQTBFO1lBQzFFLHlGQUF5RjtZQUN6Riw4REFBOEQ7WUFDOUQsc0dBQXNHO1lBQ3RHLG1EQUFtRDtZQUNuRCx3RUFBd0U7WUFDeEUsMkNBQTJDO1lBQzNDLDhFQUE4RTtZQUM5RSxxQkFBcUI7WUFDckIsMENBQTBDO1lBQzFDLDZFQUE2RTtZQUM3RSxxQkFBcUI7WUFDckIsdUNBQXVDO1lBQ3ZDLDBFQUEwRTtZQUMxRSxxQkFBcUI7WUFDckIsMkNBQTJDO1lBQzNDLDRFQUE0RTtZQUM1RSxxQkFBcUI7WUFDckIsWUFBWTtZQUNaLFVBQVU7WUFDVixzRkFBc0Y7WUFDdEYsK0NBQStDO1lBQy9DLFVBQVU7WUFDVix5Q0FBeUM7WUFDekMsb0JBQW9CO1lBQ3BCLDRCQUE0QjtZQUM1QixxQ0FBcUM7WUFDckMsWUFBWTtZQUNaLHVCQUF1QjtZQUN2QixxQ0FBcUM7WUFDckMscUNBQXFDO1lBQ3JDLG9DQUFvQztZQUNwQyxtQ0FBbUM7WUFDbkMsbUNBQW1DO1lBQ25DLHFDQUFxQztZQUNyQyxxQ0FBcUM7WUFDckMsUUFBUTtZQUNSLE1BQU07WUFFTix5RUFBeUU7WUFDekUsbURBQW1EO1lBQ25ELHNEQUFzRDtZQUN0RCwyRUFBMkU7WUFDM0UsaUVBQWlFO1lBQ2pFLFVBQVU7WUFDVixRQUFRO1lBQ1IsTUFBTTtZQUNOLDhGQUE4RjtZQUM5RixxQ0FBcUM7WUFDckMsZ0JBQWdCO1lBQ2hCLHdCQUF3QjtZQUN4QixxQkFBcUI7WUFDckIsUUFBUTtZQUNSLG1CQUFtQjtZQUNuQixpQ0FBaUM7WUFDakMsaUNBQWlDO1lBQ2pDLGdDQUFnQztZQUNoQywrQkFBK0I7WUFDL0IsK0JBQStCO1lBQy9CLGlDQUFpQztZQUNqQyxpQ0FBaUM7WUFDakMseUVBQXlFO1lBQ3pFLG1EQUFtRDtZQUNuRCxzREFBc0Q7WUFDdEQsa0VBQWtFO1lBQ2xFLFFBQVE7WUFDUixNQUFNO1lBQ04sV0FBVztZQUNYLDhDQUE4QztZQUM5QyxzREFBc0Q7WUFDdEQsNkVBQTZFO1lBQzdFLHdFQUF3RTtZQUN4RSwyREFBMkQ7WUFDM0QsSUFBSTtZQUNKLHlDQUF5QztZQUN6QyxNQUFNLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkUsTUFBTSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN0RCw2QkFBNkI7WUFDN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQztRQUVELFNBQVMsVUFBVTtZQUNqQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxTQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSTtZQUMvQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUMsc0JBQXNCLENBQUM7aUJBQ3RCLE9BQU8sRUFBRTtpQkFDVCxRQUFRLENBQUMsUUFBUSxDQUFDO2lCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNYLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWU7WUFDL0MsbUNBQW1DO1lBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDO2dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQzFCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLG9CQUFvQixFQUFFO2dCQUNqRixPQUFPO2FBQ1I7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUMvQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsYUFBYTtRQUNiLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixhQUFhO2dCQUNiLGNBQWM7YUFDZjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUFHO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsTUFBTSxjQUFjLEdBQUcsK0RBQStELENBQUM7Z0JBQ3ZGLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFFL0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO3dCQUN2QixJQUFJOzRCQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3JCLE1BQU0sVUFBVSxHQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUMxRSxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUM5QyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3lCQUNsQzt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3lCQUNoQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDWCxDQUFDO1lBRUQsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDZCxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNWLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQy9CLHdEQUF3RDtvQkFDeEQsTUFBTSxJQUFJLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDMUQsSUFBSSxJQUFJLEVBQUU7NEJBQ1IsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQzt5QkFDakM7NkJBQU07NEJBQ0wsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDaEM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNwQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7b0JBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUNqRSxNQUFNLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFDakUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO29CQUNsRSxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTtZQUNILENBQUM7WUFFRCxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUMzQixNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztpQkFDN0U7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztpQkFDbEY7WUFDSCxDQUFDO1lBRUQsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO2dCQUNyQixNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFFRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUMzQixNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztpQkFDNUU7WUFDSCxDQUFDO1lBRUQsZUFBZSxDQUFDLE9BQU87Z0JBQ3JCLElBQUksT0FBTyxFQUFFO29CQUNYLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDNUM7cUJBQU07b0JBQ0wsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ2xDO1lBQ0gsQ0FBQztZQUVELGdCQUFnQixDQUFDLE1BQU07Z0JBQ3JCLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlCLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM1QyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQixDQUFDO1NBQ0YsQ0FBQztRQUNGLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxxQkFBcUIsRUFBRSxlQUFlLENBQUMsTUFBTTtZQUM3QyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsU0FBUztZQUM5QyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsU0FBUztZQUM5QyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ2hELG9CQUFvQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDaEQsNkJBQTZCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQjtZQUMvRCw4QkFBOEIsRUFBRSxlQUFlLENBQUMsVUFBVTtZQUMxRCw2QkFBNkIsRUFBRSxlQUFlLENBQUMsZ0JBQWdCO1lBQy9ELGtDQUFrQyxFQUFFLGVBQWUsQ0FBQyxxQkFBcUI7WUFDekUsdUJBQXVCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1lBQy9FLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUM3RSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDN0Qsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFcEQsMENBQTBDO1FBQzFDLCtDQUErQztRQUMvQywrQ0FBK0M7UUFDL0Msa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixxQkFBcUI7UUFDckIsTUFBTTtRQUNOLE1BQU07UUFFTixrREFBa0Q7UUFFbEQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNuQixNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDNUIsQ0FBQztZQUNELEdBQUcsRUFBRSxnQkFBZ0I7WUFDckIsT0FBTyxFQUFFLEVBQUU7WUFDWCxTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDakQsT0FBTzthQUNKLFFBQVEsRUFBRTthQUNWLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNiLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ25CLE1BQU0sRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEVBQUUsSUFBSTtnQkFDaEQsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM3RCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFELGFBQWEsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRW5GLHVCQUF1QjtRQUN2QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUN0RCxNQUFNLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNsRSxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDbkMsTUFBTSxRQUFRLEdBQUc7WUFDZixRQUFRLEVBQUUsMkZBQTJGLEtBQUssdUlBQXVJO1lBQ2pQLFFBQVEsRUFBRSw2RUFBNkUsS0FBSyxtRkFBbUY7WUFDL0ssTUFBTSxFQUFFLHNGQUFzRixLQUFLLHlRQUF5UTtZQUM1VyxZQUFZLEVBQUUsc0VBQXNFLEtBQUsscU1BQXFNO1lBQzlSLEtBQUssRUFBRSx5RkFBeUYsS0FBSyx1SkFBdUo7WUFDNVAsS0FBSyxFQUFFLDJFQUEyRSxLQUFLLGFBQWEsS0FBSyx1SkFBdUo7WUFDaFEsT0FBTyxFQUFFLDBGQUEwRixLQUFLLGlJQUFpSTtZQUN6TyxPQUFPLEVBQUUsNEVBQTRFLEtBQUssYUFBYSxLQUFLLGlJQUFpSTtZQUM3TyxNQUFNLEVBQUUseUZBQXlGLEtBQUssc0tBQXNLO1lBQzVRLE1BQU0sRUFBRSwyRUFBMkUsS0FBSyxhQUFhLEtBQUssc0tBQXNLO1lBQ2hSLFdBQVcsRUFBRSx5RkFBeUYsS0FBSyxpSUFBaUk7WUFDNU8sV0FBVyxFQUFFLDJFQUEyRSxLQUFLLGFBQWEsS0FBSyxpSUFBaUk7WUFDaFAsWUFBWSxFQUFFLG9IQUFvSCxLQUFLLDZFQUE2RTtZQUNwTixZQUFZLEVBQUUsc0dBQXNHLEtBQUssYUFBYSxLQUFLLDZFQUE2RTtZQUN4TixhQUFhLEVBQUUseUZBQXlGLEtBQUsseUpBQXlKO1lBQ3RRLGFBQWEsRUFBRSwyRUFBMkUsS0FBSyxhQUFhLEtBQUsseUpBQXlKO1lBQzFRLE9BQU8sRUFBRSx5RkFBeUYsS0FBSyxpUEFBaVA7WUFDeFYsT0FBTyxFQUFFLDJFQUEyRSxLQUFLLGFBQWEsS0FBSyxpUEFBaVA7WUFDNVYsU0FBUyxFQUFFLHlGQUF5RixLQUFLLG1KQUFtSjtZQUM1UCxTQUFTLEVBQUUsMkVBQTJFLEtBQUssYUFBYSxLQUFLLG1KQUFtSjtZQUNoUSxTQUFTLEVBQUUseUZBQXlGLEtBQUsscUtBQXFLO1lBQzlRLFNBQVMsRUFBRSwyRUFBMkUsS0FBSyxhQUFhLEtBQUsscUtBQXFLO1NBQ25SLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFakIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN6QyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsc0JBQXNCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUFvQjtRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxXQUFvQixFQUFFLGVBQXFCO1FBQ3pELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN2QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsS0FBSyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLGVBQWUsQ0FBQyxZQUFZO29CQUNyQyxXQUFXO29CQUNYLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTtvQkFDMUIsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUFXO29CQUN4QyxRQUFRLEVBQUUsS0FBSztpQkFDaEIsQ0FBQztnQkFDRixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNuQztTQUNGO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFdBQW9CO1FBQ25DLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN2QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3pCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ25DLE9BQU8sQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxFQUNGLENBQUMsQ0FDRixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN2QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN4QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7YUFDeEc7U0FDRjtJQUNILENBQUM7SUFHRCxvQkFBb0I7UUFDbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNoRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCLENBQUMsV0FBbUIsRUFBRSxhQUFrQjtRQUN4RCxJQUFJLFdBQVcsRUFBRTtZQUNmLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUN0QixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7NEJBQ2pCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt5QkFDbEI7d0JBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt5QkFDbEI7d0JBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt5QkFDbEI7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3RCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFTO1FBQzlCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRTtZQUNsRSxJQUFJO1lBQ0osTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDcEIsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDbEMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDdEIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDdEIsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTthQUN6QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBZ0I7UUFDM0IsSUFBSSxRQUFRLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RGO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQjtRQUM3QixJQUFJLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1RCxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUY7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWdCO1FBQzlCLElBQUksUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksRUFBRTtZQUN2QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVELGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RCxJQUFJLEtBQUssSUFBSSxhQUFhLEVBQUU7WUFDMUIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckQsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUN4QjtTQUNGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLGFBQWEsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7Z0JBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUM5QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDOUM7U0FDRjthQUFNLElBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxlQUFlO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssb0JBQW9CO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssa0JBQWtCO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssaUJBQWlCLEVBQ3RDO1lBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDO2FBQzNEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7YUFDeEQ7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFTLEVBQUUsT0FBZTtRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7WUFDbkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QixzQ0FBc0M7WUFDdEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ25CLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ1osT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztZQUNILElBQ0UsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSTtnQkFDOUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUMzRDtnQkFDQSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFTLEVBQUUsR0FBUTtRQUNuQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssb0JBQW9CLEVBQUU7WUFDN0MsT0FBTztTQUNSO1FBRUQsSUFDRSxHQUFHLENBQUMsU0FBUztZQUNiLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxXQUFXO2dCQUM1QixHQUFHLENBQUMsU0FBUyxLQUFLLFdBQVc7Z0JBQzdCLEdBQUcsQ0FBQyxTQUFTLEtBQUssY0FBYztnQkFDaEMsR0FBRyxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsRUFDbEM7WUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV6RCx5QkFBeUI7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMxQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDVCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUV0QyxNQUFNLElBQUksR0FBRyxTQUFTLEtBQUssRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLENBQUM7aUJBQzVEO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBRXRDLE1BQU0sSUFBSSxHQUFHLFNBQVMsS0FBSyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQztpQkFDNUQ7YUFDRjtTQUNGO2FBQU0sSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssK0JBQStCLEVBQUU7WUFDbkYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUyxFQUFFLFVBQWtCLEVBQUUsTUFBYztRQUM5RCxRQUFRLFVBQVUsRUFBRTtZQUNsQixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQzNDLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDcEQsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDcEQsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFVO1FBQ3hCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ1gsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDZixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBVTtRQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNWLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Ozs7WUFwdENGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xyXG5pbXBvcnQgVG9vbGJhckZ1bmN0aW9uIGZyb20gJy4uL2NvbW1vbi9icG1uL3Rvb2xiYXIuZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBGbG93Q2hhcnRDb25zdCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3QnO1xyXG5pbXBvcnQgeyBGbG93Y2hhcnRWaWV3TW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tICcuLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXInO1xyXG5cclxuLyogRGVjbGFyZSBqb2ludGpzIG9iamVjdCAqL1xyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xyXG5sZXQgZ3JhcGg6IGFueTtcclxubGV0IHBhcGVyOiBhbnk7XHJcbmxldCB0b29sYmFyQ29uZmlnOiBhbnk7XHJcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcG1uU2VydmljZSB7XHJcbiAgcHVibGljIGlzU2F2ZUFzVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEZWxldGVUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgcHVibGljIGlzVGVtcCA9IHRydWU7XHJcbiAgcHVibGljIGpzb25UZW1wQ29udGVudCA9ICcnO1xyXG4gIHB1YmxpYyBpc1Jlc2V0ID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2VsZWN0ZWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBqc29uT3JpZ2luYWxDb250ZW50ID0gJyc7XHJcblxyXG4gIGJ1aWxkRGlhZ3JhbShcclxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcclxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxyXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXHJcbiAgICBqc29uQ29udGVudDogYW55LFxyXG4gICAgZWRpdE1vZGU6IGFueSxcclxuICAgIExBTkc6IGFueVxyXG4gICkge1xyXG4gICAgd2luZG93W2BJU19OT1RfU0hPV19BR0FJTmBdID0gZmFsc2U7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuRURJVF9NT0RFXSA9IGVkaXRNb2RlO1xyXG4gICAgam9pbnQuc2V0VGhlbWUoYnBtblRoZW1lKTtcclxuXHJcbiAgICBpZiAoanNvbkNvbnRlbnQpIHtcclxuICAgICAganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGpzb25Db250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGpzb25Db250ZW50ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ2RBdXRoID0gd2luZG93W2BnZEF1dGhgXTtcclxuICAgIGNvbnN0IGdkTG9hZCA9IHdpbmRvd1tgZ2RMb2FkYF07XHJcbiAgICBjb25zdCBnZFNhdmUgPSB3aW5kb3dbYGdkU2F2ZWBdO1xyXG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcblxyXG4gICAgbGV0IGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xyXG5cclxuICAgIHRvb2xiYXJDb25maWcgPSBUb29sYmFyRnVuY3Rpb24uZ2V0VG9vbGJhckNvbmZpZ3VyYXRpb24oTEFORyk7XHJcbiAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbjogQWRkIHRlbXBsYXRlIGxpc3QgKi9cclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzICYmIGRpYWdyYW1UZW1wbGF0ZXMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxyXG4gICAgICAgICAgICBjb250ZW50OiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICBqc29uQ29udGVudDogaXRlbS5qc29uQ29udGVudCxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBncmFwaCA9IG5ldyBqb2ludC5kaWEuR3JhcGgoeyB0eXBlOiAnYnBtbicgfSk7XHJcbiAgICBjb25zdCBjb21tYW5kTWFuYWdlciA9IG5ldyBqb2ludC5kaWEuQ29tbWFuZE1hbmFnZXIoeyBncmFwaCB9KTtcclxuICAgIGNvbnN0IGtleWJvYXJkID0gbmV3IGpvaW50LnVpLktleWJvYXJkKCk7XHJcbiAgICBjb25zdCBjbGlwYm9hcmQgPSBuZXcgam9pbnQudWkuQ2xpcGJvYXJkKCk7XHJcblxyXG4gICAgcGFwZXIgPSBuZXcgam9pbnQuZGlhLlBhcGVyKHtcclxuICAgICAgd2lkdGg6IDgwMCxcclxuICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICAgIG1vZGVsOiBncmFwaCxcclxuICAgICAgZ3JpZFNpemU6IDEwLFxyXG4gICAgICBkcmF3R3JpZDogdHJ1ZSxcclxuICAgICAgYXN5bmM6IHRydWUsXHJcbiAgICAgIHNvcnRpbmc6IGpvaW50LmRpYS5QYXBlci5zb3J0aW5nLkFQUFJPWCxcclxuICAgICAgaW50ZXJhY3RpdmU6IHsgbGlua01vdmU6IGZhbHNlIH0sXHJcbiAgICAgIHNuYXBMYWJlbHM6IHRydWUsXHJcbiAgICAgIC8vIENvbm5lY3Rpb25zXHJcbiAgICAgIGRlZmF1bHRMaW5rKGVsZW1lbnRWaWV3KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBicG1uMi5GbG93KHtcclxuICAgICAgICAgIHo6IGVsZW1lbnRWaWV3Lm1vZGVsLmdldCgneicpIC0gMSxcclxuICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgIGxpbmU6IHtcclxuICAgICAgICAgICAgICBmbG93VHlwZTogJ3NlcXVlbmNlJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHZhbGlkYXRlQ29ubmVjdGlvbihjZWxsVmlld1MsIG1hZ25ldFMsIGNlbGxWaWV3VCwgbWFnbmV0VCwgZW5kKSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gY2VsbFZpZXdTLm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNlbGxWaWV3VC5tb2RlbDtcclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBsb29wIGxpbmtzXHJcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGxpbmsgdG8gbGluayBjb25uZWN0aW9uXHJcbiAgICAgICAgaWYgKHNvdXJjZS5pc0xpbmsoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0LmlzTGluaygpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGdyb3VwIGNvbm5lY3Rpb25zXHJcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmdldCgndHlwZScpO1xyXG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnYnBtbjIuR3JvdXAnIHx8IHRhcmdldFR5cGUgPT09ICdicG1uMi5Hcm91cCcpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHRBbmNob3I6IHtcclxuICAgICAgICBuYW1lOiAncGVycGVuZGljdWxhcidcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdENvbm5lY3Rpb25Qb2ludDoge1xyXG4gICAgICAgIG5hbWU6ICdib3VuZGFyeScsXHJcbiAgICAgICAgYXJnczogeyBzdHJva2U6IHRydWUgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyBFbWJlZGRpbmdcclxuICAgICAgZW1iZWRkaW5nTW9kZTogdHJ1ZSxcclxuICAgICAgZnJvbnRQYXJlbnRPbmx5OiBmYWxzZSxcclxuICAgICAgdmFsaWRhdGVFbWJlZGRpbmcoY2hpbGRWaWV3LCBwYXJlbnRWaWV3KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHBhcmVudFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gY2hpbGRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJyAmJiBjaGlsZFR5cGUgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5BY3Rpdml0eScgJiYgY2hpbGRUeXBlID09PSAnYnBtbjIuRXZlbnQnKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICAvLyBIaWdobGlnaHRpbmdcclxuICAgICAgaGlnaGxpZ2h0aW5nOiB7XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgbmFtZTogJ21hc2snLFxyXG4gICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogJyMzNDk4ZGInLFxyXG4gICAgICAgICAgICAgICdzdHJva2Utd2lkdGgnOiAzLFxyXG4gICAgICAgICAgICAgICdzdHJva2UtbGluZWpvaW4nOiAncm91bmQnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pLm9uKHtcclxuICAgICAgJ2JsYW5rOnBvaW50ZXJkb3duJzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIGNsb3NlVG9vbHMoKTtcclxuICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2JsYW5rOmNvbnRleHRtZW51JzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6bW91c2VlbnRlcic6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIE9wZW4gdG9vbCBvbmx5IGlmIHRoZXJlIGlzIG5vbmUgeWV0XHJcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLWhvdmVyJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcyh7IHZlcnRleEFkZGluZzogZmFsc2UgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazptb3VzZWxlYXZlJzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygnbGluay1ob3ZlcicpKSB7XHJcbiAgICAgICAgICBsaW5rVmlldy5yZW1vdmVUb29scygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOmNvbm5lY3QnOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGxpbmsgdHlwZSBiYXNlZCBvbiB0aGUgY29ubmVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtWaWV3Lm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGxpbmsuZ2V0U291cmNlQ2VsbCgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxpbmsuZ2V0VGFyZ2V0Q2VsbCgpO1xyXG4gICAgICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluay5zZXQoJ3onLCAtMSk7XHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlLmdldCgndHlwZScpLCB0YXJnZXQuZ2V0KCd0eXBlJyldO1xyXG4gICAgICAgIGNvbnN0IGxpbmtUeXBlID0gbGluay5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQW5ub3RhdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQW5ub3RhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQ29udmVyc2F0aW9uJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkNvbnZlcnNhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuRGF0YU9iamVjdCcpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhU3RvcmUnKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlua1R5cGUgIT09ICdicG1uMi5GbG93Jykge1xyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkZsb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc25hcGxpbmVzID0gbmV3IGpvaW50LnVpLlNuYXBsaW5lcyh7IHBhcGVyIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSBuZXcgam9pbnQudWkuUGFwZXJTY3JvbGxlcih7XHJcbiAgICAgIGF1dG9SZXNpemVQYXBlcjogdHJ1ZSxcclxuICAgICAgcGFkZGluZzogMjAsXHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcblxyXG4gICAgcGFwZXIub24oJ2JsYW5rOm1vdXNld2hlZWwnLCBfLnBhcnRpYWwob25Nb3VzZXdoZWVsLCBudWxsKSwgdGhpcyk7XHJcbiAgICBwYXBlci5vbignY2VsbDptb3VzZXdoZWVsJywgb25Nb3VzZXdoZWVsLCB0aGlzKTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjEsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4xLCBveDogeCwgb3k6IHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU0VMRUNUSU9OICovXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgam9pbnQudWkuU2VsZWN0aW9uKHtcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxyXG4gICAgfSk7XHJcblxyXG4gICAgLyogU1RFTkNJTCAqL1xyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWwgPSBuZXcgam9pbnQudWkuU3RlbmNpbCh7XHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICBwYXBlcixcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIGRyYWdFbmRDbG9uZShjZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBjZWxsLmNsb25lKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xyXG5cclxuICAgICAgICAvLyBzb21lIHR5cGVzIG9mIHRoZSBlbGVtZW50cyBuZWVkIHJlc2l6aW5nIGFmdGVyIHRoZXkgYXJlIGRyb3BwZWRcclxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcclxuICAgICAgICBpZiAoc2l6ZU11bHRpcGxpZXIpIHtcclxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IGNsb25lLmdldCgnc2l6ZScpO1xyXG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xyXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luYWxTaXplLndpZHRoICogc2l6ZU11bHRpcGxpZXIsXHJcbiAgICAgICAgICAgIGhlaWdodDogb3JpZ2luYWxTaXplLmhlaWdodCAqIHNpemVNdWx0aXBsaWVyXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgICBjbG9uZS5zZXQoJ3BhZGRpbmcnLCB7IHRvcDogMCwgbGVmdDogMzAsIHJpZ2h0OiAwLCBib3R0b206IDAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIHN0ZW5jaWwubG9hZChbXHJcbiAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5FdmVudCh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Hcm91cCh7XHJcbiAgICAgICAgc2l6ZToge1xyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgaGVpZ2h0OiA4MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHRleHQ6ICdHcm91cCcsXHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXHJcbiAgICAgIG5ldyBicG1uMi5IZWFkZXJlZFBvb2woe1xyXG4gICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxyXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDUwIH0sXHJcbiAgICAgICAgbGFuZXM6IFt7IGxhYmVsOiAnTGFuZSAxJyB9LCB7IGxhYmVsOiAnTGFuZSAyJyB9XSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keTogeyBmaWxsOiAnI0ZGRkZGRicgfSxcclxuICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcclxuICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICB0ZXh0OiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXSk7XHJcblxyXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xyXG4gICAgICBjb2x1bW5zOiAxMDAsXHJcbiAgICAgIGNvbHVtbldpZHRoOiAnY29tcGFjdCcsXHJcbiAgICAgIG1hcmdpblg6IDIwLFxyXG4gICAgICBtYXJnaW5ZOiAyMCxcclxuICAgICAgY29sdW1uR2FwOiA0MCxcclxuICAgICAgdmVydGljYWxHYXA6IDIwLFxyXG4gICAgICByZXNpemVUb0ZpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSB0b29sdGlwcyBmb3IgYWxsIHRoZSBzaGFwZXMgaW4gc3RlbmNpbC5cclxuICAgIHN0ZW5jaWwub24oJ2VsZW1lbnQ6ZHJvcCcsIChlbGVtZW50VmlldykgPT4ge1xyXG4gICAgICAvLyBvcGVuIGluc3BlY3RvciBhZnRlciBhIG5ldyBlbGVtZW50IGRyb3BwZWQgZnJvbSBzdGVuY2lsXHJcbiAgICAgIG9wZW5Ub29scyhlbGVtZW50Vmlldyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiBLRVlCT0FSRCAqL1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAga2V5Ym9hcmQub24oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gXy5maWx0ZXIocGFzdGVkQ2VsbHMsIChjZWxsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChlbGVtZW50cyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3ggc2hpZnQrZGVsZXRlJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2RlbGV0ZSBiYWNrc3BhY2UnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBncmFwaC5yZW1vdmVDZWxscyhzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCkpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci51bmRvKCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcclxuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIucmVkbygpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGdyYXBoLmdldEVsZW1lbnRzKCkpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCtwbHVzJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrbWludXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oLTAuMiwgeyBtaW46IDAuMiwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5dXA6c2hpZnQnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb3BlblRvb2xzKGNlbGxWaWV3KSB7XHJcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICB3aW5kb3dbYG15X2NlbGxWaWV3YF0gPSBjZWxsVmlldztcclxuICAgICAgY29uc3QgY2VsbCA9IGNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgLy8gY29uc3QgdGFibE5hbWUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuVEFCX05BTUVdO1xyXG4gICAgICAvLyBpZiAodGFibE5hbWUgPT09IEZsb3dDaGFydENvbnN0LlRBQl9CUE1OX0NIT1JFT0dSQVBIWSkge1xyXG4gICAgICAvLyAgIGNvbnN0IGluc3BlY3RvciA9IGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xyXG4gICAgICAvLyAgICAgY2VsbCxcclxuICAgICAgLy8gICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxyXG4gICAgICAvLyAgICAgZ3JvdXBzOiB7XHJcbiAgICAgIC8vICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgIC8vICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXHJcbiAgICAgIC8vICAgICAgIGZvbnRzaXplOiB7IGluZGV4OiAzIH0sXHJcbiAgICAgIC8vICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBjb25zdCBpbnNwZWN0b3IgPSBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcclxuICAgICAgICBjZWxsLFxyXG4gICAgICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxyXG4gICAgICAgIGdyb3Vwczoge1xyXG4gICAgICAgICAgZ2VuZXJhbDogeyBsYWJlbDogdHlwZSwgaW5kZXg6IDEgfSxcclxuICAgICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXHJcbiAgICAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxyXG4gICAgICAgICAgYXBwZWFyYW5jZTogeyBpbmRleDogNCB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KFtdKTtcclxuICAgICAgLy8gQWRkIHRoZSBjZWxsIGludG8gdGhlIHNlbGVjdGlvbiBjb2xsZWN0aW9uIHNpbGVudGx5XHJcbiAgICAgIC8vIHNvIG5vIHNlbGVjdGlvbiBib3ggaXMgcmVuZGVyZWQgYWJvdmUgdGhlIGNlbGxWaWV3LlxyXG4gICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5hZGQoY2VsbCwgeyBzaWxlbnQ6IHRydWUgfSk7XHJcblxyXG4gICAgICBpZiAoY2VsbC5pc0VsZW1lbnQoKSkge1xyXG4gICAgICAgIGxldCBtaW5TaXplO1xyXG5cclxuICAgICAgICBpZiAoY2VsbCBpbnN0YW5jZW9mIGJwbW4yLkhlYWRlcmVkUG9vbCkge1xyXG4gICAgICAgICAgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWluU2l6ZSA9IHsgd2lkdGg6IDMwLCBoZWlnaHQ6IDMwIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmcmVlVHJhbnNmb3JtID0gbmV3IGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0oe1xyXG4gICAgICAgICAgY2VsbFZpZXcsXHJcbiAgICAgICAgICBhbGxvd09ydGhvZ29uYWxSZXNpemU6IGZhbHNlLFxyXG4gICAgICAgICAgYWxsb3dSb3RhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICBtaW5XaWR0aDogbWluU2l6ZS53aWR0aCxcclxuICAgICAgICAgIG1pbkhlaWdodDogbWluU2l6ZS5oZWlnaHRcclxuICAgICAgICB9KS5yZW5kZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcclxuICAgICAgICAgIHR5cGU6ICd0b29sYmFyJyxcclxuICAgICAgICAgIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUsXHJcbiAgICAgICAgICBib3hDb250ZW50OiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNlbGxWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xyXG4gICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2VsbC5pc0xpbmsoKSkge1xyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLXBvaW50ZXJkb3duJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcygpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQW5jaG9yKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBbmNob3IoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5TZWdtZW50cygpLFxyXG4gICAgICAgICAgICBuZXcgbnMuQm91bmRhcnkoeyBwYWRkaW5nOiAxNSB9KSxcclxuICAgICAgICAgICAgbmV3IG5zLlJlbW92ZSh7IG9mZnNldDogLTIwLCBkaXN0YW5jZTogNDAgfSlcclxuICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2VsbFZpZXcuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUU1TLTIzNjQ6IHNob3cgbGluayBhbmQgcG9pdGVyIGNoYW5nZSB0byBoYW5kICovXHJcbiAgICAgIC8vIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3ZlcicgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgLy8gICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgam9pbnQtZWxlbWVudGApO1xyXG4gICAgICAvLyAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgY29uc3Qgc2hhcGVJZCA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgIC8vICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIGlmIChsaXN0W2ldLmF0dHJpYnV0ZXNbMF0ubm9kZVZhbHVlICE9PSBzaGFwZUlkKSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XHJcbiAgICAgIC8vICAgICAgICAgY29udGludWU7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgY29uc3Qgc2hhcGVEZXRhaWxNb2RlbCA9IHdpbmRvd1tgU0hBUEVfREVUQUlMX01PREVMYF07XHJcbiAgICAgIC8vICAgICAgIGlmICghc2hhcGVEZXRhaWxNb2RlbCkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IGluZGV4ID0gc2hhcGVEZXRhaWxNb2RlbC5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgLy8gICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xyXG4gICAgICAvLyAgICAgICB9KTtcclxuICAgICAgLy8gICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsID0gc2hhcGVEZXRhaWxNb2RlbFtpbmRleF07XHJcbiAgICAgIC8vICAgICAgIGxldCBjb25uZWN0aW9uTmFtZSA9ICcnO1xyXG4gICAgICAvLyAgICAgICBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BY3Rpdml0eSkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19BQ1RJVklUWScpO1xyXG4gICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xyXG4gICAgICAvLyAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOSycpO1xyXG4gICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MpIHtcclxuICAgICAgLy8gICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXHJcbiAgICAgIC8vICAgICAgICAgc3dpdGNoIChzaGFwZURldGFpbC5kb2N1bWVudE1vZGVsLnJlbGF0ZWRJdGVtc1swXS5pdGVtVHlwZSkge1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19ET0NVTUVOVCcpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLnByb2Nlc3M6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19QUk9DRVNTJyk7XHJcbiAgICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuYXJlYTpcclxuICAgICAgLy8gICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX0FSRUEnKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5oYW5kYm9vazpcclxuICAgICAgLy8gICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX0ZPTERFUicpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgIT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAvLyAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAvLyAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgIC8vICAgICAgICAgYm94Q29udGVudDogY29ubmVjdGlvbk5hbWVcclxuICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVuZGVyKCk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG5cclxuICAgICAgLy8gICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xyXG4gICAgICAvLyAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIGlmICghc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5jb250YWlucygnam9pbnQtZnJlZS10cmFuc2Zvcm0nKSkge1xyXG4gICAgICAvLyAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuYWRkKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9IGVsc2UgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdXQnICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIC8vICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgLy8gICAgIGNlbGxWaWV3LFxyXG4gICAgICAvLyAgICAgdGhlbWU6ICdkZWZhdWx0JyxcclxuICAgICAgLy8gICAgIGJveENvbnRlbnQ6ICcnXHJcbiAgICAgIC8vICAgfSk7XHJcbiAgICAgIC8vICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xyXG4gICAgICAvLyAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XHJcbiAgICAgIC8vICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5yZW1vdmUoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIC8qIFFNUy0yMTI1OiBTaG93IHByb2Nlc3MgY29ubmVjdCB0eXBlICovXHJcbiAgICAgIC8vICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NIT1dfQ09OTkVDVFlQRV0gPSB0cnVlO1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMudHlwZTtcclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfRkxPV0NIQVJUX0xPQURJTkddID0gdHJ1ZTtcclxuICAgICAgLy8gfVxyXG4gICAgICAvKiBRTVMtMjEyNTogU2hvdyBwcm9jZXNzIGNvbm5lY3QgdHlwZSAqL1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXSA9IHRydWU7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRfTE9BRElOR10gPSB0cnVlO1xyXG4gICAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbiAqL1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvc2VUb29scygpIHtcclxuICAgICAgcGFwZXIucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xyXG4gICAgICBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuICAgICAgam9pbnQudWkuSGFsby5jbGVhcihwYXBlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvd1N0YXR1cyhtZXNzYWdlLCB0eXBlKSB7XHJcbiAgICAgICQoJy5zdGF0dXMnKS5yZW1vdmVDbGFzcygnaW5mbyBlcnJvciBzdWNjZXNzJykuYWRkQ2xhc3ModHlwZSkuaHRtbChtZXNzYWdlKTtcclxuICAgICAgJCgnI3N0YXR1c2Jhci1jb250YWluZXInKVxyXG4gICAgICAgIC5kZXF1ZXVlKClcclxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgICAgLmRlbGF5KDMwMDApXHJcbiAgICAgICAgLnF1ZXVlKCgpID0+IHtcclxuICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBsaW5rQ29uc3RydWN0b3IpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcclxuICAgICAgY29uc3QgbGluazIgPSBuZXcgbGlua0NvbnN0cnVjdG9yKHtcclxuICAgICAgICBzb3VyY2U6IGxpbmsuc291cmNlKCksXHJcbiAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldCgpLFxyXG4gICAgICAgIHZlcnRpY2VzOiBsaW5rLnZlcnRpY2VzKClcclxuICAgICAgfSk7XHJcbiAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICAgIGxpbmsyLnNldCgneicsIC0xKTtcclxuICAgICAgbGluazIuYWRkVG8oZ3JhcGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyYXBoLm9uKCdjaGFuZ2UnLCAoY2VsbCwgb3B0KSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VUZXh0SW5zaWRlKGNlbGwpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlTGlua0xhYmVsKGNlbGwsIDEyKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUFsbGlnbWVudChjZWxsLCBvcHQpO1xyXG4gICAgICBpZiAoIW9wdC5pbnNwZWN0b3IgfHwgIWZyZWVUcmFuc2Zvcm0gfHwgY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbldpZHRoID0gbWluU2l6ZS53aWR0aDtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbkhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLyogVE9PTEJBUiAqL1xyXG4gICAgY29uc3QgdG9vbGJhciA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgICAgdG9vbHM6IHRvb2xiYXJDb25maWcudG9vbHMsXHJcbiAgICAgIHJlZmVyZW5jZXM6IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLFxyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvb2xiYXJDb21tYW5kcyA9IHtcclxuICAgICAgdG9KU09OOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2luZG93RmVhdHVyZXMgPSAnbWVudWJhcj1ubyxsb2NhdGlvbj1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz1ubyc7XHJcbiAgICAgICAgY29uc3Qgd2luZG93TmFtZSA9IF8udW5pcXVlSWQoJ2pzb25fb3V0cHV0Jyk7XHJcbiAgICAgICAgY29uc3QganNvbldpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcyk7XHJcblxyXG4gICAgICAgIGpzb25XaW5kb3cuZG9jdW1lbnQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpKTtcclxuICAgICAgfSxcclxuICAgICAgbG9hZEdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRpbmcuLicsICdpbmZvJyk7XHJcbiAgICAgICAgICBnZExvYWQoKG5hbWUsIGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcclxuICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihqc29uKTtcclxuICAgICAgICAgICAgICBjb25zdCBlbEZpbGVOYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgICAgIGVsRmlsZU5hbWUudmFsdWUgPSBuYW1lLnJlcGxhY2UoLy5qc29uJC8sICcnKTtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkZWQuJywgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzYXZlR3JhcGg6ICgpID0+IHtcclxuICAgICAgICBnZEF1dGgoKCkgPT4ge1xyXG4gICAgICAgICAgc2hvd1N0YXR1cygnc2F2aW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgLy8gbGV0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKS52YWx1ZTtcclxuICAgICAgICAgIGNvbnN0IG5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XHJcbiAgICAgICAgICBnZFNhdmUobmFtZS52YWx1ZSwgSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCB0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3RlZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50Lmpzb25Db250ZW50KSB7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfRkxPV0NIQVJUX0lEXSA9IGV2ZW50LmZsb3dDaGFydElkO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF0gPSBldmVudC5qc29uQ29udGVudDtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk9SR19KU09OQ09OVEVOVF0gPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvbkRlbGV0ZVRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblNhdmVBc1RlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uUmVzZXRUb1RlbXBUZW1wbGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXTtcclxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5SRVNFVF9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNoYW5nZVNuYXBMaW5lcyhjaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgIHNuYXBsaW5lcy5zdGFydExpc3RlbmluZygpO1xyXG4gICAgICAgICAgc3RlbmNpbC5vcHRpb25zLnNuYXBsaW5lcyA9IHRoaXMuc25hcGxpbmVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzbmFwbGluZXMuc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgc3RlbmNpbC5vcHRpb25zLnNuYXBsaW5lcyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgYXBwbHlPblNlbGVjdGlvbihtZXRob2QpIHtcclxuICAgICAgICBncmFwaC5zdGFydEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5tb2RlbHMuZm9yRWFjaCgobW9kZWwpID0+IHtcclxuICAgICAgICAgIG1vZGVsW21ldGhvZF0oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBncmFwaC5zdG9wQmF0Y2goJ3NlbGVjdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdG9vbGJhci5vbih7XHJcbiAgICAgICd0b2pzb246cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnRvSlNPTixcclxuICAgICAgJ2xvYWQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmxvYWRHcmFwaCxcclxuICAgICAgJ3NhdmU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnNhdmVHcmFwaCxcclxuICAgICAgJ2NsZWFyOnBvaW50ZXJjbGljayc6IF8uYmluZChncmFwaC5jbGVhciwgZ3JhcGgpLFxyXG4gICAgICAncHJpbnQ6cG9pbnRlcmNsaWNrJzogXy5iaW5kKHBhcGVyLnByaW50LCBwYXBlciksXHJcbiAgICAgICdzYXZlQXNUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25TYXZlQXNUZW1wbGF0ZSxcclxuICAgICAgJ3NlbGVjdFRlbXBsYXRlOm9wdGlvbjpzZWxlY3QnOiB0b29sYmFyQ29tbWFuZHMub25TZWxlY3RlZCxcclxuICAgICAgJ2RlbGV0ZVRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vbkRlbGV0ZVRlbXBsYXRlLFxyXG4gICAgICAncmVzZXRUb1RlbXBUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25SZXNldFRvVGVtcFRlbXBsYXRlLFxyXG4gICAgICAndG8tZnJvbnQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9Gcm9udCcpLFxyXG4gICAgICAndG8tYmFjazpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0JhY2snKSxcclxuICAgICAgJ3NuYXBsaW5lOmNoYW5nZSc6IHRvb2xiYXJDb21tYW5kcy5jaGFuZ2VTbmFwTGluZXMuYmluZCh0aGlzKSxcclxuICAgICAgJ2dyaWQtc2l6ZTpjaGFuZ2UnOiBwYXBlci5zZXRHcmlkU2l6ZS5iaW5kKHBhcGVyKVxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9vbGJhci5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN0b29sYmFyLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIC8vIGNvbnN0IHpvb21Ub29sID0gbmV3IGpvaW50LnVpLlRvb2xiYXIoe1xyXG4gICAgLy8gICAvLyBpbml0aSBhbGl6ZSB0b29scyB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcclxuICAgIC8vICAgdG9vbHM6IFsnem9vbVRvRml0JywgJ3pvb21JbicsICd6b29tT3V0J10sXHJcbiAgICAvLyAgIHJlZmVyZW5jZXM6IHtcclxuICAgIC8vICAgICBwYXBlclNjcm9sbGVyLFxyXG4gICAgLy8gICAgIGNvbW1hbmRNYW5hZ2VyXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIHpvb21Ub29sLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3pvb21Ub29sYmFyJyk7XHJcblxyXG4gICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICB0YXJnZXQ6ICdbZGF0YS10b29sdGlwXScsXHJcbiAgICAgIGNvbnRlbnQoZWwpIHtcclxuICAgICAgICByZXR1cm4gZWwuZGF0YXNldC50b29sdGlwO1xyXG4gICAgICB9LFxyXG4gICAgICB0b3A6ICcuam9pbnQtdG9vbGJhcicsXHJcbiAgICAgIHBhZGRpbmc6IDEwLFxyXG4gICAgICBkaXJlY3Rpb246ICd0b3AnXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXHJcbiAgICBzdGVuY2lsXHJcbiAgICAgIC5nZXRHcmFwaCgpXHJcbiAgICAgIC5nZXQoJ2NlbGxzJylcclxuICAgICAgLmVhY2goKGNlbGwpID0+IHtcclxuICAgICAgICBuZXcgam9pbnQudWkuVG9vbHRpcCh7XHJcbiAgICAgICAgICB0YXJnZXQ6IGAuam9pbnQtc3RlbmNpbCBbbW9kZWwtaWQ9XCIke2NlbGwuaWR9XCJdYCxcclxuICAgICAgICAgIGNvbnRlbnQ6IGNlbGwuZ2V0KCd0eXBlJykuc3BsaXQoJy4nKVsxXSxcclxuICAgICAgICAgIGJvdHRvbTogJy5qb2ludC1zdGVuY2lsJyxcclxuICAgICAgICAgIGRpcmVjdGlvbjogJ2JvdHRvbScsXHJcbiAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oam9pbnQuc2hhcGVzLmJwbW4uaWNvbnMsIHRoaXMuYnVpbGROZXdJY29ucygpKTtcclxuICAgIC8qIExvYWQgIHByb2Nlc3MgZGlncmFtICovXHJcbiAgICB0aGlzLmxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudCk7XHJcbiAgICB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XHJcbiAgICBwYXBlclNjcm9sbGVyLnBvc2l0aW9uQ29udGVudCgndG9wLWxlZnQnLCB7IHBhZGRpbmc6IDUwLCB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlIH0pO1xyXG5cclxuICAgIC8qIFNldCBnIHJhcGggb2JqZWN0ICovXHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdID0gZ3JhcGg7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdID0gcGFwZXJTY3JvbGxlcjtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5PUkdfSlNPTkNPTlRFTlRdID0gdGhpcy5qc29uT3JpZ2luYWxDb250ZW50O1xyXG4gICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRJQUdSQU1fTE9BREVELCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgfVxyXG5cclxuICBidWlsZE5ld0ljb25zKHsgY29sb3IgPSAnIzAwMCcgfSA9IHt9KSB7XHJcbiAgICBjb25zdCBzdmdJY29ucyA9IHtcclxuICAgICAgbWVzc2FnZTE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTIgMTIgMTYgMTZcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgZD1cIk0xMi41IDE1LjMxM3Y5LjM3NGgxNXYtOS4zNzV6bTAgMGw3LjUgNS42MjQgNy41LTUuNjI1XCIvPjwvc3ZnPmAsXHJcbiAgICAgIG1lc3NhZ2UyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEyIDEyIDE2IDE2XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgZD1cIk0xMi41IDE0LjM0NGw3LjUgNS42MjUgNy41LTUuNjI1em0wIC45Mzd2OS4zNzVoMTV2LTkuMzc1TDIwIDIwLjkwNnpcIi8+PC9zdmc+YCxcclxuICAgICAgdGltZXIxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwXCIvPjxwYXRoIGQ9XCJNMjAgMTB2M201LTJsLTEuNSAzbTUuNSAxbC0zIDEuNW00IDMuNWgtM20yIDVsLTMtMS41TTI1IDI5bC0xLjUtM00yMCAzMHYtM20tNSAybDEuNS0zTTExIDI1bDMtMS41TTEwIDIwaDNtLTItNWwzIDEuNW0xLTUuNWwxLjUgM201LjUtMWwtMiA3aDRcIi8+PC9nPjwvc3ZnPmAsXHJcbiAgICAgIGNvbmRpdGlvbmFsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiID48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS41NjMgMTEuNTYzaDE2Ljg3NHYxNi44NzRIMTEuNTYzVjExLjU2M20yLjgxMyAyLjgxM2gxMS4yNW0tMTEuMjUgMy43NWgxMS4yNW0tMTEuMjUgMy43NWgxMS4yNW0tMTEuMjUgMy43NWgxMS4yNXpcIi8+PC9zdmc+YCxcclxuICAgICAgbGluazE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTQuNDA2IDE4LjEyNWg4LjQzOHYtMi44MTNMMjcuNTMgMjBsLTQuNjg3IDQuNjg4di0yLjgxM2gtOS4zNzV2LTMuNzVcIi8+PC9zdmc+YCxcclxuICAgICAgbGluazI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE0LjQwNiAxOC4xMjVoOC40Mzh2LTIuODEzTDI3LjUzIDIwbC00LjY4NyA0LjY4OHYtMi44MTNoLTkuMzc1di0zLjc1XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHNpZ25hbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTEzLjE3IDI0Ljg1MWgxMy43MDZsLTYuODUzLTExLjg3OS02Ljg1NCAxMS44OHpcIi8+PC9zdmc+YCxcclxuICAgICAgc2lnbmFsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiICB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTEzLjE3IDI0Ljg1MWgxMy43MDZsLTYuODUzLTExLjg3OS02Ljg1NCAxMS44OHpcIi8+PC9zdmc+YCxcclxuICAgICAgZXJyb3IxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVycm9yMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjYuNCAxNS40NTVsLTMuMjM4IDEyLjU4TDE3LjcgMTguMzcgMTMuNzYgMjMuOGwzLjQ3OC0xMi40MTIgNS41NzYgOC43MiAzLjU4Ni00LjY1MnpcIi8+PC9zdmc+YCxcclxuICAgICAgZXNjYWxhdGlvbjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjAgMTMuMjE5bDUuNjI1IDE0LjA2MkwyMCAyMC45NTNsLTUuNjI1IDYuMzI4elwiLz48L3N2Zz5gLFxyXG4gICAgICBlc2NhbGF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjAgMTMuMjE5bDUuNjI1IDE0LjA2MkwyMCAyMC45NTNsLTUuNjI1IDYuMzI4elwiLz48L3N2Zz5gLFxyXG4gICAgICB0ZXJtaW5hdGlvbjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIyMFwiIHI9XCIxMC41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz48L3N2Zz5gLFxyXG4gICAgICB0ZXJtaW5hdGlvbjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIyMFwiIHI9XCIxMC41XCIgZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PC9zdmc+YCxcclxuICAgICAgY29tcGVuc2F0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNvbXBlbnNhdGlvbjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE5IDEzLjQzOHYxMy4xMjRMMTIuNDM3IDIwIDE5IDEzLjQzN202LjU2MyAwdjEzLjEyNkwxOSAyMGw2LjU2My02LjU2M3pcIi8+PC9zdmc+YCxcclxuICAgICAgY2FuY2VsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4yODQgMTQuMjc0bDIuODY3LTIuODY4IDUuNzM1IDUuNzM1IDUuNzM1LTUuNzM1IDIuODY4IDIuODY4LTUuNzM1IDUuNzM1IDUuNzM1IDUuNzM1LTIuODY4IDIuODY3LTUuNzM1LTUuNzM1LTUuNzM1IDUuNzM1LTIuODY3LTIuODY3IDUuNzM1LTUuNzM1LTUuNzM1LTUuNzM1elwiLz48L3N2Zz5gLFxyXG4gICAgICBjYW5jZWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4yODQgMTQuMjc0bDIuODY3LTIuODY4IDUuNzM1IDUuNzM1IDUuNzM1LTUuNzM1IDIuODY4IDIuODY4LTUuNzM1IDUuNzM1IDUuNzM1IDUuNzM1LTIuODY4IDIuODY3LTUuNzM1LTUuNzM1LTUuNzM1IDUuNzM1LTIuODY3LTIuODY3IDUuNzM1LTUuNzM1LTUuNzM1LTUuNzM1elwiLz48L3N2Zz5gLFxyXG4gICAgICBtdWx0aXBsZTE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjQuNTIgMjYuMzloLTkuNDQzbC0yLjkxOC04Ljk4MiA3LjY0LTUuNTUgNy42NCA1LjU1MS0yLjkxOSA4Ljk4elwiLz48L3N2Zz5gLFxyXG4gICAgICBtdWx0aXBsZTI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI0LjUyIDI2LjM5aC05LjQ0M2wtMi45MTgtOC45ODIgNy42NC01LjU1IDcuNjQgNS41NTEtMi45MTkgOC45OHpcIi8+PC9zdmc+YCxcclxuICAgICAgcGFyYWxsZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjM0NCAxNy4yMDN2NS42MjVoNS44NnY2LjMyOGg1LjYyNHYtNi4zMjhoNi4zMjh2LTUuNjI1aC02LjMyOHYtNS44NmgtNS42MjV2NS44NnpcIi8+PC9zdmc+YCxcclxuICAgICAgcGFyYWxsZWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4zNDQgMTcuMjAzdjUuNjI1aDUuODZ2Ni4zMjhoNS42MjR2LTYuMzI4aDYuMzI4di01LjYyNWgtNi4zMjh2LTUuODZoLTUuNjI1djUuODZ6XCIvPjwvc3ZnPmBcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaWNvbnMgPSB7fTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyhzdmdJY29ucykuZm9yRWFjaCgoaWNvbk5hbWUpID0+IHtcclxuICAgICAgaWNvbnNbaWNvbk5hbWVdID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChzdmdJY29uc1tpY29uTmFtZV0pfWA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpY29ucztcclxuICB9XHJcblxyXG4gIGxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudD86IHN0cmluZykge1xyXG4gICAgaWYgKCFqc29uQ29udGVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBncmFwaC5mcm9tSlNPTihqc29uQ29udGVudCk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVGVtcGxhdGUoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcsIGRpYWdyYW1UZW1wbGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgICBjb250ZW50OiBkaWFncmFtVGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICBuYW1lOiBkaWFncmFtVGVtcGxhdGUubmFtZSxcclxuICAgICAgICAgIGpzb25Db250ZW50OiBkaWFncmFtVGVtcGxhdGUuanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0SXRlbShmbG93Q2hhcnRJZD86IHN0cmluZykge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKFxyXG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KChpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpLmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRlbXBHcmFwaCgpIHtcclxuICAgIGlmICh0aGlzLmpzb25UZW1wQ29udGVudCkge1xyXG4gICAgICB0aGlzLmxvYWRQcm9jZXNzRGlhZ3JhbShKU09OLnBhcnNlKHRoaXMuanNvblRlbXBDb250ZW50KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVGVtcCA9IHRydWU7XHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JpZ2luRm9yU2VsZigpIHtcclxuICAgIHJldHVybiAnKic7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1zZWxlY3Rpb25gKVswXTtcclxuICAgICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5pbm5lckhUTUwgPSBGbG93Q2hhcnRDb25zdC5TRUxFQ1RfVEVNUExBVEU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBpc1Nob3dDb25maXJtTWVzc2FnZSgpIHtcclxuICAgIGNvbnN0IG15R3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgY29uc3QganNvbiA9IG15R3JhcGgudG9KU09OKCk7XHJcbiAgICBpZiAoanNvbi5jZWxscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRUcmFuc2l0aW9uUG9pbnQoanNvbkNvbnRlbnQ6IG9iamVjdCwgcGFwZXJTY3JvbGxlcjogYW55KSB7XHJcbiAgICBpZiAoanNvbkNvbnRlbnQpIHtcclxuICAgICAgY29uc3QgY2VsbHMgPSBqc29uQ29udGVudFtgY2VsbHNgXTtcclxuICAgICAgaWYgKGNlbGxzKSB7XHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG4gICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICBjZWxscy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZS5wb3NpdGlvbiAmJiBlLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcclxuICAgICAgICAgICAgICB4ID0gZS5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGUucG9zaXRpb24ueCA8IHgpIHtcclxuICAgICAgICAgICAgICB4ID0gZS5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnkgPCB5KSB7XHJcbiAgICAgICAgICAgICAgeSA9IGUucG9zaXRpb24ueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoeCAhPT0gMCAmJiB5ICE9PSAwKSB7XHJcbiAgICAgICAgICB4ID0geCA+IDIwID8geCAtIDIwIDogeDtcclxuICAgICAgICAgIHkgPSB5ID4gMjAgPyB5IC0gMjAgOiB5O1xyXG4gICAgICAgICAgcGFwZXJTY3JvbGxlci50cmFuc2l0aW9uVG9Qb2ludCh4LCB5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5TaGFwZUZ1bmN0aW9uYWxpdHkoTEFORzogYW55KSB7XHJcbiAgICBjb25zdCBteUNlbGxWaWV3ID0gd2luZG93W2BteV9jZWxsVmlld2BdO1xyXG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcbiAgICBjb25zdCBjZWxsID0gbXlDZWxsVmlldy5tb2RlbDtcclxuICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xyXG4gICAgY29uc3QgaW5zcGVjdG9yID0gam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgIGNlbGwsXHJcbiAgICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxyXG4gICAgICBncm91cHM6IHtcclxuICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXHJcbiAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnNjcm9sbFRvQ29udGVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuY2VudGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVGV4dEluc2lkZShjZWxsOiBhbnkpIHtcclxuICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRXZlbnQnKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICcyMCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICcyMCUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICc3MCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICc3MCUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuR2F0ZXdheScgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbicgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFPYmplY3QnIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhU3RvcmUnXHJcbiAgICApIHtcclxuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcclxuICAgICAgbGV0IHJlZlBvcyA9IDA7XHJcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXHJcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZlBvcyArPSAxO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXS5hdHRyaWJ1dGVzLmF0dHJzLnRleHQgJiZcclxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXVxyXG4gICAgICApIHtcclxuICAgICAgICBzaXplID0gZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XHJcbiAgICAgIH1cclxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLnByb3AoJ2xhYmVscy8wL2F0dHJzL2xhYmVsL2ZvbnRTaXplJywgc2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFsbGlnbWVudChjZWxsOiBhbnksIG9wdDogYW55KSB7XHJcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgb3B0LmRpcmVjdGlvbiAmJlxyXG4gICAgICAob3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS1sZWZ0JylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsQW5jaG9yID0gY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsWyd0ZXh0LWFuY2hvciddO1xyXG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCBoZWFkZXJMYWJlbEFuY2hvciwgaGVpZ2h0KTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBsYXN0IGxhbmUgdmFsdWVcclxuICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZShjZWxsLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcclxuICAgICAgICBjb25zdCB0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoY2VsbC5hdHRyaWJ1dGVzKTtcclxuICAgICAgICBjb25zdCBiID0gaCAtIHQ7XHJcbiAgICAgICAgaWYgKGIgPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBzID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLnNsaWNlKC0xKVswXS5zaXplICsgYjtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICBjZWxsLmF0dHJpYnV0ZXMubGFuZXNbaW5kZXhdLnNpemUgPSBzO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnNpemUgPSBzO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnRha2VuVXBTcGFjZUJ5TGFuZUFuZFN1YmxhbmVzID0gcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aCA9PT0gJ2F0dHJzL2hlYWRlckxhYmVsL3RleHQtYW5jaG9yJykge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBvcHQucHJvcGVydHlWYWx1ZTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgdGV4dEFuY2hvciwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhlYWRlckF0dHJpYnV0ZShjZWxsOiBhbnksIHRleHRBbmNob3I6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGV4dEFuY2hvcikge1xyXG4gICAgICBjYXNlICdlbmQnOlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gODtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWlkZGxlJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAtIDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVbmRlZmluZWRTaXplKGF0dHJpYnV0ZXMpIHtcclxuICAgIGxldCBiUmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xyXG4gICAgICAgIGlmICghZS5zaXplKSB7XHJcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhdHRyaWJ1dGVzLmxhbmVzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5zaXplKSB7XHJcbiAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcbn1cclxuIl19