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.
- package/bundles/qms-angular.umd.js +7101 -221
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/breadcrumb/breadcrumb.js +29 -6
- package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +2 -2
- package/esm2015/lib/components/related/popup/related-popup.component.js +2 -2
- package/esm2015/lib/model/en.js +144 -1
- package/esm2015/lib/model/no.js +148 -5
- package/esm2015/lib/qms-ckeditor-components/common/bpmn/inspector.function.js +2147 -0
- package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +200 -0
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +6 -1
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +36 -0
- package/esm2015/lib/qms-ckeditor-components/common/constants/iconSvg.constants.js +8 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/flowchart-view-mode.enum.js +6 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/image-mode.enum.js +9 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/protocol-type.enum.js +11 -3
- package/esm2015/lib/qms-ckeditor-components/common/enums/related-to-item-type.js +11 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/target-type.enum.js +8 -1
- package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +6 -2
- package/esm2015/lib/qms-ckeditor-components/common/helper/guidHelper.js +14 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn-template.model.js +9 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn.model.js +9 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-input.model.js +1 -9
- package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +3 -3
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +266 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +67 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +524 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.lib.js +1948 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.validator.js +7 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +5 -5
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.js +22 -0
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +68 -5
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +16 -2
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +26 -0
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +1156 -0
- package/esm2015/public-api.js +14 -1
- package/esm2015/qms-angular.js +3 -1
- package/fesm2015/qms-angular.js +7017 -226
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/breadcrumb/breadcrumb.d.ts +6 -3
- package/lib/model/en.d.ts +143 -0
- package/lib/model/no.d.ts +143 -0
- package/lib/qms-ckeditor-components/common/bpmn/inspector.function.d.ts +1825 -0
- package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +163 -0
- package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +5 -0
- package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +34 -0
- package/lib/qms-ckeditor-components/common/constants/iconSvg.constants.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/enums/flowchart-view-mode.enum.d.ts +4 -0
- package/lib/qms-ckeditor-components/common/enums/image-mode.enum.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/enums/protocol-type.enum.d.ts +9 -2
- package/lib/qms-ckeditor-components/common/enums/related-to-item-type.d.ts +9 -0
- package/lib/qms-ckeditor-components/common/enums/target-type.enum.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/helper/guidHelper.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn-template.model.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn.model.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-input.model.d.ts +7 -7
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +37 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +23 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +123 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.lib.d.ts +542 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.validator.d.ts +2 -0
- package/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.d.ts +20 -0
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +7 -2
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +10 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +33 -0
- package/lib.theme.scss +4 -1
- package/package.json +1 -1
- package/public-api.d.ts +12 -0
- package/qms-angular.d.ts +2 -0
- package/qms-angular.metadata.json +1 -1
- package/src/assets/images/panel-stencil-container-background-image.png +0 -0
- package/src/assets/jointjs/js/backbone/backbone.js +2096 -0
- package/src/assets/jointjs/js/client.js +17 -0
- package/src/assets/jointjs/js/example.js +42 -0
- package/src/assets/jointjs/js/gd.js +135 -0
- package/src/assets/jointjs/js/joint.format.raster.js +386 -0
- package/src/assets/jointjs/js/joint.format.svg.js +252 -0
- package/src/assets/jointjs/js/jquery/jquery.js +10872 -0
- package/src/assets/jointjs/js/lodash/LICENSE +47 -0
- package/src/assets/jointjs/js/lodash/README.md +39 -0
- package/src/assets/jointjs/js/lodash/_DataView.js +7 -0
- package/src/assets/jointjs/js/lodash/_Hash.js +32 -0
- package/src/assets/jointjs/js/lodash/_LazyWrapper.js +28 -0
- package/src/assets/jointjs/js/lodash/_ListCache.js +32 -0
- package/src/assets/jointjs/js/lodash/_LodashWrapper.js +22 -0
- package/src/assets/jointjs/js/lodash/_Map.js +7 -0
- package/src/assets/jointjs/js/lodash/_MapCache.js +32 -0
- package/src/assets/jointjs/js/lodash/_Promise.js +7 -0
- package/src/assets/jointjs/js/lodash/_Set.js +7 -0
- package/src/assets/jointjs/js/lodash/_SetCache.js +27 -0
- package/src/assets/jointjs/js/lodash/_Stack.js +27 -0
- package/src/assets/jointjs/js/lodash/_Symbol.js +6 -0
- package/src/assets/jointjs/js/lodash/_Uint8Array.js +6 -0
- package/src/assets/jointjs/js/lodash/_WeakMap.js +7 -0
- package/src/assets/jointjs/js/lodash/_apply.js +21 -0
- package/src/assets/jointjs/js/lodash/_arrayAggregator.js +22 -0
- package/src/assets/jointjs/js/lodash/_arrayEach.js +22 -0
- package/src/assets/jointjs/js/lodash/_arrayEachRight.js +21 -0
- package/src/assets/jointjs/js/lodash/_arrayEvery.js +23 -0
- package/src/assets/jointjs/js/lodash/_arrayFilter.js +25 -0
- package/src/assets/jointjs/js/lodash/_arrayIncludes.js +17 -0
- package/src/assets/jointjs/js/lodash/_arrayIncludesWith.js +22 -0
- package/src/assets/jointjs/js/lodash/_arrayLikeKeys.js +49 -0
- package/src/assets/jointjs/js/lodash/_arrayMap.js +21 -0
- package/src/assets/jointjs/js/lodash/_arrayPush.js +20 -0
- package/src/assets/jointjs/js/lodash/_arrayReduce.js +26 -0
- package/src/assets/jointjs/js/lodash/_arrayReduceRight.js +24 -0
- package/src/assets/jointjs/js/lodash/_arraySample.js +15 -0
- package/src/assets/jointjs/js/lodash/_arraySampleSize.js +17 -0
- package/src/assets/jointjs/js/lodash/_arrayShuffle.js +15 -0
- package/src/assets/jointjs/js/lodash/_arraySome.js +23 -0
- package/src/assets/jointjs/js/lodash/_asciiSize.js +12 -0
- package/src/assets/jointjs/js/lodash/_asciiToArray.js +12 -0
- package/src/assets/jointjs/js/lodash/_asciiWords.js +15 -0
- package/src/assets/jointjs/js/lodash/_assignMergeValue.js +20 -0
- package/src/assets/jointjs/js/lodash/_assignValue.js +28 -0
- package/src/assets/jointjs/js/lodash/_assocIndexOf.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseAggregator.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseAssign.js +17 -0
- package/src/assets/jointjs/js/lodash/_baseAssignIn.js +17 -0
- package/src/assets/jointjs/js/lodash/_baseAssignValue.js +25 -0
- package/src/assets/jointjs/js/lodash/_baseAt.js +23 -0
- package/src/assets/jointjs/js/lodash/_baseClamp.js +22 -0
- package/src/assets/jointjs/js/lodash/_baseClone.js +165 -0
- package/src/assets/jointjs/js/lodash/_baseConforms.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseConformsTo.js +27 -0
- package/src/assets/jointjs/js/lodash/_baseCreate.js +30 -0
- package/src/assets/jointjs/js/lodash/_baseDelay.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseDifference.js +67 -0
- package/src/assets/jointjs/js/lodash/_baseEach.js +14 -0
- package/src/assets/jointjs/js/lodash/_baseEachRight.js +14 -0
- package/src/assets/jointjs/js/lodash/_baseEvery.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseExtremum.js +32 -0
- package/src/assets/jointjs/js/lodash/_baseFill.js +32 -0
- package/src/assets/jointjs/js/lodash/_baseFilter.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseFindIndex.js +24 -0
- package/src/assets/jointjs/js/lodash/_baseFindKey.js +23 -0
- package/src/assets/jointjs/js/lodash/_baseFlatten.js +38 -0
- package/src/assets/jointjs/js/lodash/_baseFor.js +16 -0
- package/src/assets/jointjs/js/lodash/_baseForOwn.js +16 -0
- package/src/assets/jointjs/js/lodash/_baseForOwnRight.js +16 -0
- package/src/assets/jointjs/js/lodash/_baseForRight.js +15 -0
- package/src/assets/jointjs/js/lodash/_baseFunctions.js +19 -0
- package/src/assets/jointjs/js/lodash/_baseGet.js +24 -0
- package/src/assets/jointjs/js/lodash/_baseGetAllKeys.js +20 -0
- package/src/assets/jointjs/js/lodash/_baseGetTag.js +28 -0
- package/src/assets/jointjs/js/lodash/_baseGt.js +14 -0
- package/src/assets/jointjs/js/lodash/_baseHas.js +19 -0
- package/src/assets/jointjs/js/lodash/_baseHasIn.js +13 -0
- package/src/assets/jointjs/js/lodash/_baseInRange.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseIndexOf.js +20 -0
- package/src/assets/jointjs/js/lodash/_baseIndexOfWith.js +23 -0
- package/src/assets/jointjs/js/lodash/_baseIntersection.js +74 -0
- package/src/assets/jointjs/js/lodash/_baseInverter.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseInvoke.js +24 -0
- package/src/assets/jointjs/js/lodash/_baseIsArguments.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseIsArrayBuffer.js +17 -0
- package/src/assets/jointjs/js/lodash/_baseIsDate.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseIsEqual.js +28 -0
- package/src/assets/jointjs/js/lodash/_baseIsEqualDeep.js +83 -0
- package/src/assets/jointjs/js/lodash/_baseIsMap.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseIsMatch.js +62 -0
- package/src/assets/jointjs/js/lodash/_baseIsNaN.js +12 -0
- package/src/assets/jointjs/js/lodash/_baseIsNative.js +47 -0
- package/src/assets/jointjs/js/lodash/_baseIsRegExp.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseIsSet.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseIsTypedArray.js +60 -0
- package/src/assets/jointjs/js/lodash/_baseIteratee.js +31 -0
- package/src/assets/jointjs/js/lodash/_baseKeys.js +30 -0
- package/src/assets/jointjs/js/lodash/_baseKeysIn.js +33 -0
- package/src/assets/jointjs/js/lodash/_baseLodash.js +10 -0
- package/src/assets/jointjs/js/lodash/_baseLt.js +14 -0
- package/src/assets/jointjs/js/lodash/_baseMap.js +22 -0
- package/src/assets/jointjs/js/lodash/_baseMatches.js +22 -0
- package/src/assets/jointjs/js/lodash/_baseMatchesProperty.js +33 -0
- package/src/assets/jointjs/js/lodash/_baseMean.js +20 -0
- package/src/assets/jointjs/js/lodash/_baseMerge.js +42 -0
- package/src/assets/jointjs/js/lodash/_baseMergeDeep.js +94 -0
- package/src/assets/jointjs/js/lodash/_baseNth.js +20 -0
- package/src/assets/jointjs/js/lodash/_baseOrderBy.js +34 -0
- package/src/assets/jointjs/js/lodash/_basePick.js +19 -0
- package/src/assets/jointjs/js/lodash/_basePickBy.js +30 -0
- package/src/assets/jointjs/js/lodash/_baseProperty.js +14 -0
- package/src/assets/jointjs/js/lodash/_basePropertyDeep.js +16 -0
- package/src/assets/jointjs/js/lodash/_basePropertyOf.js +14 -0
- package/src/assets/jointjs/js/lodash/_basePullAll.js +51 -0
- package/src/assets/jointjs/js/lodash/_basePullAt.js +37 -0
- package/src/assets/jointjs/js/lodash/_baseRandom.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseRange.js +28 -0
- package/src/assets/jointjs/js/lodash/_baseReduce.js +23 -0
- package/src/assets/jointjs/js/lodash/_baseRepeat.js +35 -0
- package/src/assets/jointjs/js/lodash/_baseRest.js +17 -0
- package/src/assets/jointjs/js/lodash/_baseSample.js +15 -0
- package/src/assets/jointjs/js/lodash/_baseSampleSize.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseSet.js +47 -0
- package/src/assets/jointjs/js/lodash/_baseSetData.js +17 -0
- package/src/assets/jointjs/js/lodash/_baseSetToString.js +22 -0
- package/src/assets/jointjs/js/lodash/_baseShuffle.js +15 -0
- package/src/assets/jointjs/js/lodash/_baseSlice.js +31 -0
- package/src/assets/jointjs/js/lodash/_baseSome.js +22 -0
- package/src/assets/jointjs/js/lodash/_baseSortBy.js +21 -0
- package/src/assets/jointjs/js/lodash/_baseSortedIndex.js +42 -0
- package/src/assets/jointjs/js/lodash/_baseSortedIndexBy.js +64 -0
- package/src/assets/jointjs/js/lodash/_baseSortedUniq.js +30 -0
- package/src/assets/jointjs/js/lodash/_baseSum.js +24 -0
- package/src/assets/jointjs/js/lodash/_baseTimes.js +20 -0
- package/src/assets/jointjs/js/lodash/_baseToNumber.js +24 -0
- package/src/assets/jointjs/js/lodash/_baseToPairs.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseToString.js +37 -0
- package/src/assets/jointjs/js/lodash/_baseUnary.js +14 -0
- package/src/assets/jointjs/js/lodash/_baseUniq.js +72 -0
- package/src/assets/jointjs/js/lodash/_baseUnset.js +20 -0
- package/src/assets/jointjs/js/lodash/_baseUpdate.js +18 -0
- package/src/assets/jointjs/js/lodash/_baseValues.js +19 -0
- package/src/assets/jointjs/js/lodash/_baseWhile.js +26 -0
- package/src/assets/jointjs/js/lodash/_baseWrapperValue.js +25 -0
- package/src/assets/jointjs/js/lodash/_baseXor.js +36 -0
- package/src/assets/jointjs/js/lodash/_baseZipObject.js +23 -0
- package/src/assets/jointjs/js/lodash/_cacheHas.js +13 -0
- package/src/assets/jointjs/js/lodash/_castArrayLikeObject.js +14 -0
- package/src/assets/jointjs/js/lodash/_castFunction.js +14 -0
- package/src/assets/jointjs/js/lodash/_castPath.js +21 -0
- package/src/assets/jointjs/js/lodash/_castRest.js +14 -0
- package/src/assets/jointjs/js/lodash/_castSlice.js +18 -0
- package/src/assets/jointjs/js/lodash/_charsEndIndex.js +19 -0
- package/src/assets/jointjs/js/lodash/_charsStartIndex.js +20 -0
- package/src/assets/jointjs/js/lodash/_cloneArrayBuffer.js +16 -0
- package/src/assets/jointjs/js/lodash/_cloneBuffer.js +35 -0
- package/src/assets/jointjs/js/lodash/_cloneDataView.js +16 -0
- package/src/assets/jointjs/js/lodash/_cloneRegExp.js +17 -0
- package/src/assets/jointjs/js/lodash/_cloneSymbol.js +18 -0
- package/src/assets/jointjs/js/lodash/_cloneTypedArray.js +16 -0
- package/src/assets/jointjs/js/lodash/_compareAscending.js +41 -0
- package/src/assets/jointjs/js/lodash/_compareMultiple.js +44 -0
- package/src/assets/jointjs/js/lodash/_composeArgs.js +39 -0
- package/src/assets/jointjs/js/lodash/_composeArgsRight.js +41 -0
- package/src/assets/jointjs/js/lodash/_copyArray.js +20 -0
- package/src/assets/jointjs/js/lodash/_copyObject.js +40 -0
- package/src/assets/jointjs/js/lodash/_copySymbols.js +16 -0
- package/src/assets/jointjs/js/lodash/_copySymbolsIn.js +16 -0
- package/src/assets/jointjs/js/lodash/_coreJsData.js +6 -0
- package/src/assets/jointjs/js/lodash/_countHolders.js +21 -0
- package/src/assets/jointjs/js/lodash/_createAggregator.js +23 -0
- package/src/assets/jointjs/js/lodash/_createAssigner.js +37 -0
- package/src/assets/jointjs/js/lodash/_createBaseEach.js +32 -0
- package/src/assets/jointjs/js/lodash/_createBaseFor.js +25 -0
- package/src/assets/jointjs/js/lodash/_createBind.js +28 -0
- package/src/assets/jointjs/js/lodash/_createCaseFirst.js +33 -0
- package/src/assets/jointjs/js/lodash/_createCompounder.js +24 -0
- package/src/assets/jointjs/js/lodash/_createCtor.js +37 -0
- package/src/assets/jointjs/js/lodash/_createCurry.js +46 -0
- package/src/assets/jointjs/js/lodash/_createFind.js +25 -0
- package/src/assets/jointjs/js/lodash/_createFlow.js +78 -0
- package/src/assets/jointjs/js/lodash/_createHybrid.js +92 -0
- package/src/assets/jointjs/js/lodash/_createInverter.js +17 -0
- package/src/assets/jointjs/js/lodash/_createMathOperation.js +38 -0
- package/src/assets/jointjs/js/lodash/_createOver.js +27 -0
- package/src/assets/jointjs/js/lodash/_createPadding.js +33 -0
- package/src/assets/jointjs/js/lodash/_createPartial.js +43 -0
- package/src/assets/jointjs/js/lodash/_createRange.js +30 -0
- package/src/assets/jointjs/js/lodash/_createRecurry.js +56 -0
- package/src/assets/jointjs/js/lodash/_createRelationalOperation.js +20 -0
- package/src/assets/jointjs/js/lodash/_createRound.js +35 -0
- package/src/assets/jointjs/js/lodash/_createSet.js +19 -0
- package/src/assets/jointjs/js/lodash/_createToPairs.js +30 -0
- package/src/assets/jointjs/js/lodash/_createWrap.js +106 -0
- package/src/assets/jointjs/js/lodash/_customDefaultsAssignIn.js +29 -0
- package/src/assets/jointjs/js/lodash/_customDefaultsMerge.js +28 -0
- package/src/assets/jointjs/js/lodash/_customOmitClone.js +16 -0
- package/src/assets/jointjs/js/lodash/_deburrLetter.js +71 -0
- package/src/assets/jointjs/js/lodash/_defineProperty.js +11 -0
- package/src/assets/jointjs/js/lodash/_equalArrays.js +83 -0
- package/src/assets/jointjs/js/lodash/_equalByTag.js +112 -0
- package/src/assets/jointjs/js/lodash/_equalObjects.js +89 -0
- package/src/assets/jointjs/js/lodash/_escapeHtmlChar.js +21 -0
- package/src/assets/jointjs/js/lodash/_escapeStringChar.js +22 -0
- package/src/assets/jointjs/js/lodash/_flatRest.js +16 -0
- package/src/assets/jointjs/js/lodash/_freeGlobal.js +4 -0
- package/src/assets/jointjs/js/lodash/_getAllKeys.js +16 -0
- package/src/assets/jointjs/js/lodash/_getAllKeysIn.js +17 -0
- package/src/assets/jointjs/js/lodash/_getData.js +15 -0
- package/src/assets/jointjs/js/lodash/_getFuncName.js +31 -0
- package/src/assets/jointjs/js/lodash/_getHolder.js +13 -0
- package/src/assets/jointjs/js/lodash/_getMapData.js +18 -0
- package/src/assets/jointjs/js/lodash/_getMatchData.js +24 -0
- package/src/assets/jointjs/js/lodash/_getNative.js +17 -0
- package/src/assets/jointjs/js/lodash/_getPrototype.js +6 -0
- package/src/assets/jointjs/js/lodash/_getRawTag.js +46 -0
- package/src/assets/jointjs/js/lodash/_getSymbols.js +30 -0
- package/src/assets/jointjs/js/lodash/_getSymbolsIn.js +25 -0
- package/src/assets/jointjs/js/lodash/_getTag.js +58 -0
- package/src/assets/jointjs/js/lodash/_getValue.js +13 -0
- package/src/assets/jointjs/js/lodash/_getView.js +33 -0
- package/src/assets/jointjs/js/lodash/_getWrapDetails.js +17 -0
- package/src/assets/jointjs/js/lodash/_hasPath.js +39 -0
- package/src/assets/jointjs/js/lodash/_hasUnicode.js +26 -0
- package/src/assets/jointjs/js/lodash/_hasUnicodeWord.js +15 -0
- package/src/assets/jointjs/js/lodash/_hashClear.js +15 -0
- package/src/assets/jointjs/js/lodash/_hashDelete.js +17 -0
- package/src/assets/jointjs/js/lodash/_hashGet.js +30 -0
- package/src/assets/jointjs/js/lodash/_hashHas.js +23 -0
- package/src/assets/jointjs/js/lodash/_hashSet.js +23 -0
- package/src/assets/jointjs/js/lodash/_initCloneArray.js +26 -0
- package/src/assets/jointjs/js/lodash/_initCloneByTag.js +77 -0
- package/src/assets/jointjs/js/lodash/_initCloneObject.js +18 -0
- package/src/assets/jointjs/js/lodash/_insertWrapDetails.js +23 -0
- package/src/assets/jointjs/js/lodash/_isFlattenable.js +20 -0
- package/src/assets/jointjs/js/lodash/_isIndex.js +25 -0
- package/src/assets/jointjs/js/lodash/_isIterateeCall.js +30 -0
- package/src/assets/jointjs/js/lodash/_isKey.js +29 -0
- package/src/assets/jointjs/js/lodash/_isKeyable.js +15 -0
- package/src/assets/jointjs/js/lodash/_isLaziable.js +28 -0
- package/src/assets/jointjs/js/lodash/_isMaskable.js +14 -0
- package/src/assets/jointjs/js/lodash/_isMasked.js +20 -0
- package/src/assets/jointjs/js/lodash/_isPrototype.js +18 -0
- package/src/assets/jointjs/js/lodash/_isStrictComparable.js +15 -0
- package/src/assets/jointjs/js/lodash/_iteratorToArray.js +18 -0
- package/src/assets/jointjs/js/lodash/_lazyClone.js +23 -0
- package/src/assets/jointjs/js/lodash/_lazyReverse.js +23 -0
- package/src/assets/jointjs/js/lodash/_lazyValue.js +69 -0
- package/src/assets/jointjs/js/lodash/_listCacheClear.js +13 -0
- package/src/assets/jointjs/js/lodash/_listCacheDelete.js +35 -0
- package/src/assets/jointjs/js/lodash/_listCacheGet.js +19 -0
- package/src/assets/jointjs/js/lodash/_listCacheHas.js +16 -0
- package/src/assets/jointjs/js/lodash/_listCacheSet.js +26 -0
- package/src/assets/jointjs/js/lodash/_mapCacheClear.js +21 -0
- package/src/assets/jointjs/js/lodash/_mapCacheDelete.js +18 -0
- package/src/assets/jointjs/js/lodash/_mapCacheGet.js +16 -0
- package/src/assets/jointjs/js/lodash/_mapCacheHas.js +16 -0
- package/src/assets/jointjs/js/lodash/_mapCacheSet.js +22 -0
- package/src/assets/jointjs/js/lodash/_mapToArray.js +18 -0
- package/src/assets/jointjs/js/lodash/_matchesStrictComparable.js +20 -0
- package/src/assets/jointjs/js/lodash/_memoizeCapped.js +26 -0
- package/src/assets/jointjs/js/lodash/_mergeData.js +90 -0
- package/src/assets/jointjs/js/lodash/_metaMap.js +6 -0
- package/src/assets/jointjs/js/lodash/_nativeCreate.js +6 -0
- package/src/assets/jointjs/js/lodash/_nativeKeys.js +6 -0
- package/src/assets/jointjs/js/lodash/_nativeKeysIn.js +20 -0
- package/src/assets/jointjs/js/lodash/_nodeUtil.js +30 -0
- package/src/assets/jointjs/js/lodash/_objectToString.js +22 -0
- package/src/assets/jointjs/js/lodash/_overArg.js +15 -0
- package/src/assets/jointjs/js/lodash/_overRest.js +36 -0
- package/src/assets/jointjs/js/lodash/_parent.js +16 -0
- package/src/assets/jointjs/js/lodash/_reEscape.js +4 -0
- package/src/assets/jointjs/js/lodash/_reEvaluate.js +4 -0
- package/src/assets/jointjs/js/lodash/_reInterpolate.js +4 -0
- package/src/assets/jointjs/js/lodash/_realNames.js +4 -0
- package/src/assets/jointjs/js/lodash/_reorder.js +29 -0
- package/src/assets/jointjs/js/lodash/_replaceHolders.js +29 -0
- package/src/assets/jointjs/js/lodash/_root.js +9 -0
- package/src/assets/jointjs/js/lodash/_safeGet.js +21 -0
- package/src/assets/jointjs/js/lodash/_setCacheAdd.js +19 -0
- package/src/assets/jointjs/js/lodash/_setCacheHas.js +14 -0
- package/src/assets/jointjs/js/lodash/_setData.js +20 -0
- package/src/assets/jointjs/js/lodash/_setToArray.js +18 -0
- package/src/assets/jointjs/js/lodash/_setToPairs.js +18 -0
- package/src/assets/jointjs/js/lodash/_setToString.js +14 -0
- package/src/assets/jointjs/js/lodash/_setWrapToString.js +21 -0
- package/src/assets/jointjs/js/lodash/_shortOut.js +37 -0
- package/src/assets/jointjs/js/lodash/_shuffleSelf.js +28 -0
- package/src/assets/jointjs/js/lodash/_stackClear.js +15 -0
- package/src/assets/jointjs/js/lodash/_stackDelete.js +18 -0
- package/src/assets/jointjs/js/lodash/_stackGet.js +14 -0
- package/src/assets/jointjs/js/lodash/_stackHas.js +14 -0
- package/src/assets/jointjs/js/lodash/_stackSet.js +34 -0
- package/src/assets/jointjs/js/lodash/_strictIndexOf.js +23 -0
- package/src/assets/jointjs/js/lodash/_strictLastIndexOf.js +21 -0
- package/src/assets/jointjs/js/lodash/_stringSize.js +18 -0
- package/src/assets/jointjs/js/lodash/_stringToArray.js +18 -0
- package/src/assets/jointjs/js/lodash/_stringToPath.js +27 -0
- package/src/assets/jointjs/js/lodash/_toKey.js +21 -0
- package/src/assets/jointjs/js/lodash/_toSource.js +26 -0
- package/src/assets/jointjs/js/lodash/_unescapeHtmlChar.js +21 -0
- package/src/assets/jointjs/js/lodash/_unicodeSize.js +44 -0
- package/src/assets/jointjs/js/lodash/_unicodeToArray.js +40 -0
- package/src/assets/jointjs/js/lodash/_unicodeWords.js +69 -0
- package/src/assets/jointjs/js/lodash/_updateWrapDetails.js +46 -0
- package/src/assets/jointjs/js/lodash/_wrapperClone.js +23 -0
- package/src/assets/jointjs/js/lodash/add.js +22 -0
- package/src/assets/jointjs/js/lodash/after.js +42 -0
- package/src/assets/jointjs/js/lodash/array.js +67 -0
- package/src/assets/jointjs/js/lodash/ary.js +29 -0
- package/src/assets/jointjs/js/lodash/assign.js +58 -0
- package/src/assets/jointjs/js/lodash/assignIn.js +40 -0
- package/src/assets/jointjs/js/lodash/assignInWith.js +38 -0
- package/src/assets/jointjs/js/lodash/assignWith.js +37 -0
- package/src/assets/jointjs/js/lodash/at.js +23 -0
- package/src/assets/jointjs/js/lodash/attempt.js +35 -0
- package/src/assets/jointjs/js/lodash/before.js +40 -0
- package/src/assets/jointjs/js/lodash/bind.js +57 -0
- package/src/assets/jointjs/js/lodash/bindAll.js +41 -0
- package/src/assets/jointjs/js/lodash/bindKey.js +68 -0
- package/src/assets/jointjs/js/lodash/camelCase.js +29 -0
- package/src/assets/jointjs/js/lodash/capitalize.js +23 -0
- package/src/assets/jointjs/js/lodash/castArray.js +44 -0
- package/src/assets/jointjs/js/lodash/ceil.js +26 -0
- package/src/assets/jointjs/js/lodash/chain.js +38 -0
- package/src/assets/jointjs/js/lodash/chunk.js +50 -0
- package/src/assets/jointjs/js/lodash/clamp.js +39 -0
- package/src/assets/jointjs/js/lodash/clone.js +36 -0
- package/src/assets/jointjs/js/lodash/cloneDeep.js +29 -0
- package/src/assets/jointjs/js/lodash/cloneDeepWith.js +40 -0
- package/src/assets/jointjs/js/lodash/cloneWith.js +42 -0
- package/src/assets/jointjs/js/lodash/collection.js +30 -0
- package/src/assets/jointjs/js/lodash/commit.js +33 -0
- package/src/assets/jointjs/js/lodash/compact.js +31 -0
- package/src/assets/jointjs/js/lodash/concat.js +43 -0
- package/src/assets/jointjs/js/lodash/cond.js +60 -0
- package/src/assets/jointjs/js/lodash/conforms.js +35 -0
- package/src/assets/jointjs/js/lodash/conformsTo.js +32 -0
- package/src/assets/jointjs/js/lodash/constant.js +26 -0
- package/src/assets/jointjs/js/lodash/core.js +3854 -0
- package/src/assets/jointjs/js/lodash/core.min.js +29 -0
- package/src/assets/jointjs/js/lodash/countBy.js +40 -0
- package/src/assets/jointjs/js/lodash/create.js +43 -0
- package/src/assets/jointjs/js/lodash/curry.js +57 -0
- package/src/assets/jointjs/js/lodash/curryRight.js +54 -0
- package/src/assets/jointjs/js/lodash/date.js +3 -0
- package/src/assets/jointjs/js/lodash/debounce.js +191 -0
- package/src/assets/jointjs/js/lodash/deburr.js +45 -0
- package/src/assets/jointjs/js/lodash/defaultTo.js +25 -0
- package/src/assets/jointjs/js/lodash/defaults.js +64 -0
- package/src/assets/jointjs/js/lodash/defaultsDeep.js +30 -0
- package/src/assets/jointjs/js/lodash/defer.js +26 -0
- package/src/assets/jointjs/js/lodash/delay.js +28 -0
- package/src/assets/jointjs/js/lodash/difference.js +33 -0
- package/src/assets/jointjs/js/lodash/differenceBy.js +44 -0
- package/src/assets/jointjs/js/lodash/differenceWith.js +40 -0
- package/src/assets/jointjs/js/lodash/divide.js +22 -0
- package/src/assets/jointjs/js/lodash/drop.js +38 -0
- package/src/assets/jointjs/js/lodash/dropRight.js +39 -0
- package/src/assets/jointjs/js/lodash/dropRightWhile.js +45 -0
- package/src/assets/jointjs/js/lodash/dropWhile.js +45 -0
- package/src/assets/jointjs/js/lodash/each.js +1 -0
- package/src/assets/jointjs/js/lodash/eachRight.js +1 -0
- package/src/assets/jointjs/js/lodash/endsWith.js +43 -0
- package/src/assets/jointjs/js/lodash/entries.js +1 -0
- package/src/assets/jointjs/js/lodash/entriesIn.js +1 -0
- package/src/assets/jointjs/js/lodash/eq.js +37 -0
- package/src/assets/jointjs/js/lodash/escape.js +43 -0
- package/src/assets/jointjs/js/lodash/escapeRegExp.js +32 -0
- package/src/assets/jointjs/js/lodash/every.js +56 -0
- package/src/assets/jointjs/js/lodash/extend.js +1 -0
- package/src/assets/jointjs/js/lodash/extendWith.js +1 -0
- package/src/assets/jointjs/js/lodash/fill.js +45 -0
- package/src/assets/jointjs/js/lodash/filter.js +48 -0
- package/src/assets/jointjs/js/lodash/find.js +42 -0
- package/src/assets/jointjs/js/lodash/findIndex.js +55 -0
- package/src/assets/jointjs/js/lodash/findKey.js +44 -0
- package/src/assets/jointjs/js/lodash/findLast.js +25 -0
- package/src/assets/jointjs/js/lodash/findLastIndex.js +59 -0
- package/src/assets/jointjs/js/lodash/findLastKey.js +44 -0
- package/src/assets/jointjs/js/lodash/first.js +1 -0
- package/src/assets/jointjs/js/lodash/flatMap.js +29 -0
- package/src/assets/jointjs/js/lodash/flatMapDeep.js +31 -0
- package/src/assets/jointjs/js/lodash/flatMapDepth.js +31 -0
- package/src/assets/jointjs/js/lodash/flatten.js +22 -0
- package/src/assets/jointjs/js/lodash/flattenDeep.js +25 -0
- package/src/assets/jointjs/js/lodash/flattenDepth.js +33 -0
- package/src/assets/jointjs/js/lodash/flip.js +28 -0
- package/src/assets/jointjs/js/lodash/floor.js +26 -0
- package/src/assets/jointjs/js/lodash/flow.js +27 -0
- package/src/assets/jointjs/js/lodash/flowRight.js +26 -0
- package/src/assets/jointjs/js/lodash/forEach.js +41 -0
- package/src/assets/jointjs/js/lodash/forEachRight.js +31 -0
- package/src/assets/jointjs/js/lodash/forIn.js +39 -0
- package/src/assets/jointjs/js/lodash/forInRight.js +37 -0
- package/src/assets/jointjs/js/lodash/forOwn.js +36 -0
- package/src/assets/jointjs/js/lodash/forOwnRight.js +34 -0
- package/src/assets/jointjs/js/lodash/fp/F.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/T.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/__.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/_baseConvert.js +569 -0
- package/src/assets/jointjs/js/lodash/fp/_convertBrowser.js +18 -0
- package/src/assets/jointjs/js/lodash/fp/_falseOptions.js +7 -0
- package/src/assets/jointjs/js/lodash/fp/_mapping.js +358 -0
- package/src/assets/jointjs/js/lodash/fp/_util.js +16 -0
- package/src/assets/jointjs/js/lodash/fp/add.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/after.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/all.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/allPass.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/always.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/any.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/anyPass.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/apply.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/array.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/ary.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assign.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignAllWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignInAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignInAllWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignInWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assignWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/assoc.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/assocPath.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/at.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/attempt.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/before.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/bind.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/bindAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/bindKey.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/camelCase.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/capitalize.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/castArray.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/ceil.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/chain.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/chunk.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/clamp.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/clone.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/cloneDeep.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/cloneDeepWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/cloneWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/collection.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/commit.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/compact.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/complement.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/compose.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/concat.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/cond.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/conforms.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/conformsTo.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/constant.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/contains.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/convert.js +18 -0
- package/src/assets/jointjs/js/lodash/fp/countBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/create.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/curry.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/curryN.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/curryRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/curryRightN.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/date.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/debounce.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/deburr.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/defaultTo.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/defaults.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/defaultsAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/defaultsDeep.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/defaultsDeepAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/defer.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/delay.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/difference.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/differenceBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/differenceWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/dissoc.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/dissocPath.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/divide.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/drop.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/dropLast.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/dropLastWhile.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/dropRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/dropRightWhile.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/dropWhile.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/each.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/eachRight.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/endsWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/entries.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/entriesIn.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/eq.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/equals.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/escape.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/escapeRegExp.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/every.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/extend.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/extendAll.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/extendAllWith.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/extendWith.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/fill.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/filter.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/find.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findIndex.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findIndexFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findKey.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findLast.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findLastFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findLastIndex.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findLastIndexFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/findLastKey.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/first.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/flatMap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flatMapDeep.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flatMapDepth.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flatten.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flattenDeep.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flattenDepth.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flip.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/floor.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flow.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/flowRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/forEach.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/forEachRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/forIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/forInRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/forOwn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/forOwnRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/fromPairs.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/function.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/functions.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/functionsIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/get.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/getOr.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/groupBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/gt.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/gte.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/has.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/hasIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/head.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/identical.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/identity.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/inRange.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/includes.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/includesFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/indexBy.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/indexOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/indexOfFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/init.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/initial.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/intersection.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/intersectionBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/intersectionWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/invert.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/invertBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/invertObj.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/invoke.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/invokeArgs.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/invokeArgsMap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/invokeMap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isArguments.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isArray.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isArrayBuffer.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isArrayLike.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isArrayLikeObject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isBoolean.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isBuffer.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isDate.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isElement.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isEmpty.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isEqual.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isEqualWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isError.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isFinite.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isFunction.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isInteger.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isLength.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isMap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isMatch.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isMatchWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isNaN.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isNative.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isNil.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isNull.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isNumber.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isObject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isObjectLike.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isPlainObject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isRegExp.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isSafeInteger.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isSet.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isString.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isSymbol.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isTypedArray.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isUndefined.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isWeakMap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/isWeakSet.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/iteratee.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/join.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/juxt.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/kebabCase.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/keyBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/keys.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/keysIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lang.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/last.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lastIndexOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lastIndexOfFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lowerCase.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lowerFirst.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lt.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/lte.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/map.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mapKeys.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mapValues.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/matches.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/matchesProperty.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/math.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/max.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/maxBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mean.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/meanBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/memoize.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/merge.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mergeAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mergeAllWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mergeWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/method.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/methodOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/min.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/minBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/mixin.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/multiply.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/nAry.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/negate.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/next.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/noop.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/now.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/nth.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/nthArg.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/number.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/object.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/omit.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/omitAll.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/omitBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/once.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/orderBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/over.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/overArgs.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/overEvery.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/overSome.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pad.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/padChars.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/padCharsEnd.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/padCharsStart.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/padEnd.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/padStart.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/parseInt.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/partial.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/partialRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/partition.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/path.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/pathEq.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/pathOr.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/paths.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/pick.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pickAll.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/pickBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pipe.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/placeholder.js +6 -0
- package/src/assets/jointjs/js/lodash/fp/plant.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pluck.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/prop.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/propEq.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/propOr.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/property.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/propertyOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/props.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/pull.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pullAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pullAllBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pullAllWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/pullAt.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/random.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/range.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/rangeRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/rangeStep.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/rangeStepRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/rearg.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/reduce.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/reduceRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/reject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/remove.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/repeat.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/replace.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/rest.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/restFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/result.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/reverse.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/round.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sample.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sampleSize.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/seq.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/set.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/setWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/shuffle.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/size.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/slice.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/snakeCase.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/some.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedIndex.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedIndexBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedIndexOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedLastIndex.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedLastIndexBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedLastIndexOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedUniq.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sortedUniqBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/split.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/spread.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/spreadFrom.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/startCase.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/startsWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/string.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/stubArray.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/stubFalse.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/stubObject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/stubString.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/stubTrue.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/subtract.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sum.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/sumBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/symmetricDifference.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/symmetricDifferenceBy.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/symmetricDifferenceWith.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/tail.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/take.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/takeLast.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/takeLastWhile.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/takeRight.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/takeRightWhile.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/takeWhile.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/tap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/template.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/templateSettings.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/throttle.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/thru.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/times.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toArray.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toFinite.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toInteger.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toIterator.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toJSON.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toLength.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toLower.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toNumber.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toPairs.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toPairsIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toPath.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toPlainObject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toSafeInteger.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toString.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/toUpper.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/transform.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/trim.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/trimChars.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/trimCharsEnd.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/trimCharsStart.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/trimEnd.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/trimStart.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/truncate.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unapply.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/unary.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unescape.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/union.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unionBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unionWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/uniq.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/uniqBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/uniqWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/uniqueId.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unnest.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/unset.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unzip.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/unzipWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/update.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/updateWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/upperCase.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/upperFirst.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/useWith.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/util.js +2 -0
- package/src/assets/jointjs/js/lodash/fp/value.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/valueOf.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/values.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/valuesIn.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/where.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/whereEq.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/without.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/words.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/wrap.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/wrapperAt.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/wrapperChain.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/wrapperLodash.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/wrapperReverse.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/wrapperValue.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/xor.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/xorBy.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/xorWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/zip.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/zipAll.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/zipObj.js +1 -0
- package/src/assets/jointjs/js/lodash/fp/zipObject.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/zipObjectDeep.js +5 -0
- package/src/assets/jointjs/js/lodash/fp/zipWith.js +5 -0
- package/src/assets/jointjs/js/lodash/fp.js +2 -0
- package/src/assets/jointjs/js/lodash/fromPairs.js +28 -0
- package/src/assets/jointjs/js/lodash/function.js +25 -0
- package/src/assets/jointjs/js/lodash/functions.js +31 -0
- package/src/assets/jointjs/js/lodash/functionsIn.js +31 -0
- package/src/assets/jointjs/js/lodash/get.js +33 -0
- package/src/assets/jointjs/js/lodash/groupBy.js +41 -0
- package/src/assets/jointjs/js/lodash/gt.js +29 -0
- package/src/assets/jointjs/js/lodash/gte.js +30 -0
- package/src/assets/jointjs/js/lodash/has.js +35 -0
- package/src/assets/jointjs/js/lodash/hasIn.js +34 -0
- package/src/assets/jointjs/js/lodash/head.js +23 -0
- package/src/assets/jointjs/js/lodash/identity.js +21 -0
- package/src/assets/jointjs/js/lodash/inRange.js +55 -0
- package/src/assets/jointjs/js/lodash/includes.js +53 -0
- package/src/assets/jointjs/js/lodash/index.js +1 -0
- package/src/assets/jointjs/js/lodash/indexOf.js +42 -0
- package/src/assets/jointjs/js/lodash/initial.js +22 -0
- package/src/assets/jointjs/js/lodash/intersection.js +30 -0
- package/src/assets/jointjs/js/lodash/intersectionBy.js +45 -0
- package/src/assets/jointjs/js/lodash/intersectionWith.js +41 -0
- package/src/assets/jointjs/js/lodash/invert.js +42 -0
- package/src/assets/jointjs/js/lodash/invertBy.js +56 -0
- package/src/assets/jointjs/js/lodash/invoke.js +24 -0
- package/src/assets/jointjs/js/lodash/invokeMap.js +41 -0
- package/src/assets/jointjs/js/lodash/isArguments.js +36 -0
- package/src/assets/jointjs/js/lodash/isArray.js +26 -0
- package/src/assets/jointjs/js/lodash/isArrayBuffer.js +27 -0
- package/src/assets/jointjs/js/lodash/isArrayLike.js +33 -0
- package/src/assets/jointjs/js/lodash/isArrayLikeObject.js +33 -0
- package/src/assets/jointjs/js/lodash/isBoolean.js +29 -0
- package/src/assets/jointjs/js/lodash/isBuffer.js +38 -0
- package/src/assets/jointjs/js/lodash/isDate.js +27 -0
- package/src/assets/jointjs/js/lodash/isElement.js +25 -0
- package/src/assets/jointjs/js/lodash/isEmpty.js +77 -0
- package/src/assets/jointjs/js/lodash/isEqual.js +35 -0
- package/src/assets/jointjs/js/lodash/isEqualWith.js +41 -0
- package/src/assets/jointjs/js/lodash/isError.js +36 -0
- package/src/assets/jointjs/js/lodash/isFinite.js +36 -0
- package/src/assets/jointjs/js/lodash/isFunction.js +37 -0
- package/src/assets/jointjs/js/lodash/isInteger.js +33 -0
- package/src/assets/jointjs/js/lodash/isLength.js +35 -0
- package/src/assets/jointjs/js/lodash/isMap.js +27 -0
- package/src/assets/jointjs/js/lodash/isMatch.js +36 -0
- package/src/assets/jointjs/js/lodash/isMatchWith.js +41 -0
- package/src/assets/jointjs/js/lodash/isNaN.js +38 -0
- package/src/assets/jointjs/js/lodash/isNative.js +40 -0
- package/src/assets/jointjs/js/lodash/isNil.js +25 -0
- package/src/assets/jointjs/js/lodash/isNull.js +22 -0
- package/src/assets/jointjs/js/lodash/isNumber.js +38 -0
- package/src/assets/jointjs/js/lodash/isObject.js +31 -0
- package/src/assets/jointjs/js/lodash/isObjectLike.js +29 -0
- package/src/assets/jointjs/js/lodash/isPlainObject.js +62 -0
- package/src/assets/jointjs/js/lodash/isRegExp.js +27 -0
- package/src/assets/jointjs/js/lodash/isSafeInteger.js +37 -0
- package/src/assets/jointjs/js/lodash/isSet.js +27 -0
- package/src/assets/jointjs/js/lodash/isString.js +30 -0
- package/src/assets/jointjs/js/lodash/isSymbol.js +29 -0
- package/src/assets/jointjs/js/lodash/isTypedArray.js +27 -0
- package/src/assets/jointjs/js/lodash/isUndefined.js +22 -0
- package/src/assets/jointjs/js/lodash/isWeakMap.js +28 -0
- package/src/assets/jointjs/js/lodash/isWeakSet.js +28 -0
- package/src/assets/jointjs/js/lodash/iteratee.js +53 -0
- package/src/assets/jointjs/js/lodash/join.js +26 -0
- package/src/assets/jointjs/js/lodash/kebabCase.js +28 -0
- package/src/assets/jointjs/js/lodash/keyBy.js +36 -0
- package/src/assets/jointjs/js/lodash/keys.js +37 -0
- package/src/assets/jointjs/js/lodash/keysIn.js +32 -0
- package/src/assets/jointjs/js/lodash/lang.js +58 -0
- package/src/assets/jointjs/js/lodash/last.js +20 -0
- package/src/assets/jointjs/js/lodash/lastIndexOf.js +46 -0
- package/src/assets/jointjs/js/lodash/lodash.js +17112 -0
- package/src/assets/jointjs/js/lodash/lodash.min.js +137 -0
- package/src/assets/jointjs/js/lodash/lowerCase.js +27 -0
- package/src/assets/jointjs/js/lodash/lowerFirst.js +22 -0
- package/src/assets/jointjs/js/lodash/lt.js +29 -0
- package/src/assets/jointjs/js/lodash/lte.js +30 -0
- package/src/assets/jointjs/js/lodash/map.js +53 -0
- package/src/assets/jointjs/js/lodash/mapKeys.js +36 -0
- package/src/assets/jointjs/js/lodash/mapValues.js +43 -0
- package/src/assets/jointjs/js/lodash/matches.js +39 -0
- package/src/assets/jointjs/js/lodash/matchesProperty.js +37 -0
- package/src/assets/jointjs/js/lodash/math.js +17 -0
- package/src/assets/jointjs/js/lodash/max.js +29 -0
- package/src/assets/jointjs/js/lodash/maxBy.js +34 -0
- package/src/assets/jointjs/js/lodash/mean.js +22 -0
- package/src/assets/jointjs/js/lodash/meanBy.js +31 -0
- package/src/assets/jointjs/js/lodash/memoize.js +73 -0
- package/src/assets/jointjs/js/lodash/merge.js +39 -0
- package/src/assets/jointjs/js/lodash/mergeWith.js +39 -0
- package/src/assets/jointjs/js/lodash/method.js +34 -0
- package/src/assets/jointjs/js/lodash/methodOf.js +33 -0
- package/src/assets/jointjs/js/lodash/min.js +29 -0
- package/src/assets/jointjs/js/lodash/minBy.js +34 -0
- package/src/assets/jointjs/js/lodash/mixin.js +74 -0
- package/src/assets/jointjs/js/lodash/multiply.js +22 -0
- package/src/assets/jointjs/js/lodash/negate.js +40 -0
- package/src/assets/jointjs/js/lodash/next.js +35 -0
- package/src/assets/jointjs/js/lodash/noop.js +17 -0
- package/src/assets/jointjs/js/lodash/now.js +23 -0
- package/src/assets/jointjs/js/lodash/nth.js +29 -0
- package/src/assets/jointjs/js/lodash/nthArg.js +32 -0
- package/src/assets/jointjs/js/lodash/number.js +5 -0
- package/src/assets/jointjs/js/lodash/object.js +49 -0
- package/src/assets/jointjs/js/lodash/omit.js +57 -0
- package/src/assets/jointjs/js/lodash/omitBy.js +29 -0
- package/src/assets/jointjs/js/lodash/once.js +25 -0
- package/src/assets/jointjs/js/lodash/orderBy.js +47 -0
- package/src/assets/jointjs/js/lodash/org.js +39 -0
- package/src/assets/jointjs/js/lodash/over.js +24 -0
- package/src/assets/jointjs/js/lodash/overArgs.js +61 -0
- package/src/assets/jointjs/js/lodash/overEvery.js +30 -0
- package/src/assets/jointjs/js/lodash/overSome.js +30 -0
- package/src/assets/jointjs/js/lodash/package.json +1 -0
- package/src/assets/jointjs/js/lodash/pad.js +49 -0
- package/src/assets/jointjs/js/lodash/padEnd.js +39 -0
- package/src/assets/jointjs/js/lodash/padStart.js +39 -0
- package/src/assets/jointjs/js/lodash/parseInt.js +43 -0
- package/src/assets/jointjs/js/lodash/partial.js +50 -0
- package/src/assets/jointjs/js/lodash/partialRight.js +49 -0
- package/src/assets/jointjs/js/lodash/partition.js +43 -0
- package/src/assets/jointjs/js/lodash/pick.js +25 -0
- package/src/assets/jointjs/js/lodash/pickBy.js +37 -0
- package/src/assets/jointjs/js/lodash/plant.js +48 -0
- package/src/assets/jointjs/js/lodash/property.js +32 -0
- package/src/assets/jointjs/js/lodash/propertyOf.js +30 -0
- package/src/assets/jointjs/js/lodash/pull.js +29 -0
- package/src/assets/jointjs/js/lodash/pullAll.js +29 -0
- package/src/assets/jointjs/js/lodash/pullAllBy.js +33 -0
- package/src/assets/jointjs/js/lodash/pullAllWith.js +32 -0
- package/src/assets/jointjs/js/lodash/pullAt.js +43 -0
- package/src/assets/jointjs/js/lodash/random.js +82 -0
- package/src/assets/jointjs/js/lodash/range.js +46 -0
- package/src/assets/jointjs/js/lodash/rangeRight.js +41 -0
- package/src/assets/jointjs/js/lodash/rearg.js +33 -0
- package/src/assets/jointjs/js/lodash/reduce.js +51 -0
- package/src/assets/jointjs/js/lodash/reduceRight.js +36 -0
- package/src/assets/jointjs/js/lodash/reject.js +46 -0
- package/src/assets/jointjs/js/lodash/remove.js +53 -0
- package/src/assets/jointjs/js/lodash/repeat.js +37 -0
- package/src/assets/jointjs/js/lodash/replace.js +29 -0
- package/src/assets/jointjs/js/lodash/rest.js +40 -0
- package/src/assets/jointjs/js/lodash/result.js +56 -0
- package/src/assets/jointjs/js/lodash/reverse.js +34 -0
- package/src/assets/jointjs/js/lodash/round.js +26 -0
- package/src/assets/jointjs/js/lodash/sample.js +24 -0
- package/src/assets/jointjs/js/lodash/sampleSize.js +37 -0
- package/src/assets/jointjs/js/lodash/seq.js +16 -0
- package/src/assets/jointjs/js/lodash/set.js +35 -0
- package/src/assets/jointjs/js/lodash/setWith.js +32 -0
- package/src/assets/jointjs/js/lodash/shuffle.js +25 -0
- package/src/assets/jointjs/js/lodash/size.js +46 -0
- package/src/assets/jointjs/js/lodash/slice.js +37 -0
- package/src/assets/jointjs/js/lodash/snakeCase.js +28 -0
- package/src/assets/jointjs/js/lodash/some.js +51 -0
- package/src/assets/jointjs/js/lodash/sortBy.js +48 -0
- package/src/assets/jointjs/js/lodash/sortedIndex.js +24 -0
- package/src/assets/jointjs/js/lodash/sortedIndexBy.js +33 -0
- package/src/assets/jointjs/js/lodash/sortedIndexOf.js +31 -0
- package/src/assets/jointjs/js/lodash/sortedLastIndex.js +25 -0
- package/src/assets/jointjs/js/lodash/sortedLastIndexBy.js +33 -0
- package/src/assets/jointjs/js/lodash/sortedLastIndexOf.js +31 -0
- package/src/assets/jointjs/js/lodash/sortedUniq.js +24 -0
- package/src/assets/jointjs/js/lodash/sortedUniqBy.js +26 -0
- package/src/assets/jointjs/js/lodash/split.js +52 -0
- package/src/assets/jointjs/js/lodash/spread.js +63 -0
- package/src/assets/jointjs/js/lodash/startCase.js +29 -0
- package/src/assets/jointjs/js/lodash/startsWith.js +39 -0
- package/src/assets/jointjs/js/lodash/string.js +33 -0
- package/src/assets/jointjs/js/lodash/stubArray.js +23 -0
- package/src/assets/jointjs/js/lodash/stubFalse.js +18 -0
- package/src/assets/jointjs/js/lodash/stubObject.js +23 -0
- package/src/assets/jointjs/js/lodash/stubString.js +18 -0
- package/src/assets/jointjs/js/lodash/stubTrue.js +18 -0
- package/src/assets/jointjs/js/lodash/subtract.js +22 -0
- package/src/assets/jointjs/js/lodash/sum.js +24 -0
- package/src/assets/jointjs/js/lodash/sumBy.js +33 -0
- package/src/assets/jointjs/js/lodash/tag.js +43 -0
- package/src/assets/jointjs/js/lodash/tail.js +22 -0
- package/src/assets/jointjs/js/lodash/take.js +37 -0
- package/src/assets/jointjs/js/lodash/takeRight.js +39 -0
- package/src/assets/jointjs/js/lodash/takeRightWhile.js +45 -0
- package/src/assets/jointjs/js/lodash/takeWhile.js +45 -0
- package/src/assets/jointjs/js/lodash/tap.js +29 -0
- package/src/assets/jointjs/js/lodash/template.js +253 -0
- package/src/assets/jointjs/js/lodash/templateSettings.js +67 -0
- package/src/assets/jointjs/js/lodash/throttle.js +69 -0
- package/src/assets/jointjs/js/lodash/thru.js +28 -0
- package/src/assets/jointjs/js/lodash/times.js +51 -0
- package/src/assets/jointjs/js/lodash/toArray.js +58 -0
- package/src/assets/jointjs/js/lodash/toFinite.js +42 -0
- package/src/assets/jointjs/js/lodash/toInteger.js +36 -0
- package/src/assets/jointjs/js/lodash/toIterator.js +23 -0
- package/src/assets/jointjs/js/lodash/toJSON.js +1 -0
- package/src/assets/jointjs/js/lodash/toLength.js +38 -0
- package/src/assets/jointjs/js/lodash/toLower.js +28 -0
- package/src/assets/jointjs/js/lodash/toNumber.js +66 -0
- package/src/assets/jointjs/js/lodash/toPairs.js +30 -0
- package/src/assets/jointjs/js/lodash/toPairsIn.js +30 -0
- package/src/assets/jointjs/js/lodash/toPath.js +33 -0
- package/src/assets/jointjs/js/lodash/toPlainObject.js +32 -0
- package/src/assets/jointjs/js/lodash/toSafeInteger.js +37 -0
- package/src/assets/jointjs/js/lodash/toString.js +28 -0
- package/src/assets/jointjs/js/lodash/toUpper.js +28 -0
- package/src/assets/jointjs/js/lodash/transform.js +65 -0
- package/src/assets/jointjs/js/lodash/trim.js +49 -0
- package/src/assets/jointjs/js/lodash/trimEnd.js +43 -0
- package/src/assets/jointjs/js/lodash/trimStart.js +43 -0
- package/src/assets/jointjs/js/lodash/truncate.js +111 -0
- package/src/assets/jointjs/js/lodash/unary.js +22 -0
- package/src/assets/jointjs/js/lodash/unescape.js +34 -0
- package/src/assets/jointjs/js/lodash/union.js +26 -0
- package/src/assets/jointjs/js/lodash/unionBy.js +39 -0
- package/src/assets/jointjs/js/lodash/unionWith.js +34 -0
- package/src/assets/jointjs/js/lodash/uniq.js +25 -0
- package/src/assets/jointjs/js/lodash/uniqBy.js +31 -0
- package/src/assets/jointjs/js/lodash/uniqWith.js +28 -0
- package/src/assets/jointjs/js/lodash/uniqueId.js +28 -0
- package/src/assets/jointjs/js/lodash/unset.js +34 -0
- package/src/assets/jointjs/js/lodash/unzip.js +45 -0
- package/src/assets/jointjs/js/lodash/unzipWith.js +39 -0
- package/src/assets/jointjs/js/lodash/update.js +35 -0
- package/src/assets/jointjs/js/lodash/updateWith.js +33 -0
- package/src/assets/jointjs/js/lodash/upperCase.js +27 -0
- package/src/assets/jointjs/js/lodash/upperFirst.js +22 -0
- package/src/assets/jointjs/js/lodash/util.js +34 -0
- package/src/assets/jointjs/js/lodash/value.js +1 -0
- package/src/assets/jointjs/js/lodash/valueOf.js +1 -0
- package/src/assets/jointjs/js/lodash/values.js +34 -0
- package/src/assets/jointjs/js/lodash/valuesIn.js +32 -0
- package/src/assets/jointjs/js/lodash/without.js +31 -0
- package/src/assets/jointjs/js/lodash/words.js +35 -0
- package/src/assets/jointjs/js/lodash/wrap.js +30 -0
- package/src/assets/jointjs/js/lodash/wrapperAt.js +48 -0
- package/src/assets/jointjs/js/lodash/wrapperChain.js +34 -0
- package/src/assets/jointjs/js/lodash/wrapperLodash.js +147 -0
- package/src/assets/jointjs/js/lodash/wrapperReverse.js +44 -0
- package/src/assets/jointjs/js/lodash/wrapperValue.js +21 -0
- package/src/assets/jointjs/js/lodash/xor.js +28 -0
- package/src/assets/jointjs/js/lodash/xorBy.js +39 -0
- package/src/assets/jointjs/js/lodash/xorWith.js +34 -0
- package/src/assets/jointjs/js/lodash/zip.js +22 -0
- package/src/assets/jointjs/js/lodash/zipObject.js +24 -0
- package/src/assets/jointjs/js/lodash/zipObjectDeep.js +23 -0
- package/src/assets/jointjs/js/lodash/zipWith.js +32 -0
- package/src/assets/jointjs/js/rappid.js +65022 -0
- package/src/assets/jointjs/scss/bpmn.scss +884 -0
- package/src/assets/jointjs/scss/rappid.scss +8879 -0
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +2 -2
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +7 -4
- package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +63 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +9 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +20 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/converters.js +378 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemap.js +14 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +183 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +49 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +127 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +82 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +234 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimage.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkactionsview.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkformview.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/inserttooltipcommand.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipediting.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/ui/actionsview.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/bpmn.svg +20 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/imagemap.svg +56 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/anchor.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/link.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkactions.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkform.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkimage.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/tooltip.css +0 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +156 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.scss +0 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.scss +27 -0
- package/src/lib/qms-ckeditor-components/styles/_modules.scss +19 -1
- package/src/themes/_color.scss +8 -0
- package/src/themes/core/_colors.scss +2 -0
- package/src/themes/core/_side-sheet.scss +1 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFLN0UsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUlqQyxNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FB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R0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNWLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Ozs7WUFwdENGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xyXG5pbXBvcnQgVG9vbGJhckZ1bmN0aW9uIGZyb20gJy4uL2NvbW1vbi9icG1uL3Rvb2xiYXIuZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBGbG93Q2hhcnRDb25zdCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3QnO1xyXG5pbXBvcnQgeyBGbG93Y2hhcnRWaWV3TW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tICcuLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXInO1xyXG5cclxuLyogRGVjbGFyZSBqb2ludGpzIG9iamVjdCAqL1xyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xyXG5sZXQgZ3JhcGg6IGFueTtcclxubGV0IHBhcGVyOiBhbnk7XHJcbmxldCB0b29sYmFyQ29uZmlnOiBhbnk7XHJcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcG1uU2VydmljZSB7XHJcbiAgcHVibGljIGlzU2F2ZUFzVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEZWxldGVUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgcHVibGljIGlzVGVtcCA9IHRydWU7XHJcbiAgcHVibGljIGpzb25UZW1wQ29udGVudCA9ICcnO1xyXG4gIHB1YmxpYyBpc1Jlc2V0ID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2VsZWN0ZWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBqc29uT3JpZ2luYWxDb250ZW50ID0gJyc7XHJcblxyXG4gIGJ1aWxkRGlhZ3JhbShcclxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcclxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxyXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXHJcbiAgICBqc29uQ29udGVudDogYW55LFxyXG4gICAgZWRpdE1vZGU6IGFueSxcclxuICAgIExBTkc6IGFueVxyXG4gICkge1xyXG4gICAgd2luZG93W2BJU19OT1RfU0hPV19BR0FJTmBdID0gZmFsc2U7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuRURJVF9NT0RFXSA9IGVkaXRNb2RlO1xyXG4gICAgam9pbnQuc2V0VGhlbWUoYnBtblRoZW1lKTtcclxuXHJcbiAgICBpZiAoanNvbkNvbnRlbnQpIHtcclxuICAgICAganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGpzb25Db250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGpzb25Db250ZW50ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ2RBdXRoID0gd2luZG93W2BnZEF1dGhgXTtcclxuICAgIGNvbnN0IGdkTG9hZCA9IHdpbmRvd1tgZ2RMb2FkYF07XHJcbiAgICBjb25zdCBnZFNhdmUgPSB3aW5kb3dbYGdkU2F2ZWBdO1xyXG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcblxyXG4gICAgbGV0IGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xyXG5cclxuICAgIHRvb2xiYXJDb25maWcgPSBUb29sYmFyRnVuY3Rpb24uZ2V0VG9vbGJhckNvbmZpZ3VyYXRpb24oTEFORyk7XHJcbiAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbjogQWRkIHRlbXBsYXRlIGxpc3QgKi9cclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzICYmIGRpYWdyYW1UZW1wbGF0ZXMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+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
|