@wavemaker/app-ng-runtime 11.9.3-next.27570 → 11.9.3-next.27571
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.
|
@@ -547,7 +547,7 @@
|
|
|
547
547
|
*/
|
|
548
548
|
const customiseTooltip = (chart, propertyValueMap, widgetContext, label) => {
|
|
549
549
|
d3.selectAll('.nvtooltip').style('opacity', 0);
|
|
550
|
-
chart.tooltip.contentGenerator(key => {
|
|
550
|
+
chart.tooltip.contentGenerator((key, propertyValueMap) => {
|
|
551
551
|
let xValue = key.data.x, yValue;
|
|
552
552
|
yValue = getNumberFormatedData(propertyValueMap.ynumberformat, key.data.y);
|
|
553
553
|
if (isPieType(widgetContext.type)) {
|
|
@@ -485,7 +485,7 @@ export const isShowLegend = value => {
|
|
|
485
485
|
*/
|
|
486
486
|
export const customiseTooltip = (chart, propertyValueMap, widgetContext, label) => {
|
|
487
487
|
d3.selectAll('.nvtooltip').style('opacity', 0);
|
|
488
|
-
chart.tooltip.contentGenerator(key => {
|
|
488
|
+
chart.tooltip.contentGenerator((key, propertyValueMap) => {
|
|
489
489
|
let xValue = key.data.x, yValue;
|
|
490
490
|
yValue = getNumberFormatedData(propertyValueMap.ynumberformat, key.data.y);
|
|
491
491
|
if (isPieType(widgetContext.type)) {
|
|
@@ -718,4 +718,4 @@ export const postPlotChartProcess = (widgetContext, isPreview) => {
|
|
|
718
718
|
};
|
|
719
719
|
// @ts-ignore
|
|
720
720
|
export const getDateList = () => dateList;
|
|
721
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBT3JHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUNwRyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRXpGLE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsRUFDdkQsTUFBTSxHQUFHO0lBQ0wsYUFBYSxFQUFFO1FBQ1gsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNwTyxPQUFPLEVBQUU7WUFDTCxpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLFdBQVcsRUFBRSxTQUFTO1NBQ3pCO0tBQ0o7SUFD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QUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLGFBQWE7QUFDYixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxTQUFVLEVBQUUsRUFBRTtJQUM5RCxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztJQUNoRCxtRkFBbUY7SUFDbkYsSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxlQUFlLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsMERBQTBEO0lBQzFELGtDQUFrQztJQUNsQyx5RUFBeUU7SUFDekUsSUFBSTtBQUNSLENBQUMsQ0FBQztBQUVGLGFBQWE7QUFDYixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc0VtcHR5T2JqZWN0LCBwcmV0dGlmeUxhYmVsc30gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtmb3JFYWNoLCBpbmNsdWRlcywgaW52ZXJ0LCBpc0FycmF5LCBpc0Zpbml0ZSwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCBzcGxpdH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuZGVjbGFyZSBjb25zdCBkMywgbnY7XG5cbmV4cG9ydCBjb25zdCBjaGFydFR5cGVzID0gWydDb2x1bW4nLCAnTGluZScsICdBcmVhJywgJ0N1bXVsYXRpdmUgTGluZScsICdCYXInLCAnUGllJywgJ0RvbnV0JywgJ0J1YmJsZSddLFxuICAgIGFsbFNoYXBlcyA9IFsnY2lyY2xlJywgJ3NxdWFyZScsICdkaWFtb25kJywgJ2Nyb3NzJywgJ3RyaWFuZ2xlLXVwJywgJ3RyaWFuZ2xlLWRvd24nXTtcblxuY29uc3QgZGF0ZUxpc3QgPSBbJzAxLzAxLzIwMDEnLCAnMDEvMDEvMjAwMicsICcwMS8wMS8yMDAzJ10sXG4gICAgdGhlbWVzID0ge1xuICAgICAgICAnVGVycmVzdHJpYWwnOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnIzFmNzdiNCcsICcjYWVjN2U4JywgJyNmZjdmMGUnLCAnI2ZmYmI3OCcsICcjMmNhMDJjJywgJyM5OGRmOGEnLCAnI2Q2MjcyOCcsICcjZmY5ODk2JywgJyM5NDY3YmQnLCAnI2M1YjBkNScsICcjOGM1NjRiJywgJyNjNDljOTQnLCAnI2UzNzdjMicsICcjZjdiNmQyJywgJyM3ZjdmN2YnLCAnI2M3YzdjNycsICcjYmNiZDIyJywgJyNkYmRiOGQnLCAnIzE3YmVjZicsICcjOWVkYWU1J10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjZGU3ZDI4JyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdBbm5hYmVsbGUnOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnIzM5M2I3OScsICcjNTI1NGEzJywgJyM2YjZlY2YnLCAnIzljOWVkZScsICcjNjM3OTM5JywgJyM4Y2EyNTInLCAnI2I1Y2Y2YicsICcjY2VkYjljJywgJyM4YzZkMzEnLCAnI2JkOWUzOScsICcjZTdiYTUyJywgJyNlN2NiOTQnLCAnIzg0M2MzOScsICcjYWQ0OTRhJywgJyNkNjYxNmInLCAnI2U3OTY5YycsICcjN2I0MTczJywgJyNhNTUxOTQnLCAnI2NlNmRiZCcsICcjZGU5ZWQ2J10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjMmUzMDZmJyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdBenVyZSc6IHtcbiAgICAgICAgICAgIGNvbG9yczogWycjMzE4MmJkJywgJyM2YmFlZDYnLCAnIzllY2FlMScsICcjYzZkYmVmJywgJyNlNjU1MGQnLCAnI2ZkOGQzYycsICcjZmRhZTZiJywgJyNmZGQwYTInLCAnIzMxYTM1NCcsICcjNzRjNDc2JywgJyNhMWQ5OWInLCAnI2M3ZTljMCcsICcjNzU2YmIxJywgJyM5ZTlhYzgnLCAnI2JjYmRkYycsICcjZGFkYWViJywgJyM2MzYzNjMnLCAnIzk2OTY5NicsICcjYmRiZGJkJywgJyNkOWQ5ZDknXSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZENvbG9yJzogJyMzMTgyYmQnLFxuICAgICAgICAgICAgICAgICd0ZXh0Q29sb3InOiAnI0ZGRkZGRidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ1JldHJvJzoge1xuICAgICAgICAgICAgY29sb3JzOiBbJyMwY2E3YTEnLCAnI2ZmYTYxNScsICcjMzM0OTU3JywgJyNhY2M1YzInLCAnIzk4OGY5MCcsICcjOGFjY2M5JywgJyM1MTUxNTEnLCAnI2YyNzg2MScsICcjMzZjOWZkJywgJyM3OTQ2NjgnLCAnIzBmNzA5ZCcsICcjMGQyNzM4JywgJyM0NGJlNzgnLCAnIzRhMTgzOScsICcjNmEzOTNmJywgJyM1NTdkOGInLCAnIzZjMzMxYycsICcjMWMxYzFjJywgJyM4NjE1MDAnLCAnIzA5NTYyYSddLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnIzgwNTEzYScsXG4gICAgICAgICAgICAgICAgJ3RleHRDb2xvcic6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnTWVsbG93Jzoge1xuICAgICAgICAgICAgY29sb3JzOiBbJyNmMGRjYmYnLCAnIzg4Yzg3NycsICcjYWViOTE4JywgJyMyZTJjMjMnLCAnI2RkZGRkMicsICcjZGZlOTU2JywgJyM0Yzk2M2InLCAnIzVkMzgwMScsICcjZTFlZWMzJywgJyNjZDg0NzInLCAnI2ZjZmFiMycsICcjOWE0NjM1JywgJyM5Mjk1YWQnLCAnIzJlM2YxMicsICcjNTY1Njc3JywgJyM1NTdkOGInLCAnIzRmNGQwMicsICcjMGMwYzFiJywgJyM4MzMzMjQnLCAnIzI0MTIwZSddLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnIzdjOWU3MycsXG4gICAgICAgICAgICAgICAgJ3RleHRDb2xvcic6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnT3JpZW50Jzoge1xuICAgICAgICAgICAgY29sb3JzOiBbJyNhODAwMDAnLCAnI2NjNmMzYycsICcjZjBlNDAwJywgJyMwMDAwODQnLCAnI2ZjY2M2YycsICcjMDA5YzZjJywgJyNjYzMwOWMnLCAnIzc4Y2MwMCcsICcjZmM4NGU0JywgJyM0OGU0ZmMnLCAnIzQ4NzhkOCcsICcjMTg2YzBjJywgJyM2MDYwNjAnLCAnI2E4YThhOCcsICcjMDAwMDAwJywgJyNkN2Q3ZDcnLCAnIzc1YTA2ZScsICcjMTkwZDBiJywgJyM4ODg4ODgnLCAnIzY5NGI4NCddLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnI2MxNDI0MicsXG4gICAgICAgICAgICAgICAgJ3RleHRDb2xvcic6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnR3JheVNjYWxlJzoge1xuICAgICAgICAgICAgY29sb3JzOiBbJyMxNDE0MTQnLCAnIzM1MzUzNScsICcjNWI1YjViJywgJyM4NDg0ODQnLCAnI2E4YThhOCcsICcjYzNjM2MzJywgJyNlMGUwZTAnLCAnI2M4YzhjOCcsICcjYTVhNWE1JywgJyM4Nzg3ODcnLCAnIzY1NjU2NScsICcjNGU0ZTRlJywgJyMzMDMwMzAnLCAnIzFjMWMxYycsICcjNGY0ZjRmJywgJyMzYjNiM2InLCAnIzc1NzU3NScsICcjNjA2MDYwJywgJyM4Njg2ODYnLCAnI2MxYzFjMSddLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnIzU3NTc1NycsXG4gICAgICAgICAgICAgICAgJ3RleHRDb2xvcic6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnRmx5ZXInOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnIzNmNDU0YycsICcjNWE2NDZlJywgJyM4NDg3NzgnLCAnI2NlZGVkZicsICcjNzRjNGRkJywgJyMwOTQ2ZWQnLCAnIzM4MGJiMScsICcjMDAwZmYwJywgJyNmNTRhMjMnLCAnIzFkYjI2MicsICcjYmNhM2FhJywgJyNmZmE1MDAnLCAnI2E4NmIzMicsICcjNjNhMThjJywgJyM1Njc5NWUnLCAnIzkzNDM0MycsICcjYjc1ZjVmJywgJyM3NTJkMmQnLCAnIzRlMTExMScsICcjOTIwNjA2J10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjNDc2MzdjJyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdMdW1pbm9zaXR5Jzoge1xuICAgICAgICAgICAgY29sb3JzOiBbJyNGRkZGRkYnLCAnI2U0ZTRlNCcsICcjMDBiY2Q0JywgJyNmMGRkMmYnLCAnIzAwYWFiZicsICcjMDE4Mzc2JywgJyNlOTFlNjMnLCAnIzM5ZTVkNCcsICcjZmY2ZDZkJywgJyMwMGZmNzYnLCAnI2ZmOTgwMCcsICcjOTY5Njk2JywgJyNmZjQyMDAnLCAnI2UwMDAwMCcsICcjOTVjYmU1JywgJyM1MzMxZmYnLCAnI2ZmZjRhNycsICcjZTdhODAwJywgJyMwMDYxZTQnLCAnI2Q1ZTdmZiddLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnIzQ3NjM3YycsXG4gICAgICAgICAgICAgICAgJ3RleHRDb2xvcic6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBiYXNpY1Byb3BlcnRpZXMgPSBbJ3hheGlzbGFiZWwnLCAneWF4aXNsYWJlbCcsICd4dW5pdHMnLCAneXVuaXRzJywgJ3hudW1iZXJmb3JtYXQnLCAneGRhdGVmb3JtYXQnLCAneW51bWJlcmZvcm1hdCcsXG4gICAgICAgICdzaG93dmFsdWVzJywgJ3Nob3dsYWJlbHMnLCAndmlld3R5cGUnLCAnYXJlYXZpZXd0eXBlJywgJ3N0YWdnZXJsYWJlbHMnLCAncmVkdWNleHRpY2tzJywgJ29mZnNldHRvcCcsICdvZmZzZXRib3R0b20nLCAnb2Zmc2V0cmlnaHQnLCAnb2Zmc2V0bGVmdCcsXG4gICAgICAgICdiYXJzcGFjaW5nJywgJ3hheGlzbGFiZWxkaXN0YW5jZScsICd5YXhpc2xhYmVsZGlzdGFuY2UnLCAndGhlbWUnLCAnbGFiZWx0eXBlJywgJ2RvbnV0cmF0aW8nLCAnc2hvd2xhYmVsc291dHNpZGUnLCAnc2hvd3hkaXN0YW5jZScsICdzaG93eWRpc3RhbmNlJywgJ3NoYXBlJywgJ25vZGF0YW1lc3NhZ2UnLCAnY2FwdGlvbnMnLCAnc2hvd3hheGlzJywgJ3Nob3d5YXhpcycsXG4gICAgICAgICdjZW50ZXJsYWJlbCcsICdjdXN0b21jb2xvcnMnLCAnc2hvd2xlZ2VuZCcsICdsZWdlbmR0eXBlJywgJ3hkb21haW4nLCAneWRvbWFpbicsICd0b29sdGlwcycsICdsaW5ldGhpY2tuZXNzJywgJ2hpZ2hsaWdodHBvaW50cycsICdpbnRlcnBvbGF0aW9uJywgJ2xhYmVsdGhyZXNob2xkJ10sXG4gICAgYmFyU3BhY2luZ01hcCA9IHtcbiAgICAgICAgJ3NtYWxsJyA6IDAuMyxcbiAgICAgICAgJ21lZGl1bScgOiAwLjUsXG4gICAgICAgICdsYXJnZScgOiAwLjhcbiAgICB9LFxuICAgIGRvbnV0UmF0aW9NYXAgPSB7XG4gICAgICAgICdzbWFsbCcgOiAwLjMsXG4gICAgICAgICdtZWRpdW0nIDogMC42LFxuICAgICAgICAnbGFyZ2UnIDogMC43XG4gICAgfSxcbiAgICBiYXJTcGFjaW5nTWFwSW52ZXJ0ID0gaW52ZXJ0KGJhclNwYWNpbmdNYXApLFxuICAgIGRvbnV0UmF0aW9NYXBJbnZlcnQgPSBpbnZlcnQoZG9udXRSYXRpb01hcCksXG4gICAgdGlja2Zvcm1hdHMgPSB7XG4gICAgICAgICdUaG91c2FuZCc6IHtcbiAgICAgICAgICAgICdwcmVmaXgnOiAnSycsXG4gICAgICAgICAgICAnZGl2aWRlcic6IDEwMDBcbiAgICAgICAgfSxcbiAgICAgICAgJ01pbGxpb24nIDoge1xuICAgICAgICAgICAgJ3ByZWZpeCc6ICdNJyxcbiAgICAgICAgICAgICdkaXZpZGVyJzogMTAwMDAwMFxuICAgICAgICB9LFxuICAgICAgICAnQmlsbGlvbicgOiB7XG4gICAgICAgICAgICAncHJlZml4JzogJ0InLFxuICAgICAgICAgICAgJ2RpdmlkZXInOiAxMDAwMDAwMDAwXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNoYXJ0SWQgPSAnI3ByZXZpZXctY2hhcnQnLFxuICAgIGRhdGFUeXBlSlNPTiA9IFsnQ29sdW1uJywgJ0xpbmUnLCAnUGllJywgJ0JhcicsICdEb251dCcsICdCdWJibGUnXSwgICAgLy8gQ2hhcnRzIHRoYXQgc3VwcG9ydHMgdGhlIGRhdGEgdG8gYmUgSlNPTjtcbiAgICBsaW5lVHlwZUNoYXJ0cyA9IFsnTGluZScsICdBcmVhJywgJ0N1bXVsYXRpdmUgTGluZSddLCAgIC8vIENoYXJ0cyB0aGF0IGRvZXMgbm90IHN1cHBvcnRzIHRoZSBzdHJpbmcgdHlwZSBvZiBkYXRhIGluIHRoZSB4YXhpcyBpbiB0aGUgbnZkMztcbiAgICBkYXRhVHlwZUFycmF5ID0gWydDdW11bGF0aXZlIExpbmUnLCAnQXJlYSddLCAgICAgLy8gQ2hhcnRzIHRoYXQgc3VwcG9ydHMgdGhlIGRhdGEgdG8gYmUgQXJyYXlcbiAgICBTQU1QTEVfREFUQSA9IHtcbiAgICAgICAgJ2dyb3VwMScgOiAnRXVyb3BlJyxcbiAgICAgICAgJ2dyb3VwMicgOiAnQXNpYScsXG4gICAgICAgICdncm91cDMnIDogJ0FtZXJpY2EnLFxuICAgICAgICAnZ3JvdXA0JyA6ICdBdXN0cmFsaWEnXG4gICAgfTtcblxuLy8gcmV0dXJucyB0cnVlIGlmIGNoYXJ0IHR5cGUgaXMgcGllXG5leHBvcnQgY29uc3QgaXNQaWVDaGFydCA9IHR5cGUgPT4gdHlwZSA9PT0gJ1BpZSc7XG5cbi8vIHJldHVybnMgdHJ1ZSBpZiBjaGFydCB0eXBlIGlzIGxpbmVcbmV4cG9ydCBjb25zdCBpc0xpbmVDaGFydCA9IHR5cGUgPT4gdHlwZSA9PT0gJ0xpbmUnO1xuXG4vLyByZXR1cm5zIHRydWUgaWYgY2hhcnQgdHlwZSBpcyBiYXJcbmV4cG9ydCBjb25zdCBpc0JhckNoYXJ0ID0gdHlwZSA9PiB0eXBlID09PSAnQmFyJztcblxuLy8gcmV0dXJucyB0cnVlIGlmIGNoYXJ0IHR5cGUgaXMgZG9udXRcbmV4cG9ydCBjb25zdCBpc0RvbnV0Q2hhcnQgPSB0eXBlID0+IHR5cGUgPT09ICdEb251dCc7XG5cbi8vIHJldHVybnMgdHJ1ZSBpZiBjaGFydCB0eXBlIGlzIGJ1YmJsZVxuZXhwb3J0IGNvbnN0IGlzQnViYmxlQ2hhcnQgPSB0eXBlID0+IHR5cGUgPT09ICdCdWJibGUnO1xuXG4vLyByZXR1cm5zIHRydWUgaWYgY2hhcnQgdHlwZSBpcyBjb2x1bW5cbmV4cG9ydCBjb25zdCBpc0NvbHVtbkNoYXJ0ID0gdHlwZSA9PiB0eXBlID09PSAnQ29sdW1uJztcblxuLy8gcmV0dXJucyB0cnVlIGlmIGNoYXJ0IHR5cGUgaXMgYXJlYVxuZXhwb3J0IGNvbnN0IGlzQXJlYUNoYXJ0ID0gdHlwZSA9PiB0eXBlID09PSAnQXJlYSc7XG5cbi8vIHJldHVybnMgdHJ1ZSBpZiBjaGFydCB0eXBlIGlzIGFyZWFcbmV4cG9ydCBjb25zdCBpc1BpZVR5cGUgPSB0eXBlID0+IGlzUGllQ2hhcnQodHlwZSkgfHwgaXNEb251dENoYXJ0KHR5cGUpO1xuXG4vLyBUaGUgZm9ybWF0IG9mIGNoYXJ0IGRhdGEgaXMgYXJyYXkgb2YganNvbiBvYmplY3RzIGluIGNhc2Ugb2YgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBjaGFydFxuZXhwb3J0IGNvbnN0IGlzQ2hhcnREYXRhSlNPTiA9IHR5cGUgPT4gaW5jbHVkZXMoZGF0YVR5cGVKU09OLCB0eXBlKSB8fCAhaW5jbHVkZXMoY2hhcnRUeXBlcywgdHlwZSk7XG5cbi8vIFRoZSBmb3JtYXQgb2YgY2hhcnQgZGF0YSBpcyBhcnJheSBvZiBvYmplY3RzIGluIGNhc2Ugb2YgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBjaGFydFxuZXhwb3J0IGNvbnN0IGlzQ2hhcnREYXRhQXJyYXkgPSB0eXBlID0+IGluY2x1ZGVzKGRhdGFUeXBlQXJyYXksIHR5cGUpO1xuXG4vLyByZXR1cm5zIHRydWUgaXMgdGhlIGNoYXJ0IHR5cGUgaXMgJ2xpbmUnLCAnYXJlYScgb3IgJ2N1bXVsYXRpdmUgbGluZScgZWxzZSBmYWxzZVxuZXhwb3J0IGNvbnN0IGlzTGluZVR5cGVDaGFydCA9IHR5cGUgPT4gaW5jbHVkZXMobGluZVR5cGVDaGFydHMsIHR5cGUpO1xuXG4vLyBYL1kgRG9tYWluIHByb3BlcnRpZXMgYXJlIHN1cHBvcnRlZCBvbmx5IGZvciBDb2x1bW4gYW5kIEFyZWEgY2hhcnRzXG5leHBvcnQgY29uc3QgaXNBeGlzRG9tYWluU3VwcG9ydGVkID0gdHlwZSA9PiBpc0NvbHVtbkNoYXJ0KHR5cGUpIHx8IGlzQXJlYUNoYXJ0KHR5cGUpO1xuXG4vLyBSZXR1cm5zIGJhciBzcGFjaW5nIHZhbHVlXG5leHBvcnQgY29uc3QgZ2V0QmFyU3BhY2luZ1ZhbHVlID0gKHZhbHVlLCBwcm9wKSA9PiB7XG4gICAgaWYgKHByb3AgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgcmV0dXJuIGJhclNwYWNpbmdNYXBbdmFsdWVdO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gJ2tleScpIHtcbiAgICAgICAgcmV0dXJuIGJhclNwYWNpbmdNYXBJbnZlcnRbdmFsdWVdO1xuICAgIH1cbn07XG5cbi8vIFJldHVybnMgcmFkaXVzIHZhbHVlXG5leHBvcnQgY29uc3QgZ2V0UmFkaXVzVmFsdWUgPSAodmFsdWUsIHByb3ApID0+IHtcbiAgICBpZiAocHJvcCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gZG9udXRSYXRpb01hcFt2YWx1ZV07XG4gICAgfVxuICAgIGlmIChwcm9wID09PSAna2V5Jykge1xuICAgICAgICByZXR1cm4gZG9udXRSYXRpb01hcEludmVydFt2YWx1ZV07XG4gICAgfVxufTtcblxuLy8gUmV0dXJucyBsYWJlbHMgY29uZmlnXG5leHBvcnQgY29uc3QgZ2V0TGFiZWxWYWx1ZXMgPSAoc2hvd2xhYmVscywgc2hvd2xhYmVsc291dHNpZGUsIHByb3ApID0+IHtcbiAgICBjb25zdCBsYWJlbHNDb25maWc6IGFueSA9IHt9O1xuICAgIHN3aXRjaCAoc2hvd2xhYmVscykge1xuICAgICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgICAgIGxhYmVsc0NvbmZpZy5zaG93bGFiZWxzID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW5zaWRlJzpcbiAgICAgICAgICAgIGxhYmVsc0NvbmZpZy5zaG93bGFiZWxzID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhYmVsc0NvbmZpZy5zaG93bGFiZWxzb3V0c2lkZSA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ291dHNpZGUnOlxuICAgICAgICAgICAgbGFiZWxzQ29uZmlnLnNob3dsYWJlbHMgPSB0cnVlO1xuICAgICAgICAgICAgbGFiZWxzQ29uZmlnLnNob3dsYWJlbHNvdXRzaWRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWxzQ29uZmlnO1xufTtcblxuLy8gQ29uc3RydWN0IHRoZSBzYW1wbGUgZGF0YVxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFNhbXBsZURhdGEgPSAoZGF0YVR5cGUsIHlheGlzTGVuZ3RoLCBzaGFwZSkgPT4ge1xuICAgIGxldCBmaXJzdF9zZXJpZXMgPSBbXSxcbiAgICAgICAgc2Vjb25kX3NlcmllcyA9IFtdLFxuICAgICAgICB0aGlyZF9zZXJpZXMgPSBbXSxcbiAgICAgICAgZmlyc3Rfc2VyaWVzX2FycmF5ID0gW10sXG4gICAgICAgIHNlY29uZF9zZXJpZXNfYXJyYXkgPSBbXSxcbiAgICAgICAgdGhpcmRfc2VyaWVzX2FycmF5ID0gW10sXG4gICAgICAgIGZpcnN0X3Nlcmllc19idWJibGUgPSBbXSxcbiAgICAgICAgc2Vjb25kX3Nlcmllc19idWJibGUgPSBbXSxcbiAgICAgICAgdGhpcmRfc2VyaWVzX2J1YmJsZSA9IFtdLFxuICAgICAgICBkYXRhID0gW107XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICBjYXNlICdqc29uRm9ybWF0JzpcbiAgICAgICAgICAgIGZpcnN0X3NlcmllcyA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiAnMDEvMDEvMjAwMScsICd5JzogNDAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogJzAxLzAxLzIwMDInLCAneSc6IDEwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6ICcwMS8wMS8yMDAzJywgJ3knOiA1MDAwMDAwfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHNlY29uZF9zZXJpZXMgPSBbXG4gICAgICAgICAgICAgICAgeyd4JzogJzAxLzAxLzIwMDEnLCAneSc6IDMwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6ICcwMS8wMS8yMDAyJywgJ3knOiA0MDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAnMDEvMDEvMjAwMycsICd5JzogNzAwMDAwMH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlyZF9zZXJpZXMgPSBbXG4gICAgICAgICAgICAgICAgeyd4JzogJzAxLzAxLzIwMDEnLCAneSc6IDIwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6ICcwMS8wMS8yMDAyJywgJ3knOiA4MDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAnMDEvMDEvMjAwMycsICd5JzogNjAwMDAwMH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBkYXRhWzBdID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlczogZmlyc3Rfc2VyaWVzLFxuICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAxXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHlheGlzTGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzFdID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHNlY29uZF9zZXJpZXMsXG4gICAgICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5YXhpc0xlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgZGF0YVsyXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlyZF9zZXJpZXMsXG4gICAgICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsaW5lQ2hhcnRGb3JtYXQnOlxuICAgICAgICAgICAgZmlyc3Rfc2VyaWVzID0gW1xuICAgICAgICAgICAgICAgIHsneCc6IDEsICd5JzogNDAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogMiwgJ3knOiAxMDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAzLCAneSc6IDUwMDAwMDB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgc2Vjb25kX3NlcmllcyA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiAxLCAneSc6IDMwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6IDIsICd5JzogNDAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogMywgJ3knOiA3MDAwMDAwfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXJkX3NlcmllcyA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiAxLCAneSc6IDIwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6IDIsICd5JzogODAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogMywgJ3knOiA2MDAwMDAwfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGRhdGFbMF0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiBmaXJzdF9zZXJpZXMsXG4gICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoeWF4aXNMZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIGRhdGFbMV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2Vjb25kX3NlcmllcyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHlheGlzTGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzJdID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHRoaXJkX3NlcmllcyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FycmF5Rm9ybWF0JzpcbiAgICAgICAgICAgIGZpcnN0X3Nlcmllc19hcnJheSA9IFtcbiAgICAgICAgICAgICAgICBbMSwgNDAwMDAwMF0sXG4gICAgICAgICAgICAgICAgWzIsIDEwMDAwMDBdLFxuICAgICAgICAgICAgICAgIFszLCA1MDAwMDAwXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHNlY29uZF9zZXJpZXNfYXJyYXkgPSBbXG4gICAgICAgICAgICAgICAgWzEsIDMwMDAwMDBdLFxuICAgICAgICAgICAgICAgIFsyLCA0MDAwMDAwXSxcbiAgICAgICAgICAgICAgICBbMywgNzAwMDAwMF1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlyZF9zZXJpZXNfYXJyYXkgPSBbXG4gICAgICAgICAgICAgICAgWzEsIDIwMDAwMDBdLFxuICAgICAgICAgICAgICAgIFsyLCA4MDAwMDAwXSxcbiAgICAgICAgICAgICAgICBbMywgNjAwMDAwMF1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBkYXRhWzBdID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlczogZmlyc3Rfc2VyaWVzX2FycmF5LFxuICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAxXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHlheGlzTGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzFdID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHNlY29uZF9zZXJpZXNfYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5YXhpc0xlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgZGF0YVsyXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlyZF9zZXJpZXNfYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdidWJibGVGb3JtYXQnOlxuICAgICAgICAgICAgc2hhcGUgPSBzaGFwZSA9PT0gJ3JhbmRvbScgPyAgYWxsU2hhcGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFsbFNoYXBlcy5sZW5ndGgpXSA6IHNoYXBlO1xuICAgICAgICAgICAgZmlyc3Rfc2VyaWVzX2J1YmJsZSA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiA4MC42NiwgJ3knOiAzMzczOTkwMCwgICdzaXplJzogNzgsICdzaGFwZSc6IHNoYXBlfSxcbiAgICAgICAgICAgICAgICB7J3gnOiA3OS44NCwgJ3knOiA4MTkwMjMwMCwgICdzaXplJzogOTAsICdzaGFwZSc6IHNoYXBlfSxcbiAgICAgICAgICAgICAgICB7J3gnOiA3OC42LCAgJ3knOiA1NTIzMTAwLCAgICdzaXplJzogNDUsICdzaGFwZSc6IHNoYXBlfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHNlY29uZF9zZXJpZXNfYnViYmxlID0gW1xuICAgICAgICAgICAgICAgIHsneCc6IDcyLjczLCAneSc6IDc5NzE2MjAwLCAgJ3NpemUnOiA5OCwgJ3NoYXBlJzogc2hhcGV9LFxuICAgICAgICAgICAgICAgIHsneCc6IDgwLjA1LCAneSc6IDYxODAxNjAwLCAgJ3NpemUnOiAyMCwgJ3NoYXBlJzogc2hhcGV9LFxuICAgICAgICAgICAgICAgIHsneCc6IDcyLjQ5LCAneSc6IDczMTM3MjAwLCAgJ3NpemUnOiAzNCwgJ3NoYXBlJzogc2hhcGV9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcmRfc2VyaWVzX2J1YmJsZSA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiA2OC4wOSwgJ3knOiAzMzczOTkwMCwgICdzaXplJzogNDUsICdzaGFwZSc6IHNoYXBlfSxcbiAgICAgICAgICAgICAgICB7J3gnOiA4MS41NSwgJ3knOiA3NDg1NjAwLCAgICdzaXplJzogNzgsICdzaGFwZSc6IHNoYXBlfSxcbiAgICAgICAgICAgICAgICB7J3gnOiA2OC42MCwgJ3knOiAxNDE4NTAwMDAsICdzaXplJzogNTYsICdzaGFwZSc6IHNoYXBlfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGRhdGFbMF0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiBmaXJzdF9zZXJpZXNfYnViYmxlLFxuICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAxXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHlheGlzTGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzFdID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHNlY29uZF9zZXJpZXNfYnViYmxlLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IFNBTVBMRV9EQVRBLmdyb3VwMlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeWF4aXNMZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgIGRhdGFbMl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcmRfc2VyaWVzX2J1YmJsZSxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BpZUNoYXJ0Rm9ybWF0JzpcbiAgICAgICAgICAgIGRhdGEgPSBbXG4gICAgICAgICAgICAgICAgeyd4JzogU0FNUExFX0RBVEEuZ3JvdXAxLCAneSc6IDEwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6IFNBTVBMRV9EQVRBLmdyb3VwMiwgJ3knOiAyMDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiBTQU1QTEVfREFUQS5ncm91cDMsICd5JzogMzAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogU0FNUExFX0RBVEEuZ3JvdXA0LCAneSc6IDQwMDAwMDB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFUeXBlID0gd2lkZ2V0Q29udGV4dCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHdpZGdldENvbnRleHQudHlwZTtcbiAgICBpZiAoaXNMaW5lQ2hhcnQodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuICdsaW5lQ2hhcnRGb3JtYXQnO1xuICAgIH1cbiAgICBpZiAoaXNQaWVUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiAncGllQ2hhcnRGb3JtYXQnO1xuICAgIH1cbiAgICBpZiAoaXNCdWJibGVDaGFydCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gJ2J1YmJsZUZvcm1hdCc7XG4gICAgfVxuICAgIHJldHVybiBpc0NoYXJ0RGF0YUpTT04odHlwZSkgPyAnanNvbkZvcm1hdCcgOiAnYXJyYXlGb3JtYXQnO1xufTtcblxuLy8gU2FtcGxlIGRhdGEgdG8gcG9wdWxhdGUgd2hlbiBubyBkYXRhIGlzIGJvdW5kXG5leHBvcnQgY29uc3QgZ2V0U2FtcGxlRGF0YSA9IHdpZGdldENvbnRleHQgPT4gY29uc3RydWN0U2FtcGxlRGF0YShnZXREYXRhVHlwZSh3aWRnZXRDb250ZXh0KSwgc3BsaXQod2lkZ2V0Q29udGV4dC55YXhpc2RhdGFrZXksICcsJykubGVuZ3RoLCB3aWRnZXRDb250ZXh0LnNoYXBlKTtcblxuLy8gQ2hlY2sgd2hldGhlciBYL1kgRG9tYWluIHdhcyBzZXQgdG8gTWluIGFuZCBpcyBzdXBwb3J0ZWQgZm9yIHRoZSBwcmVzZW50IGNoYXJ0XG5leHBvcnQgY29uc3QgaXNBeGlzRG9tYWluVmFsaWQgPSAod2lkZ2V0Q29udGV4dCwgYXhpcykgPT4ge1xuICAgIGlmICh3aWRnZXRDb250ZXh0W2F4aXMgKyAnZG9tYWluJ10gPT09ICdNaW4nICYmIChpc0F4aXNEb21haW5TdXBwb3J0ZWQod2lkZ2V0Q29udGV4dC50eXBlKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIENoZWNrIHdoZXRoZXIgbWluIGFuZCBtYXggdmFsdWVzIGFyZSBmaW5pdGUgb3Igbm90XG5leHBvcnQgY29uc3QgYXJlTWluTWF4VmFsdWVzVmFsaWQgPSB2YWx1ZXMgPT4ge1xuICAgIGlmIChpc0Zpbml0ZSh2YWx1ZXMubWluKSAmJiBpc0Zpbml0ZSh2YWx1ZXMubWF4KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFlTY2FsZU1pblZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IF9taW4gPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICAvKiBJZiB0aGUgbnVtYmVyIGhhcyBhKSBkZWNpbWFsIHBhcnQgcmV0dXJuaW5nIGZsb29yIHZhbHVlIC0gMC4xXG4gICAgIGIpIG5vIGRlY2ltYWwgcGFydCByZXR1cm5pbmcgZmxvb3IgdmFsdWUgLSAxICovXG4gICAgcmV0dXJuIE1hdGguYWJzKHZhbHVlKSAtIF9taW4gPiAwID8gdmFsdWUgLSAwLjEgOiBfbWluIC0gMTtcbn07XG5cbi8vIENob29zZXMgdGhlIGRhdGEgcG9pbnRzIG9mIGxpbmUvY3VtdWxhdGl2ZSBsaW5lL2FyZWEgY2hhcnQgYW5kIGhpZ2hsaWdodHMgdGhlbVxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodFBvaW50cyA9IChpZCwgaGlnaGxpZ2h0cG9pbnRzKSA9PiB7XG4gICAgY29uc3QgY2hhcnRTdmcgPSBpZCA/IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgaWQgKyAnIHN2ZycpIDogZDMuc2VsZWN0KGNoYXJ0SWQgKyAnIHN2ZycpO1xuICAgIGlmIChoaWdobGlnaHRwb2ludHMpIHtcbiAgICAgICAgY2hhcnRTdmcuc2VsZWN0QWxsKCcubnYtcG9pbnQnKVxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnNnB4JylcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbC1vcGFjaXR5JywgJzAuOTUnKVxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2Utb3BhY2l0eScsICcwLjk1Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY2hhcnRTdmcuc2VsZWN0QWxsKCcubnYtcG9pbnQnKVxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMHB4JylcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbC1vcGFjaXR5JywgJzAnKTtcbiAgICB9XG59O1xuXG4vLyBDaG9vc2VzIHRoZSBsaW5lIG9mIGxpbmUvY3VtdWxhdGl2ZSBsaW5lIGFuZCBpbmNyZWFzZXMgdGhlIHRoaWNrbmVzcyBvZiBpdFxuZXhwb3J0IGNvbnN0IHNldExpbmVUaGlja25lc3MgPSAoaWQsIHRoaWNrbmVzcykgPT4ge1xuICAgIGNvbnN0IGNoYXJ0U3ZnID0gaWQgPyBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIGlkICsgJyBzdmcnKSA6IGQzLnNlbGVjdChjaGFydElkICsgJyBzdmcnKTtcbiAgICB0aGlja25lc3MgPSB0aGlja25lc3MgfHwgMS41O1xuXG4gICAgY29uc3QgbGluZXMgPSBjaGFydFN2Zy5zZWxlY3RBbGwoJy5udi1saW5lJyk7XG5cbiAgICBpZiAobGluZXMuc2l6ZSgpICE9PSAwKSB7XG4gICAgICAgIGxpbmVzLnN0eWxlKCdzdHJva2Utd2lkdGgnLCB0aGlja25lc3MpO1xuICAgIH1cbn07XG5cbi8vIENvbnN0cnVjdGluZyBhIGNvbW1vbiBrZXkgdmFsdWUgbWFwIGZvciBwcmV2aWV3IGFuZCBjYW52YXMgbW9kZVxuZXhwb3J0IGNvbnN0IGluaXRQcm9wZXJ0aWVzID0gKHdpZGdldENvbnRleHQsIHByb3BlcnR5VmFsdWVNYXApID0+IHtcbiAgICBpZiAoIXByb3BlcnR5VmFsdWVNYXAgfHwgaXNFbXB0eU9iamVjdChwcm9wZXJ0eVZhbHVlTWFwKSkge1xuICAgICAgICBwcm9wZXJ0eVZhbHVlTWFwID0ge307XG4gICAgfVxuICAgIGZvckVhY2goYmFzaWNQcm9wZXJ0aWVzLCBwcm9wID0+IHtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHByb3BlcnR5VmFsdWVNYXBbcHJvcF0pKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlTWFwW3Byb3BdID0gd2lkZ2V0Q29udGV4dFtwcm9wXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5VmFsdWVNYXA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TnVtYmVyVmFsdWUgPSAodmFsdWUsIGNhbGxiYWNrKSA9PiB7XG4gICAgcmV0dXJuIGlzTmFOKHBhcnNlSW50KHZhbHVlLCAxMCkpID8gY2FsbGJhY2sodmFsdWUsICd2YWx1ZScpIDogdmFsdWU7XG59O1xuXG4vLyBGb3JtYXRzIHRoZSBnaXZlbiB2YWx1ZSBhY2NvcmRpbmcgdG8gZGF0ZSBmb3JtYXRcbmV4cG9ydCBjb25zdCBnZXREYXRlRm9ybWF0ZWREYXRhID0gKGRhdGVGb3JtYXQsIGQpID0+IHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdCB8fCAnJXgnO1xuICAgIC8qKlxuICAgICAqIGlmIGRhdGUgdmFsdWUgaXMgc3RyaW5nIFwiMjAtMDUtMjAxOVwiIHRoZW4gbmV3IERhdGUodmFsdWUpIHJldHVybiAyME1heTIwMTkgd2l0aCBjdXJyZW50IHRpbWUgaW4gSW5kaWEsXG4gICAgICogd2hlcmVhcyB0aGlzIHdpbGwgcmV0dXJuIDE5TWF5MjAxOSB3aXRoIHRpbWUgbGFnZ2luZyBmb3IgZmV3IGhvdXJzLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpdCByZXR1cm5zIFVUQyB0aW1lIGkuZS4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKFVUQykuXG4gICAgICogVG8gY3JlYXRlIGRhdGUgaW4gbG9jYWwgdGltZSB1c2UgbW9tZW50XG4gICAgICovXG4gICAgaWYoZGF0ZUZvcm1hdCA9PSAnJWMnKSB7XG4gICAgICAgIGRhdGVGb3JtYXQgPSAnJWEgJWIgJWUgJVggJVknO1xuICAgIH1cbiAgICByZXR1cm4gZDMudGltZUZvcm1hdChkYXRlRm9ybWF0KShuZXcgRGF0ZShtb21lbnQobW9tZW50KGQpLmZvcm1hdCgpKS52YWx1ZU9mKCkpKTtcbn07XG5jb25zdCByZW1vdmVUcmFpbGluZ1plcm9zID0gdmFsdWUgPT4ge1xuICAgIGlmKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gYSBzdHJpbmcgaWYgaXQncyBhIG51bWJlclxuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcblxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvc1xuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC9cXC4wKyhbQS1aYS16XSopJC8sICckMScpLnJlcGxhY2UoL1xcLihbMS05XSspMCsoW0EtWmEtel0qKSQvLCAnLiQxJDInKTtcbn07XG5cbi8vIEZvcm1hdHMgdGhlIGdpdmVuIHZhbHVlIGFjY29yZGluZyB0byBudW1iZXIgZm9ybWF0XG5leHBvcnQgY29uc3QgZ2V0TnVtYmVyRm9ybWF0ZWREYXRhID0gKG51bWJlckZvcm1hdCwgZCkgPT4ge1xuICAgIGxldCBmb3JtYXR0ZWREYXRhLFxuICAgICAgICBkaXZpZGVyLFxuICAgICAgICBwcmVmaXg7XG4gICAgLy8gZm9ybWF0dGluZyB0aGUgZGF0YSBiYXNlZCBvbiBudW1iZXIgZm9ybWF0IHNlbGVjdGVkXG4gICAgaWYgKG51bWJlckZvcm1hdCkge1xuICAgICAgICBsZXQgbnVtYmVyRm9ybWF0dGVyO1xuICAgICAgICBpZihudW1iZXJGb3JtYXQgPT0gJ1Rob3VzYW5kJyB8fCBudW1iZXJGb3JtYXQgPT0gJ01pbGxpb24nIHx8IG51bWJlckZvcm1hdCA9PSAnQmlsbGlvbicpIHtcbiAgICAgICAgICAgIG51bWJlckZvcm1hdHRlciA9IGQzLmZvcm1hdCgnLC4ycycpO1xuICAgICAgICB9IGVsc2UgaWYobnVtYmVyRm9ybWF0ID09ICclJykge1xuICAgICAgICAgICAgbnVtYmVyRm9ybWF0dGVyID0gZDMuZm9ybWF0KCcuMiUnKTtcbiAgICAgICAgfWVsc2UgaWYobnVtYmVyRm9ybWF0ID09ICcuZicpIHtcbiAgICAgICAgICAgIG51bWJlckZvcm1hdHRlciA9IGQzLmZvcm1hdCgnLjJmJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBudW1iZXJGb3JtYXR0ZXIgPSBkMy5mb3JtYXQobnVtYmVyRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gbnVtYmVyRm9ybWF0dGVyKGQpO1xuXG5cbiAgICAgICAgLy8gR2V0dGluZyB0aGUgcmVzcGVjdGl2ZSBkaXZpZGVyWzEwMDAsMTAwMDAwMCwxMDAwMDAwMDAwXSBiYXNlZCBvbiB0aGUgbnVtYmVyIGZvcm1hdCBjaG9vc2VuXG4gICAgICAgIGRpdmlkZXIgPSAodGlja2Zvcm1hdHNbbnVtYmVyRm9ybWF0XSAmJiB0aWNrZm9ybWF0c1tudW1iZXJGb3JtYXRdLmRpdmlkZXIpIHx8IDA7XG4gICAgICAgIHByZWZpeCA9IHRpY2tmb3JtYXRzW251bWJlckZvcm1hdF0gJiYgdGlja2Zvcm1hdHNbbnVtYmVyRm9ybWF0XS5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggJiYgZGl2aWRlciAhPT0gMCkge1xuICAgICAgICAgICAgZm9ybWF0dGVkRGF0YSA9IGQzLmZvcm1hdCgnLjJmJykoZCAvIGRpdmlkZXIpICsgcHJlZml4O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXV0byBmb3JtYXR0aW5nIHRoZSBkYXRhIHdoZW4gbm8gZm9ybWF0aW5nIG9wdGlvbiBpcyBjaG9zZW5cbiAgICAgICAgZm9ybWF0dGVkRGF0YSA9IGQgPj0gMTAwMCA/IGQzLmZvcm1hdCgnLjFzJykoZCkgOiBkO1xuICAgIH1cbiAgICBmb3JtYXR0ZWREYXRhID0gcmVtb3ZlVHJhaWxpbmdaZXJvcyhmb3JtYXR0ZWREYXRhKTtcbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0YTtcbn07XG5cbi8vIFNldCB0aGUgdmlzaWJpbGl0eSBwcm9wZXJ0eSBvZiB0aGUgY2hhcnQgeCx5IGF4aXMgZHVlIHRvIGEgYnVnIGluIHRoZSBudmQzXG5leHBvcnQgY29uc3QgdG9nZ2xlQXhpc1Nob3cgPSAocHJvcGVydHksIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgJHhBeGlzID0gZDMuc2VsZWN0KGNoYXJ0SWQgKyAnIGcubnYtYXhpcy5udi14JyksXG4gICAgICAgICR5QXhpcyA9IGQzLnNlbGVjdChjaGFydElkICsgJyBnLm52LWF4aXMubnYteScpO1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ3Nob3d4YXhpcycpIHtcbiAgICAgICAgJHhBeGlzLnN0eWxlKCd2aXNpYmlsaXR5JywgdmFsdWUgPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHlBeGlzLnN0eWxlKCd2aXNpYmlsaXR5JywgdmFsdWUgPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG1vZGlmeUxlZ2VuZFBvc2l0aW9uID0gKHdpZGdldENvbnRleHQsIHBvc2l0aW9uLCBpZCkgPT4ge1xuICAgIGNvbnN0IHNob3dMZWdlbmQgPSBpc1Nob3dMZWdlbmQod2lkZ2V0Q29udGV4dC5zaG93bGVnZW5kKSxcbiAgICAgICAgY2hhcnRfSWQgPSBpZCA/ICcjd21DaGFydCcgKyBpZCA6IGNoYXJ0SWQsXG4gICAgICAgIGxlZ2VuZFdyYXAgPSBkMy5zZWxlY3QoY2hhcnRfSWQgKyAnIC5udi1sZWdlbmRXcmFwJyksXG4gICAgICAgIGxlZ2VuZFBhZGRpbmcgPSA1O1xuICAgIC8vIFJldHVybiB3aGVuIHNob3dsZWdlbmQgaXMgZmFsc2VcbiAgICBpZiAoIXNob3dMZWdlbmQgfHwgIWxlZ2VuZFdyYXBbJ19ncm91cHMnXVswXVswXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kV3JhcEhlaWdodCA9IGxlZ2VuZFdyYXBbJ19ncm91cHMnXVswXVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsXG4gICAgICAgICAgICB3cmFwID0gZDMuc2VsZWN0KGNoYXJ0X0lkICsgJyAubnYtd3JhcCcpLFxuICAgICAgICAgICAgd3JhcFRyYW5zZm9ybSA9ICh3cmFwICYmIHdyYXAuYXR0cigndHJhbnNmb3JtJykpID8gd3JhcC5hdHRyKCd0cmFuc2Zvcm0nKS5yZXBsYWNlKC8sIC9nLCAnLCcpIDogJycsXG4gICAgICAgICAgICBjb29yZGluYXRlcyA9IC90cmFuc2xhdGVcXChcXHMqKFteXFxzLCldKylbICxdKFteXFxzLCldKykvLmV4ZWMod3JhcFRyYW5zZm9ybSksXG4gICAgICAgICAgICBnZXRDaGFydEhlaWdodCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2hhcnRIZWlnaHQgPSAkKGNoYXJ0X0lkICsgJyBzdmc+Lm52ZDMubnYtd3JhcCcpWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcnRIZWlnaHQgPT09IDApIHsgLy8gZml4IGZvciBJRVxuICAgICAgICAgICAgICAgICAgICBjaGFydEhlaWdodCA9ICgkKGNoYXJ0X0lkICsgJyBzdmcnKVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSAobGVnZW5kV3JhcEhlaWdodCArIDE1KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFydEhlaWdodDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIGxlZ2VuZFdyYXAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwICwgJyArIChnZXRDaGFydEhlaWdodCgpIC0gbGVnZW5kV3JhcEhlaWdodCAtIGxlZ2VuZFBhZGRpbmcpICsgJyknKTtcbiAgICAgICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICB3cmFwLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIGNvb3JkaW5hdGVzWzFdICsgJywnICsgbGVnZW5kUGFkZGluZyArICcpJyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vLyBSZXR1cm5zIHZhbHVlIGlmIGxlZ2VuZCBuZWVkIHRvIHNob3duIG9yIG5vdFxuZXhwb3J0IGNvbnN0IGlzU2hvd0xlZ2VuZCA9IHZhbHVlID0+IHtcbiAgICAvLyBPbGQgcHJvamVjdHMgd2lsbCBoYXZlIGVpdGhlciB0cnVlIG9yIGZhbHNlXG4gICAgaWYgKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBOZXcgcHJvamVjdHMgd2lsbCBoYXZlIGVpdGhlciAnSGlkZSBMZWdlbmQnLCAnU2hvdyBUb3AnLCAnU2hvdyBCb3R0b20nXG4gICAgcmV0dXJuIHZhbHVlID09PSAnaGlkZScgPyBmYWxzZSA6IHRydWU7XG59O1xuXG4vKipcbiAqIEN1c3RvbWlzZSB0aGUgdG9vbHRpcCBmb3IgZG9udXQgJiBwaWUgY2hhcnRzIGFuZCBhbHNvIGZvciBjaGFydHMgaGF2aW5nIG9ubHkgb25lIHZhbHVlIGF0dGFjaGVkIHRvIHlheGlzXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gbGFiZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGN1c3RvbWlzZVRvb2x0aXAgPSAoY2hhcnQsIHByb3BlcnR5VmFsdWVNYXAsIHdpZGdldENvbnRleHQsIGxhYmVsPykgPT4ge1xuICAgIGQzLnNlbGVjdEFsbCgnLm52dG9vbHRpcCcpLnN0eWxlKCdvcGFjaXR5JywgMCk7XG4gICAgY2hhcnQudG9vbHRpcC5jb250ZW50R2VuZXJhdG9yKGtleSA9PiB7XG4gICAgICAgIGxldCB4VmFsdWUgPSBrZXkuZGF0YS54LCB5VmFsdWU7XG4gICAgICAgIHlWYWx1ZSA9IGdldE51bWJlckZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnludW1iZXJmb3JtYXQsIGtleS5kYXRhLnkpO1xuICAgICAgICBpZiAoaXNQaWVUeXBlKHdpZGdldENvbnRleHQudHlwZSkpIHtcbiAgICAgICAgICAgIGxhYmVsID0ga2V5LmRhdGEueDtcbiAgICAgICAgICAgIHhWYWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHRhYmxlPicgK1xuICAgICAgICAgICAgJzx0Ym9keT4nICtcbiAgICAgICAgICAgICc8dHIgY2xhc3M9XCJ2YWx1ZVwiPjxiPicgKyB4VmFsdWUgK1xuICAgICAgICAgICAgJzwvYj48L3RyPicgK1xuICAgICAgICAgICAgJzx0cj4nICtcbiAgICAgICAgICAgICc8dGQgY2xhc3M9XCJsZWdlbmQtY29sb3ItZ3VpZGVcIj48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonICsga2V5LmNvbG9yICsgJztcIj48L2Rpdj48L3RkPicgK1xuICAgICAgICAgICAgJzx0ZCBjbGFzcz1cImtleVwiPicgKyBsYWJlbCArICc8L3RkPicgK1xuICAgICAgICAgICAgJzx0ZCBjbGFzcz1cInZhbHVlXCI+JyArIHlWYWx1ZSArICc8L3RkPicgK1xuICAgICAgICAgICAgJzwvdHI+JyArXG4gICAgICAgICAgICAnPC90Ym9keT4nICtcbiAgICAgICAgICAgICc8L3RhYmxlPic7XG4gICAgfSk7XG59O1xuXG4vLyBpbnRpYWxpemVzIHRoZSBjaGFydCBvYmVqY3RcbmV4cG9ydCBjb25zdCBpbml0Q2hhcnQgPSAod2lkZ2V0Q29udGV4dCwgeERvbWFpblZhbHVlcywgeURvbWFpblZhbHVlcywgcHJvcGVydHlWYWx1ZU1hcCwgaXNQcmV2aWV3KSA9PiB7XG4gICAgcHJvcGVydHlWYWx1ZU1hcCA9ICBpbml0UHJvcGVydGllcyh3aWRnZXRDb250ZXh0LCBwcm9wZXJ0eVZhbHVlTWFwKTtcbiAgICBsZXQgY2hhcnQsIGNvbG9ycyA9IFtdLCB4YXhpc2xhYmVsLCB5YXhpc2xhYmVsLCBsYWJlbENvbmZpZywgcmFkaXVzLCBiYXJTcGFjaW5nLFxuICAgICAgICBzaG93TGVnZW5kLCB4QXhpc1ZhbHVlLCBoYXNNdWx0aXBsZVlWYWx1ZXM7XG4gICAgY29uc3QgeFZhbHVlOiBhbnkgPSB7fSwgeVZhbHVlOiBhbnkgPSB7fTtcbiAgICBzd2l0Y2ggKHdpZGdldENvbnRleHQudHlwZSkge1xuICAgICAgICBjYXNlICdDb2x1bW4nOlxuICAgICAgICAgICAgYmFyU3BhY2luZyA9IGdldE51bWJlclZhbHVlKHByb3BlcnR5VmFsdWVNYXAuYmFyc3BhY2luZywgZ2V0QmFyU3BhY2luZ1ZhbHVlKSB8fCBiYXJTcGFjaW5nTWFwLm1lZGl1bTtcbiAgICAgICAgICAgIGNoYXJ0ID0gbnYubW9kZWxzLm11bHRpQmFyQ2hhcnQoKVxuICAgICAgICAgICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KGQgPT4gZC55KVxuICAgICAgICAgICAgICAgIC5yZWR1Y2VYVGlja3MocHJvcGVydHlWYWx1ZU1hcC5yZWR1Y2V4dGlja3MpXG4gICAgICAgICAgICAgICAgLnJvdGF0ZUxhYmVscygwKVxuICAgICAgICAgICAgICAgIC5zaG93Q29udHJvbHMoZmFsc2UpXG4gICAgICAgICAgICAgICAgLnN0YWNrZWQocHJvcGVydHlWYWx1ZU1hcC52aWV3dHlwZSA9PT0gJ1N0YWNrZWQnID8gIHRydWUgOiBmYWxzZSlcbiAgICAgICAgICAgICAgICAuZ3JvdXBTcGFjaW5nKGJhclNwYWNpbmcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0N1bXVsYXRpdmUgTGluZSc6XG4gICAgICAgICAgICBjaGFydCA9IG52Lm1vZGVscy5jdW11bGF0aXZlTGluZUNoYXJ0KClcbiAgICAgICAgICAgICAgICAueChkID0+IGRbMF0pXG4gICAgICAgICAgICAgICAgLnkoZCA9PiBkWzFdKVxuICAgICAgICAgICAgICAgIC5zaG93Q29udHJvbHMoZmFsc2UpXG4gICAgICAgICAgICAgICAgLnVzZUludGVyYWN0aXZlR3VpZGVsaW5lKHByb3BlcnR5VmFsdWVNYXAudG9vbHRpcHMpXG4gICAgICAgICAgICAgICAgLmludGVycG9sYXRlKHByb3BlcnR5VmFsdWVNYXAuaW50ZXJwb2xhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICBjaGFydCA9IG52Lm1vZGVscy5saW5lQ2hhcnQoKVxuICAgICAgICAgICAgICAgIC51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZShwcm9wZXJ0eVZhbHVlTWFwLnRvb2x0aXBzKVxuICAgICAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShwcm9wZXJ0eVZhbHVlTWFwLmludGVycG9sYXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0FyZWEnOlxuICAgICAgICAgICAgY2hhcnQgPSBudi5tb2RlbHMuc3RhY2tlZEFyZWFDaGFydCgpXG4gICAgICAgICAgICAgICAgLngoZCA9PiBkLngpXG4gICAgICAgICAgICAgICAgLnkoZCA9PiBkLnkpXG4gICAgICAgICAgICAgICAgLmNsaXBFZGdlKHRydWUpXG4gICAgICAgICAgICAgICAgLnNob3dDb250cm9scyhmYWxzZSlcbiAgICAgICAgICAgICAgICAuc3R5bGUocHJvcGVydHlWYWx1ZU1hcC5hcmVhdmlld3R5cGUpXG4gICAgICAgICAgICAgICAgLnVzZUludGVyYWN0aXZlR3VpZGVsaW5lKHByb3BlcnR5VmFsdWVNYXAudG9vbHRpcHMpXG4gICAgICAgICAgICAgICAgLmludGVycG9sYXRlKHByb3BlcnR5VmFsdWVNYXAuaW50ZXJwb2xhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQmFyJzpcbiAgICAgICAgICAgIGJhclNwYWNpbmcgPSBnZXROdW1iZXJWYWx1ZShwcm9wZXJ0eVZhbHVlTWFwLmJhcnNwYWNpbmcsIGdldEJhclNwYWNpbmdWYWx1ZSkgfHwgYmFyU3BhY2luZ01hcC5tZWRpdW07XG4gICAgICAgICAgICBjaGFydCA9IG52Lm1vZGVscy5tdWx0aUJhckhvcml6b250YWxDaGFydCgpXG4gICAgICAgICAgICAgICAgLngoZCA9PiBkLngpXG4gICAgICAgICAgICAgICAgLnkoZCA9PiBkLnkpXG4gICAgICAgICAgICAgICAgLnNob3dDb250cm9scyhmYWxzZSlcbiAgICAgICAgICAgICAgICAuc3RhY2tlZChwcm9wZXJ0eVZhbHVlTWFwLnZpZXd0eXBlID09PSAnU3RhY2tlZCcgPyAgdHJ1ZSA6IGZhbHNlKVxuICAgICAgICAgICAgICAgIC5zaG93VmFsdWVzKHByb3BlcnR5VmFsdWVNYXAuc2hvd3ZhbHVlcylcbiAgICAgICAgICAgICAgICAuZ3JvdXBTcGFjaW5nKGJhclNwYWNpbmcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BpZSc6XG4gICAgICAgIGNhc2UgJ0RvbnV0JzpcbiAgICAgICAgICAgIGxhYmVsQ29uZmlnID0gZ2V0TGFiZWxWYWx1ZXMocHJvcGVydHlWYWx1ZU1hcC5zaG93bGFiZWxzLCBwcm9wZXJ0eVZhbHVlTWFwLnNob3dsYWJlbHNvdXRzaWRlLCAndmFsdWUnKTtcbiAgICAgICAgICAgIHJhZGl1cyA9IGdldE51bWJlclZhbHVlKHByb3BlcnR5VmFsdWVNYXAuZG9udXRyYXRpbywgZ2V0UmFkaXVzVmFsdWUpIHx8IGRvbnV0UmF0aW9NYXAubWVkaXVtO1xuICAgICAgICAgICAgY2hhcnQgPSBudi5tb2RlbHMucGllQ2hhcnQoKVxuICAgICAgICAgICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KGQgPT4gZC55KVxuICAgICAgICAgICAgICAgIC5zaG93TGFiZWxzKGxhYmVsQ29uZmlnLnNob3dsYWJlbHMpXG4gICAgICAgICAgICAgICAgLmxhYmVsVHlwZShwcm9wZXJ0eVZhbHVlTWFwLmxhYmVsdHlwZSlcbiAgICAgICAgICAgICAgICAudmFsdWVGb3JtYXQoZDMuZm9ybWF0KCclJykpXG4gICAgICAgICAgICAgICAgLnRpdGxlKHByb3BlcnR5VmFsdWVNYXAuY2VudGVybGFiZWwpXG4gICAgICAgICAgICAgICAgLmxhYmVsVGhyZXNob2xkKHByb3BlcnR5VmFsdWVNYXAubGFiZWx0aHJlc2hvbGQgfHwgMC4wMSlcbiAgICAgICAgICAgICAgICAubGFiZWxzT3V0c2lkZShsYWJlbENvbmZpZy5zaG93bGFiZWxzb3V0c2lkZSk7XG4gICAgICAgICAgICBpZiAoaXNEb251dENoYXJ0KHdpZGdldENvbnRleHQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBjaGFydC5kb251dCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAuZG9udXRSYXRpbyhyYWRpdXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWVNYXAubGFiZWx0eXBlID09PSAna2V5LXZhbHVlJykge1xuICAgICAgICAgICAgICAgIGNoYXJ0LmxhYmVsVHlwZShkID0+IGQuZGF0YS54ICsgJyAnICsgZC5kYXRhLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0J1YmJsZSc6XG4gICAgICAgICAgICBjaGFydCA9IG52Lm1vZGVscy5zY2F0dGVyQ2hhcnQoKVxuICAgICAgICAgICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KGQgPT4gZC55KVxuICAgICAgICAgICAgICAgIC5zaG93RGlzdFgocHJvcGVydHlWYWx1ZU1hcC5zaG93eGRpc3RhbmNlKVxuICAgICAgICAgICAgICAgIC5zaG93RGlzdFkocHJvcGVydHlWYWx1ZU1hcC5zaG93eWRpc3RhbmNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh4RG9tYWluVmFsdWVzKSB7XG4gICAgICAgIHhWYWx1ZS5taW4gPSB4RG9tYWluVmFsdWVzLm1pbi54IHx8IHhEb21haW5WYWx1ZXMubWluWzBdO1xuICAgICAgICB4VmFsdWUubWF4ID0geERvbWFpblZhbHVlcy5tYXgueCB8fCB4RG9tYWluVmFsdWVzLm1heFswXTtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlcyBvbiB0aGUgeCBheGlzIGFyZSBzdHJpbmcgdGhlbiBtaW4gbWF4IHZhbHVlcyBnaXZlcyBJbmZpbml0eVxuICAgICAgICBpZiAoYXJlTWluTWF4VmFsdWVzVmFsaWQoeFZhbHVlKSkge1xuICAgICAgICAgICAgLy8gUmVkdWNpbmcgdGhlIG1pbiB2YWx1ZSB0byAwLjEgc28gdGhlIG1pbiB2YWx1ZSBpcyBub3QgbWlzc2VkIG91dFxuICAgICAgICAgICAgeFZhbHVlLm1pbiA9IGdldFlTY2FsZU1pblZhbHVlKHhWYWx1ZS5taW4pO1xuICAgICAgICAgICAgY2hhcnQueERvbWFpbihbeFZhbHVlLm1pbiwgeFZhbHVlLm1heF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHlEb21haW5WYWx1ZXMpIHtcbiAgICAgICAgLy8gUmVkdWNpbmcgdGhlIG1pbiB2YWx1ZSB0byAxIHNvIHRoZSBtaW4gdmFsdWUgaXMgbm90IG1pc3NlZCBvdXRcbiAgICAgICAgeVZhbHVlLm1pbiA9IHlEb21haW5WYWx1ZXMubWluLnkgfHwgeURvbWFpblZhbHVlcy5taW5bMV07XG4gICAgICAgIHlWYWx1ZS5tYXggPSB5RG9tYWluVmFsdWVzLm1heC55IHx8IHlEb21haW5WYWx1ZXMubWF4WzFdO1xuICAgICAgICAvLyBJZiB0aGUgdmFsdWVzIG9uIHRoZSB5IGF4aXMgYXJlIHN0cmluZyBvciBpbnZhbGlkIHRoZW4gbWluIG1heCB2YWx1ZXMgZ2l2ZXMgSW5maW5pdHlcbiAgICAgICAgaWYgKGFyZU1pbk1heFZhbHVlc1ZhbGlkKHlWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIFJlZHVjaW5nIHRoZSBtaW4gdmFsdWUgdG8gMSBzbyB0aGUgbWluIHZhbHVlIGlzIG5vdCBtaXNzZWQgb3V0XG4gICAgICAgICAgICB5VmFsdWUubWluID0gZ2V0WVNjYWxlTWluVmFsdWUoeVZhbHVlLm1pbik7XG4gICAgICAgICAgICBjaGFydC55RG9tYWluKFt5VmFsdWUubWluLCB5VmFsdWUubWF4XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXR0aW5nIHRoZSBsZWdlbmQgdHlwZSBjaG9vc2VuIGJ5IHVzZXIgb3IgZGVmYXVsdCBpdCB3aWxsIGJlIGZ1cmlvdXNcbiAgICBjaGFydC5sZWdlbmQudmVycygocHJvcGVydHlWYWx1ZU1hcC5sZWdlbmR0eXBlICYmIHByb3BlcnR5VmFsdWVNYXAubGVnZW5kdHlwZS50b0xvd2VyQ2FzZSgpKSB8fCAnZnVyaW91cycpO1xuXG4gICAgaWYgKCFpbmNsdWRlcyhjaGFydFR5cGVzLCB3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgIGNoYXJ0ID0gbnYubW9kZWxzLm11bHRpQmFyQ2hhcnQoKVxuICAgICAgICAgICAgLngoZCA9PiBkLngpXG4gICAgICAgICAgICAueShkID0+IGQueSk7XG4gICAgfVxuXG5cbiAgICBpZiAoaXNQaWVUeXBlKHdpZGdldENvbnRleHQudHlwZSkpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBwaWUvZG9udXQgY2hhcnQgZm9ybWF0dGluZyB0aGUgdmFsdWVzIG9mIGl0XG4gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlTWFwLmxhYmVsdHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICBjaGFydC52YWx1ZUZvcm1hdChkMy5mb3JtYXQoJyUnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGFydC52YWx1ZUZvcm1hdChkID0+IGdldE51bWJlckZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnludW1iZXJmb3JtYXQsIGQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDdXN0b21pemluZyB0aGUgdG9vbHRpcHMgaW4gY2FzZSBvZiB0aGUgcGllIGFuZCBkb251dCB3aGVuIGxhYmVsVHlwZSBpcyB2YWx1ZVxuICAgICAgICBjdXN0b21pc2VUb29sdGlwKGNoYXJ0LCBwcm9wZXJ0eVZhbHVlTWFwLCB3aWRnZXRDb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNoYXJ0LnNob3dYQXhpcyhwcm9wZXJ0eVZhbHVlTWFwLnNob3d4YXhpcylcbiAgICAgICAgICAgIC5zaG93WUF4aXMocHJvcGVydHlWYWx1ZU1hcC5zaG93eWF4aXMpO1xuICAgICAgICBjaGFydC5sZWdlbmRQb3NpdGlvbihwcm9wZXJ0eVZhbHVlTWFwLnNob3dsZWdlbmQpO1xuXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGxhYmVscyBpZiB0aGV5IGFyZSBzcGVjaWZpZWQgZXhwbGljaXRseSBvciB0YWtpbmcgdGhlIGF4aXNrZXlzIGNob3NlblxuICAgICAgICB4YXhpc2xhYmVsID0gcHJvcGVydHlWYWx1ZU1hcC54YXhpc2xhYmVsIHx8IHByZXR0aWZ5TGFiZWxzKHdpZGdldENvbnRleHQueGF4aXNkYXRha2V5KSB8fCAneCBjYXB0aW9uJztcbiAgICAgICAgeWF4aXNsYWJlbCA9IHByb3BlcnR5VmFsdWVNYXAueWF4aXNsYWJlbCB8fCBwcmV0dGlmeUxhYmVscyh3aWRnZXRDb250ZXh0LnlheGlzZGF0YWtleSkgfHwgJ3kgY2FwdGlvbic7XG5cbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgeSBheGlzIGhhcyBtdWx0aXBsZSB2YWx1ZXNcbiAgICAgICAgaWYgKHdpZGdldENvbnRleHQueWF4aXNkYXRha2V5ICYmIHdpZGdldENvbnRleHQueWF4aXNkYXRha2V5LnNwbGl0KCcsJykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaGFzTXVsdGlwbGVZVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDdXN0b21pemluZyB0aGUgdG9vbHRpcCB0byBzaG93IHlheGlzbGFiZWwsIG9ubHkgaWYgdGhlIHkgYXhpcyBjb250YWlucyBvbmUgdmFsdWVcbiAgICAgICAgaWYgKCFoYXNNdWx0aXBsZVlWYWx1ZXMgJiYgIWlzQnViYmxlQ2hhcnQod2lkZ2V0Q29udGV4dC50eXBlKSkge1xuICAgICAgICAgICAgY3VzdG9taXNlVG9vbHRpcChjaGFydCwgcHJvcGVydHlWYWx1ZU1hcCwgd2lkZ2V0Q29udGV4dCwgeWF4aXNsYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGRpbmcgdGhlIHVuaXRzIHRvIHRoZSBjYXB0aW9ucyBpZiB0aGV5IGFyZSBzcGVjaWZpZWRcbiAgICAgICAgeGF4aXNsYWJlbCArPSBwcm9wZXJ0eVZhbHVlTWFwLnh1bml0cyA/ICcoJyArIHByb3BlcnR5VmFsdWVNYXAueHVuaXRzICsgJyknIDogJyc7XG4gICAgICAgIHlheGlzbGFiZWwgKz0gcHJvcGVydHlWYWx1ZU1hcC55dW5pdHMgPyAnKCcgKyBwcm9wZXJ0eVZhbHVlTWFwLnl1bml0cyArICcpJyA6ICcnO1xuXG4gICAgICAgIGNoYXJ0LnhBeGlzXG4gICAgICAgICAgICAuYXhpc0xhYmVsKHhheGlzbGFiZWwpXG4gICAgICAgICAgICAuYXhpc0xhYmVsRGlzdGFuY2UocHJvcGVydHlWYWx1ZU1hcC54YXhpc2xhYmVsZGlzdGFuY2UpXG4gICAgICAgICAgICAuc3RhZ2dlckxhYmVscyhwcm9wZXJ0eVZhbHVlTWFwLnN0YWdnZXJsYWJlbHMpO1xuXG4gICAgICAgIC8vIElmIGRhdGUgZm9ybWF0IHNldCBmb3JtYXQgYmFzZWQgZGF0ZSBmb3JtYXRcbiAgICAgICAgaWYgKHByb3BlcnR5VmFsdWVNYXAueGRhdGVmb3JtYXQgfHwgKGlzUHJldmlldyAmJiAhaXNCdWJibGVDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpKSkge1xuICAgICAgICAgICAgaWYgKGlzTGluZVR5cGVDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY2hhcnQueEF4aXMudGlja0Zvcm1hdChkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgeEF4aXNWYWx1ZSA9IGlzUHJldmlldyA/IGRhdGVMaXN0W2QgLSAxXSA6IHdpZGdldENvbnRleHQueERhdGFLZXlBcnJbZF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXRlRm9ybWF0ZWREYXRhKHByb3BlcnR5VmFsdWVNYXAueGRhdGVmb3JtYXQsIHhBeGlzVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGFydC54QXhpcy50aWNrRm9ybWF0KGQgPT4gZ2V0RGF0ZUZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnhkYXRlZm9ybWF0LCBkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlWYWx1ZU1hcC54bnVtYmVyZm9ybWF0KSB7XG4gICAgICAgICAgICBjaGFydC54QXhpcy50aWNrRm9ybWF0KGQgPT4gZ2V0TnVtYmVyRm9ybWF0ZWREYXRhKHByb3BlcnR5VmFsdWVNYXAueG51bWJlcmZvcm1hdCwgZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTGluZVR5cGVDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgICAgICAgICAgICBjaGFydC54QXhpcy50aWNrRm9ybWF0KGQgPT4gd2lkZ2V0Q29udGV4dC54RGF0YUtleUFycltkXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2hhcnQueUF4aXNcbiAgICAgICAgICAgIC5heGlzTGFiZWwoeWF4aXNsYWJlbClcbiAgICAgICAgICAgIC5heGlzTGFiZWxEaXN0YW5jZShwcm9wZXJ0eVZhbHVlTWFwLnlheGlzbGFiZWxkaXN0YW5jZSlcbiAgICAgICAgICAgIC5zdGFnZ2VyTGFiZWxzKHByb3BlcnR5VmFsdWVNYXAuc3RhZ2dlcmxhYmVscylcbiAgICAgICAgICAgIC50aWNrRm9ybWF0KGQgPT4gZ2V0TnVtYmVyRm9ybWF0ZWREYXRhKHByb3BlcnR5VmFsdWVNYXAueW51bWJlcmZvcm1hdCwgZCkpO1xuICAgICAgICBpZiAoaXNCYXJDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgICAgICBjaGFydC52YWx1ZUZvcm1hdChkID0+IGdldE51bWJlckZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnludW1iZXJmb3JtYXQsIGQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgZm9yIGN1c3RvbSBjb2xvcnMgaWYgdXNlciBnaXZlcyBkaXJlY3Qgc3RyaW5nIG9mIGNvbG9ycyBpbiB0ZXh0IGJveFxuICAgIGlmIChpc1N0cmluZyhwcm9wZXJ0eVZhbHVlTWFwLmN1c3RvbWNvbG9ycykgJiYgcHJvcGVydHlWYWx1ZU1hcC5jdXN0b21jb2xvcnMpIHtcbiAgICAgICAgY29sb3JzID0gc3BsaXQocHJvcGVydHlWYWx1ZU1hcC5jdXN0b21jb2xvcnMsICcsJyk7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHByb3BlcnR5VmFsdWVNYXAuY3VzdG9tY29sb3JzKSkge1xuICAgICAgICBjb2xvcnMgPSBwcm9wZXJ0eVZhbHVlTWFwLmN1c3RvbWNvbG9ycztcbiAgICB9XG5cbiAgICBzaG93TGVnZW5kID0gaXNTaG93TGVnZW5kKHByb3BlcnR5VmFsdWVNYXAuc2hvd2xlZ2VuZCk7XG4gICAgY2hhcnQuc2hvd0xlZ2VuZChzaG93TGVnZW5kKVxuICAgICAgICAubWFyZ2luKHt0b3A6IHByb3BlcnR5VmFsdWVNYXAub2Zmc2V0dG9wLCByaWdodDogcHJvcGVydHlWYWx1ZU1hcC5vZmZzZXRyaWdodCwgYm90dG9tOiBwcm9wZXJ0eVZhbHVlTWFwLm9mZnNldGJvdHRvbSwgbGVmdDogcHJvcGVydHlWYWx1ZU1hcC5vZmZzZXRsZWZ0fSlcbiAgICAgICAgLmNvbG9yKGNvbG9ycy5sZW5ndGggPyBjb2xvcnMgOiB0aGVtZXNbcHJvcGVydHlWYWx1ZU1hcC50aGVtZV0uY29sb3JzKTtcblxuICAgIGNoYXJ0LnRvb2x0aXAuZW5hYmxlZChwcm9wZXJ0eVZhbHVlTWFwLnRvb2x0aXBzKTtcbiAgICB3aWRnZXRDb250ZXh0Lm1lc3NhZ2UgPSBwcm9wZXJ0eVZhbHVlTWFwLm5vZGF0YW1lc3NhZ2UgfHwgJ05vIGRhdGEgZm91bmQnO1xuICAgIC8vIHNldHRpbmcgdGhlIG5vIGRhdGEgbWVzc2FnZVxuICAgIGNoYXJ0Lm5vRGF0YSh3aWRnZXRDb250ZXh0Lm1lc3NhZ2UpO1xuXG4gICAgaWYgKGlzTGluZVR5cGVDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpICYmIHdpZGdldENvbnRleHQuaGlnaGxpZ2h0cG9pbnRzKSB7XG4gICAgICAgIGNoYXJ0LmRpc3BhdGNoLm9uKCdzdGF0ZUNoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zdFBsb3RDaGFydFByb2Nlc3Mod2lkZ2V0Q29udGV4dCksIDEwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh3aWRnZXRDb250ZXh0LnNob3dsZWdlbmQgJiYgKHdpZGdldENvbnRleHQudHlwZSA9PT0gJ0RvbnV0JyB8fCB3aWRnZXRDb250ZXh0LnR5cGUgPT09ICdQaWUnKSkge1xuICAgICAgICBpZih3aWRnZXRDb250ZXh0LnNob3dsZWdlbmQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGNoYXJ0LmxlZ2VuZFBvc2l0aW9uKCdyaWdodCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGFydDtcbn07XG5cbi8vIEB0cy1pZ25vcmVcbmV4cG9ydCBjb25zdCBwb3N0UGxvdENoYXJ0UHJvY2VzcyA9ICh3aWRnZXRDb250ZXh0LCBpc1ByZXZpZXc/KSA9PiB7XG4gICAgY29uc3QgaWQgPSBpc1ByZXZpZXcgPyBudWxsIDogd2lkZ2V0Q29udGV4dC4kaWQ7XG4gICAgLy8gSWYgdXNlciBzZXRzIHRvIGhpZ2hsaWdodCB0aGUgZGF0YSBwb2ludHMgYW5kIGluY3JlYXNlIHRoZSB0aGlja25lc3Mgb2YgdGhlIGxpbmVcbiAgICBpZiAoaXNMaW5lVHlwZUNoYXJ0KHdpZGdldENvbnRleHQudHlwZSkpIHtcbiAgICAgICBzZXRMaW5lVGhpY2tuZXNzKGlkLCB3aWRnZXRDb250ZXh0LmxpbmV0aGlja25lc3MpO1xuICAgICAgIGhpZ2hsaWdodFBvaW50cyhpZCwgd2lkZ2V0Q29udGV4dC5oaWdobGlnaHRwb2ludHMpO1xuICAgIH1cbiAgICAvLyBNb2RpZnlpbmcgdGhlIGxlZ2VuZCBwb3NpdGlvbiBvbmx5IHdoZW4gbGVnZW5kIGlzIHNob3duXG4gICAgLy8gaWYgKHdpZGdldENvbnRleHQuc2hvd2xlZ2VuZCkge1xuICAgIC8vICAgICBtb2RpZnlMZWdlbmRQb3NpdGlvbih3aWRnZXRDb250ZXh0LCB3aWRnZXRDb250ZXh0LnNob3dsZWdlbmQsIGlkKTtcbiAgICAvLyB9XG59O1xuXG4vLyBAdHMtaWdub3JlXG5leHBvcnQgY29uc3QgZ2V0RGF0ZUxpc3QgPSAoKSA9PiBkYXRlTGlzdDtcblxuIl19
|
|
721
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBT3JHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUNwRyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRXpGLE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsRUFDdkQsTUFBTSxHQUFHO0lBQ0wsYUFBYSxFQUFFO1FBQ1gsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNwTyxPQUFPLEVBQUU7WUFDTCxpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLFdBQVcsRUFBRSxTQUFTO1NBQ3pCO0tBQ0o7SUFD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LENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsYUFBYTtBQUNiLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsYUFBYSxFQUFFLFNBQVUsRUFBRSxFQUFFO0lBQzlELE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO0lBQ2hELG1GQUFtRjtJQUNuRixJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELGVBQWUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCwwREFBMEQ7SUFDMUQsa0NBQWtDO0lBQ2xDLHlFQUF5RTtJQUN6RSxJQUFJO0FBQ1IsQ0FBQyxDQUFDO0FBRUYsYUFBYTtBQUNiLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzRW1wdHlPYmplY3QsIHByZXR0aWZ5TGFiZWxzfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge2ZvckVhY2gsIGluY2x1ZGVzLCBpbnZlcnQsIGlzQXJyYXksIGlzRmluaXRlLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIHNwbGl0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuZGVjbGFyZSBjb25zdCBtb21lbnQ7XG5kZWNsYXJlIGNvbnN0IGQzLCBudjtcblxuZXhwb3J0IGNvbnN0IGNoYXJ0VHlwZXMgPSBbJ0NvbHVtbicsICdMaW5lJywgJ0FyZWEnLCAnQ3VtdWxhdGl2ZSBMaW5lJywgJ0JhcicsICdQaWUnLCAnRG9udXQnLCAnQnViYmxlJ10sXG4gICAgYWxsU2hhcGVzID0gWydjaXJjbGUnLCAnc3F1YXJlJywgJ2RpYW1vbmQnLCAnY3Jvc3MnLCAndHJpYW5nbGUtdXAnLCAndHJpYW5nbGUtZG93biddO1xuXG5jb25zdCBkYXRlTGlzdCA9IFsnMDEvMDEvMjAwMScsICcwMS8wMS8yMDAyJywgJzAxLzAxLzIwMDMnXSxcbiAgICB0aGVtZXMgPSB7XG4gICAgICAgICdUZXJyZXN0cmlhbCc6IHtcbiAgICAgICAgICAgIGNvbG9yczogWycjMWY3N2I0JywgJyNhZWM3ZTgnLCAnI2ZmN2YwZScsICcjZmZiYjc4JywgJyMyY2EwMmMnLCAnIzk4ZGY4YScsICcjZDYyNzI4JywgJyNmZjk4OTYnLCAnIzk0NjdiZCcsICcjYzViMGQ1JywgJyM4YzU2NGInLCAnI2M0OWM5NCcsICcjZTM3N2MyJywgJyNmN2I2ZDInLCAnIzdmN2Y3ZicsICcjYzdjN2M3JywgJyNiY2JkMjInLCAnI2RiZGI4ZCcsICcjMTdiZWNmJywgJyM5ZWRhZTUnXSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZENvbG9yJzogJyNkZTdkMjgnLFxuICAgICAgICAgICAgICAgICd0ZXh0Q29sb3InOiAnI0ZGRkZGRidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ0FubmFiZWxsZSc6IHtcbiAgICAgICAgICAgIGNvbG9yczogWycjMzkzYjc5JywgJyM1MjU0YTMnLCAnIzZiNmVjZicsICcjOWM5ZWRlJywgJyM2Mzc5MzknLCAnIzhjYTI1MicsICcjYjVjZjZiJywgJyNjZWRiOWMnLCAnIzhjNmQzMScsICcjYmQ5ZTM5JywgJyNlN2JhNTInLCAnI2U3Y2I5NCcsICcjODQzYzM5JywgJyNhZDQ5NGEnLCAnI2Q2NjE2YicsICcjZTc5NjljJywgJyM3YjQxNzMnLCAnI2E1NTE5NCcsICcjY2U2ZGJkJywgJyNkZTllZDYnXSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZENvbG9yJzogJyMyZTMwNmYnLFxuICAgICAgICAgICAgICAgICd0ZXh0Q29sb3InOiAnI0ZGRkZGRidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ0F6dXJlJzoge1xuICAgICAgICAgICAgY29sb3JzOiBbJyMzMTgyYmQnLCAnIzZiYWVkNicsICcjOWVjYWUxJywgJyNjNmRiZWYnLCAnI2U2NTUwZCcsICcjZmQ4ZDNjJywgJyNmZGFlNmInLCAnI2ZkZDBhMicsICcjMzFhMzU0JywgJyM3NGM0NzYnLCAnI2ExZDk5YicsICcjYzdlOWMwJywgJyM3NTZiYjEnLCAnIzllOWFjOCcsICcjYmNiZGRjJywgJyNkYWRhZWInLCAnIzYzNjM2MycsICcjOTY5Njk2JywgJyNiZGJkYmQnLCAnI2Q5ZDlkOSddLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnIzMxODJiZCcsXG4gICAgICAgICAgICAgICAgJ3RleHRDb2xvcic6ICcjRkZGRkZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnUmV0cm8nOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnIzBjYTdhMScsICcjZmZhNjE1JywgJyMzMzQ5NTcnLCAnI2FjYzVjMicsICcjOTg4ZjkwJywgJyM4YWNjYzknLCAnIzUxNTE1MScsICcjZjI3ODYxJywgJyMzNmM5ZmQnLCAnIzc5NDY2OCcsICcjMGY3MDlkJywgJyMwZDI3MzgnLCAnIzQ0YmU3OCcsICcjNGExODM5JywgJyM2YTM5M2YnLCAnIzU1N2Q4YicsICcjNmMzMzFjJywgJyMxYzFjMWMnLCAnIzg2MTUwMCcsICcjMDk1NjJhJ10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjODA1MTNhJyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdNZWxsb3cnOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnI2YwZGNiZicsICcjODhjODc3JywgJyNhZWI5MTgnLCAnIzJlMmMyMycsICcjZGRkZGQyJywgJyNkZmU5NTYnLCAnIzRjOTYzYicsICcjNWQzODAxJywgJyNlMWVlYzMnLCAnI2NkODQ3MicsICcjZmNmYWIzJywgJyM5YTQ2MzUnLCAnIzkyOTVhZCcsICcjMmUzZjEyJywgJyM1NjU2NzcnLCAnIzU1N2Q4YicsICcjNGY0ZDAyJywgJyMwYzBjMWInLCAnIzgzMzMyNCcsICcjMjQxMjBlJ10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjN2M5ZTczJyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdPcmllbnQnOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnI2E4MDAwMCcsICcjY2M2YzNjJywgJyNmMGU0MDAnLCAnIzAwMDA4NCcsICcjZmNjYzZjJywgJyMwMDljNmMnLCAnI2NjMzA5YycsICcjNzhjYzAwJywgJyNmYzg0ZTQnLCAnIzQ4ZTRmYycsICcjNDg3OGQ4JywgJyMxODZjMGMnLCAnIzYwNjA2MCcsICcjYThhOGE4JywgJyMwMDAwMDAnLCAnI2Q3ZDdkNycsICcjNzVhMDZlJywgJyMxOTBkMGInLCAnIzg4ODg4OCcsICcjNjk0Yjg0J10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjYzE0MjQyJyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdHcmF5U2NhbGUnOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnIzE0MTQxNCcsICcjMzUzNTM1JywgJyM1YjViNWInLCAnIzg0ODQ4NCcsICcjYThhOGE4JywgJyNjM2MzYzMnLCAnI2UwZTBlMCcsICcjYzhjOGM4JywgJyNhNWE1YTUnLCAnIzg3ODc4NycsICcjNjU2NTY1JywgJyM0ZTRlNGUnLCAnIzMwMzAzMCcsICcjMWMxYzFjJywgJyM0ZjRmNGYnLCAnIzNiM2IzYicsICcjNzU3NTc1JywgJyM2MDYwNjAnLCAnIzg2ODY4NicsICcjYzFjMWMxJ10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjNTc1NzU3JyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdGbHllcic6IHtcbiAgICAgICAgICAgIGNvbG9yczogWycjM2Y0NTRjJywgJyM1YTY0NmUnLCAnIzg0ODc3OCcsICcjY2VkZWRmJywgJyM3NGM0ZGQnLCAnIzA5NDZlZCcsICcjMzgwYmIxJywgJyMwMDBmZjAnLCAnI2Y1NGEyMycsICcjMWRiMjYyJywgJyNiY2EzYWEnLCAnI2ZmYTUwMCcsICcjYTg2YjMyJywgJyM2M2ExOGMnLCAnIzU2Nzk1ZScsICcjOTM0MzQzJywgJyNiNzVmNWYnLCAnIzc1MmQyZCcsICcjNGUxMTExJywgJyM5MjA2MDYnXSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZENvbG9yJzogJyM0NzYzN2MnLFxuICAgICAgICAgICAgICAgICd0ZXh0Q29sb3InOiAnI0ZGRkZGRidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ0x1bWlub3NpdHknOiB7XG4gICAgICAgICAgICBjb2xvcnM6IFsnI0ZGRkZGRicsICcjZTRlNGU0JywgJyMwMGJjZDQnLCAnI2YwZGQyZicsICcjMDBhYWJmJywgJyMwMTgzNzYnLCAnI2U5MWU2MycsICcjMzllNWQ0JywgJyNmZjZkNmQnLCAnIzAwZmY3NicsICcjZmY5ODAwJywgJyM5Njk2OTYnLCAnI2ZmNDIwMCcsICcjZTAwMDAwJywgJyM5NWNiZTUnLCAnIzUzMzFmZicsICcjZmZmNGE3JywgJyNlN2E4MDAnLCAnIzAwNjFlNCcsICcjZDVlN2ZmJ10sXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjNDc2MzdjJyxcbiAgICAgICAgICAgICAgICAndGV4dENvbG9yJzogJyNGRkZGRkYnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJhc2ljUHJvcGVydGllcyA9IFsneGF4aXNsYWJlbCcsICd5YXhpc2xhYmVsJywgJ3h1bml0cycsICd5dW5pdHMnLCAneG51bWJlcmZvcm1hdCcsICd4ZGF0ZWZvcm1hdCcsICd5bnVtYmVyZm9ybWF0JyxcbiAgICAgICAgJ3Nob3d2YWx1ZXMnLCAnc2hvd2xhYmVscycsICd2aWV3dHlwZScsICdhcmVhdmlld3R5cGUnLCAnc3RhZ2dlcmxhYmVscycsICdyZWR1Y2V4dGlja3MnLCAnb2Zmc2V0dG9wJywgJ29mZnNldGJvdHRvbScsICdvZmZzZXRyaWdodCcsICdvZmZzZXRsZWZ0JyxcbiAgICAgICAgJ2JhcnNwYWNpbmcnLCAneGF4aXNsYWJlbGRpc3RhbmNlJywgJ3lheGlzbGFiZWxkaXN0YW5jZScsICd0aGVtZScsICdsYWJlbHR5cGUnLCAnZG9udXRyYXRpbycsICdzaG93bGFiZWxzb3V0c2lkZScsICdzaG93eGRpc3RhbmNlJywgJ3Nob3d5ZGlzdGFuY2UnLCAnc2hhcGUnLCAnbm9kYXRhbWVzc2FnZScsICdjYXB0aW9ucycsICdzaG93eGF4aXMnLCAnc2hvd3lheGlzJyxcbiAgICAgICAgJ2NlbnRlcmxhYmVsJywgJ2N1c3RvbWNvbG9ycycsICdzaG93bGVnZW5kJywgJ2xlZ2VuZHR5cGUnLCAneGRvbWFpbicsICd5ZG9tYWluJywgJ3Rvb2x0aXBzJywgJ2xpbmV0aGlja25lc3MnLCAnaGlnaGxpZ2h0cG9pbnRzJywgJ2ludGVycG9sYXRpb24nLCAnbGFiZWx0aHJlc2hvbGQnXSxcbiAgICBiYXJTcGFjaW5nTWFwID0ge1xuICAgICAgICAnc21hbGwnIDogMC4zLFxuICAgICAgICAnbWVkaXVtJyA6IDAuNSxcbiAgICAgICAgJ2xhcmdlJyA6IDAuOFxuICAgIH0sXG4gICAgZG9udXRSYXRpb01hcCA9IHtcbiAgICAgICAgJ3NtYWxsJyA6IDAuMyxcbiAgICAgICAgJ21lZGl1bScgOiAwLjYsXG4gICAgICAgICdsYXJnZScgOiAwLjdcbiAgICB9LFxuICAgIGJhclNwYWNpbmdNYXBJbnZlcnQgPSBpbnZlcnQoYmFyU3BhY2luZ01hcCksXG4gICAgZG9udXRSYXRpb01hcEludmVydCA9IGludmVydChkb251dFJhdGlvTWFwKSxcbiAgICB0aWNrZm9ybWF0cyA9IHtcbiAgICAgICAgJ1Rob3VzYW5kJzoge1xuICAgICAgICAgICAgJ3ByZWZpeCc6ICdLJyxcbiAgICAgICAgICAgICdkaXZpZGVyJzogMTAwMFxuICAgICAgICB9LFxuICAgICAgICAnTWlsbGlvbicgOiB7XG4gICAgICAgICAgICAncHJlZml4JzogJ00nLFxuICAgICAgICAgICAgJ2RpdmlkZXInOiAxMDAwMDAwXG4gICAgICAgIH0sXG4gICAgICAgICdCaWxsaW9uJyA6IHtcbiAgICAgICAgICAgICdwcmVmaXgnOiAnQicsXG4gICAgICAgICAgICAnZGl2aWRlcic6IDEwMDAwMDAwMDBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2hhcnRJZCA9ICcjcHJldmlldy1jaGFydCcsXG4gICAgZGF0YVR5cGVKU09OID0gWydDb2x1bW4nLCAnTGluZScsICdQaWUnLCAnQmFyJywgJ0RvbnV0JywgJ0J1YmJsZSddLCAgICAvLyBDaGFydHMgdGhhdCBzdXBwb3J0cyB0aGUgZGF0YSB0byBiZSBKU09OO1xuICAgIGxpbmVUeXBlQ2hhcnRzID0gWydMaW5lJywgJ0FyZWEnLCAnQ3VtdWxhdGl2ZSBMaW5lJ10sICAgLy8gQ2hhcnRzIHRoYXQgZG9lcyBub3Qgc3VwcG9ydHMgdGhlIHN0cmluZyB0eXBlIG9mIGRhdGEgaW4gdGhlIHhheGlzIGluIHRoZSBudmQzO1xuICAgIGRhdGFUeXBlQXJyYXkgPSBbJ0N1bXVsYXRpdmUgTGluZScsICdBcmVhJ10sICAgICAvLyBDaGFydHMgdGhhdCBzdXBwb3J0cyB0aGUgZGF0YSB0byBiZSBBcnJheVxuICAgIFNBTVBMRV9EQVRBID0ge1xuICAgICAgICAnZ3JvdXAxJyA6ICdFdXJvcGUnLFxuICAgICAgICAnZ3JvdXAyJyA6ICdBc2lhJyxcbiAgICAgICAgJ2dyb3VwMycgOiAnQW1lcmljYScsXG4gICAgICAgICdncm91cDQnIDogJ0F1c3RyYWxpYSdcbiAgICB9O1xuXG4vLyByZXR1cm5zIHRydWUgaWYgY2hhcnQgdHlwZSBpcyBwaWVcbmV4cG9ydCBjb25zdCBpc1BpZUNoYXJ0ID0gdHlwZSA9PiB0eXBlID09PSAnUGllJztcblxuLy8gcmV0dXJucyB0cnVlIGlmIGNoYXJ0IHR5cGUgaXMgbGluZVxuZXhwb3J0IGNvbnN0IGlzTGluZUNoYXJ0ID0gdHlwZSA9PiB0eXBlID09PSAnTGluZSc7XG5cbi8vIHJldHVybnMgdHJ1ZSBpZiBjaGFydCB0eXBlIGlzIGJhclxuZXhwb3J0IGNvbnN0IGlzQmFyQ2hhcnQgPSB0eXBlID0+IHR5cGUgPT09ICdCYXInO1xuXG4vLyByZXR1cm5zIHRydWUgaWYgY2hhcnQgdHlwZSBpcyBkb251dFxuZXhwb3J0IGNvbnN0IGlzRG9udXRDaGFydCA9IHR5cGUgPT4gdHlwZSA9PT0gJ0RvbnV0JztcblxuLy8gcmV0dXJucyB0cnVlIGlmIGNoYXJ0IHR5cGUgaXMgYnViYmxlXG5leHBvcnQgY29uc3QgaXNCdWJibGVDaGFydCA9IHR5cGUgPT4gdHlwZSA9PT0gJ0J1YmJsZSc7XG5cbi8vIHJldHVybnMgdHJ1ZSBpZiBjaGFydCB0eXBlIGlzIGNvbHVtblxuZXhwb3J0IGNvbnN0IGlzQ29sdW1uQ2hhcnQgPSB0eXBlID0+IHR5cGUgPT09ICdDb2x1bW4nO1xuXG4vLyByZXR1cm5zIHRydWUgaWYgY2hhcnQgdHlwZSBpcyBhcmVhXG5leHBvcnQgY29uc3QgaXNBcmVhQ2hhcnQgPSB0eXBlID0+IHR5cGUgPT09ICdBcmVhJztcblxuLy8gcmV0dXJucyB0cnVlIGlmIGNoYXJ0IHR5cGUgaXMgYXJlYVxuZXhwb3J0IGNvbnN0IGlzUGllVHlwZSA9IHR5cGUgPT4gaXNQaWVDaGFydCh0eXBlKSB8fCBpc0RvbnV0Q2hhcnQodHlwZSk7XG5cbi8vIFRoZSBmb3JtYXQgb2YgY2hhcnQgZGF0YSBpcyBhcnJheSBvZiBqc29uIG9iamVjdHMgaW4gY2FzZSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGNoYXJ0XG5leHBvcnQgY29uc3QgaXNDaGFydERhdGFKU09OID0gdHlwZSA9PiBpbmNsdWRlcyhkYXRhVHlwZUpTT04sIHR5cGUpIHx8ICFpbmNsdWRlcyhjaGFydFR5cGVzLCB0eXBlKTtcblxuLy8gVGhlIGZvcm1hdCBvZiBjaGFydCBkYXRhIGlzIGFycmF5IG9mIG9iamVjdHMgaW4gY2FzZSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGNoYXJ0XG5leHBvcnQgY29uc3QgaXNDaGFydERhdGFBcnJheSA9IHR5cGUgPT4gaW5jbHVkZXMoZGF0YVR5cGVBcnJheSwgdHlwZSk7XG5cbi8vIHJldHVybnMgdHJ1ZSBpcyB0aGUgY2hhcnQgdHlwZSBpcyAnbGluZScsICdhcmVhJyBvciAnY3VtdWxhdGl2ZSBsaW5lJyBlbHNlIGZhbHNlXG5leHBvcnQgY29uc3QgaXNMaW5lVHlwZUNoYXJ0ID0gdHlwZSA9PiBpbmNsdWRlcyhsaW5lVHlwZUNoYXJ0cywgdHlwZSk7XG5cbi8vIFgvWSBEb21haW4gcHJvcGVydGllcyBhcmUgc3VwcG9ydGVkIG9ubHkgZm9yIENvbHVtbiBhbmQgQXJlYSBjaGFydHNcbmV4cG9ydCBjb25zdCBpc0F4aXNEb21haW5TdXBwb3J0ZWQgPSB0eXBlID0+IGlzQ29sdW1uQ2hhcnQodHlwZSkgfHwgaXNBcmVhQ2hhcnQodHlwZSk7XG5cbi8vIFJldHVybnMgYmFyIHNwYWNpbmcgdmFsdWVcbmV4cG9ydCBjb25zdCBnZXRCYXJTcGFjaW5nVmFsdWUgPSAodmFsdWUsIHByb3ApID0+IHtcbiAgICBpZiAocHJvcCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gYmFyU3BhY2luZ01hcFt2YWx1ZV07XG4gICAgfVxuICAgIGlmIChwcm9wID09PSAna2V5Jykge1xuICAgICAgICByZXR1cm4gYmFyU3BhY2luZ01hcEludmVydFt2YWx1ZV07XG4gICAgfVxufTtcblxuLy8gUmV0dXJucyByYWRpdXMgdmFsdWVcbmV4cG9ydCBjb25zdCBnZXRSYWRpdXNWYWx1ZSA9ICh2YWx1ZSwgcHJvcCkgPT4ge1xuICAgIGlmIChwcm9wID09PSAndmFsdWUnKSB7XG4gICAgICAgIHJldHVybiBkb251dFJhdGlvTWFwW3ZhbHVlXTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09ICdrZXknKSB7XG4gICAgICAgIHJldHVybiBkb251dFJhdGlvTWFwSW52ZXJ0W3ZhbHVlXTtcbiAgICB9XG59O1xuXG4vLyBSZXR1cm5zIGxhYmVscyBjb25maWdcbmV4cG9ydCBjb25zdCBnZXRMYWJlbFZhbHVlcyA9IChzaG93bGFiZWxzLCBzaG93bGFiZWxzb3V0c2lkZSwgcHJvcCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsc0NvbmZpZzogYW55ID0ge307XG4gICAgc3dpdGNoIChzaG93bGFiZWxzKSB7XG4gICAgICAgIGNhc2UgJ2hpZGUnOlxuICAgICAgICAgICAgbGFiZWxzQ29uZmlnLnNob3dsYWJlbHMgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbnNpZGUnOlxuICAgICAgICAgICAgbGFiZWxzQ29uZmlnLnNob3dsYWJlbHMgPSB0cnVlO1xuICAgICAgICAgICAgbGFiZWxzQ29uZmlnLnNob3dsYWJlbHNvdXRzaWRlID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3V0c2lkZSc6XG4gICAgICAgICAgICBsYWJlbHNDb25maWcuc2hvd2xhYmVscyA9IHRydWU7XG4gICAgICAgICAgICBsYWJlbHNDb25maWcuc2hvd2xhYmVsc291dHNpZGUgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbHNDb25maWc7XG59O1xuXG4vLyBDb25zdHJ1Y3QgdGhlIHNhbXBsZSBkYXRhXG5leHBvcnQgY29uc3QgY29uc3RydWN0U2FtcGxlRGF0YSA9IChkYXRhVHlwZSwgeWF4aXNMZW5ndGgsIHNoYXBlKSA9PiB7XG4gICAgbGV0IGZpcnN0X3NlcmllcyA9IFtdLFxuICAgICAgICBzZWNvbmRfc2VyaWVzID0gW10sXG4gICAgICAgIHRoaXJkX3NlcmllcyA9IFtdLFxuICAgICAgICBmaXJzdF9zZXJpZXNfYXJyYXkgPSBbXSxcbiAgICAgICAgc2Vjb25kX3Nlcmllc19hcnJheSA9IFtdLFxuICAgICAgICB0aGlyZF9zZXJpZXNfYXJyYXkgPSBbXSxcbiAgICAgICAgZmlyc3Rfc2VyaWVzX2J1YmJsZSA9IFtdLFxuICAgICAgICBzZWNvbmRfc2VyaWVzX2J1YmJsZSA9IFtdLFxuICAgICAgICB0aGlyZF9zZXJpZXNfYnViYmxlID0gW10sXG4gICAgICAgIGRhdGEgPSBbXTtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2pzb25Gb3JtYXQnOlxuICAgICAgICAgICAgZmlyc3Rfc2VyaWVzID0gW1xuICAgICAgICAgICAgICAgIHsneCc6ICcwMS8wMS8yMDAxJywgJ3knOiA0MDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAnMDEvMDEvMjAwMicsICd5JzogMTAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogJzAxLzAxLzIwMDMnLCAneSc6IDUwMDAwMDB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgc2Vjb25kX3NlcmllcyA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiAnMDEvMDEvMjAwMScsICd5JzogMzAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogJzAxLzAxLzIwMDInLCAneSc6IDQwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6ICcwMS8wMS8yMDAzJywgJ3knOiA3MDAwMDAwfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXJkX3NlcmllcyA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiAnMDEvMDEvMjAwMScsICd5JzogMjAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogJzAxLzAxLzIwMDInLCAneSc6IDgwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6ICcwMS8wMS8yMDAzJywgJ3knOiA2MDAwMDAwfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGRhdGFbMF0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiBmaXJzdF9zZXJpZXMsXG4gICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoeWF4aXNMZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIGRhdGFbMV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2Vjb25kX3NlcmllcyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHlheGlzTGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzJdID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHRoaXJkX3NlcmllcyxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xpbmVDaGFydEZvcm1hdCc6XG4gICAgICAgICAgICBmaXJzdF9zZXJpZXMgPSBbXG4gICAgICAgICAgICAgICAgeyd4JzogMSwgJ3knOiA0MDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAyLCAneSc6IDEwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6IDMsICd5JzogNTAwMDAwMH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBzZWNvbmRfc2VyaWVzID0gW1xuICAgICAgICAgICAgICAgIHsneCc6IDEsICd5JzogMzAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogMiwgJ3knOiA0MDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAzLCAneSc6IDcwMDAwMDB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcmRfc2VyaWVzID0gW1xuICAgICAgICAgICAgICAgIHsneCc6IDEsICd5JzogMjAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogMiwgJ3knOiA4MDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiAzLCAneSc6IDYwMDAwMDB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZGF0YVswXSA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGZpcnN0X3NlcmllcyxcbiAgICAgICAgICAgICAgICBrZXk6IFNBTVBMRV9EQVRBLmdyb3VwMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh5YXhpc0xlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgZGF0YVsxXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBzZWNvbmRfc2VyaWVzLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IFNBTVBMRV9EQVRBLmdyb3VwMlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeWF4aXNMZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgIGRhdGFbMl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcmRfc2VyaWVzLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IFNBTVBMRV9EQVRBLmdyb3VwM1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXJyYXlGb3JtYXQnOlxuICAgICAgICAgICAgZmlyc3Rfc2VyaWVzX2FycmF5ID0gW1xuICAgICAgICAgICAgICAgIFsxLCA0MDAwMDAwXSxcbiAgICAgICAgICAgICAgICBbMiwgMTAwMDAwMF0sXG4gICAgICAgICAgICAgICAgWzMsIDUwMDAwMDBdXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgc2Vjb25kX3Nlcmllc19hcnJheSA9IFtcbiAgICAgICAgICAgICAgICBbMSwgMzAwMDAwMF0sXG4gICAgICAgICAgICAgICAgWzIsIDQwMDAwMDBdLFxuICAgICAgICAgICAgICAgIFszLCA3MDAwMDAwXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXJkX3Nlcmllc19hcnJheSA9IFtcbiAgICAgICAgICAgICAgICBbMSwgMjAwMDAwMF0sXG4gICAgICAgICAgICAgICAgWzIsIDgwMDAwMDBdLFxuICAgICAgICAgICAgICAgIFszLCA2MDAwMDAwXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGRhdGFbMF0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiBmaXJzdF9zZXJpZXNfYXJyYXksXG4gICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoeWF4aXNMZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIGRhdGFbMV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2Vjb25kX3Nlcmllc19hcnJheSxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHlheGlzTGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzJdID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHRoaXJkX3Nlcmllc19hcnJheSxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2J1YmJsZUZvcm1hdCc6XG4gICAgICAgICAgICBzaGFwZSA9IHNoYXBlID09PSAncmFuZG9tJyA/ICBhbGxTaGFwZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWxsU2hhcGVzLmxlbmd0aCldIDogc2hhcGU7XG4gICAgICAgICAgICBmaXJzdF9zZXJpZXNfYnViYmxlID0gW1xuICAgICAgICAgICAgICAgIHsneCc6IDgwLjY2LCAneSc6IDMzNzM5OTAwLCAgJ3NpemUnOiA3OCwgJ3NoYXBlJzogc2hhcGV9LFxuICAgICAgICAgICAgICAgIHsneCc6IDc5Ljg0LCAneSc6IDgxOTAyMzAwLCAgJ3NpemUnOiA5MCwgJ3NoYXBlJzogc2hhcGV9LFxuICAgICAgICAgICAgICAgIHsneCc6IDc4LjYsICAneSc6IDU1MjMxMDAsICAgJ3NpemUnOiA0NSwgJ3NoYXBlJzogc2hhcGV9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgc2Vjb25kX3Nlcmllc19idWJibGUgPSBbXG4gICAgICAgICAgICAgICAgeyd4JzogNzIuNzMsICd5JzogNzk3MTYyMDAsICAnc2l6ZSc6IDk4LCAnc2hhcGUnOiBzaGFwZX0sXG4gICAgICAgICAgICAgICAgeyd4JzogODAuMDUsICd5JzogNjE4MDE2MDAsICAnc2l6ZSc6IDIwLCAnc2hhcGUnOiBzaGFwZX0sXG4gICAgICAgICAgICAgICAgeyd4JzogNzIuNDksICd5JzogNzMxMzcyMDAsICAnc2l6ZSc6IDM0LCAnc2hhcGUnOiBzaGFwZX1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlyZF9zZXJpZXNfYnViYmxlID0gW1xuICAgICAgICAgICAgICAgIHsneCc6IDY4LjA5LCAneSc6IDMzNzM5OTAwLCAgJ3NpemUnOiA0NSwgJ3NoYXBlJzogc2hhcGV9LFxuICAgICAgICAgICAgICAgIHsneCc6IDgxLjU1LCAneSc6IDc0ODU2MDAsICAgJ3NpemUnOiA3OCwgJ3NoYXBlJzogc2hhcGV9LFxuICAgICAgICAgICAgICAgIHsneCc6IDY4LjYwLCAneSc6IDE0MTg1MDAwMCwgJ3NpemUnOiA1NiwgJ3NoYXBlJzogc2hhcGV9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZGF0YVswXSA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGZpcnN0X3Nlcmllc19idWJibGUsXG4gICAgICAgICAgICAgICAga2V5OiBTQU1QTEVfREFUQS5ncm91cDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoeWF4aXNMZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIGRhdGFbMV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2Vjb25kX3Nlcmllc19idWJibGUsXG4gICAgICAgICAgICAgICAgICAgIGtleTogU0FNUExFX0RBVEEuZ3JvdXAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5YXhpc0xlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgZGF0YVsyXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlyZF9zZXJpZXNfYnViYmxlLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IFNBTVBMRV9EQVRBLmdyb3VwM1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGllQ2hhcnRGb3JtYXQnOlxuICAgICAgICAgICAgZGF0YSA9IFtcbiAgICAgICAgICAgICAgICB7J3gnOiBTQU1QTEVfREFUQS5ncm91cDEsICd5JzogMTAwMDAwMH0sXG4gICAgICAgICAgICAgICAgeyd4JzogU0FNUExFX0RBVEEuZ3JvdXAyLCAneSc6IDIwMDAwMDB9LFxuICAgICAgICAgICAgICAgIHsneCc6IFNBTVBMRV9EQVRBLmdyb3VwMywgJ3knOiAzMDAwMDAwfSxcbiAgICAgICAgICAgICAgICB7J3gnOiBTQU1QTEVfREFUQS5ncm91cDQsICd5JzogNDAwMDAwMH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YVR5cGUgPSB3aWRnZXRDb250ZXh0ID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2lkZ2V0Q29udGV4dC50eXBlO1xuICAgIGlmIChpc0xpbmVDaGFydCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gJ2xpbmVDaGFydEZvcm1hdCc7XG4gICAgfVxuICAgIGlmIChpc1BpZVR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuICdwaWVDaGFydEZvcm1hdCc7XG4gICAgfVxuICAgIGlmIChpc0J1YmJsZUNoYXJ0KHR5cGUpKSB7XG4gICAgICAgIHJldHVybiAnYnViYmxlRm9ybWF0JztcbiAgICB9XG4gICAgcmV0dXJuIGlzQ2hhcnREYXRhSlNPTih0eXBlKSA/ICdqc29uRm9ybWF0JyA6ICdhcnJheUZvcm1hdCc7XG59O1xuXG4vLyBTYW1wbGUgZGF0YSB0byBwb3B1bGF0ZSB3aGVuIG5vIGRhdGEgaXMgYm91bmRcbmV4cG9ydCBjb25zdCBnZXRTYW1wbGVEYXRhID0gd2lkZ2V0Q29udGV4dCA9PiBjb25zdHJ1Y3RTYW1wbGVEYXRhKGdldERhdGFUeXBlKHdpZGdldENvbnRleHQpLCBzcGxpdCh3aWRnZXRDb250ZXh0LnlheGlzZGF0YWtleSwgJywnKS5sZW5ndGgsIHdpZGdldENvbnRleHQuc2hhcGUpO1xuXG4vLyBDaGVjayB3aGV0aGVyIFgvWSBEb21haW4gd2FzIHNldCB0byBNaW4gYW5kIGlzIHN1cHBvcnRlZCBmb3IgdGhlIHByZXNlbnQgY2hhcnRcbmV4cG9ydCBjb25zdCBpc0F4aXNEb21haW5WYWxpZCA9ICh3aWRnZXRDb250ZXh0LCBheGlzKSA9PiB7XG4gICAgaWYgKHdpZGdldENvbnRleHRbYXhpcyArICdkb21haW4nXSA9PT0gJ01pbicgJiYgKGlzQXhpc0RvbWFpblN1cHBvcnRlZCh3aWRnZXRDb250ZXh0LnR5cGUpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gQ2hlY2sgd2hldGhlciBtaW4gYW5kIG1heCB2YWx1ZXMgYXJlIGZpbml0ZSBvciBub3RcbmV4cG9ydCBjb25zdCBhcmVNaW5NYXhWYWx1ZXNWYWxpZCA9IHZhbHVlcyA9PiB7XG4gICAgaWYgKGlzRmluaXRlKHZhbHVlcy5taW4pICYmIGlzRmluaXRlKHZhbHVlcy5tYXgpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0WVNjYWxlTWluVmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgX21pbiA9IE1hdGguZmxvb3IodmFsdWUpO1xuICAgIC8qIElmIHRoZSBudW1iZXIgaGFzIGEpIGRlY2ltYWwgcGFydCByZXR1cm5pbmcgZmxvb3IgdmFsdWUgLSAwLjFcbiAgICAgYikgbm8gZGVjaW1hbCBwYXJ0IHJldHVybmluZyBmbG9vciB2YWx1ZSAtIDEgKi9cbiAgICByZXR1cm4gTWF0aC5hYnModmFsdWUpIC0gX21pbiA+IDAgPyB2YWx1ZSAtIDAuMSA6IF9taW4gLSAxO1xufTtcblxuLy8gQ2hvb3NlcyB0aGUgZGF0YSBwb2ludHMgb2YgbGluZS9jdW11bGF0aXZlIGxpbmUvYXJlYSBjaGFydCBhbmQgaGlnaGxpZ2h0cyB0aGVtXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0UG9pbnRzID0gKGlkLCBoaWdobGlnaHRwb2ludHMpID0+IHtcbiAgICBjb25zdCBjaGFydFN2ZyA9IGlkID8gZDMuc2VsZWN0KCcjd21DaGFydCcgKyBpZCArICcgc3ZnJykgOiBkMy5zZWxlY3QoY2hhcnRJZCArICcgc3ZnJyk7XG4gICAgaWYgKGhpZ2hsaWdodHBvaW50cykge1xuICAgICAgICBjaGFydFN2Zy5zZWxlY3RBbGwoJy5udi1wb2ludCcpXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICc2cHgnKVxuICAgICAgICAgICAgLnN0eWxlKCdmaWxsLW9wYWNpdHknLCAnMC45NScpXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS1vcGFjaXR5JywgJzAuOTUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjaGFydFN2Zy5zZWxlY3RBbGwoJy5udi1wb2ludCcpXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcwcHgnKVxuICAgICAgICAgICAgLnN0eWxlKCdmaWxsLW9wYWNpdHknLCAnMCcpO1xuICAgIH1cbn07XG5cbi8vIENob29zZXMgdGhlIGxpbmUgb2YgbGluZS9jdW11bGF0aXZlIGxpbmUgYW5kIGluY3JlYXNlcyB0aGUgdGhpY2tuZXNzIG9mIGl0XG5leHBvcnQgY29uc3Qgc2V0TGluZVRoaWNrbmVzcyA9IChpZCwgdGhpY2tuZXNzKSA9PiB7XG4gICAgY29uc3QgY2hhcnRTdmcgPSBpZCA/IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgaWQgKyAnIHN2ZycpIDogZDMuc2VsZWN0KGNoYXJ0SWQgKyAnIHN2ZycpO1xuICAgIHRoaWNrbmVzcyA9IHRoaWNrbmVzcyB8fCAxLjU7XG5cbiAgICBjb25zdCBsaW5lcyA9IGNoYXJ0U3ZnLnNlbGVjdEFsbCgnLm52LWxpbmUnKTtcblxuICAgIGlmIChsaW5lcy5zaXplKCkgIT09IDApIHtcbiAgICAgICAgbGluZXMuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIHRoaWNrbmVzcyk7XG4gICAgfVxufTtcblxuLy8gQ29uc3RydWN0aW5nIGEgY29tbW9uIGtleSB2YWx1ZSBtYXAgZm9yIHByZXZpZXcgYW5kIGNhbnZhcyBtb2RlXG5leHBvcnQgY29uc3QgaW5pdFByb3BlcnRpZXMgPSAod2lkZ2V0Q29udGV4dCwgcHJvcGVydHlWYWx1ZU1hcCkgPT4ge1xuICAgIGlmICghcHJvcGVydHlWYWx1ZU1hcCB8fCBpc0VtcHR5T2JqZWN0KHByb3BlcnR5VmFsdWVNYXApKSB7XG4gICAgICAgIHByb3BlcnR5VmFsdWVNYXAgPSB7fTtcbiAgICB9XG4gICAgZm9yRWFjaChiYXNpY1Byb3BlcnRpZXMsIHByb3AgPT4ge1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJvcGVydHlWYWx1ZU1hcFtwcm9wXSkpIHtcbiAgICAgICAgICAgIHByb3BlcnR5VmFsdWVNYXBbcHJvcF0gPSB3aWRnZXRDb250ZXh0W3Byb3BdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlWYWx1ZU1hcDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROdW1iZXJWYWx1ZSA9ICh2YWx1ZSwgY2FsbGJhY2spID0+IHtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VJbnQodmFsdWUsIDEwKSkgPyBjYWxsYmFjayh2YWx1ZSwgJ3ZhbHVlJykgOiB2YWx1ZTtcbn07XG5cbi8vIEZvcm1hdHMgdGhlIGdpdmVuIHZhbHVlIGFjY29yZGluZyB0byBkYXRlIGZvcm1hdFxuZXhwb3J0IGNvbnN0IGdldERhdGVGb3JtYXRlZERhdGEgPSAoZGF0ZUZvcm1hdCwgZCkgPT4ge1xuICAgIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0IHx8ICcleCc7XG4gICAgLyoqXG4gICAgICogaWYgZGF0ZSB2YWx1ZSBpcyBzdHJpbmcgXCIyMC0wNS0yMDE5XCIgdGhlbiBuZXcgRGF0ZSh2YWx1ZSkgcmV0dXJuIDIwTWF5MjAxOSB3aXRoIGN1cnJlbnQgdGltZSBpbiBJbmRpYSxcbiAgICAgKiB3aGVyZWFzIHRoaXMgd2lsbCByZXR1cm4gMTlNYXkyMDE5IHdpdGggdGltZSBsYWdnaW5nIGZvciBmZXcgaG91cnMuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGl0IHJldHVybnMgVVRDIHRpbWUgaS5lLiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSAoVVRDKS5cbiAgICAgKiBUbyBjcmVhdGUgZGF0ZSBpbiBsb2NhbCB0aW1lIHVzZSBtb21lbnRcbiAgICAgKi9cbiAgICBpZihkYXRlRm9ybWF0ID09ICclYycpIHtcbiAgICAgICAgZGF0ZUZvcm1hdCA9ICclYSAlYiAlZSAlWCAlWSc7XG4gICAgfVxuICAgIHJldHVybiBkMy50aW1lRm9ybWF0KGRhdGVGb3JtYXQpKG5ldyBEYXRlKG1vbWVudChtb21lbnQoZCkuZm9ybWF0KCkpLnZhbHVlT2YoKSkpO1xufTtcbmNvbnN0IHJlbW92ZVRyYWlsaW5nWmVyb3MgPSB2YWx1ZSA9PiB7XG4gICAgaWYoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQ29udmVydCB2YWx1ZSB0byBhIHN0cmluZyBpZiBpdCdzIGEgbnVtYmVyXG4gICAgY29uc3Qgc3RyaW5nVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zXG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoL1xcLjArKFtBLVphLXpdKikkLywgJyQxJykucmVwbGFjZSgvXFwuKFsxLTldKykwKyhbQS1aYS16XSopJC8sICcuJDEkMicpO1xufTtcblxuLy8gRm9ybWF0cyB0aGUgZ2l2ZW4gdmFsdWUgYWNjb3JkaW5nIHRvIG51bWJlciBmb3JtYXRcbmV4cG9ydCBjb25zdCBnZXROdW1iZXJGb3JtYXRlZERhdGEgPSAobnVtYmVyRm9ybWF0LCBkKSA9PiB7XG4gICAgbGV0IGZvcm1hdHRlZERhdGEsXG4gICAgICAgIGRpdmlkZXIsXG4gICAgICAgIHByZWZpeDtcbiAgICAvLyBmb3JtYXR0aW5nIHRoZSBkYXRhIGJhc2VkIG9uIG51bWJlciBmb3JtYXQgc2VsZWN0ZWRcbiAgICBpZiAobnVtYmVyRm9ybWF0KSB7XG4gICAgICAgIGxldCBudW1iZXJGb3JtYXR0ZXI7XG4gICAgICAgIGlmKG51bWJlckZvcm1hdCA9PSAnVGhvdXNhbmQnIHx8IG51bWJlckZvcm1hdCA9PSAnTWlsbGlvbicgfHwgbnVtYmVyRm9ybWF0ID09ICdCaWxsaW9uJykge1xuICAgICAgICAgICAgbnVtYmVyRm9ybWF0dGVyID0gZDMuZm9ybWF0KCcsLjJzJyk7XG4gICAgICAgIH0gZWxzZSBpZihudW1iZXJGb3JtYXQgPT0gJyUnKSB7XG4gICAgICAgICAgICBudW1iZXJGb3JtYXR0ZXIgPSBkMy5mb3JtYXQoJy4yJScpO1xuICAgICAgICB9ZWxzZSBpZihudW1iZXJGb3JtYXQgPT0gJy5mJykge1xuICAgICAgICAgICAgbnVtYmVyRm9ybWF0dGVyID0gZDMuZm9ybWF0KCcuMmYnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG51bWJlckZvcm1hdHRlciA9IGQzLmZvcm1hdChudW1iZXJGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdHRlZERhdGEgPSBudW1iZXJGb3JtYXR0ZXIoZCk7XG5cblxuICAgICAgICAvLyBHZXR0aW5nIHRoZSByZXNwZWN0aXZlIGRpdmlkZXJbMTAwMCwxMDAwMDAwLDEwMDAwMDAwMDBdIGJhc2VkIG9uIHRoZSBudW1iZXIgZm9ybWF0IGNob29zZW5cbiAgICAgICAgZGl2aWRlciA9ICh0aWNrZm9ybWF0c1tudW1iZXJGb3JtYXRdICYmIHRpY2tmb3JtYXRzW251bWJlckZvcm1hdF0uZGl2aWRlcikgfHwgMDtcbiAgICAgICAgcHJlZml4ID0gdGlja2Zvcm1hdHNbbnVtYmVyRm9ybWF0XSAmJiB0aWNrZm9ybWF0c1tudW1iZXJGb3JtYXRdLnByZWZpeDtcbiAgICAgICAgaWYgKHByZWZpeCAmJiBkaXZpZGVyICE9PSAwKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWREYXRhID0gZDMuZm9ybWF0KCcuMmYnKShkIC8gZGl2aWRlcikgKyBwcmVmaXg7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdXRvIGZvcm1hdHRpbmcgdGhlIGRhdGEgd2hlbiBubyBmb3JtYXRpbmcgb3B0aW9uIGlzIGNob3NlblxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZCA+PSAxMDAwID8gZDMuZm9ybWF0KCcuMXMnKShkKSA6IGQ7XG4gICAgfVxuICAgIGZvcm1hdHRlZERhdGEgPSByZW1vdmVUcmFpbGluZ1plcm9zKGZvcm1hdHRlZERhdGEpO1xuICAgIHJldHVybiBmb3JtYXR0ZWREYXRhO1xufTtcblxuLy8gU2V0IHRoZSB2aXNpYmlsaXR5IHByb3BlcnR5IG9mIHRoZSBjaGFydCB4LHkgYXhpcyBkdWUgdG8gYSBidWcgaW4gdGhlIG52ZDNcbmV4cG9ydCBjb25zdCB0b2dnbGVBeGlzU2hvdyA9IChwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCAkeEF4aXMgPSBkMy5zZWxlY3QoY2hhcnRJZCArICcgZy5udi1heGlzLm52LXgnKSxcbiAgICAgICAgJHlBeGlzID0gZDMuc2VsZWN0KGNoYXJ0SWQgKyAnIGcubnYtYXhpcy5udi15Jyk7XG4gICAgaWYgKHByb3BlcnR5ID09PSAnc2hvd3hheGlzJykge1xuICAgICAgICAkeEF4aXMuc3R5bGUoJ3Zpc2liaWxpdHknLCB2YWx1ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkeUF4aXMuc3R5bGUoJ3Zpc2liaWxpdHknLCB2YWx1ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZ5TGVnZW5kUG9zaXRpb24gPSAod2lkZ2V0Q29udGV4dCwgcG9zaXRpb24sIGlkKSA9PiB7XG4gICAgY29uc3Qgc2hvd0xlZ2VuZCA9IGlzU2hvd0xlZ2VuZCh3aWRnZXRDb250ZXh0LnNob3dsZWdlbmQpLFxuICAgICAgICBjaGFydF9JZCA9IGlkID8gJyN3bUNoYXJ0JyArIGlkIDogY2hhcnRJZCxcbiAgICAgICAgbGVnZW5kV3JhcCA9IGQzLnNlbGVjdChjaGFydF9JZCArICcgLm52LWxlZ2VuZFdyYXAnKSxcbiAgICAgICAgbGVnZW5kUGFkZGluZyA9IDU7XG4gICAgLy8gUmV0dXJuIHdoZW4gc2hvd2xlZ2VuZCBpcyBmYWxzZVxuICAgIGlmICghc2hvd0xlZ2VuZCB8fCAhbGVnZW5kV3JhcFsnX2dyb3VwcyddWzBdWzBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgICBjb25zdCBsZWdlbmRXcmFwSGVpZ2h0ID0gbGVnZW5kV3JhcFsnX2dyb3VwcyddWzBdWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxcbiAgICAgICAgICAgIHdyYXAgPSBkMy5zZWxlY3QoY2hhcnRfSWQgKyAnIC5udi13cmFwJyksXG4gICAgICAgICAgICB3cmFwVHJhbnNmb3JtID0gKHdyYXAgJiYgd3JhcC5hdHRyKCd0cmFuc2Zvcm0nKSkgPyB3cmFwLmF0dHIoJ3RyYW5zZm9ybScpLnJlcGxhY2UoLywgL2csICcsJykgOiAnJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzID0gL3RyYW5zbGF0ZVxcKFxccyooW15cXHMsKV0rKVsgLF0oW15cXHMsKV0rKS8uZXhlYyh3cmFwVHJhbnNmb3JtKSxcbiAgICAgICAgICAgIGdldENoYXJ0SGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjaGFydEhlaWdodCA9ICQoY2hhcnRfSWQgKyAnIHN2Zz4ubnZkMy5udi13cmFwJylbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmIChjaGFydEhlaWdodCA9PT0gMCkgeyAvLyBmaXggZm9yIElFXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0SGVpZ2h0ID0gKCQoY2hhcnRfSWQgKyAnIHN2ZycpWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIChsZWdlbmRXcmFwSGVpZ2h0ICsgMTUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJ0SGVpZ2h0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgbGVnZW5kV3JhcC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAgLCAnICsgKGdldENoYXJ0SGVpZ2h0KCkgLSBsZWdlbmRXcmFwSGVpZ2h0IC0gbGVnZW5kUGFkZGluZykgKyAnKScpO1xuICAgICAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICAgIHdyYXAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgY29vcmRpbmF0ZXNbMV0gKyAnLCcgKyBsZWdlbmRQYWRkaW5nICsgJyknKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vIFJldHVybnMgdmFsdWUgaWYgbGVnZW5kIG5lZWQgdG8gc2hvd24gb3Igbm90XG5leHBvcnQgY29uc3QgaXNTaG93TGVnZW5kID0gdmFsdWUgPT4ge1xuICAgIC8vIE9sZCBwcm9qZWN0cyB3aWxsIGhhdmUgZWl0aGVyIHRydWUgb3IgZmFsc2VcbiAgICBpZiAodmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIE5ldyBwcm9qZWN0cyB3aWxsIGhhdmUgZWl0aGVyICdIaWRlIExlZ2VuZCcsICdTaG93IFRvcCcsICdTaG93IEJvdHRvbSdcbiAgICByZXR1cm4gdmFsdWUgPT09ICdoaWRlJyA/IGZhbHNlIDogdHJ1ZTtcbn07XG5cbi8qKlxuICogQ3VzdG9taXNlIHRoZSB0b29sdGlwIGZvciBkb251dCAmIHBpZSBjaGFydHMgYW5kIGFsc28gZm9yIGNoYXJ0cyBoYXZpbmcgb25seSBvbmUgdmFsdWUgYXR0YWNoZWQgdG8geWF4aXNcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBsYWJlbFxuICovXG5leHBvcnQgY29uc3QgY3VzdG9taXNlVG9vbHRpcCA9IChjaGFydCwgcHJvcGVydHlWYWx1ZU1hcCwgd2lkZ2V0Q29udGV4dCwgbGFiZWw/KSA9PiB7XG4gICAgZDMuc2VsZWN0QWxsKCcubnZ0b29sdGlwJykuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICBjaGFydC50b29sdGlwLmNvbnRlbnRHZW5lcmF0b3IoKGtleSwgcHJvcGVydHlWYWx1ZU1hcCkgPT4ge1xuICAgICAgICBsZXQgeFZhbHVlID0ga2V5LmRhdGEueCwgeVZhbHVlO1xuICAgICAgICB5VmFsdWUgPSBnZXROdW1iZXJGb3JtYXRlZERhdGEocHJvcGVydHlWYWx1ZU1hcC55bnVtYmVyZm9ybWF0LCBrZXkuZGF0YS55KTtcbiAgICAgICAgaWYgKGlzUGllVHlwZSh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgICAgICBsYWJlbCA9IGtleS5kYXRhLng7XG4gICAgICAgICAgICB4VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0YWJsZT4nICtcbiAgICAgICAgICAgICc8dGJvZHk+JyArXG4gICAgICAgICAgICAnPHRyIGNsYXNzPVwidmFsdWVcIj48Yj4nICsgeFZhbHVlICtcbiAgICAgICAgICAgICc8L2I+PC90cj4nICtcbiAgICAgICAgICAgICc8dHI+JyArXG4gICAgICAgICAgICAnPHRkIGNsYXNzPVwibGVnZW5kLWNvbG9yLWd1aWRlXCI+PGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JyArIGtleS5jb2xvciArICc7XCI+PC9kaXY+PC90ZD4nICtcbiAgICAgICAgICAgICc8dGQgY2xhc3M9XCJrZXlcIj4nICsgbGFiZWwgKyAnPC90ZD4nICtcbiAgICAgICAgICAgICc8dGQgY2xhc3M9XCJ2YWx1ZVwiPicgKyB5VmFsdWUgKyAnPC90ZD4nICtcbiAgICAgICAgICAgICc8L3RyPicgK1xuICAgICAgICAgICAgJzwvdGJvZHk+JyArXG4gICAgICAgICAgICAnPC90YWJsZT4nO1xuICAgIH0pO1xufTtcblxuLy8gaW50aWFsaXplcyB0aGUgY2hhcnQgb2JlamN0XG5leHBvcnQgY29uc3QgaW5pdENoYXJ0ID0gKHdpZGdldENvbnRleHQsIHhEb21haW5WYWx1ZXMsIHlEb21haW5WYWx1ZXMsIHByb3BlcnR5VmFsdWVNYXAsIGlzUHJldmlldykgPT4ge1xuICAgIHByb3BlcnR5VmFsdWVNYXAgPSAgaW5pdFByb3BlcnRpZXMod2lkZ2V0Q29udGV4dCwgcHJvcGVydHlWYWx1ZU1hcCk7XG4gICAgbGV0IGNoYXJ0LCBjb2xvcnMgPSBbXSwgeGF4aXNsYWJlbCwgeWF4aXNsYWJlbCwgbGFiZWxDb25maWcsIHJhZGl1cywgYmFyU3BhY2luZyxcbiAgICAgICAgc2hvd0xlZ2VuZCwgeEF4aXNWYWx1ZSwgaGFzTXVsdGlwbGVZVmFsdWVzO1xuICAgIGNvbnN0IHhWYWx1ZTogYW55ID0ge30sIHlWYWx1ZTogYW55ID0ge307XG4gICAgc3dpdGNoICh3aWRnZXRDb250ZXh0LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnQ29sdW1uJzpcbiAgICAgICAgICAgIGJhclNwYWNpbmcgPSBnZXROdW1iZXJWYWx1ZShwcm9wZXJ0eVZhbHVlTWFwLmJhcnNwYWNpbmcsIGdldEJhclNwYWNpbmdWYWx1ZSkgfHwgYmFyU3BhY2luZ01hcC5tZWRpdW07XG4gICAgICAgICAgICBjaGFydCA9IG52Lm1vZGVscy5tdWx0aUJhckNoYXJ0KClcbiAgICAgICAgICAgICAgICAueChkID0+IGQueClcbiAgICAgICAgICAgICAgICAueShkID0+IGQueSlcbiAgICAgICAgICAgICAgICAucmVkdWNlWFRpY2tzKHByb3BlcnR5VmFsdWVNYXAucmVkdWNleHRpY2tzKVxuICAgICAgICAgICAgICAgIC5yb3RhdGVMYWJlbHMoMClcbiAgICAgICAgICAgICAgICAuc2hvd0NvbnRyb2xzKGZhbHNlKVxuICAgICAgICAgICAgICAgIC5zdGFja2VkKHByb3BlcnR5VmFsdWVNYXAudmlld3R5cGUgPT09ICdTdGFja2VkJyA/ICB0cnVlIDogZmFsc2UpXG4gICAgICAgICAgICAgICAgLmdyb3VwU3BhY2luZyhiYXJTcGFjaW5nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdDdW11bGF0aXZlIExpbmUnOlxuICAgICAgICAgICAgY2hhcnQgPSBudi5tb2RlbHMuY3VtdWxhdGl2ZUxpbmVDaGFydCgpXG4gICAgICAgICAgICAgICAgLngoZCA9PiBkWzBdKVxuICAgICAgICAgICAgICAgIC55KGQgPT4gZFsxXSlcbiAgICAgICAgICAgICAgICAuc2hvd0NvbnRyb2xzKGZhbHNlKVxuICAgICAgICAgICAgICAgIC51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZShwcm9wZXJ0eVZhbHVlTWFwLnRvb2x0aXBzKVxuICAgICAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShwcm9wZXJ0eVZhbHVlTWFwLmludGVycG9sYXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0xpbmUnOlxuICAgICAgICAgICAgY2hhcnQgPSBudi5tb2RlbHMubGluZUNoYXJ0KClcbiAgICAgICAgICAgICAgICAudXNlSW50ZXJhY3RpdmVHdWlkZWxpbmUocHJvcGVydHlWYWx1ZU1hcC50b29sdGlwcylcbiAgICAgICAgICAgICAgICAuaW50ZXJwb2xhdGUocHJvcGVydHlWYWx1ZU1hcC5pbnRlcnBvbGF0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBcmVhJzpcbiAgICAgICAgICAgIGNoYXJ0ID0gbnYubW9kZWxzLnN0YWNrZWRBcmVhQ2hhcnQoKVxuICAgICAgICAgICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KGQgPT4gZC55KVxuICAgICAgICAgICAgICAgIC5jbGlwRWRnZSh0cnVlKVxuICAgICAgICAgICAgICAgIC5zaG93Q29udHJvbHMoZmFsc2UpXG4gICAgICAgICAgICAgICAgLnN0eWxlKHByb3BlcnR5VmFsdWVNYXAuYXJlYXZpZXd0eXBlKVxuICAgICAgICAgICAgICAgIC51c2VJbnRlcmFjdGl2ZUd1aWRlbGluZShwcm9wZXJ0eVZhbHVlTWFwLnRvb2x0aXBzKVxuICAgICAgICAgICAgICAgIC5pbnRlcnBvbGF0ZShwcm9wZXJ0eVZhbHVlTWFwLmludGVycG9sYXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jhcic6XG4gICAgICAgICAgICBiYXJTcGFjaW5nID0gZ2V0TnVtYmVyVmFsdWUocHJvcGVydHlWYWx1ZU1hcC5iYXJzcGFjaW5nLCBnZXRCYXJTcGFjaW5nVmFsdWUpIHx8IGJhclNwYWNpbmdNYXAubWVkaXVtO1xuICAgICAgICAgICAgY2hhcnQgPSBudi5tb2RlbHMubXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQoKVxuICAgICAgICAgICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KGQgPT4gZC55KVxuICAgICAgICAgICAgICAgIC5zaG93Q29udHJvbHMoZmFsc2UpXG4gICAgICAgICAgICAgICAgLnN0YWNrZWQocHJvcGVydHlWYWx1ZU1hcC52aWV3dHlwZSA9PT0gJ1N0YWNrZWQnID8gIHRydWUgOiBmYWxzZSlcbiAgICAgICAgICAgICAgICAuc2hvd1ZhbHVlcyhwcm9wZXJ0eVZhbHVlTWFwLnNob3d2YWx1ZXMpXG4gICAgICAgICAgICAgICAgLmdyb3VwU3BhY2luZyhiYXJTcGFjaW5nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQaWUnOlxuICAgICAgICBjYXNlICdEb251dCc6XG4gICAgICAgICAgICBsYWJlbENvbmZpZyA9IGdldExhYmVsVmFsdWVzKHByb3BlcnR5VmFsdWVNYXAuc2hvd2xhYmVscywgcHJvcGVydHlWYWx1ZU1hcC5zaG93bGFiZWxzb3V0c2lkZSwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICByYWRpdXMgPSBnZXROdW1iZXJWYWx1ZShwcm9wZXJ0eVZhbHVlTWFwLmRvbnV0cmF0aW8sIGdldFJhZGl1c1ZhbHVlKSB8fCBkb251dFJhdGlvTWFwLm1lZGl1bTtcbiAgICAgICAgICAgIGNoYXJ0ID0gbnYubW9kZWxzLnBpZUNoYXJ0KClcbiAgICAgICAgICAgICAgICAueChkID0+IGQueClcbiAgICAgICAgICAgICAgICAueShkID0+IGQueSlcbiAgICAgICAgICAgICAgICAuc2hvd0xhYmVscyhsYWJlbENvbmZpZy5zaG93bGFiZWxzKVxuICAgICAgICAgICAgICAgIC5sYWJlbFR5cGUocHJvcGVydHlWYWx1ZU1hcC5sYWJlbHR5cGUpXG4gICAgICAgICAgICAgICAgLnZhbHVlRm9ybWF0KGQzLmZvcm1hdCgnJScpKVxuICAgICAgICAgICAgICAgIC50aXRsZShwcm9wZXJ0eVZhbHVlTWFwLmNlbnRlcmxhYmVsKVxuICAgICAgICAgICAgICAgIC5sYWJlbFRocmVzaG9sZChwcm9wZXJ0eVZhbHVlTWFwLmxhYmVsdGhyZXNob2xkIHx8IDAuMDEpXG4gICAgICAgICAgICAgICAgLmxhYmVsc091dHNpZGUobGFiZWxDb25maWcuc2hvd2xhYmVsc291dHNpZGUpO1xuICAgICAgICAgICAgaWYgKGlzRG9udXRDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY2hhcnQuZG9udXQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmRvbnV0UmF0aW8ocmFkaXVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlTWFwLmxhYmVsdHlwZSA9PT0gJ2tleS12YWx1ZScpIHtcbiAgICAgICAgICAgICAgICBjaGFydC5sYWJlbFR5cGUoZCA9PiBkLmRhdGEueCArICcgJyArIGQuZGF0YS55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCdWJibGUnOlxuICAgICAgICAgICAgY2hhcnQgPSBudi5tb2RlbHMuc2NhdHRlckNoYXJ0KClcbiAgICAgICAgICAgICAgICAueChkID0+IGQueClcbiAgICAgICAgICAgICAgICAueShkID0+IGQueSlcbiAgICAgICAgICAgICAgICAuc2hvd0Rpc3RYKHByb3BlcnR5VmFsdWVNYXAuc2hvd3hkaXN0YW5jZSlcbiAgICAgICAgICAgICAgICAuc2hvd0Rpc3RZKHByb3BlcnR5VmFsdWVNYXAuc2hvd3lkaXN0YW5jZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoeERvbWFpblZhbHVlcykge1xuICAgICAgICB4VmFsdWUubWluID0geERvbWFpblZhbHVlcy5taW4ueCB8fCB4RG9tYWluVmFsdWVzLm1pblswXTtcbiAgICAgICAgeFZhbHVlLm1heCA9IHhEb21haW5WYWx1ZXMubWF4LnggfHwgeERvbWFpblZhbHVlcy5tYXhbMF07XG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZXMgb24gdGhlIHggYXhpcyBhcmUgc3RyaW5nIHRoZW4gbWluIG1heCB2YWx1ZXMgZ2l2ZXMgSW5maW5pdHlcbiAgICAgICAgaWYgKGFyZU1pbk1heFZhbHVlc1ZhbGlkKHhWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIFJlZHVjaW5nIHRoZSBtaW4gdmFsdWUgdG8gMC4xIHNvIHRoZSBtaW4gdmFsdWUgaXMgbm90IG1pc3NlZCBvdXRcbiAgICAgICAgICAgIHhWYWx1ZS5taW4gPSBnZXRZU2NhbGVNaW5WYWx1ZSh4VmFsdWUubWluKTtcbiAgICAgICAgICAgIGNoYXJ0LnhEb21haW4oW3hWYWx1ZS5taW4sIHhWYWx1ZS5tYXhdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh5RG9tYWluVmFsdWVzKSB7XG4gICAgICAgIC8vIFJlZHVjaW5nIHRoZSBtaW4gdmFsdWUgdG8gMSBzbyB0aGUgbWluIHZhbHVlIGlzIG5vdCBtaXNzZWQgb3V0XG4gICAgICAgIHlWYWx1ZS5taW4gPSB5RG9tYWluVmFsdWVzLm1pbi55IHx8IHlEb21haW5WYWx1ZXMubWluWzFdO1xuICAgICAgICB5VmFsdWUubWF4ID0geURvbWFpblZhbHVlcy5tYXgueSB8fCB5RG9tYWluVmFsdWVzLm1heFsxXTtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlcyBvbiB0aGUgeSBheGlzIGFyZSBzdHJpbmcgb3IgaW52YWxpZCB0aGVuIG1pbiBtYXggdmFsdWVzIGdpdmVzIEluZmluaXR5XG4gICAgICAgIGlmIChhcmVNaW5NYXhWYWx1ZXNWYWxpZCh5VmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBSZWR1Y2luZyB0aGUgbWluIHZhbHVlIHRvIDEgc28gdGhlIG1pbiB2YWx1ZSBpcyBub3QgbWlzc2VkIG91dFxuICAgICAgICAgICAgeVZhbHVlLm1pbiA9IGdldFlTY2FsZU1pblZhbHVlKHlWYWx1ZS5taW4pO1xuICAgICAgICAgICAgY2hhcnQueURvbWFpbihbeVZhbHVlLm1pbiwgeVZhbHVlLm1heF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0dGluZyB0aGUgbGVnZW5kIHR5cGUgY2hvb3NlbiBieSB1c2VyIG9yIGRlZmF1bHQgaXQgd2lsbCBiZSBmdXJpb3VzXG4gICAgY2hhcnQubGVnZW5kLnZlcnMoKHByb3BlcnR5VmFsdWVNYXAubGVnZW5kdHlwZSAmJiBwcm9wZXJ0eVZhbHVlTWFwLmxlZ2VuZHR5cGUudG9Mb3dlckNhc2UoKSkgfHwgJ2Z1cmlvdXMnKTtcblxuICAgIGlmICghaW5jbHVkZXMoY2hhcnRUeXBlcywgd2lkZ2V0Q29udGV4dC50eXBlKSkge1xuICAgICAgICBjaGFydCA9IG52Lm1vZGVscy5tdWx0aUJhckNoYXJ0KClcbiAgICAgICAgICAgIC54KGQgPT4gZC54KVxuICAgICAgICAgICAgLnkoZCA9PiBkLnkpO1xuICAgIH1cblxuXG4gICAgaWYgKGlzUGllVHlwZSh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgcGllL2RvbnV0IGNoYXJ0IGZvcm1hdHRpbmcgdGhlIHZhbHVlcyBvZiBpdFxuICAgICAgICBpZiAocHJvcGVydHlWYWx1ZU1hcC5sYWJlbHR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgY2hhcnQudmFsdWVGb3JtYXQoZDMuZm9ybWF0KCclJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hhcnQudmFsdWVGb3JtYXQoZCA9PiBnZXROdW1iZXJGb3JtYXRlZERhdGEocHJvcGVydHlWYWx1ZU1hcC55bnVtYmVyZm9ybWF0LCBkKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3VzdG9taXppbmcgdGhlIHRvb2x0aXBzIGluIGNhc2Ugb2YgdGhlIHBpZSBhbmQgZG9udXQgd2hlbiBsYWJlbFR5cGUgaXMgdmFsdWVcbiAgICAgICAgY3VzdG9taXNlVG9vbHRpcChjaGFydCwgcHJvcGVydHlWYWx1ZU1hcCwgd2lkZ2V0Q29udGV4dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGFydC5zaG93WEF4aXMocHJvcGVydHlWYWx1ZU1hcC5zaG93eGF4aXMpXG4gICAgICAgICAgICAuc2hvd1lBeGlzKHByb3BlcnR5VmFsdWVNYXAuc2hvd3lheGlzKTtcbiAgICAgICAgY2hhcnQubGVnZW5kUG9zaXRpb24ocHJvcGVydHlWYWx1ZU1hcC5zaG93bGVnZW5kKTtcblxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBsYWJlbHMgaWYgdGhleSBhcmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkgb3IgdGFraW5nIHRoZSBheGlza2V5cyBjaG9zZW5cbiAgICAgICAgeGF4aXNsYWJlbCA9IHByb3BlcnR5VmFsdWVNYXAueGF4aXNsYWJlbCB8fCBwcmV0dGlmeUxhYmVscyh3aWRnZXRDb250ZXh0LnhheGlzZGF0YWtleSkgfHwgJ3ggY2FwdGlvbic7XG4gICAgICAgIHlheGlzbGFiZWwgPSBwcm9wZXJ0eVZhbHVlTWFwLnlheGlzbGFiZWwgfHwgcHJldHRpZnlMYWJlbHMod2lkZ2V0Q29udGV4dC55YXhpc2RhdGFrZXkpIHx8ICd5IGNhcHRpb24nO1xuXG4gICAgICAgIC8vIENoZWNraW5nIGlmIHkgYXhpcyBoYXMgbXVsdGlwbGUgdmFsdWVzXG4gICAgICAgIGlmICh3aWRnZXRDb250ZXh0LnlheGlzZGF0YWtleSAmJiB3aWRnZXRDb250ZXh0LnlheGlzZGF0YWtleS5zcGxpdCgnLCcpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGhhc011bHRpcGxlWVZhbHVlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3VzdG9taXppbmcgdGhlIHRvb2x0aXAgdG8gc2hvdyB5YXhpc2xhYmVsLCBvbmx5IGlmIHRoZSB5IGF4aXMgY29udGFpbnMgb25lIHZhbHVlXG4gICAgICAgIGlmICghaGFzTXVsdGlwbGVZVmFsdWVzICYmICFpc0J1YmJsZUNoYXJ0KHdpZGdldENvbnRleHQudHlwZSkpIHtcbiAgICAgICAgICAgIGN1c3RvbWlzZVRvb2x0aXAoY2hhcnQsIHByb3BlcnR5VmFsdWVNYXAsIHdpZGdldENvbnRleHQsIHlheGlzbGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkaW5nIHRoZSB1bml0cyB0byB0aGUgY2FwdGlvbnMgaWYgdGhleSBhcmUgc3BlY2lmaWVkXG4gICAgICAgIHhheGlzbGFiZWwgKz0gcHJvcGVydHlWYWx1ZU1hcC54dW5pdHMgPyAnKCcgKyBwcm9wZXJ0eVZhbHVlTWFwLnh1bml0cyArICcpJyA6ICcnO1xuICAgICAgICB5YXhpc2xhYmVsICs9IHByb3BlcnR5VmFsdWVNYXAueXVuaXRzID8gJygnICsgcHJvcGVydHlWYWx1ZU1hcC55dW5pdHMgKyAnKScgOiAnJztcblxuICAgICAgICBjaGFydC54QXhpc1xuICAgICAgICAgICAgLmF4aXNMYWJlbCh4YXhpc2xhYmVsKVxuICAgICAgICAgICAgLmF4aXNMYWJlbERpc3RhbmNlKHByb3BlcnR5VmFsdWVNYXAueGF4aXNsYWJlbGRpc3RhbmNlKVxuICAgICAgICAgICAgLnN0YWdnZXJMYWJlbHMocHJvcGVydHlWYWx1ZU1hcC5zdGFnZ2VybGFiZWxzKTtcblxuICAgICAgICAvLyBJZiBkYXRlIGZvcm1hdCBzZXQgZm9ybWF0IGJhc2VkIGRhdGUgZm9ybWF0XG4gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlTWFwLnhkYXRlZm9ybWF0IHx8IChpc1ByZXZpZXcgJiYgIWlzQnViYmxlQ2hhcnQod2lkZ2V0Q29udGV4dC50eXBlKSkpIHtcbiAgICAgICAgICAgIGlmIChpc0xpbmVUeXBlQ2hhcnQod2lkZ2V0Q29udGV4dC50eXBlKSkge1xuICAgICAgICAgICAgICAgIGNoYXJ0LnhBeGlzLnRpY2tGb3JtYXQoZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgYWN0dWFsIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHhBeGlzVmFsdWUgPSBpc1ByZXZpZXcgPyBkYXRlTGlzdFtkIC0gMV0gOiB3aWRnZXRDb250ZXh0LnhEYXRhS2V5QXJyW2RdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0ZUZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnhkYXRlZm9ybWF0LCB4QXhpc1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hhcnQueEF4aXMudGlja0Zvcm1hdChkID0+IGdldERhdGVGb3JtYXRlZERhdGEocHJvcGVydHlWYWx1ZU1hcC54ZGF0ZWZvcm1hdCwgZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5VmFsdWVNYXAueG51bWJlcmZvcm1hdCkge1xuICAgICAgICAgICAgY2hhcnQueEF4aXMudGlja0Zvcm1hdChkID0+IGdldE51bWJlckZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnhudW1iZXJmb3JtYXQsIGQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0xpbmVUeXBlQ2hhcnQod2lkZ2V0Q29udGV4dC50eXBlKSkge1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgYWN0dWFsIHZhbHVlXG4gICAgICAgICAgICAgICAgY2hhcnQueEF4aXMudGlja0Zvcm1hdChkID0+IHdpZGdldENvbnRleHQueERhdGFLZXlBcnJbZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoYXJ0LnlBeGlzXG4gICAgICAgICAgICAuYXhpc0xhYmVsKHlheGlzbGFiZWwpXG4gICAgICAgICAgICAuYXhpc0xhYmVsRGlzdGFuY2UocHJvcGVydHlWYWx1ZU1hcC55YXhpc2xhYmVsZGlzdGFuY2UpXG4gICAgICAgICAgICAuc3RhZ2dlckxhYmVscyhwcm9wZXJ0eVZhbHVlTWFwLnN0YWdnZXJsYWJlbHMpXG4gICAgICAgICAgICAudGlja0Zvcm1hdChkID0+IGdldE51bWJlckZvcm1hdGVkRGF0YShwcm9wZXJ0eVZhbHVlTWFwLnludW1iZXJmb3JtYXQsIGQpKTtcbiAgICAgICAgaWYgKGlzQmFyQ2hhcnQod2lkZ2V0Q29udGV4dC50eXBlKSkge1xuICAgICAgICAgICAgY2hhcnQudmFsdWVGb3JtYXQoZCA9PiBnZXROdW1iZXJGb3JtYXRlZERhdGEocHJvcGVydHlWYWx1ZU1hcC55bnVtYmVyZm9ybWF0LCBkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdXBwb3J0IGZvciBjdXN0b20gY29sb3JzIGlmIHVzZXIgZ2l2ZXMgZGlyZWN0IHN0cmluZyBvZiBjb2xvcnMgaW4gdGV4dCBib3hcbiAgICBpZiAoaXNTdHJpbmcocHJvcGVydHlWYWx1ZU1hcC5jdXN0b21jb2xvcnMpICYmIHByb3BlcnR5VmFsdWVNYXAuY3VzdG9tY29sb3JzKSB7XG4gICAgICAgIGNvbG9ycyA9IHNwbGl0KHByb3BlcnR5VmFsdWVNYXAuY3VzdG9tY29sb3JzLCAnLCcpO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheShwcm9wZXJ0eVZhbHVlTWFwLmN1c3RvbWNvbG9ycykpIHtcbiAgICAgICAgY29sb3JzID0gcHJvcGVydHlWYWx1ZU1hcC5jdXN0b21jb2xvcnM7XG4gICAgfVxuXG4gICAgc2hvd0xlZ2VuZCA9IGlzU2hvd0xlZ2VuZChwcm9wZXJ0eVZhbHVlTWFwLnNob3dsZWdlbmQpO1xuICAgIGNoYXJ0LnNob3dMZWdlbmQoc2hvd0xlZ2VuZClcbiAgICAgICAgLm1hcmdpbih7dG9wOiBwcm9wZXJ0eVZhbHVlTWFwLm9mZnNldHRvcCwgcmlnaHQ6IHByb3BlcnR5VmFsdWVNYXAub2Zmc2V0cmlnaHQsIGJvdHRvbTogcHJvcGVydHlWYWx1ZU1hcC5vZmZzZXRib3R0b20sIGxlZnQ6IHByb3BlcnR5VmFsdWVNYXAub2Zmc2V0bGVmdH0pXG4gICAgICAgIC5jb2xvcihjb2xvcnMubGVuZ3RoID8gY29sb3JzIDogdGhlbWVzW3Byb3BlcnR5VmFsdWVNYXAudGhlbWVdLmNvbG9ycyk7XG5cbiAgICBjaGFydC50b29sdGlwLmVuYWJsZWQocHJvcGVydHlWYWx1ZU1hcC50b29sdGlwcyk7XG4gICAgd2lkZ2V0Q29udGV4dC5tZXNzYWdlID0gcHJvcGVydHlWYWx1ZU1hcC5ub2RhdGFtZXNzYWdlIHx8ICdObyBkYXRhIGZvdW5kJztcbiAgICAvLyBzZXR0aW5nIHRoZSBubyBkYXRhIG1lc3NhZ2VcbiAgICBjaGFydC5ub0RhdGEod2lkZ2V0Q29udGV4dC5tZXNzYWdlKTtcblxuICAgIGlmIChpc0xpbmVUeXBlQ2hhcnQod2lkZ2V0Q29udGV4dC50eXBlKSAmJiB3aWRnZXRDb250ZXh0LmhpZ2hsaWdodHBvaW50cykge1xuICAgICAgICBjaGFydC5kaXNwYXRjaC5vbignc3RhdGVDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvc3RQbG90Q2hhcnRQcm9jZXNzKHdpZGdldENvbnRleHQpLCAxMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAod2lkZ2V0Q29udGV4dC5zaG93bGVnZW5kICYmICh3aWRnZXRDb250ZXh0LnR5cGUgPT09ICdEb251dCcgfHwgd2lkZ2V0Q29udGV4dC50eXBlID09PSAnUGllJykpIHtcbiAgICAgICAgaWYod2lkZ2V0Q29udGV4dC5zaG93bGVnZW5kID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBjaGFydC5sZWdlbmRQb3NpdGlvbigncmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhcnQ7XG59O1xuXG4vLyBAdHMtaWdub3JlXG5leHBvcnQgY29uc3QgcG9zdFBsb3RDaGFydFByb2Nlc3MgPSAod2lkZ2V0Q29udGV4dCwgaXNQcmV2aWV3PykgPT4ge1xuICAgIGNvbnN0IGlkID0gaXNQcmV2aWV3ID8gbnVsbCA6IHdpZGdldENvbnRleHQuJGlkO1xuICAgIC8vIElmIHVzZXIgc2V0cyB0byBoaWdobGlnaHQgdGhlIGRhdGEgcG9pbnRzIGFuZCBpbmNyZWFzZSB0aGUgdGhpY2tuZXNzIG9mIHRoZSBsaW5lXG4gICAgaWYgKGlzTGluZVR5cGVDaGFydCh3aWRnZXRDb250ZXh0LnR5cGUpKSB7XG4gICAgICAgc2V0TGluZVRoaWNrbmVzcyhpZCwgd2lkZ2V0Q29udGV4dC5saW5ldGhpY2tuZXNzKTtcbiAgICAgICBoaWdobGlnaHRQb2ludHMoaWQsIHdpZGdldENvbnRleHQuaGlnaGxpZ2h0cG9pbnRzKTtcbiAgICB9XG4gICAgLy8gTW9kaWZ5aW5nIHRoZSBsZWdlbmQgcG9zaXRpb24gb25seSB3aGVuIGxlZ2VuZCBpcyBzaG93blxuICAgIC8vIGlmICh3aWRnZXRDb250ZXh0LnNob3dsZWdlbmQpIHtcbiAgICAvLyAgICAgbW9kaWZ5TGVnZW5kUG9zaXRpb24od2lkZ2V0Q29udGV4dCwgd2lkZ2V0Q29udGV4dC5zaG93bGVnZW5kLCBpZCk7XG4gICAgLy8gfVxufTtcblxuLy8gQHRzLWlnbm9yZVxuZXhwb3J0IGNvbnN0IGdldERhdGVMaXN0ID0gKCkgPT4gZGF0ZUxpc3Q7XG5cbiJdfQ==
|
|
@@ -560,7 +560,7 @@ const isShowLegend = value => {
|
|
|
560
560
|
*/
|
|
561
561
|
const customiseTooltip = (chart, propertyValueMap, widgetContext, label) => {
|
|
562
562
|
d3.selectAll('.nvtooltip').style('opacity', 0);
|
|
563
|
-
chart.tooltip.contentGenerator(key => {
|
|
563
|
+
chart.tooltip.contentGenerator((key, propertyValueMap) => {
|
|
564
564
|
let xValue = key.data.x, yValue;
|
|
565
565
|
yValue = getNumberFormatedData(propertyValueMap.ynumberformat, key.data.y);
|
|
566
566
|
if (isPieType(widgetContext.type)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../projects/components/widgets/chart/src/chart.props.ts","../../../../projects/components/widgets/chart/src/chart.utils.ts","../../../../projects/components/widgets/chart/src/chart.component.html","../../../../projects/components/widgets/chart/src/chart.component.ts","../../../../projects/components/widgets/chart/src/chart.module.ts","../../../../projects/components/widgets/chart/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register } from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-chart',\n new Map(\n [\n ['aggregation', {value: 'none', ...PROP_STRING}],\n ['aggregationcolumn', PROP_STRING],\n ['areaviewtype', {value: 'stack', ...PROP_STRING}],\n ['barspacing', {value: 'medium', ...PROP_STRING}],\n ['bubblesize', PROP_STRING],\n ['centerlabel', PROP_STRING],\n ['class', PROP_STRING],\n ['customcolors', PROP_ANY],\n ['dataset', PROP_ANY],\n ['datasource', PROP_STRING],\n ['donutratio', {value: 'medium', ...PROP_STRING}],\n ['formattype', {value: '', PROP_STRING}],\n ['groupby', PROP_STRING],\n ['height', {value: '210px', PROP_STRING}],\n ['highlightpoints', PROP_BOOLEAN],\n ['iconclass', PROP_STRING],\n ['interpolation', {value: 'linear', ...PROP_STRING}],\n ['labelthreshold', {value: 0.01, ...PROP_NUMBER}],\n ['labeltype', {value: 'percent', ...PROP_STRING}],\n ['legendtype', {value: 'furious', ...PROP_STRING}],\n ['linethickness', PROP_STRING],\n ['loadingdatamsg', {value: 'Loading...', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['nodatamessage', {value: 'No Data Available.', ...PROP_STRING}],\n ['offset', PROP_STRING],\n ['offsetbottom', {value: 55, ...PROP_NUMBER}],\n ['offsetleft', {value: 75, ...PROP_NUMBER}],\n ['offsetright', {value: 25, ...PROP_NUMBER}],\n ['offsettop', {value: 25, ...PROP_NUMBER}],\n ['orderby', PROP_STRING],\n ['reducexticks', {value: true, ...PROP_BOOLEAN}],\n ['shape', {value: 'circle', ...PROP_STRING}],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['showlabels', {value: 'outside', ...PROP_STRING}],\n ['showlabelsoutside', {value: true, ...PROP_BOOLEAN}],\n ['showlegend', {value: 'top', ...PROP_STRING}],\n ['showvalues', {value: false, ...PROP_BOOLEAN}],\n ['showxaxis', {value: true, ...PROP_BOOLEAN}],\n ['showxdistance', {value: false, ...PROP_BOOLEAN}],\n ['showyaxis', {value: true, ...PROP_BOOLEAN}],\n ['showydistance', {value: false, ...PROP_BOOLEAN}],\n ['staggerlabels', {value: false, ...PROP_BOOLEAN}],\n ['subheading', PROP_STRING],\n ['theme', PROP_STRING],\n ['title', PROP_STRING],\n ['tooltips', {value: true, ...PROP_BOOLEAN}],\n ['type', PROP_STRING],\n ['viewtype', {value: 'Grouped', ...PROP_STRING}],\n ['xaxisdatakey', PROP_STRING],\n ['xaxislabel', PROP_STRING],\n ['xaxislabeldistance', {value: 12, ...PROP_NUMBER}],\n ['xdateformat', PROP_STRING],\n ['xdomain', {value: 'Default', ...PROP_STRING}],\n ['xnumberformat', PROP_STRING],\n ['xunits', PROP_STRING],\n ['yaxisdatakey', PROP_STRING],\n ['yaxislabel', PROP_STRING],\n ['yaxislabeldistance', {value: 12, ...PROP_NUMBER}],\n ['ydomain', {value: 'Default', ...PROP_STRING}],\n ['ynumberformat', PROP_STRING],\n ['yunits', PROP_STRING]\n ]\n )\n );\n};\n","import {isEmptyObject, prettifyLabels} from '@wm/core';\nimport {forEach, includes, invert, isArray, isFinite, isString, isUndefined, split} from \"lodash-es\";\n\ndeclare const $;\n\ndeclare const moment;\ndeclare const d3, nv;\n\nexport const chartTypes = ['Column', 'Line', 'Area', 'Cumulative Line', 'Bar', 'Pie', 'Donut', 'Bubble'],\n allShapes = ['circle', 'square', 'diamond', 'cross', 'triangle-up', 'triangle-down'];\n\nconst dateList = ['01/01/2001', '01/01/2002', '01/01/2003'],\n themes = {\n 'Terrestrial': {\n colors: ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'],\n tooltip: {\n 'backgroundColor': '#de7d28',\n 'textColor': '#FFFFFF'\n }\n },\n 'Annabelle': {\n colors: ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'],\n tooltip: {\n 'backgroundColor': '#2e306f',\n 'textColor': '#FFFFFF'\n }\n },\n 'Azure': {\n colors: ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'],\n tooltip: {\n 'backgroundColor': '#3182bd',\n 'textColor': '#FFFFFF'\n }\n },\n 'Retro': {\n colors: ['#0ca7a1', '#ffa615', '#334957', '#acc5c2', '#988f90', '#8accc9', '#515151', '#f27861', '#36c9fd', '#794668', '#0f709d', '#0d2738', '#44be78', '#4a1839', '#6a393f', '#557d8b', '#6c331c', '#1c1c1c', '#861500', '#09562a'],\n tooltip: {\n 'backgroundColor': '#80513a',\n 'textColor': '#FFFFFF'\n }\n },\n 'Mellow': {\n colors: ['#f0dcbf', '#88c877', '#aeb918', '#2e2c23', '#ddddd2', '#dfe956', '#4c963b', '#5d3801', '#e1eec3', '#cd8472', '#fcfab3', '#9a4635', '#9295ad', '#2e3f12', '#565677', '#557d8b', '#4f4d02', '#0c0c1b', '#833324', '#24120e'],\n tooltip: {\n 'backgroundColor': '#7c9e73',\n 'textColor': '#FFFFFF'\n }\n },\n 'Orient': {\n colors: ['#a80000', '#cc6c3c', '#f0e400', '#000084', '#fccc6c', '#009c6c', '#cc309c', '#78cc00', '#fc84e4', '#48e4fc', '#4878d8', '#186c0c', '#606060', '#a8a8a8', '#000000', '#d7d7d7', '#75a06e', '#190d0b', '#888888', '#694b84'],\n tooltip: {\n 'backgroundColor': '#c14242',\n 'textColor': '#FFFFFF'\n }\n },\n 'GrayScale': {\n colors: ['#141414', '#353535', '#5b5b5b', '#848484', '#a8a8a8', '#c3c3c3', '#e0e0e0', '#c8c8c8', '#a5a5a5', '#878787', '#656565', '#4e4e4e', '#303030', '#1c1c1c', '#4f4f4f', '#3b3b3b', '#757575', '#606060', '#868686', '#c1c1c1'],\n tooltip: {\n 'backgroundColor': '#575757',\n 'textColor': '#FFFFFF'\n }\n },\n 'Flyer': {\n colors: ['#3f454c', '#5a646e', '#848778', '#cededf', '#74c4dd', '#0946ed', '#380bb1', '#000ff0', '#f54a23', '#1db262', '#bca3aa', '#ffa500', '#a86b32', '#63a18c', '#56795e', '#934343', '#b75f5f', '#752d2d', '#4e1111', '#920606'],\n tooltip: {\n 'backgroundColor': '#47637c',\n 'textColor': '#FFFFFF'\n }\n },\n 'Luminosity': {\n colors: ['#FFFFFF', '#e4e4e4', '#00bcd4', '#f0dd2f', '#00aabf', '#018376', '#e91e63', '#39e5d4', '#ff6d6d', '#00ff76', '#ff9800', '#969696', '#ff4200', '#e00000', '#95cbe5', '#5331ff', '#fff4a7', '#e7a800', '#0061e4', '#d5e7ff'],\n tooltip: {\n 'backgroundColor': '#47637c',\n 'textColor': '#FFFFFF'\n }\n }\n },\n basicProperties = ['xaxislabel', 'yaxislabel', 'xunits', 'yunits', 'xnumberformat', 'xdateformat', 'ynumberformat',\n 'showvalues', 'showlabels', 'viewtype', 'areaviewtype', 'staggerlabels', 'reducexticks', 'offsettop', 'offsetbottom', 'offsetright', 'offsetleft',\n 'barspacing', 'xaxislabeldistance', 'yaxislabeldistance', 'theme', 'labeltype', 'donutratio', 'showlabelsoutside', 'showxdistance', 'showydistance', 'shape', 'nodatamessage', 'captions', 'showxaxis', 'showyaxis',\n 'centerlabel', 'customcolors', 'showlegend', 'legendtype', 'xdomain', 'ydomain', 'tooltips', 'linethickness', 'highlightpoints', 'interpolation', 'labelthreshold'],\n barSpacingMap = {\n 'small' : 0.3,\n 'medium' : 0.5,\n 'large' : 0.8\n },\n donutRatioMap = {\n 'small' : 0.3,\n 'medium' : 0.6,\n 'large' : 0.7\n },\n barSpacingMapInvert = invert(barSpacingMap),\n donutRatioMapInvert = invert(donutRatioMap),\n tickformats = {\n 'Thousand': {\n 'prefix': 'K',\n 'divider': 1000\n },\n 'Million' : {\n 'prefix': 'M',\n 'divider': 1000000\n },\n 'Billion' : {\n 'prefix': 'B',\n 'divider': 1000000000\n }\n },\n chartId = '#preview-chart',\n dataTypeJSON = ['Column', 'Line', 'Pie', 'Bar', 'Donut', 'Bubble'], // Charts that supports the data to be JSON;\n lineTypeCharts = ['Line', 'Area', 'Cumulative Line'], // Charts that does not supports the string type of data in the xaxis in the nvd3;\n dataTypeArray = ['Cumulative Line', 'Area'], // Charts that supports the data to be Array\n SAMPLE_DATA = {\n 'group1' : 'Europe',\n 'group2' : 'Asia',\n 'group3' : 'America',\n 'group4' : 'Australia'\n };\n\n// returns true if chart type is pie\nexport const isPieChart = type => type === 'Pie';\n\n// returns true if chart type is line\nexport const isLineChart = type => type === 'Line';\n\n// returns true if chart type is bar\nexport const isBarChart = type => type === 'Bar';\n\n// returns true if chart type is donut\nexport const isDonutChart = type => type === 'Donut';\n\n// returns true if chart type is bubble\nexport const isBubbleChart = type => type === 'Bubble';\n\n// returns true if chart type is column\nexport const isColumnChart = type => type === 'Column';\n\n// returns true if chart type is area\nexport const isAreaChart = type => type === 'Area';\n\n// returns true if chart type is area\nexport const isPieType = type => isPieChart(type) || isDonutChart(type);\n\n// The format of chart data is array of json objects in case of the following types of chart\nexport const isChartDataJSON = type => includes(dataTypeJSON, type) || !includes(chartTypes, type);\n\n// The format of chart data is array of objects in case of the following types of chart\nexport const isChartDataArray = type => includes(dataTypeArray, type);\n\n// returns true is the chart type is 'line', 'area' or 'cumulative line' else false\nexport const isLineTypeChart = type => includes(lineTypeCharts, type);\n\n// X/Y Domain properties are supported only for Column and Area charts\nexport const isAxisDomainSupported = type => isColumnChart(type) || isAreaChart(type);\n\n// Returns bar spacing value\nexport const getBarSpacingValue = (value, prop) => {\n if (prop === 'value') {\n return barSpacingMap[value];\n }\n if (prop === 'key') {\n return barSpacingMapInvert[value];\n }\n};\n\n// Returns radius value\nexport const getRadiusValue = (value, prop) => {\n if (prop === 'value') {\n return donutRatioMap[value];\n }\n if (prop === 'key') {\n return donutRatioMapInvert[value];\n }\n};\n\n// Returns labels config\nexport const getLabelValues = (showlabels, showlabelsoutside, prop) => {\n const labelsConfig: any = {};\n switch (showlabels) {\n case 'hide':\n labelsConfig.showlabels = false;\n break;\n case 'inside':\n labelsConfig.showlabels = true;\n labelsConfig.showlabelsoutside = false;\n break;\n case 'outside':\n labelsConfig.showlabels = true;\n labelsConfig.showlabelsoutside = true;\n break;\n }\n return labelsConfig;\n};\n\n// Construct the sample data\nexport const constructSampleData = (dataType, yaxisLength, shape) => {\n let first_series = [],\n second_series = [],\n third_series = [],\n first_series_array = [],\n second_series_array = [],\n third_series_array = [],\n first_series_bubble = [],\n second_series_bubble = [],\n third_series_bubble = [],\n data = [];\n switch (dataType) {\n case 'jsonFormat':\n first_series = [\n {'x': '01/01/2001', 'y': 4000000},\n {'x': '01/01/2002', 'y': 1000000},\n {'x': '01/01/2003', 'y': 5000000}\n ];\n second_series = [\n {'x': '01/01/2001', 'y': 3000000},\n {'x': '01/01/2002', 'y': 4000000},\n {'x': '01/01/2003', 'y': 7000000}\n ];\n third_series = [\n {'x': '01/01/2001', 'y': 2000000},\n {'x': '01/01/2002', 'y': 8000000},\n {'x': '01/01/2003', 'y': 6000000}\n ];\n data[0] = {\n values: first_series,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'lineChartFormat':\n first_series = [\n {'x': 1, 'y': 4000000},\n {'x': 2, 'y': 1000000},\n {'x': 3, 'y': 5000000}\n ];\n second_series = [\n {'x': 1, 'y': 3000000},\n {'x': 2, 'y': 4000000},\n {'x': 3, 'y': 7000000}\n ];\n third_series = [\n {'x': 1, 'y': 2000000},\n {'x': 2, 'y': 8000000},\n {'x': 3, 'y': 6000000}\n ];\n data[0] = {\n values: first_series,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'arrayFormat':\n first_series_array = [\n [1, 4000000],\n [2, 1000000],\n [3, 5000000]\n ];\n second_series_array = [\n [1, 3000000],\n [2, 4000000],\n [3, 7000000]\n ];\n third_series_array = [\n [1, 2000000],\n [2, 8000000],\n [3, 6000000]\n ];\n data[0] = {\n values: first_series_array,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series_array,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series_array,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'bubbleFormat':\n shape = shape === 'random' ? allShapes[Math.floor(Math.random() * allShapes.length)] : shape;\n first_series_bubble = [\n {'x': 80.66, 'y': 33739900, 'size': 78, 'shape': shape},\n {'x': 79.84, 'y': 81902300, 'size': 90, 'shape': shape},\n {'x': 78.6, 'y': 5523100, 'size': 45, 'shape': shape}\n ];\n second_series_bubble = [\n {'x': 72.73, 'y': 79716200, 'size': 98, 'shape': shape},\n {'x': 80.05, 'y': 61801600, 'size': 20, 'shape': shape},\n {'x': 72.49, 'y': 73137200, 'size': 34, 'shape': shape}\n ];\n third_series_bubble = [\n {'x': 68.09, 'y': 33739900, 'size': 45, 'shape': shape},\n {'x': 81.55, 'y': 7485600, 'size': 78, 'shape': shape},\n {'x': 68.60, 'y': 141850000, 'size': 56, 'shape': shape}\n ];\n data[0] = {\n values: first_series_bubble,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series_bubble,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series_bubble,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'pieChartFormat':\n data = [\n {'x': SAMPLE_DATA.group1, 'y': 1000000},\n {'x': SAMPLE_DATA.group2, 'y': 2000000},\n {'x': SAMPLE_DATA.group3, 'y': 3000000},\n {'x': SAMPLE_DATA.group4, 'y': 4000000}\n ];\n break;\n }\n return data;\n};\n\nexport const getDataType = widgetContext => {\n const type = widgetContext.type;\n if (isLineChart(type)) {\n return 'lineChartFormat';\n }\n if (isPieType(type)) {\n return 'pieChartFormat';\n }\n if (isBubbleChart(type)) {\n return 'bubbleFormat';\n }\n return isChartDataJSON(type) ? 'jsonFormat' : 'arrayFormat';\n};\n\n// Sample data to populate when no data is bound\nexport const getSampleData = widgetContext => constructSampleData(getDataType(widgetContext), split(widgetContext.yaxisdatakey, ',').length, widgetContext.shape);\n\n// Check whether X/Y Domain was set to Min and is supported for the present chart\nexport const isAxisDomainValid = (widgetContext, axis) => {\n if (widgetContext[axis + 'domain'] === 'Min' && (isAxisDomainSupported(widgetContext.type))) {\n return true;\n }\n return false;\n};\n\n// Check whether min and max values are finite or not\nexport const areMinMaxValuesValid = values => {\n if (isFinite(values.min) && isFinite(values.max)) {\n return true;\n }\n return false;\n};\n\nexport const getYScaleMinValue = value => {\n const _min = Math.floor(value);\n /* If the number has a) decimal part returning floor value - 0.1\n b) no decimal part returning floor value - 1 */\n return Math.abs(value) - _min > 0 ? value - 0.1 : _min - 1;\n};\n\n// Chooses the data points of line/cumulative line/area chart and highlights them\nexport const highlightPoints = (id, highlightpoints) => {\n const chartSvg = id ? d3.select('#wmChart' + id + ' svg') : d3.select(chartId + ' svg');\n if (highlightpoints) {\n chartSvg.selectAll('.nv-point')\n .style('stroke-width', '6px')\n .style('fill-opacity', '0.95')\n .style('stroke-opacity', '0.95');\n } else {\n chartSvg.selectAll('.nv-point')\n .style('stroke-width', '0px')\n .style('fill-opacity', '0');\n }\n};\n\n// Chooses the line of line/cumulative line and increases the thickness of it\nexport const setLineThickness = (id, thickness) => {\n const chartSvg = id ? d3.select('#wmChart' + id + ' svg') : d3.select(chartId + ' svg');\n thickness = thickness || 1.5;\n\n const lines = chartSvg.selectAll('.nv-line');\n\n if (lines.size() !== 0) {\n lines.style('stroke-width', thickness);\n }\n};\n\n// Constructing a common key value map for preview and canvas mode\nexport const initProperties = (widgetContext, propertyValueMap) => {\n if (!propertyValueMap || isEmptyObject(propertyValueMap)) {\n propertyValueMap = {};\n }\n forEach(basicProperties, prop => {\n if (isUndefined(propertyValueMap[prop])) {\n propertyValueMap[prop] = widgetContext[prop];\n }\n });\n\n return propertyValueMap;\n};\n\nexport const getNumberValue = (value, callback) => {\n return isNaN(parseInt(value, 10)) ? callback(value, 'value') : value;\n};\n\n// Formats the given value according to date format\nexport const getDateFormatedData = (dateFormat, d) => {\n dateFormat = dateFormat || '%x';\n /**\n * if date value is string \"20-05-2019\" then new Date(value) return 20May2019 with current time in India,\n * whereas this will return 19May2019 with time lagging for few hours.\n * This is because it returns UTC time i.e. Coordinated Universal Time (UTC).\n * To create date in local time use moment\n */\n if(dateFormat == '%c') {\n dateFormat = '%a %b %e %X %Y';\n }\n return d3.timeFormat(dateFormat)(new Date(moment(moment(d).format()).valueOf()));\n};\nconst removeTrailingZeros = value => {\n if(!value) {\n return value;\n }\n // Convert value to a string if it's a number\n const stringValue = typeof value === 'number' ? value.toString() : value;\n\n // Remove trailing zeros\n return stringValue.replace(/\\.0+([A-Za-z]*)$/, '$1').replace(/\\.([1-9]+)0+([A-Za-z]*)$/, '.$1$2');\n};\n\n// Formats the given value according to number format\nexport const getNumberFormatedData = (numberFormat, d) => {\n let formattedData,\n divider,\n prefix;\n // formatting the data based on number format selected\n if (numberFormat) {\n let numberFormatter;\n if(numberFormat == 'Thousand' || numberFormat == 'Million' || numberFormat == 'Billion') {\n numberFormatter = d3.format(',.2s');\n } else if(numberFormat == '%') {\n numberFormatter = d3.format('.2%');\n }else if(numberFormat == '.f') {\n numberFormatter = d3.format('.2f');\n } else {\n numberFormatter = d3.format(numberFormat);\n }\n formattedData = numberFormatter(d);\n\n\n // Getting the respective divider[1000,1000000,1000000000] based on the number format choosen\n divider = (tickformats[numberFormat] && tickformats[numberFormat].divider) || 0;\n prefix = tickformats[numberFormat] && tickformats[numberFormat].prefix;\n if (prefix && divider !== 0) {\n formattedData = d3.format('.2f')(d / divider) + prefix;\n }\n } else {\n // Auto formatting the data when no formating option is chosen\n formattedData = d >= 1000 ? d3.format('.1s')(d) : d;\n }\n formattedData = removeTrailingZeros(formattedData);\n return formattedData;\n};\n\n// Set the visibility property of the chart x,y axis due to a bug in the nvd3\nexport const toggleAxisShow = (property, value) => {\n const $xAxis = d3.select(chartId + ' g.nv-axis.nv-x'),\n $yAxis = d3.select(chartId + ' g.nv-axis.nv-y');\n if (property === 'showxaxis') {\n $xAxis.style('visibility', value ? 'visible' : 'hidden');\n } else {\n $yAxis.style('visibility', value ? 'visible' : 'hidden');\n }\n};\n\nexport const modifyLegendPosition = (widgetContext, position, id) => {\n const showLegend = isShowLegend(widgetContext.showlegend),\n chart_Id = id ? '#wmChart' + id : chartId,\n legendWrap = d3.select(chart_Id + ' .nv-legendWrap'),\n legendPadding = 5;\n // Return when showlegend is false\n if (!showLegend || !legendWrap['_groups'][0][0]) {\n return;\n }\n if (position === 'bottom') {\n const legendWrapHeight = legendWrap['_groups'][0][0].getBoundingClientRect().height,\n wrap = d3.select(chart_Id + ' .nv-wrap'),\n wrapTransform = (wrap && wrap.attr('transform')) ? wrap.attr('transform').replace(/, /g, ',') : '',\n coordinates = /translate\\(\\s*([^\\s,)]+)[ ,]([^\\s,)]+)/.exec(wrapTransform),\n getChartHeight = () => {\n let chartHeight = $(chart_Id + ' svg>.nvd3.nv-wrap')[0].getBoundingClientRect().height;\n if (chartHeight === 0) { // fix for IE\n chartHeight = ($(chart_Id + ' svg')[0].getBoundingClientRect().height - (legendWrapHeight + 15));\n }\n return chartHeight;\n };\n legendWrap.attr('transform', 'translate(0 , ' + (getChartHeight() - legendWrapHeight - legendPadding) + ')');\n if (coordinates) {\n wrap.attr('transform', 'translate(' + coordinates[1] + ',' + legendPadding + ')');\n }\n }\n};\n\n// Returns value if legend need to shown or not\nexport const isShowLegend = value => {\n // Old projects will have either true or false\n if (value === 'false' || value === false) {\n return false;\n }\n if (value === 'true' || value === true) {\n return true;\n }\n // New projects will have either 'Hide Legend', 'Show Top', 'Show Bottom'\n return value === 'hide' ? false : true;\n};\n\n/**\n * Customise the tooltip for donut & pie charts and also for charts having only one value attached to yaxis\n * @param key\n * @param label\n */\nexport const customiseTooltip = (chart, propertyValueMap, widgetContext, label?) => {\n d3.selectAll('.nvtooltip').style('opacity', 0);\n chart.tooltip.contentGenerator(key => {\n let xValue = key.data.x, yValue;\n yValue = getNumberFormatedData(propertyValueMap.ynumberformat, key.data.y);\n if (isPieType(widgetContext.type)) {\n label = key.data.x;\n xValue = '';\n }\n return '<table>' +\n '<tbody>' +\n '<tr class=\"value\"><b>' + xValue +\n '</b></tr>' +\n '<tr>' +\n '<td class=\"legend-color-guide\"><div style=\"background-color:' + key.color + ';\"></div></td>' +\n '<td class=\"key\">' + label + '</td>' +\n '<td class=\"value\">' + yValue + '</td>' +\n '</tr>' +\n '</tbody>' +\n '</table>';\n });\n};\n\n// intializes the chart obejct\nexport const initChart = (widgetContext, xDomainValues, yDomainValues, propertyValueMap, isPreview) => {\n propertyValueMap = initProperties(widgetContext, propertyValueMap);\n let chart, colors = [], xaxislabel, yaxislabel, labelConfig, radius, barSpacing,\n showLegend, xAxisValue, hasMultipleYValues;\n const xValue: any = {}, yValue: any = {};\n switch (widgetContext.type) {\n case 'Column':\n barSpacing = getNumberValue(propertyValueMap.barspacing, getBarSpacingValue) || barSpacingMap.medium;\n chart = nv.models.multiBarChart()\n .x(d => d.x)\n .y(d => d.y)\n .reduceXTicks(propertyValueMap.reducexticks)\n .rotateLabels(0)\n .showControls(false)\n .stacked(propertyValueMap.viewtype === 'Stacked' ? true : false)\n .groupSpacing(barSpacing);\n break;\n case 'Cumulative Line':\n chart = nv.models.cumulativeLineChart()\n .x(d => d[0])\n .y(d => d[1])\n .showControls(false)\n .useInteractiveGuideline(propertyValueMap.tooltips)\n .interpolate(propertyValueMap.interpolation);\n break;\n case 'Line':\n chart = nv.models.lineChart()\n .useInteractiveGuideline(propertyValueMap.tooltips)\n .interpolate(propertyValueMap.interpolation);\n break;\n case 'Area':\n chart = nv.models.stackedAreaChart()\n .x(d => d.x)\n .y(d => d.y)\n .clipEdge(true)\n .showControls(false)\n .style(propertyValueMap.areaviewtype)\n .useInteractiveGuideline(propertyValueMap.tooltips)\n .interpolate(propertyValueMap.interpolation);\n break;\n case 'Bar':\n barSpacing = getNumberValue(propertyValueMap.barspacing, getBarSpacingValue) || barSpacingMap.medium;\n chart = nv.models.multiBarHorizontalChart()\n .x(d => d.x)\n .y(d => d.y)\n .showControls(false)\n .stacked(propertyValueMap.viewtype === 'Stacked' ? true : false)\n .showValues(propertyValueMap.showvalues)\n .groupSpacing(barSpacing);\n break;\n case 'Pie':\n case 'Donut':\n labelConfig = getLabelValues(propertyValueMap.showlabels, propertyValueMap.showlabelsoutside, 'value');\n radius = getNumberValue(propertyValueMap.donutratio, getRadiusValue) || donutRatioMap.medium;\n chart = nv.models.pieChart()\n .x(d => d.x)\n .y(d => d.y)\n .showLabels(labelConfig.showlabels)\n .labelType(propertyValueMap.labeltype)\n .valueFormat(d3.format('%'))\n .title(propertyValueMap.centerlabel)\n .labelThreshold(propertyValueMap.labelthreshold || 0.01)\n .labelsOutside(labelConfig.showlabelsoutside);\n if (isDonutChart(widgetContext.type)) {\n chart.donut(true)\n .donutRatio(radius);\n }\n if (propertyValueMap.labeltype === 'key-value') {\n chart.labelType(d => d.data.x + ' ' + d.data.y);\n }\n break;\n case 'Bubble':\n chart = nv.models.scatterChart()\n .x(d => d.x)\n .y(d => d.y)\n .showDistX(propertyValueMap.showxdistance)\n .showDistY(propertyValueMap.showydistance);\n break;\n }\n\n if (xDomainValues) {\n xValue.min = xDomainValues.min.x || xDomainValues.min[0];\n xValue.max = xDomainValues.max.x || xDomainValues.max[0];\n // If the values on the x axis are string then min max values gives Infinity\n if (areMinMaxValuesValid(xValue)) {\n // Reducing the min value to 0.1 so the min value is not missed out\n xValue.min = getYScaleMinValue(xValue.min);\n chart.xDomain([xValue.min, xValue.max]);\n }\n }\n\n if (yDomainValues) {\n // Reducing the min value to 1 so the min value is not missed out\n yValue.min = yDomainValues.min.y || yDomainValues.min[1];\n yValue.max = yDomainValues.max.y || yDomainValues.max[1];\n // If the values on the y axis are string or invalid then min max values gives Infinity\n if (areMinMaxValuesValid(yValue)) {\n // Reducing the min value to 1 so the min value is not missed out\n yValue.min = getYScaleMinValue(yValue.min);\n chart.yDomain([yValue.min, yValue.max]);\n }\n }\n\n // Setting the legend type choosen by user or default it will be furious\n chart.legend.vers((propertyValueMap.legendtype && propertyValueMap.legendtype.toLowerCase()) || 'furious');\n\n if (!includes(chartTypes, widgetContext.type)) {\n chart = nv.models.multiBarChart()\n .x(d => d.x)\n .y(d => d.y);\n }\n\n\n if (isPieType(widgetContext.type)) {\n // In case of pie/donut chart formatting the values of it\n if (propertyValueMap.labeltype === 'percent') {\n chart.valueFormat(d3.format('%'));\n } else {\n chart.valueFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n }\n // Customizing the tooltips in case of the pie and donut when labelType is value\n customiseTooltip(chart, propertyValueMap, widgetContext);\n }\n else {\n chart.showXAxis(propertyValueMap.showxaxis)\n .showYAxis(propertyValueMap.showyaxis);\n chart.legendPosition(propertyValueMap.showlegend);\n\n // Setting the labels if they are specified explicitly or taking the axiskeys chosen\n xaxislabel = propertyValueMap.xaxislabel || prettifyLabels(widgetContext.xaxisdatakey) || 'x caption';\n yaxislabel = propertyValueMap.yaxislabel || prettifyLabels(widgetContext.yaxisdatakey) || 'y caption';\n\n // Checking if y axis has multiple values\n if (widgetContext.yaxisdatakey && widgetContext.yaxisdatakey.split(',').length > 1) {\n hasMultipleYValues = true;\n }\n // Customizing the tooltip to show yaxislabel, only if the y axis contains one value\n if (!hasMultipleYValues && !isBubbleChart(widgetContext.type)) {\n customiseTooltip(chart, propertyValueMap, widgetContext, yaxislabel);\n }\n\n // Adding the units to the captions if they are specified\n xaxislabel += propertyValueMap.xunits ? '(' + propertyValueMap.xunits + ')' : '';\n yaxislabel += propertyValueMap.yunits ? '(' + propertyValueMap.yunits + ')' : '';\n\n chart.xAxis\n .axisLabel(xaxislabel)\n .axisLabelDistance(propertyValueMap.xaxislabeldistance)\n .staggerLabels(propertyValueMap.staggerlabels);\n\n // If date format set format based date format\n if (propertyValueMap.xdateformat || (isPreview && !isBubbleChart(widgetContext.type))) {\n if (isLineTypeChart(widgetContext.type)) {\n chart.xAxis.tickFormat(d => {\n // get the actual value\n xAxisValue = isPreview ? dateList[d - 1] : widgetContext.xDataKeyArr[d];\n return getDateFormatedData(propertyValueMap.xdateformat, xAxisValue);\n });\n } else {\n chart.xAxis.tickFormat(d => getDateFormatedData(propertyValueMap.xdateformat, d));\n }\n } else if (propertyValueMap.xnumberformat) {\n chart.xAxis.tickFormat(d => getNumberFormatedData(propertyValueMap.xnumberformat, d));\n } else {\n if (isLineTypeChart(widgetContext.type)) {\n // get the actual value\n chart.xAxis.tickFormat(d => widgetContext.xDataKeyArr[d]);\n }\n }\n chart.yAxis\n .axisLabel(yaxislabel)\n .axisLabelDistance(propertyValueMap.yaxislabeldistance)\n .staggerLabels(propertyValueMap.staggerlabels)\n .tickFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n if (isBarChart(widgetContext.type)) {\n chart.valueFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n }\n }\n\n // Support for custom colors if user gives direct string of colors in text box\n if (isString(propertyValueMap.customcolors) && propertyValueMap.customcolors) {\n colors = split(propertyValueMap.customcolors, ',');\n }\n if (isArray(propertyValueMap.customcolors)) {\n colors = propertyValueMap.customcolors;\n }\n\n showLegend = isShowLegend(propertyValueMap.showlegend);\n chart.showLegend(showLegend)\n .margin({top: propertyValueMap.offsettop, right: propertyValueMap.offsetright, bottom: propertyValueMap.offsetbottom, left: propertyValueMap.offsetleft})\n .color(colors.length ? colors : themes[propertyValueMap.theme].colors);\n\n chart.tooltip.enabled(propertyValueMap.tooltips);\n widgetContext.message = propertyValueMap.nodatamessage || 'No data found';\n // setting the no data message\n chart.noData(widgetContext.message);\n\n if (isLineTypeChart(widgetContext.type) && widgetContext.highlightpoints) {\n chart.dispatch.on('stateChange', () => {\n setTimeout(() => postPlotChartProcess(widgetContext), 100);\n });\n }\n\n if (widgetContext.showlegend && (widgetContext.type === 'Donut' || widgetContext.type === 'Pie')) {\n if(widgetContext.showlegend === 'right') {\n chart.legendPosition('right');\n }\n }\n return chart;\n};\n\n// @ts-ignore\nexport const postPlotChartProcess = (widgetContext, isPreview?) => {\n const id = isPreview ? null : widgetContext.$id;\n // If user sets to highlight the data points and increase the thickness of the line\n if (isLineTypeChart(widgetContext.type)) {\n setLineThickness(id, widgetContext.linethickness);\n highlightPoints(id, widgetContext.highlightpoints);\n }\n // Modifying the legend position only when legend is shown\n // if (widgetContext.showlegend) {\n // modifyLegendPosition(widgetContext, widgetContext.showlegend, id);\n // }\n};\n\n// @ts-ignore\nexport const getDateList = () => dateList;\n\n","<div class=\"panel-heading\" *ngIf=\"title\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\"><i class=\"app-icon panel-icon {{iconclass}}\" [class.ng-hide]=\"!iconclass\"></i></div>\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" *ngIf=\"subheading\" [innerHTML]=\"subheading\"></div>\n </h3>\n</div>\n<div class=\"app-chart-inner\" [ngClass]=\"{'loading':isLoadInProgress, 'panel-body': title}\">\n <svg></svg>\n <div class=\"wm-content-info readonly-wrapper\" *ngIf=\"showContentLoadError && showNoDataMsg\">\n <p class=\"wm-message\" [title]=\"hintMsg\" [ngClass]=\"{'error': invalidConfig}\" [innerText]=\"errMsg\"></p>\n </div>\n <div wmSpinner show.bind=\"isLoadInProgress\" caption.bind=\"loadingdatamsg\"></div>\n</div>\n","import {\n AfterViewInit,\n OnDestroy,\n Component,\n HostBinding,\n Injector,\n ViewEncapsulation,\n Optional,\n Inject\n} from '@angular/core';\n\nimport {\n App,\n DataSource,\n getClonedObject,\n isDataSourceEqual,\n isEmptyObject,\n isNumberType,\n prettifyLabels,\n removeAttr,\n triggerFn,\n isMobileApp,\n noop\n} from '@wm/core';\nimport { APPLY_STYLES_TYPE, IRedrawableComponent, provideAsWidgetRef, StylableComponent, styler, } from '@wm/components/base';\n\nimport { registerProps } from './chart.props';\nimport { allShapes, getDateList, getSampleData, initChart, isAreaChart, isAxisDomainValid, isBarChart, isBubbleChart, isChartDataArray, isChartDataJSON, isLineTypeChart, isPieType, postPlotChartProcess } from './chart.utils';\nimport {\n concat, debounce, fill,\n first,\n forEach, forEachRight,\n get, groupBy, includes,\n intersection,\n isArray, isEmpty, isObject, keys,\n map, max,\n maxBy,\n minBy,\n orderBy,\n replace,\n split,\n uniq\n} from \"lodash-es\";\n\ndeclare const $;\n\ndeclare const d3, nv;\n\nconst WIDGET_CONFIG = {widgetType: 'wm-chart', hostClass: 'app-chart'};\n\nconst options = {\n 'Bubble' : ['bubblesize', 'shape']\n },\n NONE = 'none',\n advanceDataProps = ['aggregation', 'aggregationcolumn', 'groupby', 'orderby'],\n // XPaths to get actual data of data points in charts\n chartDataPointXpath = {\n 'Column' : 'rect.nv-bar',\n 'Bar' : 'g.nv-bar',\n 'Area' : '.nv-stackedarea .nv-point',\n 'Cumulative Line': '.nv-cumulativeLine .nv-scatterWrap path.nv-point',\n 'Line' : '.nv-lineChart .nv-scatterWrap path.nv-point',\n 'Pie' : '.nv-pieChart .nv-slice path',\n 'Donut' : '.nv-pieChart .nv-slice path',\n 'Bubble' : '.nv-scatterChart .nv-point-paths path'\n },\n // all properties of the chart\n allOptions = ['bubblesize', 'shape'],\n styleProps = {\n 'fontunit' : 'font-size',\n 'fontsize' : 'font-size',\n 'color' : 'fill',\n 'fontfamily' : 'font-family',\n 'fontweight' : 'font-weight',\n 'fontstyle' : 'font-style',\n 'textdecoration': 'text-decoration'\n },\n // Getting the relevant aggregation function based on the selected option\n aggregationFnMap = {\n 'average' : 'AVG',\n 'count' : 'COUNT',\n 'maximum' : 'MAX',\n 'minimum' : 'MIN',\n 'sum' : 'SUM'\n };\n\nconst getBooleanValue = val => {\n if (val === true || val === 'true') {\n return true;\n }\n if (val === false || val === 'false') {\n return false;\n }\n return val;\n};\n\n// returns orderby columns and their orders in two separate arrays\nconst getLodashOrderByFormat = orderby => {\n let columns;\n const orderByColumns = [],\n orders = [];\n\n forEach(split(orderby, ','), function (col) {\n columns = split(col, ':');\n orderByColumns.push(columns[0]);\n orders.push(columns[1]);\n });\n return {\n 'columns' : orderByColumns,\n 'orders' : orders\n };\n};\n\n// Replacing the '.' by the '$' because '.' is not supported in the alias names\nconst getValidAliasName = aliasName => aliasName ? aliasName.replace(/\\./g, '$') : null;\n\n// Applying the font related styles for the chart\nconst setTextStyle = (properties, id) => {\n const charttext = d3.select('#wmChart' + id + ' svg').selectAll('text');\n if (!charttext.empty()) {\n charttext.style(properties);\n }\n};\n\nconst angle = d => {\n const a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;\n return a > 90 ? a - 180 : a;\n};\n\n@Component({\n selector: 'div[wmChart]',\n templateUrl: './chart.component.html',\n styleUrls: ['../../../../../node_modules/@wavemaker/nvd3/build/nv.d3.min.css'],\n providers: [\n provideAsWidgetRef(ChartComponent)\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class ChartComponent extends StylableComponent implements AfterViewInit, OnDestroy, IRedrawableComponent {\n static initializeProps = registerProps();\n\n xaxisdatakey;\n yaxisdatakey;\n groupby;\n aggregation;\n aggregationcolumn;\n isVisuallyGrouped;\n orderby;\n iconclass = '';\n type: string;\n showContentLoadError;\n invalidConfig;\n errMsg;\n shape: string;\n datasource: any;\n fontsize: string;\n selecteditem: any;\n fontunit: string;\n offsettop: number;\n offsetleft: number;\n offsetright: number;\n offsetbottom: number;\n showlabels: any;\n theme: string;\n\n private $id;\n private scopedataset: any;\n private binddataset: any;\n private showlabelsoutside: any;\n private _resizeFn: any;\n private chart: any;\n private clearCanvas: boolean;\n public isLoadInProgress: boolean;\n private filterFields: boolean | any;\n private dataset: any;\n private axisoptions: any;\n private numericColumns: any;\n private nonPrimaryColumns: any = [];\n private variableInflight: any;\n private chartReady: boolean;\n private xDataKeyArr: any = [];\n private xAxisDataType: string;\n private bubblesize: any;\n public showNoDataMsg: any;\n private sampleData: any[];\n private chartData: any[] = [];\n private _processedData: any[] = [];\n private _subsciptions: any = [];\n\n @HostBinding('class.panel') title;\n\n isGroupByEnabled() {\n return !!(this.groupby && this.groupby !== NONE);\n }\n\n // Check if x and y axis that are chosen are valid to plot chart\n isValidAxis() {\n // Check if x axis and y axis are chosen and are not equal\n return this.binddataset ? (this.xaxisdatakey && this.yaxisdatakey) : true;\n }\n\n // Check if aggregation is chosen\n isAggregationEnabled() {\n return !!((this.isGroupByEnabled() && this.aggregation !== NONE && this.aggregationcolumn));\n }\n\n // Check if either groupby, aggregation or orderby is chosen\n isDataFilteringEnabled() {\n /*Query need to be triggered if any of the following cases satisfy\n * 1. Group By and aggregation both chosen\n * 2. Only Order By is chosen\n * */\n\n return this.isAggregationEnabled() || (!this.isVisuallyGrouped && this.orderby);\n }\n\n /*Charts like Line,Area,Cumulative Line does not support any other datatype\n other than integer unlike the column and bar.It is a nvd3 issue. Inorder to\n support that this is a fix*/\n getxAxisVal(dataObj, xKey, index) {\n const value = get(dataObj, xKey);\n // If x axis is other than number type then add indexes\n if (isLineTypeChart(this.type) && !isNumberType(this.xAxisDataType)) {\n // Verification to get the unique data keys\n this.xDataKeyArr.push(value);\n // Check if it is of type Date\n if (value instanceof Date) {\n return value;\n } else {\n return index;\n }\n }\n return value;\n }\n\n // Getting the min and max values among all the x values\n getXMinMaxValues(datum) {\n if (!datum) {\n return;\n }\n const xValues: any = {};\n /*\n compute the min x value\n eg: When data has objects\n input: [{x:1, y:2}, {x:2, y:3}, {x:3, y:4}]\n min x: 1\n eg: When data has arrays\n input: [[10, 20], [20, 30], [30, 40]];\n min x: 10\n */\n xValues.min = minBy(datum.values, dataObject => dataObject.x || dataObject[0]);\n /*\n compute the max x value\n eg: When data has objects\n input: [{x:1, y:2}, {x:2, y:3}, {x:3, y:4}]\n max x: 3\n eg: When data has arrays\n input: [[10, 20], [20, 30], [30, 40]];\n max x: 30\n */\n xValues.max = maxBy(datum.values, dataObject => dataObject.x || dataObject[0]);\n return xValues;\n }\n\n // Getting the min and max values among all the y values\n getYMinMaxValues(datum) {\n const yValues: any = {},\n minValues = [],\n maxValues = [];\n if (!datum) {\n return;\n }\n\n /*\n Getting the min and max y values among all the series of data\n compute the min y value\n eg: When data has objects\n input: [[{x:1, y:2}, {x:2, y:3}, {x:3, y:4}], [{x:2, y:3}, {x:3, y:4}, {x:4, y:5}]]\n min y values : '2'(among first set) & '3'(among second set)\n max y values : '4'(among first set) & '5'(among second set)\n\n eg: When data has arrays\n input: [[[10, 20], [20, 30], [30, 40]], [[20, 30], [30, 40], [40, 50]]]\n min y values : '20'(among first set) & '30'(among second set)\n max y values : '40'(among first set) & '50'(among second set)\n */\n\n forEach(datum, data => {\n minValues.push(minBy(data.values, function (dataObject) {\n return dataObject.y || dataObject[1];\n }));\n maxValues.push(maxBy(data.values, function (dataObject) {\n return dataObject.y || dataObject[1];\n }));\n });\n // Gets the least and highest values among all the min and max values of respective series of data\n yValues.min = minBy(minValues, dataObject => dataObject.y || dataObject[1]);\n yValues.max = maxBy(maxValues, dataObject => dataObject.y || dataObject[1]);\n return yValues;\n }\n\n // If the x-axis values are undefined, we return empty array else we return the values\n getValidData(values) {\n return (values.length === 1 && values[0] === undefined) ? [] : values;\n }\n\n // Returns the single data point based on the type of the data chart accepts\n valueFinder(dataObj, xKey, yKey, index?, shape?) {\n const xVal = this.getxAxisVal(dataObj, xKey, index),\n value = get(dataObj, yKey),\n yVal = parseFloat(value) || value,\n size = parseFloat(dataObj[this.bubblesize]) || 2;\n let dataPoint: any = {};\n\n if (isChartDataJSON(this.type)) {\n dataPoint.x = xVal;\n dataPoint.y = yVal;\n // only Bubble chart has the third dimension\n if (isBubbleChart(this.type)) {\n dataPoint.size = size;\n dataPoint.shape = shape || 'circle';\n }\n } else if (isChartDataArray(this.type)) {\n dataPoint = [xVal, yVal];\n }\n // Adding actual unwrapped data to chart data to use at the time of selected data point of chart event\n dataPoint._dataObj = dataObj;\n return dataPoint;\n }\n\n // Setting appropriate error messages\n setErrMsg(message) {\n if (this.showNoDataMsg) {\n this.showContentLoadError = true;\n this.invalidConfig = true;\n // TODO: Set the locale from the message\n this.errMsg = ''; // $rootScope.locale[message];\n }\n }\n\n processChartData() {\n this.sampleData = getSampleData(this);\n // scope variables used to keep the actual key values for x-axis\n this.xDataKeyArr = [];\n // Plotting the chart with sample data when the chart dataset is not bound\n if (!this.binddataset) {\n this.xDataKeyArr = getDateList();\n return this.sampleData;\n }\n\n if (!this.chartData || !this.chartData.length) {\n return [];\n }\n\n let datum = [],\n yAxisKey,\n shapes: any = [],\n values: any = [];\n const xAxisKey = this.xaxisdatakey,\n yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [],\n dataSet = this.chartData;\n\n if (isArray(dataSet)) {\n if (isPieType(this.type)) {\n yAxisKey = yAxisKeys[0];\n datum = map(dataSet, (dataObj, index) => {\n if (!isEmptyObject(dataSet[index])) {\n return this.valueFinder(dataSet[index], xAxisKey, yAxisKey);\n }\n });\n datum = this.getValidData(datum);\n } else {\n if (isBubbleChart(this.type)) {\n shapes = this.shape === 'random' ? allShapes : this.shape;\n }\n yAxisKeys.forEach((yAxisKey, series) => {\n values = map(dataSet, (dataObj, index) => {\n if (!isEmptyObject(dataSet[index])) {\n return this.valueFinder(dataSet[index], xAxisKey, yAxisKey, index, (isArray(shapes) && shapes[series]) || this.shape);\n }\n });\n values = this.getValidData(values);\n datum.push({\n values: values,\n key: prettifyLabels(yAxisKey)\n });\n });\n }\n }\n return datum;\n }\n\n setChartData(data) {\n if (data) {\n this._processedData = data;\n }\n }\n\n getChartData() {\n return this._processedData;\n }\n\n // constructing the grouped data based on the selection of orderby, x & y axis\n getVisuallyGroupedData(queryResponse, groupingColumn) {\n let groupData: any = {},\n groupValues: any = [],\n orderByDetails,\n maxLength;\n const chartData: any = [],\n _isAreaChart = isAreaChart(this.type),\n yAxisKey = first(split(this.yaxisdatakey, ','));\n this.xDataKeyArr = [];\n queryResponse = orderBy(queryResponse, split(this.groupby, ','));\n if (this.orderby) {\n orderByDetails = getLodashOrderByFormat(this.orderby);\n queryResponse = orderBy(queryResponse, orderByDetails.columns, orderByDetails.orders);\n }\n queryResponse = groupBy(queryResponse, groupingColumn);\n // In case of area chart all the series data should be of same length\n if (_isAreaChart) {\n maxLength = max(map(queryResponse, obj => obj.length));\n }\n forEach(queryResponse, (values, groupKey) => {\n groupValues = isAreaChart ? fill(new Array(maxLength), [0, 0]) : [];\n forEachRight(values, (value, index) => {\n groupValues[index] = this.valueFinder(value, this.xaxisdatakey, yAxisKey, index);\n });\n groupData = {\n key : groupKey,\n values : groupValues\n };\n chartData.push(groupData);\n });\n return chartData;\n }\n\n /*Decides whether the data should be visually grouped or not\n Visually grouped when a different column is choosen in the group by other than x and y axis and aggregation is not chosen*/\n getGroupingDetails() {\n if (this.isGroupByEnabled() && !this.isAggregationEnabled()) {\n let isVisuallyGrouped = false,\n visualGroupingColumn,\n groupingExpression,\n columns: any = [],\n groupingColumnIndex;\n const groupbyColumns = this.groupby && this.groupby !== NONE ? this.groupby.split(',') : [],\n yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [];\n\n if (groupbyColumns.length > 1) {\n /*Getting the group by column which is not selected either in x or y axis*/\n groupbyColumns.every((column, index) => {\n if (this.xaxisdatakey !== column && $.inArray(column, yAxisKeys) === -1) {\n isVisuallyGrouped = true;\n visualGroupingColumn = column;\n groupingColumnIndex = index;\n groupbyColumns.splice(groupingColumnIndex, 1);\n return false;\n }\n return true;\n });\n // Constructing the groupby expression\n if (visualGroupingColumn) {\n columns.push(visualGroupingColumn);\n }\n\n if (groupbyColumns.length) {\n columns = concat(columns, groupbyColumns);\n }\n }\n // If x and y axis are not included in aggregation need to be included in groupby\n if (this.xaxisdatakey !== this.aggregationcolumn) {\n columns.push(this.xaxisdatakey);\n }\n forEach(yAxisKeys, key => {\n if (key !== this.aggregationcolumn) {\n columns.push(key);\n }\n });\n groupingExpression = columns.join(',');\n // set isVisuallyGrouped flag in scope for later use\n this.isVisuallyGrouped = isVisuallyGrouped;\n\n return {\n expression: groupingExpression,\n isVisuallyGrouped: isVisuallyGrouped,\n visualGroupingColumn: visualGroupingColumn\n };\n }\n return {\n expression: '',\n isVisuallyGrouped: false,\n visualGroupingColumn: ''\n };\n }\n\n // Function to get the aggregated data after applying the aggregation & group by or order by operations.\n getAggregatedData(callback) {\n const variable: any = this.datasource,\n yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [],\n data: any = {};\n let sortExpr,\n columns: any = [],\n colAlias,\n orderByColumns,\n groupByFields: any = [];\n\n if (!variable) {\n return;\n }\n if (this.isGroupByEnabled()) {\n groupByFields = split(this.groupby, ',');\n }\n if (this.orderby) {\n sortExpr = replace(this.orderby, /:/g, ' ');\n columns = uniq(concat(columns, groupByFields, [this.aggregationcolumn]));\n orderByColumns = getLodashOrderByFormat(this.orderby).columns;\n // If the orderby column is chosen either in groupby or orderby then replace . with $ for that column\n forEach(intersection(columns, orderByColumns), col => {\n colAlias = getValidAliasName(col);\n // @ts-ignore\n sortExpr = replace(sortExpr, col, colAlias);\n });\n }\n if (this.isAggregationEnabled()) {\n // Send the group by in the aggregations api only if aggregation is also chosen\n data.groupByFields = groupByFields;\n data.aggregations = [\n {\n 'field': this.aggregationcolumn,\n 'type': aggregationFnMap[this.aggregation],\n 'alias': getValidAliasName(this.aggregationcolumn)\n }\n ];\n }\n // Execute the query.\n variable.execute('getAggregatedData', {\n 'aggregations' : data,\n 'sort' : sortExpr\n }).then(response => {\n // Transform the result into a format supported by the chart.\n const chartData: any = [],\n aggregationAlias: any = getValidAliasName(this.aggregationcolumn),\n xAxisAliasKey = getValidAliasName(this.xaxisdatakey),\n yAxisAliasKeys = [];\n\n yAxisKeys.forEach(yAxisKey => yAxisAliasKeys.push(getValidAliasName(yAxisKey)));\n\n forEach(response.body.content, (responseContent) => {\n const obj = {};\n // Set the response in the chartData based on 'aggregationColumn', 'xAxisDataKey' & 'yAxisDataKey'.\n if (this.isAggregationEnabled()) {\n obj[this.aggregationcolumn] = responseContent[aggregationAlias];\n obj[this.aggregationcolumn] = get(responseContent, aggregationAlias) || get(responseContent, this.aggregationcolumn);\n }\n\n obj[this.xaxisdatakey] = get(responseContent, xAxisAliasKey) || get(responseContent, this.xaxisdatakey);\n\n yAxisKeys.forEach((yAxisKey, index) => {\n obj[yAxisKey] = responseContent[yAxisAliasKeys[index]];\n obj[yAxisKey] = get(responseContent, yAxisAliasKeys[index]) || get(responseContent, yAxisKey);\n });\n\n chartData.push(obj);\n });\n\n this.chartData = chartData;\n\n triggerFn(callback);\n }, () => {\n this.chartData = [];\n this.setErrMsg('MESSAGE_ERROR_FETCH_DATA');\n triggerFn(callback);\n });\n }\n\n // This function sets maximum width for the labels that can be displayed.This will helpful when they are overlapping\n setLabelsMaxWidth() {\n let xTicks,\n tickWidth,\n maxLength,\n xDist,\n yDist,\n totalHeight,\n maxNoLabels,\n nthElement,\n labelsAvailableWidth,\n barWrapper,\n yAxisWrapper,\n svgWrapper;\n const fontsize = parseInt(this.fontsize, 10) || 12,\n isBarchart = isBarChart(this.type);\n // getting the x ticks in the chart\n xTicks = $('#wmChart' + this.$id + ' svg').find('g.nv-x').find('g.tick').find('text');\n\n // getting the distance between the two visible ticks associated with visible text\n xTicks.each(function () {\n const xTick = $(this);\n let xTransform,\n tickDist;\n if (xTick.text() && xTick.css('opacity') === '1') {\n xTransform = xTick.parent().attr('transform').split(',');\n xDist = parseFloat(xTransform[0].substr(10));\n yDist = parseFloat(xTransform[1] || '0');\n if (!isBarchart && xDist > 0) {\n tickDist = xDist;\n } else if (yDist > 0) {\n tickDist = yDist;\n }\n if (tickWidth) {\n tickWidth = tickDist - tickWidth;\n return false;\n }\n tickWidth = tickDist;\n return true;\n }\n });\n\n // In case of bar chart getting the available space for the labels to be displayed\n if (isBarchart) {\n barWrapper = $('#wmChart' + this.$id + ' svg>g.nv-wrap>g>g.nv-barsWrap')[0];\n yAxisWrapper = $('#wmChart' + this.$id + ' svg>g.nv-wrap>g>g.nv-y')[0];\n svgWrapper = $('#wmChart' + this.$id + ' svg')[0];\n // getting the total height of the chart\n totalHeight = barWrapper ? barWrapper.getBoundingClientRect().height : 0;\n // getting the labels available space\n labelsAvailableWidth = yAxisWrapper ? svgWrapper.getBoundingClientRect().width - yAxisWrapper.getBoundingClientRect().width : svgWrapper.getBoundingClientRect().width;\n // Setting the max length for the label\n maxLength = Math.round(labelsAvailableWidth / fontsize);\n // if available space for each label is less than the font-size\n // then limiting the labels to be displayed\n if (tickWidth < fontsize) {\n // calculate the maximum no of labels to be fitted\n maxNoLabels = totalHeight / fontsize;\n // showing only the nth element\n nthElement = Math.ceil(this.chartData.length / maxNoLabels);\n // showing up only some labels\n d3.select('#wmChart' + this.$id + ' svg').select('g.nv-x').selectAll('g.tick').select('text').each(function (text, i) {\n // hiding every non nth element\n if (i % nthElement !== 0) {\n d3.select(this).attr('opacity', 0);\n }\n });\n }\n } else {\n // Setting the max length for the label\n maxLength = Math.round(tickWidth / fontsize);\n }\n\n // maxLength should always be a positive number\n maxLength = Math.abs(maxLength);\n // Validating if every label exceeds the max length and if so limiting the length and adding ellipsis\n xTicks.each(function () {\n if (this.textContent.length > maxLength) {\n this.textContent = this.textContent.substr(0, maxLength) + '...';\n }\n });\n }\n\n // Returns the columns of that can be choosen in the x and y axis\n getDefaultColumns() {\n let type,\n stringColumn,\n i,\n temp;\n const defaultColumns = [],\n columns = this.datasource.execute(DataSource.Operation.GET_PROPERTIES_MAP) || [];\n\n for (i = 0; i < columns.length && defaultColumns.length <= 2; i += 1) {\n type = columns[i].type;\n if (!columns[i].isRelated && (isNumberType(type))) {\n defaultColumns.push(columns[i].fieldName);\n } else if (type === 'string' && !stringColumn) {\n stringColumn = columns[i].fieldName;\n }\n }\n // Other than bubble chart x: string type y: number type\n // Bubble chart x: number type y: number type\n if (stringColumn && defaultColumns.length > 0 && !isBubbleChart(this.type)) {\n temp = defaultColumns[0];\n defaultColumns[0] = stringColumn;\n defaultColumns[1] = temp;\n }\n\n return defaultColumns;\n }\n\n // Call user defined javascript function when user links it to click event of the widget.\n attachClickEvent() {\n let dataObj;\n d3.select('#wmChart' + this.$id + ' svg').selectAll(chartDataPointXpath[this.type]).style('pointer-events', 'all')\n .on('click', (event, data, index) => {\n switch (this.type) {\n case 'Column':\n case 'Bar':\n dataObj = data._dataObj;\n break;\n case 'Pie':\n case 'Donut':\n dataObj = data.data._dataObj;\n break;\n case 'Area':\n case 'Cumulative Line':\n case 'Line':\n dataObj = data[0]._dataObj;\n break;\n case 'Bubble':\n dataObj = data;\n break;\n }\n this.selecteditem = dataObj;\n this.invokeEventCallback('select', {\n $event: event,\n selectedChartItem: data,\n selectedItem: this.selecteditem\n });\n });\n\n }\n\n /* Returns Y Scale min value\n Ex: Input : 8.97\n Output : 8.87\n\n Input : 8\n Output : 7\n */\n\n postPlotProcess(chart) {\n let chartSvg,\n pieLabels,\n pieGroups,\n angleArray;\n const styleObj = {};\n const element = this.$element;\n\n postPlotChartProcess(this);\n\n if (!isPieType(this.type)) {\n this.setLabelsMaxWidth();\n } else if (!this.showlabelsoutside) {\n /** Nvd3 has a issue in rotating text. So we will use this as a temp fix.\n * If the issue is resolved there, we can remove this.*/\n /* If it is a donut chart, then rotate the text and position them*/\n chartSvg = d3.select('#wmChart' + this.$id + ' svg');\n pieLabels = chartSvg.select('.nv-pieLabels').selectAll('.nv-label');\n pieGroups = chartSvg.select('.nv-pie').selectAll('.nv-slice');\n angleArray = [];\n if (pieGroups && pieGroups.length) {\n pieGroups.each(function () {\n d3.select(this).attr('transform', function (d) {\n angleArray.push(angle(d));\n });\n });\n pieLabels.each(function (d, i) {\n const group = d3.select(this);\n $(group[0][0]).find('text').attr('transform', 'rotate(' + angleArray[i] + ')');\n });\n }\n }\n\n // prepare text style props object and set\n forEach(styleProps, (value, key) => {\n if (key === 'fontsize' || key === 'fontunit') {\n styleObj[value] = this.fontsize + this.fontunit;\n } else {\n styleObj[value] = this[key];\n }\n });\n setTextStyle(styleObj, this.$id);\n\n /*\n * allow window-resize functionality, for only-run mode as\n * updating chart is being handled by watchers of height & width in studio-mode\n * */\n triggerFn(this._resizeFn && this._resizeFn.clear);\n this._resizeFn = nv.utils.windowResize(() => {\n if (element[0].getBoundingClientRect().height) {\n chart.update();\n postPlotChartProcess(this);\n if (!isPieType(this.type)) {\n this.setLabelsMaxWidth();\n }\n } else {\n // TODO: get parents of accordion type\n /*let parent = element.closest('.app-accordion-panel, .tab-pane').isolateScope();\n if (parent) {\n parent.initialized = false;\n }*/\n }\n });\n }\n\n // prepares and configures the chart properties\n configureChart() {\n // Copy the data only in case of pie chart with default data\n // Reason : when multiple pie charts are bound to same data, first chart theme will be applied to all charts\n let xDomainValues;\n let yDomainValues;\n let chart;\n let beforeRenderVal;\n const yformatOptions: any = {};\n\n if (this._processedData.length > 0) {\n if (isAxisDomainValid(this, 'x')) {\n xDomainValues = this.binddataset ? this.getXMinMaxValues(this._processedData[0]) : { 'min' : {'x': 1}, 'max' : {'x' : 5}};\n }\n if (isAxisDomainValid(this, 'y')) {\n yDomainValues = this.binddataset ? this.getYMinMaxValues(this._processedData) : { 'min' : {'y' : 1}, 'max' : {'y' : 5}};\n }\n }\n\n if (isPieType(this.type) && (!this.binddataset || !this.scopedataset)) {\n this._processedData = getClonedObject(this.scopedataset || this._processedData);\n }\n\n // get the chart object\n chart = initChart(this, xDomainValues, yDomainValues, null, !this.binddataset);\n\n if (isArray(this._processedData)) {\n // WMS-19499: To remove chart X-axis old ticks when chart data loaded dynamically.\n const oldgTicks = $('#wmChart' + this.$id + ' svg').find('g.nv-x').find('g.tick');\n if (oldgTicks && oldgTicks.length) {\n oldgTicks.remove();\n }\n beforeRenderVal = this.invokeEventCallback('beforerender', { 'chartInstance' : chart});\n if (beforeRenderVal) {\n chart = beforeRenderVal;\n }\n this.chart = chart;\n // changing the default no data message\n d3.select('#wmChart' + this.$id + ' svg')\n .datum(this._processedData)\n .call(this.chart);\n this.postPlotProcess(chart);\n return chart;\n }\n }\n\n // Plotting the chart with set of the properties set to it\n plotChart() {\n const element = this.$element;\n // call user-transformed function\n this.chartData = (this.invokeEventCallback('transform')) || this.chartData;\n\n // Getting the order by data only in run mode. The order by applies for all the charts other than pie and donut charts\n if (this.isVisuallyGrouped && !isPieType(this.type)) {\n this._processedData = this.chartData;\n } else {\n this._processedData = this.processChartData();\n }\n // checking the parent container before plotting the chart\n if (!element[0].getBoundingClientRect().height) {\n return;\n }\n if (this.clearCanvas) {\n // empty svg to add-new chart\n element.find('svg').replaceWith('<svg></svg>');\n this.clearCanvas = false;\n }\n\n // In case of invalid axis show no data available message\n if (!this.isValidAxis()) {\n this._processedData = [];\n }\n nv.addGraph(() => this.configureChart(), () => {\n /*Bubble chart has an time out delay of 300ms in their implementation due to which we\n * won't be getting required data points on attaching events\n * hence delaying it 600ms*/\n setTimeout( () => {\n this.attachClickEvent();\n }, 600);\n });\n this.isLoadInProgress = false;\n }\n // TODO: Need way to figure out if the datasource is a live source\n get isLiveVariable() {\n // setting the flag for the live variable in the scope for the checks\n const variableObj = this.datasource;\n return variableObj && variableObj.category === 'wm.LiveVariable';\n }\n\n plotChartProxy() {\n this.showContentLoadError = false;\n this.invalidConfig = false;\n // Checking if x and y axis are chosen\n this.isLoadInProgress = true;\n const groupingDetails = this.getGroupingDetails();\n // If aggregation/group by/order by properties have been set, then get the aggregated data and plot the result in the chart.\n // TODO: datasource for live variable detection\n if (this.binddataset && this.isLiveVariable && (this.filterFields || this.isDataFilteringEnabled())) {\n this.getAggregatedData(() => this.plotChart());\n } else { // Else, simply plot the chart.\n // In case of live variable resetting the aggregated data to the normal dataset when the aggregation has been removed\n if (this.dataset && this.isLiveVariable) {\n this.chartData = this.dataset;\n if (this.isGroupByEnabled() && groupingDetails.isVisuallyGrouped) {\n this.chartData = this.getVisuallyGroupedData(this.chartData, groupingDetails.visualGroupingColumn);\n }\n\n }\n this.plotChart();\n }\n }\n\n // sets the default x and y axis options\n setDefaultAxisOptions() {\n const defaultColumns = this.getDefaultColumns();\n // If we get the valid default columns then assign them as the x and y axis\n // In case of service variable we may not get the valid columns because we cannot know the datatypes\n this.xaxisdatakey = defaultColumns[0] || null;\n this.yaxisdatakey = defaultColumns[1] || null;\n }\n\n getCutomizedOptions(prop, fields) {\n const groupByColumns = split(this.groupby, ','),\n aggColumns = split(this.aggregationcolumn, ',');\n if (!this.binddataset) {\n return fields;\n }\n if (!this.axisoptions) {\n this.axisoptions = fields;\n }\n let newOptions;\n switch (prop) {\n case 'xaxisdatakey':\n // If group by enabled, columns chosen in groupby will be populated in x axis options\n if (this.isGroupByEnabled()) {\n newOptions = groupByColumns;\n }\n break;\n case 'yaxisdatakey':\n // If aggregation by enabled, columns chosen in aggregation will be populated in y axis options\n if (this.isAggregationEnabled()) {\n newOptions = aggColumns;\n } else if (this.isLiveVariable) {\n // In case of live variable populating only numeric columns\n newOptions = this.numericColumns;\n }\n break;\n case 'groupby':\n // Filtering only non primary key columns\n if (this.isLiveVariable && this.nonPrimaryColumns && this.nonPrimaryColumns.length) {\n newOptions = this.nonPrimaryColumns;\n }\n break;\n case 'aggregationcolumn':\n // Set the 'aggregationColumn' to show all keys in case of aggregation function is count or to numeric keys in all other cases.\n if (this.isLiveVariable && this.isAggregationEnabled() && this.aggregation !== 'count') {\n newOptions = this.numericColumns;\n }\n break;\n case 'orderby':\n // Set the 'aggregationColumn' to show all keys in case of aggregation function is count or to numeric keys in all other cases.\n if (this.isLiveVariable && this.isAggregationEnabled()) {\n newOptions = uniq(concat(groupByColumns, aggColumns));\n }\n break;\n case 'bubblesize':\n if (this.numericColumns && this.numericColumns.length) {\n newOptions = this.numericColumns;\n }\n break;\n }\n\n return newOptions || fields || this.axisoptions;\n }\n\n // Function that iterates through all the columns and then fetching the numeric and non primary columns among them\n setNumericandNonPrimaryColumns() {\n let columns,\n type;\n const propertiesMap = this.datasource.execute(DataSource.Operation.GET_PROPERTIES_MAP);\n this.numericColumns = [];\n this.nonPrimaryColumns = [];\n // Fetching all the columns\n if (this.dataset && !isEmpty(propertiesMap)) {\n columns = []; // TODO: fetchPropertiesMapColumns(propertiesMap);\n }\n\n if (columns) {\n // Iterating through all the columns and fetching the numeric and non primary key columns\n forEach(Object.keys(columns), (key) => {\n type = columns[key].type;\n if (isNumberType(type)) {\n this.numericColumns.push(key);\n }\n // Hiding only table's primary key\n if (columns[key].isRelatedPk === 'true' || !columns[key].isPrimaryKey) {\n this.nonPrimaryColumns.push(key);\n }\n });\n this.numericColumns = this.numericColumns.sort();\n this.nonPrimaryColumns = this.nonPrimaryColumns.sort();\n }\n }\n\n // plot the chart\n handleDataSet(newVal) {\n this.errMsg = '';\n // Resetting the flag to false when the binding was removed\n if (!newVal && !this.binddataset) {\n this.isVisuallyGrouped = false;\n this.axisoptions = null;\n }\n\n // liveVariables contain data in 'data' property' of the variable\n this.chartData = this.isLiveVariable ? newVal || '' : (newVal && newVal.dataValue === '' && keys(newVal).length === 1) ? '' : newVal;\n\n // if the data returned is an object make it an array of object\n if (!isArray(this.chartData) && isObject(this.chartData)) {\n this.chartData = [this.chartData];\n }\n\n if (newVal && newVal.filterFields) {\n this.filterFields = newVal.filterFields;\n }\n\n // plotchart for only valid data and only after bound variable returns data\n if (this.chartData) {\n this._plotChartProxy();\n }\n }\n\n _plotChartProxy = debounce(this.plotChartProxy.bind(this), 100);\n\n // sets the center label for donut chart type\n setDonutCenterLabel(labelValue) {\n let chartSvg, pieGroups;\n chartSvg = d3.select('#wmChart' + this.$id + ' svg');\n\n pieGroups = chartSvg.select('.nv-wrap.nv-pie').select('.nv-pie');\n pieGroups.text('');\n pieGroups.append('text')\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .attr('class', 'nv-pie-title')\n .text(labelValue)\n .each(function (d) {\n var d3text = d3.select(this),\n circ = d3.select(this.parentElement),\n totalWidth = Number(circ.node().getBoundingClientRect().width),\n // minus the ring width from total width\n availWidth = totalWidth - 30,\n textWidth = this.getComputedTextLength();\n d3text.attr(\"data-scale\", availWidth / textWidth);\n }).style(\"font-size\", function() {\n // 16 is the default font size to multiply with the scaled value and 24 is the maximum font size that can be applied\n var fontSize = 16 * d3.select(this).attr(\"data-scale\");\n return fontSize > 24 ? 24 : fontSize + \"px\";\n });\n }\n\n onPropertyChange(key, newVal, oldVal?) {\n super.onPropertyChange(key, newVal, oldVal);\n switch (key) {\n case 'dataset':\n this.handleDataSet(newVal);\n break;\n case 'centerlabel':\n if (this.chart) {\n this.chart.title(newVal);\n this.setDonutCenterLabel(newVal);\n }\n break;\n case 'type':\n // Based on the change in type deciding the default margins\n if (isPieType(this.type)) {\n this.offsettop = 20;\n this.offsetright = 0;\n this.offsetbottom = 0;\n this.offsetleft = 0;\n } else if (oldVal === 'Pie' || oldVal === 'Donut') {\n this.offsettop = 25;\n this.offsetright = 25;\n this.offsetbottom = 55;\n this.offsetleft = 75;\n }\n\n if (oldVal !== newVal) {\n this.clearCanvas = true;\n }\n // In studio mode, configure properties dependent on chart type\n this._plotChartProxy();\n break;\n default:\n // In RunMode, the plotchart method will not be called for all property change\n this._plotChartProxy();\n break;\n }\n if (includes(advanceDataProps, key)) {\n this._plotChartProxy();\n }\n }\n\n handleLoading(data) {\n const dataSource = this.datasource;\n if (dataSource && dataSource.execute(DataSource.Operation.IS_API_AWARE) && isDataSourceEqual(data.variable, dataSource)) {\n this.variableInflight = data.active;\n this.isLoadInProgress = data.active;\n }\n }\n\n hideTooltip() {\n d3.selectAll('.nvtooltip').style('opacity', 0);\n }\n\n onStyleChange(key, newVal, oldVal) {\n const styleObj = {};\n super.onStyleChange(key, newVal, oldVal);\n switch (key) {\n case 'fontsize':\n case 'fontunit':\n case 'color':\n case 'fontfamily':\n case 'fontweight':\n case 'fontstyle':\n case 'textdecoration':\n styleObj[styleProps[key]] = (key === 'fontsize' || key === 'fontunit') ? this.fontsize + this.fontunit : newVal;\n setTextStyle(styleObj, this.$id);\n break;\n }\n }\n\n constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER, ['fontsize', 'fontunit', 'color', 'fontfamily', 'fontweight', 'fontstyle', 'textdecoration']);\n\n // generate unique id for the component\n this.$id = this.widgetId || Math.random();\n // remove title attribute as the element on hover shows you the hint through-out the element\n removeAttr(this.nativeElement, 'title');\n this.chartReady = false;\n this.binddataset = this.nativeElement.getAttribute('dataset.bind');\n // Show loading status based on the variable life cycle\n this._subsciptions.push(this.app.subscribe('toggle-variable-state', this.handleLoading.bind(this)));\n // Will hide tolltip of a chart in mobile when the user scrolls.\n this._subsciptions.push(this.app.subscribe('iscroll-start', () => {this.hideTooltip();}));\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n // For old projects\n if (!includes(['outside', 'inside', 'hide'], this.showlabels)) {\n this.showlabels = getBooleanValue(this.showlabels);\n this.showlabelsoutside = getBooleanValue(this.showlabelsoutside);\n this.showlabels = this.showlabels ? (this.showlabelsoutside ? 'outside' : 'inside') : 'hide';\n }\n\n if (!this.theme) {\n // Default theme for pie/donut is Azure and for other it is Terrestrial\n this.theme = isPieType(this.type) ? 'Azure' : 'Terrestrial';\n }\n\n this.nativeElement.setAttribute('id', 'wmChart' + this.$id);\n // When there is not value binding, then plot the chart with sample data\n if (!this.binddataset && !this.nativeElement.getAttribute('scopedataset')) {\n this._plotChartProxy();\n }\n }\n\n ngOnDestroy() {\n // destroy all subscriptions to prevent memory leak.\n this.hideTooltip();\n this._subsciptions.forEach((subscription)=>{\n subscription();\n });\n super.ngOnDestroy();\n }\n redraw = this._plotChartProxy.bind(this);\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\nimport { BasicModule } from '@wm/components/basic';\n\nimport { ChartComponent } from './chart.component';\n\nconst components = [\n ChartComponent\n];\n\n@NgModule({\n imports: [\n BasicModule,\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class ChartModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../projects/components/widgets/chart/src/chart.props.ts","../../../../projects/components/widgets/chart/src/chart.utils.ts","../../../../projects/components/widgets/chart/src/chart.component.html","../../../../projects/components/widgets/chart/src/chart.component.ts","../../../../projects/components/widgets/chart/src/chart.module.ts","../../../../projects/components/widgets/chart/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register } from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-chart',\n new Map(\n [\n ['aggregation', {value: 'none', ...PROP_STRING}],\n ['aggregationcolumn', PROP_STRING],\n ['areaviewtype', {value: 'stack', ...PROP_STRING}],\n ['barspacing', {value: 'medium', ...PROP_STRING}],\n ['bubblesize', PROP_STRING],\n ['centerlabel', PROP_STRING],\n ['class', PROP_STRING],\n ['customcolors', PROP_ANY],\n ['dataset', PROP_ANY],\n ['datasource', PROP_STRING],\n ['donutratio', {value: 'medium', ...PROP_STRING}],\n ['formattype', {value: '', PROP_STRING}],\n ['groupby', PROP_STRING],\n ['height', {value: '210px', PROP_STRING}],\n ['highlightpoints', PROP_BOOLEAN],\n ['iconclass', PROP_STRING],\n ['interpolation', {value: 'linear', ...PROP_STRING}],\n ['labelthreshold', {value: 0.01, ...PROP_NUMBER}],\n ['labeltype', {value: 'percent', ...PROP_STRING}],\n ['legendtype', {value: 'furious', ...PROP_STRING}],\n ['linethickness', PROP_STRING],\n ['loadingdatamsg', {value: 'Loading...', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['nodatamessage', {value: 'No Data Available.', ...PROP_STRING}],\n ['offset', PROP_STRING],\n ['offsetbottom', {value: 55, ...PROP_NUMBER}],\n ['offsetleft', {value: 75, ...PROP_NUMBER}],\n ['offsetright', {value: 25, ...PROP_NUMBER}],\n ['offsettop', {value: 25, ...PROP_NUMBER}],\n ['orderby', PROP_STRING],\n ['reducexticks', {value: true, ...PROP_BOOLEAN}],\n ['shape', {value: 'circle', ...PROP_STRING}],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['showlabels', {value: 'outside', ...PROP_STRING}],\n ['showlabelsoutside', {value: true, ...PROP_BOOLEAN}],\n ['showlegend', {value: 'top', ...PROP_STRING}],\n ['showvalues', {value: false, ...PROP_BOOLEAN}],\n ['showxaxis', {value: true, ...PROP_BOOLEAN}],\n ['showxdistance', {value: false, ...PROP_BOOLEAN}],\n ['showyaxis', {value: true, ...PROP_BOOLEAN}],\n ['showydistance', {value: false, ...PROP_BOOLEAN}],\n ['staggerlabels', {value: false, ...PROP_BOOLEAN}],\n ['subheading', PROP_STRING],\n ['theme', PROP_STRING],\n ['title', PROP_STRING],\n ['tooltips', {value: true, ...PROP_BOOLEAN}],\n ['type', PROP_STRING],\n ['viewtype', {value: 'Grouped', ...PROP_STRING}],\n ['xaxisdatakey', PROP_STRING],\n ['xaxislabel', PROP_STRING],\n ['xaxislabeldistance', {value: 12, ...PROP_NUMBER}],\n ['xdateformat', PROP_STRING],\n ['xdomain', {value: 'Default', ...PROP_STRING}],\n ['xnumberformat', PROP_STRING],\n ['xunits', PROP_STRING],\n ['yaxisdatakey', PROP_STRING],\n ['yaxislabel', PROP_STRING],\n ['yaxislabeldistance', {value: 12, ...PROP_NUMBER}],\n ['ydomain', {value: 'Default', ...PROP_STRING}],\n ['ynumberformat', PROP_STRING],\n ['yunits', PROP_STRING]\n ]\n )\n );\n};\n","import {isEmptyObject, prettifyLabels} from '@wm/core';\nimport {forEach, includes, invert, isArray, isFinite, isString, isUndefined, split} from \"lodash-es\";\n\ndeclare const $;\n\ndeclare const moment;\ndeclare const d3, nv;\n\nexport const chartTypes = ['Column', 'Line', 'Area', 'Cumulative Line', 'Bar', 'Pie', 'Donut', 'Bubble'],\n allShapes = ['circle', 'square', 'diamond', 'cross', 'triangle-up', 'triangle-down'];\n\nconst dateList = ['01/01/2001', '01/01/2002', '01/01/2003'],\n themes = {\n 'Terrestrial': {\n colors: ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5'],\n tooltip: {\n 'backgroundColor': '#de7d28',\n 'textColor': '#FFFFFF'\n }\n },\n 'Annabelle': {\n colors: ['#393b79', '#5254a3', '#6b6ecf', '#9c9ede', '#637939', '#8ca252', '#b5cf6b', '#cedb9c', '#8c6d31', '#bd9e39', '#e7ba52', '#e7cb94', '#843c39', '#ad494a', '#d6616b', '#e7969c', '#7b4173', '#a55194', '#ce6dbd', '#de9ed6'],\n tooltip: {\n 'backgroundColor': '#2e306f',\n 'textColor': '#FFFFFF'\n }\n },\n 'Azure': {\n colors: ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'],\n tooltip: {\n 'backgroundColor': '#3182bd',\n 'textColor': '#FFFFFF'\n }\n },\n 'Retro': {\n colors: ['#0ca7a1', '#ffa615', '#334957', '#acc5c2', '#988f90', '#8accc9', '#515151', '#f27861', '#36c9fd', '#794668', '#0f709d', '#0d2738', '#44be78', '#4a1839', '#6a393f', '#557d8b', '#6c331c', '#1c1c1c', '#861500', '#09562a'],\n tooltip: {\n 'backgroundColor': '#80513a',\n 'textColor': '#FFFFFF'\n }\n },\n 'Mellow': {\n colors: ['#f0dcbf', '#88c877', '#aeb918', '#2e2c23', '#ddddd2', '#dfe956', '#4c963b', '#5d3801', '#e1eec3', '#cd8472', '#fcfab3', '#9a4635', '#9295ad', '#2e3f12', '#565677', '#557d8b', '#4f4d02', '#0c0c1b', '#833324', '#24120e'],\n tooltip: {\n 'backgroundColor': '#7c9e73',\n 'textColor': '#FFFFFF'\n }\n },\n 'Orient': {\n colors: ['#a80000', '#cc6c3c', '#f0e400', '#000084', '#fccc6c', '#009c6c', '#cc309c', '#78cc00', '#fc84e4', '#48e4fc', '#4878d8', '#186c0c', '#606060', '#a8a8a8', '#000000', '#d7d7d7', '#75a06e', '#190d0b', '#888888', '#694b84'],\n tooltip: {\n 'backgroundColor': '#c14242',\n 'textColor': '#FFFFFF'\n }\n },\n 'GrayScale': {\n colors: ['#141414', '#353535', '#5b5b5b', '#848484', '#a8a8a8', '#c3c3c3', '#e0e0e0', '#c8c8c8', '#a5a5a5', '#878787', '#656565', '#4e4e4e', '#303030', '#1c1c1c', '#4f4f4f', '#3b3b3b', '#757575', '#606060', '#868686', '#c1c1c1'],\n tooltip: {\n 'backgroundColor': '#575757',\n 'textColor': '#FFFFFF'\n }\n },\n 'Flyer': {\n colors: ['#3f454c', '#5a646e', '#848778', '#cededf', '#74c4dd', '#0946ed', '#380bb1', '#000ff0', '#f54a23', '#1db262', '#bca3aa', '#ffa500', '#a86b32', '#63a18c', '#56795e', '#934343', '#b75f5f', '#752d2d', '#4e1111', '#920606'],\n tooltip: {\n 'backgroundColor': '#47637c',\n 'textColor': '#FFFFFF'\n }\n },\n 'Luminosity': {\n colors: ['#FFFFFF', '#e4e4e4', '#00bcd4', '#f0dd2f', '#00aabf', '#018376', '#e91e63', '#39e5d4', '#ff6d6d', '#00ff76', '#ff9800', '#969696', '#ff4200', '#e00000', '#95cbe5', '#5331ff', '#fff4a7', '#e7a800', '#0061e4', '#d5e7ff'],\n tooltip: {\n 'backgroundColor': '#47637c',\n 'textColor': '#FFFFFF'\n }\n }\n },\n basicProperties = ['xaxislabel', 'yaxislabel', 'xunits', 'yunits', 'xnumberformat', 'xdateformat', 'ynumberformat',\n 'showvalues', 'showlabels', 'viewtype', 'areaviewtype', 'staggerlabels', 'reducexticks', 'offsettop', 'offsetbottom', 'offsetright', 'offsetleft',\n 'barspacing', 'xaxislabeldistance', 'yaxislabeldistance', 'theme', 'labeltype', 'donutratio', 'showlabelsoutside', 'showxdistance', 'showydistance', 'shape', 'nodatamessage', 'captions', 'showxaxis', 'showyaxis',\n 'centerlabel', 'customcolors', 'showlegend', 'legendtype', 'xdomain', 'ydomain', 'tooltips', 'linethickness', 'highlightpoints', 'interpolation', 'labelthreshold'],\n barSpacingMap = {\n 'small' : 0.3,\n 'medium' : 0.5,\n 'large' : 0.8\n },\n donutRatioMap = {\n 'small' : 0.3,\n 'medium' : 0.6,\n 'large' : 0.7\n },\n barSpacingMapInvert = invert(barSpacingMap),\n donutRatioMapInvert = invert(donutRatioMap),\n tickformats = {\n 'Thousand': {\n 'prefix': 'K',\n 'divider': 1000\n },\n 'Million' : {\n 'prefix': 'M',\n 'divider': 1000000\n },\n 'Billion' : {\n 'prefix': 'B',\n 'divider': 1000000000\n }\n },\n chartId = '#preview-chart',\n dataTypeJSON = ['Column', 'Line', 'Pie', 'Bar', 'Donut', 'Bubble'], // Charts that supports the data to be JSON;\n lineTypeCharts = ['Line', 'Area', 'Cumulative Line'], // Charts that does not supports the string type of data in the xaxis in the nvd3;\n dataTypeArray = ['Cumulative Line', 'Area'], // Charts that supports the data to be Array\n SAMPLE_DATA = {\n 'group1' : 'Europe',\n 'group2' : 'Asia',\n 'group3' : 'America',\n 'group4' : 'Australia'\n };\n\n// returns true if chart type is pie\nexport const isPieChart = type => type === 'Pie';\n\n// returns true if chart type is line\nexport const isLineChart = type => type === 'Line';\n\n// returns true if chart type is bar\nexport const isBarChart = type => type === 'Bar';\n\n// returns true if chart type is donut\nexport const isDonutChart = type => type === 'Donut';\n\n// returns true if chart type is bubble\nexport const isBubbleChart = type => type === 'Bubble';\n\n// returns true if chart type is column\nexport const isColumnChart = type => type === 'Column';\n\n// returns true if chart type is area\nexport const isAreaChart = type => type === 'Area';\n\n// returns true if chart type is area\nexport const isPieType = type => isPieChart(type) || isDonutChart(type);\n\n// The format of chart data is array of json objects in case of the following types of chart\nexport const isChartDataJSON = type => includes(dataTypeJSON, type) || !includes(chartTypes, type);\n\n// The format of chart data is array of objects in case of the following types of chart\nexport const isChartDataArray = type => includes(dataTypeArray, type);\n\n// returns true is the chart type is 'line', 'area' or 'cumulative line' else false\nexport const isLineTypeChart = type => includes(lineTypeCharts, type);\n\n// X/Y Domain properties are supported only for Column and Area charts\nexport const isAxisDomainSupported = type => isColumnChart(type) || isAreaChart(type);\n\n// Returns bar spacing value\nexport const getBarSpacingValue = (value, prop) => {\n if (prop === 'value') {\n return barSpacingMap[value];\n }\n if (prop === 'key') {\n return barSpacingMapInvert[value];\n }\n};\n\n// Returns radius value\nexport const getRadiusValue = (value, prop) => {\n if (prop === 'value') {\n return donutRatioMap[value];\n }\n if (prop === 'key') {\n return donutRatioMapInvert[value];\n }\n};\n\n// Returns labels config\nexport const getLabelValues = (showlabels, showlabelsoutside, prop) => {\n const labelsConfig: any = {};\n switch (showlabels) {\n case 'hide':\n labelsConfig.showlabels = false;\n break;\n case 'inside':\n labelsConfig.showlabels = true;\n labelsConfig.showlabelsoutside = false;\n break;\n case 'outside':\n labelsConfig.showlabels = true;\n labelsConfig.showlabelsoutside = true;\n break;\n }\n return labelsConfig;\n};\n\n// Construct the sample data\nexport const constructSampleData = (dataType, yaxisLength, shape) => {\n let first_series = [],\n second_series = [],\n third_series = [],\n first_series_array = [],\n second_series_array = [],\n third_series_array = [],\n first_series_bubble = [],\n second_series_bubble = [],\n third_series_bubble = [],\n data = [];\n switch (dataType) {\n case 'jsonFormat':\n first_series = [\n {'x': '01/01/2001', 'y': 4000000},\n {'x': '01/01/2002', 'y': 1000000},\n {'x': '01/01/2003', 'y': 5000000}\n ];\n second_series = [\n {'x': '01/01/2001', 'y': 3000000},\n {'x': '01/01/2002', 'y': 4000000},\n {'x': '01/01/2003', 'y': 7000000}\n ];\n third_series = [\n {'x': '01/01/2001', 'y': 2000000},\n {'x': '01/01/2002', 'y': 8000000},\n {'x': '01/01/2003', 'y': 6000000}\n ];\n data[0] = {\n values: first_series,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'lineChartFormat':\n first_series = [\n {'x': 1, 'y': 4000000},\n {'x': 2, 'y': 1000000},\n {'x': 3, 'y': 5000000}\n ];\n second_series = [\n {'x': 1, 'y': 3000000},\n {'x': 2, 'y': 4000000},\n {'x': 3, 'y': 7000000}\n ];\n third_series = [\n {'x': 1, 'y': 2000000},\n {'x': 2, 'y': 8000000},\n {'x': 3, 'y': 6000000}\n ];\n data[0] = {\n values: first_series,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'arrayFormat':\n first_series_array = [\n [1, 4000000],\n [2, 1000000],\n [3, 5000000]\n ];\n second_series_array = [\n [1, 3000000],\n [2, 4000000],\n [3, 7000000]\n ];\n third_series_array = [\n [1, 2000000],\n [2, 8000000],\n [3, 6000000]\n ];\n data[0] = {\n values: first_series_array,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series_array,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series_array,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'bubbleFormat':\n shape = shape === 'random' ? allShapes[Math.floor(Math.random() * allShapes.length)] : shape;\n first_series_bubble = [\n {'x': 80.66, 'y': 33739900, 'size': 78, 'shape': shape},\n {'x': 79.84, 'y': 81902300, 'size': 90, 'shape': shape},\n {'x': 78.6, 'y': 5523100, 'size': 45, 'shape': shape}\n ];\n second_series_bubble = [\n {'x': 72.73, 'y': 79716200, 'size': 98, 'shape': shape},\n {'x': 80.05, 'y': 61801600, 'size': 20, 'shape': shape},\n {'x': 72.49, 'y': 73137200, 'size': 34, 'shape': shape}\n ];\n third_series_bubble = [\n {'x': 68.09, 'y': 33739900, 'size': 45, 'shape': shape},\n {'x': 81.55, 'y': 7485600, 'size': 78, 'shape': shape},\n {'x': 68.60, 'y': 141850000, 'size': 56, 'shape': shape}\n ];\n data[0] = {\n values: first_series_bubble,\n key: SAMPLE_DATA.group1\n };\n if (yaxisLength >= 2) {\n data[1] = {\n values: second_series_bubble,\n key: SAMPLE_DATA.group2\n };\n }\n if (yaxisLength >= 3) {\n data[2] = {\n values: third_series_bubble,\n key: SAMPLE_DATA.group3\n };\n }\n break;\n case 'pieChartFormat':\n data = [\n {'x': SAMPLE_DATA.group1, 'y': 1000000},\n {'x': SAMPLE_DATA.group2, 'y': 2000000},\n {'x': SAMPLE_DATA.group3, 'y': 3000000},\n {'x': SAMPLE_DATA.group4, 'y': 4000000}\n ];\n break;\n }\n return data;\n};\n\nexport const getDataType = widgetContext => {\n const type = widgetContext.type;\n if (isLineChart(type)) {\n return 'lineChartFormat';\n }\n if (isPieType(type)) {\n return 'pieChartFormat';\n }\n if (isBubbleChart(type)) {\n return 'bubbleFormat';\n }\n return isChartDataJSON(type) ? 'jsonFormat' : 'arrayFormat';\n};\n\n// Sample data to populate when no data is bound\nexport const getSampleData = widgetContext => constructSampleData(getDataType(widgetContext), split(widgetContext.yaxisdatakey, ',').length, widgetContext.shape);\n\n// Check whether X/Y Domain was set to Min and is supported for the present chart\nexport const isAxisDomainValid = (widgetContext, axis) => {\n if (widgetContext[axis + 'domain'] === 'Min' && (isAxisDomainSupported(widgetContext.type))) {\n return true;\n }\n return false;\n};\n\n// Check whether min and max values are finite or not\nexport const areMinMaxValuesValid = values => {\n if (isFinite(values.min) && isFinite(values.max)) {\n return true;\n }\n return false;\n};\n\nexport const getYScaleMinValue = value => {\n const _min = Math.floor(value);\n /* If the number has a) decimal part returning floor value - 0.1\n b) no decimal part returning floor value - 1 */\n return Math.abs(value) - _min > 0 ? value - 0.1 : _min - 1;\n};\n\n// Chooses the data points of line/cumulative line/area chart and highlights them\nexport const highlightPoints = (id, highlightpoints) => {\n const chartSvg = id ? d3.select('#wmChart' + id + ' svg') : d3.select(chartId + ' svg');\n if (highlightpoints) {\n chartSvg.selectAll('.nv-point')\n .style('stroke-width', '6px')\n .style('fill-opacity', '0.95')\n .style('stroke-opacity', '0.95');\n } else {\n chartSvg.selectAll('.nv-point')\n .style('stroke-width', '0px')\n .style('fill-opacity', '0');\n }\n};\n\n// Chooses the line of line/cumulative line and increases the thickness of it\nexport const setLineThickness = (id, thickness) => {\n const chartSvg = id ? d3.select('#wmChart' + id + ' svg') : d3.select(chartId + ' svg');\n thickness = thickness || 1.5;\n\n const lines = chartSvg.selectAll('.nv-line');\n\n if (lines.size() !== 0) {\n lines.style('stroke-width', thickness);\n }\n};\n\n// Constructing a common key value map for preview and canvas mode\nexport const initProperties = (widgetContext, propertyValueMap) => {\n if (!propertyValueMap || isEmptyObject(propertyValueMap)) {\n propertyValueMap = {};\n }\n forEach(basicProperties, prop => {\n if (isUndefined(propertyValueMap[prop])) {\n propertyValueMap[prop] = widgetContext[prop];\n }\n });\n\n return propertyValueMap;\n};\n\nexport const getNumberValue = (value, callback) => {\n return isNaN(parseInt(value, 10)) ? callback(value, 'value') : value;\n};\n\n// Formats the given value according to date format\nexport const getDateFormatedData = (dateFormat, d) => {\n dateFormat = dateFormat || '%x';\n /**\n * if date value is string \"20-05-2019\" then new Date(value) return 20May2019 with current time in India,\n * whereas this will return 19May2019 with time lagging for few hours.\n * This is because it returns UTC time i.e. Coordinated Universal Time (UTC).\n * To create date in local time use moment\n */\n if(dateFormat == '%c') {\n dateFormat = '%a %b %e %X %Y';\n }\n return d3.timeFormat(dateFormat)(new Date(moment(moment(d).format()).valueOf()));\n};\nconst removeTrailingZeros = value => {\n if(!value) {\n return value;\n }\n // Convert value to a string if it's a number\n const stringValue = typeof value === 'number' ? value.toString() : value;\n\n // Remove trailing zeros\n return stringValue.replace(/\\.0+([A-Za-z]*)$/, '$1').replace(/\\.([1-9]+)0+([A-Za-z]*)$/, '.$1$2');\n};\n\n// Formats the given value according to number format\nexport const getNumberFormatedData = (numberFormat, d) => {\n let formattedData,\n divider,\n prefix;\n // formatting the data based on number format selected\n if (numberFormat) {\n let numberFormatter;\n if(numberFormat == 'Thousand' || numberFormat == 'Million' || numberFormat == 'Billion') {\n numberFormatter = d3.format(',.2s');\n } else if(numberFormat == '%') {\n numberFormatter = d3.format('.2%');\n }else if(numberFormat == '.f') {\n numberFormatter = d3.format('.2f');\n } else {\n numberFormatter = d3.format(numberFormat);\n }\n formattedData = numberFormatter(d);\n\n\n // Getting the respective divider[1000,1000000,1000000000] based on the number format choosen\n divider = (tickformats[numberFormat] && tickformats[numberFormat].divider) || 0;\n prefix = tickformats[numberFormat] && tickformats[numberFormat].prefix;\n if (prefix && divider !== 0) {\n formattedData = d3.format('.2f')(d / divider) + prefix;\n }\n } else {\n // Auto formatting the data when no formating option is chosen\n formattedData = d >= 1000 ? d3.format('.1s')(d) : d;\n }\n formattedData = removeTrailingZeros(formattedData);\n return formattedData;\n};\n\n// Set the visibility property of the chart x,y axis due to a bug in the nvd3\nexport const toggleAxisShow = (property, value) => {\n const $xAxis = d3.select(chartId + ' g.nv-axis.nv-x'),\n $yAxis = d3.select(chartId + ' g.nv-axis.nv-y');\n if (property === 'showxaxis') {\n $xAxis.style('visibility', value ? 'visible' : 'hidden');\n } else {\n $yAxis.style('visibility', value ? 'visible' : 'hidden');\n }\n};\n\nexport const modifyLegendPosition = (widgetContext, position, id) => {\n const showLegend = isShowLegend(widgetContext.showlegend),\n chart_Id = id ? '#wmChart' + id : chartId,\n legendWrap = d3.select(chart_Id + ' .nv-legendWrap'),\n legendPadding = 5;\n // Return when showlegend is false\n if (!showLegend || !legendWrap['_groups'][0][0]) {\n return;\n }\n if (position === 'bottom') {\n const legendWrapHeight = legendWrap['_groups'][0][0].getBoundingClientRect().height,\n wrap = d3.select(chart_Id + ' .nv-wrap'),\n wrapTransform = (wrap && wrap.attr('transform')) ? wrap.attr('transform').replace(/, /g, ',') : '',\n coordinates = /translate\\(\\s*([^\\s,)]+)[ ,]([^\\s,)]+)/.exec(wrapTransform),\n getChartHeight = () => {\n let chartHeight = $(chart_Id + ' svg>.nvd3.nv-wrap')[0].getBoundingClientRect().height;\n if (chartHeight === 0) { // fix for IE\n chartHeight = ($(chart_Id + ' svg')[0].getBoundingClientRect().height - (legendWrapHeight + 15));\n }\n return chartHeight;\n };\n legendWrap.attr('transform', 'translate(0 , ' + (getChartHeight() - legendWrapHeight - legendPadding) + ')');\n if (coordinates) {\n wrap.attr('transform', 'translate(' + coordinates[1] + ',' + legendPadding + ')');\n }\n }\n};\n\n// Returns value if legend need to shown or not\nexport const isShowLegend = value => {\n // Old projects will have either true or false\n if (value === 'false' || value === false) {\n return false;\n }\n if (value === 'true' || value === true) {\n return true;\n }\n // New projects will have either 'Hide Legend', 'Show Top', 'Show Bottom'\n return value === 'hide' ? false : true;\n};\n\n/**\n * Customise the tooltip for donut & pie charts and also for charts having only one value attached to yaxis\n * @param key\n * @param label\n */\nexport const customiseTooltip = (chart, propertyValueMap, widgetContext, label?) => {\n d3.selectAll('.nvtooltip').style('opacity', 0);\n chart.tooltip.contentGenerator((key, propertyValueMap) => {\n let xValue = key.data.x, yValue;\n yValue = getNumberFormatedData(propertyValueMap.ynumberformat, key.data.y);\n if (isPieType(widgetContext.type)) {\n label = key.data.x;\n xValue = '';\n }\n return '<table>' +\n '<tbody>' +\n '<tr class=\"value\"><b>' + xValue +\n '</b></tr>' +\n '<tr>' +\n '<td class=\"legend-color-guide\"><div style=\"background-color:' + key.color + ';\"></div></td>' +\n '<td class=\"key\">' + label + '</td>' +\n '<td class=\"value\">' + yValue + '</td>' +\n '</tr>' +\n '</tbody>' +\n '</table>';\n });\n};\n\n// intializes the chart obejct\nexport const initChart = (widgetContext, xDomainValues, yDomainValues, propertyValueMap, isPreview) => {\n propertyValueMap = initProperties(widgetContext, propertyValueMap);\n let chart, colors = [], xaxislabel, yaxislabel, labelConfig, radius, barSpacing,\n showLegend, xAxisValue, hasMultipleYValues;\n const xValue: any = {}, yValue: any = {};\n switch (widgetContext.type) {\n case 'Column':\n barSpacing = getNumberValue(propertyValueMap.barspacing, getBarSpacingValue) || barSpacingMap.medium;\n chart = nv.models.multiBarChart()\n .x(d => d.x)\n .y(d => d.y)\n .reduceXTicks(propertyValueMap.reducexticks)\n .rotateLabels(0)\n .showControls(false)\n .stacked(propertyValueMap.viewtype === 'Stacked' ? true : false)\n .groupSpacing(barSpacing);\n break;\n case 'Cumulative Line':\n chart = nv.models.cumulativeLineChart()\n .x(d => d[0])\n .y(d => d[1])\n .showControls(false)\n .useInteractiveGuideline(propertyValueMap.tooltips)\n .interpolate(propertyValueMap.interpolation);\n break;\n case 'Line':\n chart = nv.models.lineChart()\n .useInteractiveGuideline(propertyValueMap.tooltips)\n .interpolate(propertyValueMap.interpolation);\n break;\n case 'Area':\n chart = nv.models.stackedAreaChart()\n .x(d => d.x)\n .y(d => d.y)\n .clipEdge(true)\n .showControls(false)\n .style(propertyValueMap.areaviewtype)\n .useInteractiveGuideline(propertyValueMap.tooltips)\n .interpolate(propertyValueMap.interpolation);\n break;\n case 'Bar':\n barSpacing = getNumberValue(propertyValueMap.barspacing, getBarSpacingValue) || barSpacingMap.medium;\n chart = nv.models.multiBarHorizontalChart()\n .x(d => d.x)\n .y(d => d.y)\n .showControls(false)\n .stacked(propertyValueMap.viewtype === 'Stacked' ? true : false)\n .showValues(propertyValueMap.showvalues)\n .groupSpacing(barSpacing);\n break;\n case 'Pie':\n case 'Donut':\n labelConfig = getLabelValues(propertyValueMap.showlabels, propertyValueMap.showlabelsoutside, 'value');\n radius = getNumberValue(propertyValueMap.donutratio, getRadiusValue) || donutRatioMap.medium;\n chart = nv.models.pieChart()\n .x(d => d.x)\n .y(d => d.y)\n .showLabels(labelConfig.showlabels)\n .labelType(propertyValueMap.labeltype)\n .valueFormat(d3.format('%'))\n .title(propertyValueMap.centerlabel)\n .labelThreshold(propertyValueMap.labelthreshold || 0.01)\n .labelsOutside(labelConfig.showlabelsoutside);\n if (isDonutChart(widgetContext.type)) {\n chart.donut(true)\n .donutRatio(radius);\n }\n if (propertyValueMap.labeltype === 'key-value') {\n chart.labelType(d => d.data.x + ' ' + d.data.y);\n }\n break;\n case 'Bubble':\n chart = nv.models.scatterChart()\n .x(d => d.x)\n .y(d => d.y)\n .showDistX(propertyValueMap.showxdistance)\n .showDistY(propertyValueMap.showydistance);\n break;\n }\n\n if (xDomainValues) {\n xValue.min = xDomainValues.min.x || xDomainValues.min[0];\n xValue.max = xDomainValues.max.x || xDomainValues.max[0];\n // If the values on the x axis are string then min max values gives Infinity\n if (areMinMaxValuesValid(xValue)) {\n // Reducing the min value to 0.1 so the min value is not missed out\n xValue.min = getYScaleMinValue(xValue.min);\n chart.xDomain([xValue.min, xValue.max]);\n }\n }\n\n if (yDomainValues) {\n // Reducing the min value to 1 so the min value is not missed out\n yValue.min = yDomainValues.min.y || yDomainValues.min[1];\n yValue.max = yDomainValues.max.y || yDomainValues.max[1];\n // If the values on the y axis are string or invalid then min max values gives Infinity\n if (areMinMaxValuesValid(yValue)) {\n // Reducing the min value to 1 so the min value is not missed out\n yValue.min = getYScaleMinValue(yValue.min);\n chart.yDomain([yValue.min, yValue.max]);\n }\n }\n\n // Setting the legend type choosen by user or default it will be furious\n chart.legend.vers((propertyValueMap.legendtype && propertyValueMap.legendtype.toLowerCase()) || 'furious');\n\n if (!includes(chartTypes, widgetContext.type)) {\n chart = nv.models.multiBarChart()\n .x(d => d.x)\n .y(d => d.y);\n }\n\n\n if (isPieType(widgetContext.type)) {\n // In case of pie/donut chart formatting the values of it\n if (propertyValueMap.labeltype === 'percent') {\n chart.valueFormat(d3.format('%'));\n } else {\n chart.valueFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n }\n // Customizing the tooltips in case of the pie and donut when labelType is value\n customiseTooltip(chart, propertyValueMap, widgetContext);\n }\n else {\n chart.showXAxis(propertyValueMap.showxaxis)\n .showYAxis(propertyValueMap.showyaxis);\n chart.legendPosition(propertyValueMap.showlegend);\n\n // Setting the labels if they are specified explicitly or taking the axiskeys chosen\n xaxislabel = propertyValueMap.xaxislabel || prettifyLabels(widgetContext.xaxisdatakey) || 'x caption';\n yaxislabel = propertyValueMap.yaxislabel || prettifyLabels(widgetContext.yaxisdatakey) || 'y caption';\n\n // Checking if y axis has multiple values\n if (widgetContext.yaxisdatakey && widgetContext.yaxisdatakey.split(',').length > 1) {\n hasMultipleYValues = true;\n }\n // Customizing the tooltip to show yaxislabel, only if the y axis contains one value\n if (!hasMultipleYValues && !isBubbleChart(widgetContext.type)) {\n customiseTooltip(chart, propertyValueMap, widgetContext, yaxislabel);\n }\n\n // Adding the units to the captions if they are specified\n xaxislabel += propertyValueMap.xunits ? '(' + propertyValueMap.xunits + ')' : '';\n yaxislabel += propertyValueMap.yunits ? '(' + propertyValueMap.yunits + ')' : '';\n\n chart.xAxis\n .axisLabel(xaxislabel)\n .axisLabelDistance(propertyValueMap.xaxislabeldistance)\n .staggerLabels(propertyValueMap.staggerlabels);\n\n // If date format set format based date format\n if (propertyValueMap.xdateformat || (isPreview && !isBubbleChart(widgetContext.type))) {\n if (isLineTypeChart(widgetContext.type)) {\n chart.xAxis.tickFormat(d => {\n // get the actual value\n xAxisValue = isPreview ? dateList[d - 1] : widgetContext.xDataKeyArr[d];\n return getDateFormatedData(propertyValueMap.xdateformat, xAxisValue);\n });\n } else {\n chart.xAxis.tickFormat(d => getDateFormatedData(propertyValueMap.xdateformat, d));\n }\n } else if (propertyValueMap.xnumberformat) {\n chart.xAxis.tickFormat(d => getNumberFormatedData(propertyValueMap.xnumberformat, d));\n } else {\n if (isLineTypeChart(widgetContext.type)) {\n // get the actual value\n chart.xAxis.tickFormat(d => widgetContext.xDataKeyArr[d]);\n }\n }\n chart.yAxis\n .axisLabel(yaxislabel)\n .axisLabelDistance(propertyValueMap.yaxislabeldistance)\n .staggerLabels(propertyValueMap.staggerlabels)\n .tickFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n if (isBarChart(widgetContext.type)) {\n chart.valueFormat(d => getNumberFormatedData(propertyValueMap.ynumberformat, d));\n }\n }\n\n // Support for custom colors if user gives direct string of colors in text box\n if (isString(propertyValueMap.customcolors) && propertyValueMap.customcolors) {\n colors = split(propertyValueMap.customcolors, ',');\n }\n if (isArray(propertyValueMap.customcolors)) {\n colors = propertyValueMap.customcolors;\n }\n\n showLegend = isShowLegend(propertyValueMap.showlegend);\n chart.showLegend(showLegend)\n .margin({top: propertyValueMap.offsettop, right: propertyValueMap.offsetright, bottom: propertyValueMap.offsetbottom, left: propertyValueMap.offsetleft})\n .color(colors.length ? colors : themes[propertyValueMap.theme].colors);\n\n chart.tooltip.enabled(propertyValueMap.tooltips);\n widgetContext.message = propertyValueMap.nodatamessage || 'No data found';\n // setting the no data message\n chart.noData(widgetContext.message);\n\n if (isLineTypeChart(widgetContext.type) && widgetContext.highlightpoints) {\n chart.dispatch.on('stateChange', () => {\n setTimeout(() => postPlotChartProcess(widgetContext), 100);\n });\n }\n\n if (widgetContext.showlegend && (widgetContext.type === 'Donut' || widgetContext.type === 'Pie')) {\n if(widgetContext.showlegend === 'right') {\n chart.legendPosition('right');\n }\n }\n return chart;\n};\n\n// @ts-ignore\nexport const postPlotChartProcess = (widgetContext, isPreview?) => {\n const id = isPreview ? null : widgetContext.$id;\n // If user sets to highlight the data points and increase the thickness of the line\n if (isLineTypeChart(widgetContext.type)) {\n setLineThickness(id, widgetContext.linethickness);\n highlightPoints(id, widgetContext.highlightpoints);\n }\n // Modifying the legend position only when legend is shown\n // if (widgetContext.showlegend) {\n // modifyLegendPosition(widgetContext, widgetContext.showlegend, id);\n // }\n};\n\n// @ts-ignore\nexport const getDateList = () => dateList;\n\n","<div class=\"panel-heading\" *ngIf=\"title\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\"><i class=\"app-icon panel-icon {{iconclass}}\" [class.ng-hide]=\"!iconclass\"></i></div>\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" *ngIf=\"subheading\" [innerHTML]=\"subheading\"></div>\n </h3>\n</div>\n<div class=\"app-chart-inner\" [ngClass]=\"{'loading':isLoadInProgress, 'panel-body': title}\">\n <svg></svg>\n <div class=\"wm-content-info readonly-wrapper\" *ngIf=\"showContentLoadError && showNoDataMsg\">\n <p class=\"wm-message\" [title]=\"hintMsg\" [ngClass]=\"{'error': invalidConfig}\" [innerText]=\"errMsg\"></p>\n </div>\n <div wmSpinner show.bind=\"isLoadInProgress\" caption.bind=\"loadingdatamsg\"></div>\n</div>\n","import {\n AfterViewInit,\n OnDestroy,\n Component,\n HostBinding,\n Injector,\n ViewEncapsulation,\n Optional,\n Inject\n} from '@angular/core';\n\nimport {\n App,\n DataSource,\n getClonedObject,\n isDataSourceEqual,\n isEmptyObject,\n isNumberType,\n prettifyLabels,\n removeAttr,\n triggerFn,\n isMobileApp,\n noop\n} from '@wm/core';\nimport { APPLY_STYLES_TYPE, IRedrawableComponent, provideAsWidgetRef, StylableComponent, styler, } from '@wm/components/base';\n\nimport { registerProps } from './chart.props';\nimport { allShapes, getDateList, getSampleData, initChart, isAreaChart, isAxisDomainValid, isBarChart, isBubbleChart, isChartDataArray, isChartDataJSON, isLineTypeChart, isPieType, postPlotChartProcess } from './chart.utils';\nimport {\n concat, debounce, fill,\n first,\n forEach, forEachRight,\n get, groupBy, includes,\n intersection,\n isArray, isEmpty, isObject, keys,\n map, max,\n maxBy,\n minBy,\n orderBy,\n replace,\n split,\n uniq\n} from \"lodash-es\";\n\ndeclare const $;\n\ndeclare const d3, nv;\n\nconst WIDGET_CONFIG = {widgetType: 'wm-chart', hostClass: 'app-chart'};\n\nconst options = {\n 'Bubble' : ['bubblesize', 'shape']\n },\n NONE = 'none',\n advanceDataProps = ['aggregation', 'aggregationcolumn', 'groupby', 'orderby'],\n // XPaths to get actual data of data points in charts\n chartDataPointXpath = {\n 'Column' : 'rect.nv-bar',\n 'Bar' : 'g.nv-bar',\n 'Area' : '.nv-stackedarea .nv-point',\n 'Cumulative Line': '.nv-cumulativeLine .nv-scatterWrap path.nv-point',\n 'Line' : '.nv-lineChart .nv-scatterWrap path.nv-point',\n 'Pie' : '.nv-pieChart .nv-slice path',\n 'Donut' : '.nv-pieChart .nv-slice path',\n 'Bubble' : '.nv-scatterChart .nv-point-paths path'\n },\n // all properties of the chart\n allOptions = ['bubblesize', 'shape'],\n styleProps = {\n 'fontunit' : 'font-size',\n 'fontsize' : 'font-size',\n 'color' : 'fill',\n 'fontfamily' : 'font-family',\n 'fontweight' : 'font-weight',\n 'fontstyle' : 'font-style',\n 'textdecoration': 'text-decoration'\n },\n // Getting the relevant aggregation function based on the selected option\n aggregationFnMap = {\n 'average' : 'AVG',\n 'count' : 'COUNT',\n 'maximum' : 'MAX',\n 'minimum' : 'MIN',\n 'sum' : 'SUM'\n };\n\nconst getBooleanValue = val => {\n if (val === true || val === 'true') {\n return true;\n }\n if (val === false || val === 'false') {\n return false;\n }\n return val;\n};\n\n// returns orderby columns and their orders in two separate arrays\nconst getLodashOrderByFormat = orderby => {\n let columns;\n const orderByColumns = [],\n orders = [];\n\n forEach(split(orderby, ','), function (col) {\n columns = split(col, ':');\n orderByColumns.push(columns[0]);\n orders.push(columns[1]);\n });\n return {\n 'columns' : orderByColumns,\n 'orders' : orders\n };\n};\n\n// Replacing the '.' by the '$' because '.' is not supported in the alias names\nconst getValidAliasName = aliasName => aliasName ? aliasName.replace(/\\./g, '$') : null;\n\n// Applying the font related styles for the chart\nconst setTextStyle = (properties, id) => {\n const charttext = d3.select('#wmChart' + id + ' svg').selectAll('text');\n if (!charttext.empty()) {\n charttext.style(properties);\n }\n};\n\nconst angle = d => {\n const a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;\n return a > 90 ? a - 180 : a;\n};\n\n@Component({\n selector: 'div[wmChart]',\n templateUrl: './chart.component.html',\n styleUrls: ['../../../../../node_modules/@wavemaker/nvd3/build/nv.d3.min.css'],\n providers: [\n provideAsWidgetRef(ChartComponent)\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class ChartComponent extends StylableComponent implements AfterViewInit, OnDestroy, IRedrawableComponent {\n static initializeProps = registerProps();\n\n xaxisdatakey;\n yaxisdatakey;\n groupby;\n aggregation;\n aggregationcolumn;\n isVisuallyGrouped;\n orderby;\n iconclass = '';\n type: string;\n showContentLoadError;\n invalidConfig;\n errMsg;\n shape: string;\n datasource: any;\n fontsize: string;\n selecteditem: any;\n fontunit: string;\n offsettop: number;\n offsetleft: number;\n offsetright: number;\n offsetbottom: number;\n showlabels: any;\n theme: string;\n\n private $id;\n private scopedataset: any;\n private binddataset: any;\n private showlabelsoutside: any;\n private _resizeFn: any;\n private chart: any;\n private clearCanvas: boolean;\n public isLoadInProgress: boolean;\n private filterFields: boolean | any;\n private dataset: any;\n private axisoptions: any;\n private numericColumns: any;\n private nonPrimaryColumns: any = [];\n private variableInflight: any;\n private chartReady: boolean;\n private xDataKeyArr: any = [];\n private xAxisDataType: string;\n private bubblesize: any;\n public showNoDataMsg: any;\n private sampleData: any[];\n private chartData: any[] = [];\n private _processedData: any[] = [];\n private _subsciptions: any = [];\n\n @HostBinding('class.panel') title;\n\n isGroupByEnabled() {\n return !!(this.groupby && this.groupby !== NONE);\n }\n\n // Check if x and y axis that are chosen are valid to plot chart\n isValidAxis() {\n // Check if x axis and y axis are chosen and are not equal\n return this.binddataset ? (this.xaxisdatakey && this.yaxisdatakey) : true;\n }\n\n // Check if aggregation is chosen\n isAggregationEnabled() {\n return !!((this.isGroupByEnabled() && this.aggregation !== NONE && this.aggregationcolumn));\n }\n\n // Check if either groupby, aggregation or orderby is chosen\n isDataFilteringEnabled() {\n /*Query need to be triggered if any of the following cases satisfy\n * 1. Group By and aggregation both chosen\n * 2. Only Order By is chosen\n * */\n\n return this.isAggregationEnabled() || (!this.isVisuallyGrouped && this.orderby);\n }\n\n /*Charts like Line,Area,Cumulative Line does not support any other datatype\n other than integer unlike the column and bar.It is a nvd3 issue. Inorder to\n support that this is a fix*/\n getxAxisVal(dataObj, xKey, index) {\n const value = get(dataObj, xKey);\n // If x axis is other than number type then add indexes\n if (isLineTypeChart(this.type) && !isNumberType(this.xAxisDataType)) {\n // Verification to get the unique data keys\n this.xDataKeyArr.push(value);\n // Check if it is of type Date\n if (value instanceof Date) {\n return value;\n } else {\n return index;\n }\n }\n return value;\n }\n\n // Getting the min and max values among all the x values\n getXMinMaxValues(datum) {\n if (!datum) {\n return;\n }\n const xValues: any = {};\n /*\n compute the min x value\n eg: When data has objects\n input: [{x:1, y:2}, {x:2, y:3}, {x:3, y:4}]\n min x: 1\n eg: When data has arrays\n input: [[10, 20], [20, 30], [30, 40]];\n min x: 10\n */\n xValues.min = minBy(datum.values, dataObject => dataObject.x || dataObject[0]);\n /*\n compute the max x value\n eg: When data has objects\n input: [{x:1, y:2}, {x:2, y:3}, {x:3, y:4}]\n max x: 3\n eg: When data has arrays\n input: [[10, 20], [20, 30], [30, 40]];\n max x: 30\n */\n xValues.max = maxBy(datum.values, dataObject => dataObject.x || dataObject[0]);\n return xValues;\n }\n\n // Getting the min and max values among all the y values\n getYMinMaxValues(datum) {\n const yValues: any = {},\n minValues = [],\n maxValues = [];\n if (!datum) {\n return;\n }\n\n /*\n Getting the min and max y values among all the series of data\n compute the min y value\n eg: When data has objects\n input: [[{x:1, y:2}, {x:2, y:3}, {x:3, y:4}], [{x:2, y:3}, {x:3, y:4}, {x:4, y:5}]]\n min y values : '2'(among first set) & '3'(among second set)\n max y values : '4'(among first set) & '5'(among second set)\n\n eg: When data has arrays\n input: [[[10, 20], [20, 30], [30, 40]], [[20, 30], [30, 40], [40, 50]]]\n min y values : '20'(among first set) & '30'(among second set)\n max y values : '40'(among first set) & '50'(among second set)\n */\n\n forEach(datum, data => {\n minValues.push(minBy(data.values, function (dataObject) {\n return dataObject.y || dataObject[1];\n }));\n maxValues.push(maxBy(data.values, function (dataObject) {\n return dataObject.y || dataObject[1];\n }));\n });\n // Gets the least and highest values among all the min and max values of respective series of data\n yValues.min = minBy(minValues, dataObject => dataObject.y || dataObject[1]);\n yValues.max = maxBy(maxValues, dataObject => dataObject.y || dataObject[1]);\n return yValues;\n }\n\n // If the x-axis values are undefined, we return empty array else we return the values\n getValidData(values) {\n return (values.length === 1 && values[0] === undefined) ? [] : values;\n }\n\n // Returns the single data point based on the type of the data chart accepts\n valueFinder(dataObj, xKey, yKey, index?, shape?) {\n const xVal = this.getxAxisVal(dataObj, xKey, index),\n value = get(dataObj, yKey),\n yVal = parseFloat(value) || value,\n size = parseFloat(dataObj[this.bubblesize]) || 2;\n let dataPoint: any = {};\n\n if (isChartDataJSON(this.type)) {\n dataPoint.x = xVal;\n dataPoint.y = yVal;\n // only Bubble chart has the third dimension\n if (isBubbleChart(this.type)) {\n dataPoint.size = size;\n dataPoint.shape = shape || 'circle';\n }\n } else if (isChartDataArray(this.type)) {\n dataPoint = [xVal, yVal];\n }\n // Adding actual unwrapped data to chart data to use at the time of selected data point of chart event\n dataPoint._dataObj = dataObj;\n return dataPoint;\n }\n\n // Setting appropriate error messages\n setErrMsg(message) {\n if (this.showNoDataMsg) {\n this.showContentLoadError = true;\n this.invalidConfig = true;\n // TODO: Set the locale from the message\n this.errMsg = ''; // $rootScope.locale[message];\n }\n }\n\n processChartData() {\n this.sampleData = getSampleData(this);\n // scope variables used to keep the actual key values for x-axis\n this.xDataKeyArr = [];\n // Plotting the chart with sample data when the chart dataset is not bound\n if (!this.binddataset) {\n this.xDataKeyArr = getDateList();\n return this.sampleData;\n }\n\n if (!this.chartData || !this.chartData.length) {\n return [];\n }\n\n let datum = [],\n yAxisKey,\n shapes: any = [],\n values: any = [];\n const xAxisKey = this.xaxisdatakey,\n yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [],\n dataSet = this.chartData;\n\n if (isArray(dataSet)) {\n if (isPieType(this.type)) {\n yAxisKey = yAxisKeys[0];\n datum = map(dataSet, (dataObj, index) => {\n if (!isEmptyObject(dataSet[index])) {\n return this.valueFinder(dataSet[index], xAxisKey, yAxisKey);\n }\n });\n datum = this.getValidData(datum);\n } else {\n if (isBubbleChart(this.type)) {\n shapes = this.shape === 'random' ? allShapes : this.shape;\n }\n yAxisKeys.forEach((yAxisKey, series) => {\n values = map(dataSet, (dataObj, index) => {\n if (!isEmptyObject(dataSet[index])) {\n return this.valueFinder(dataSet[index], xAxisKey, yAxisKey, index, (isArray(shapes) && shapes[series]) || this.shape);\n }\n });\n values = this.getValidData(values);\n datum.push({\n values: values,\n key: prettifyLabels(yAxisKey)\n });\n });\n }\n }\n return datum;\n }\n\n setChartData(data) {\n if (data) {\n this._processedData = data;\n }\n }\n\n getChartData() {\n return this._processedData;\n }\n\n // constructing the grouped data based on the selection of orderby, x & y axis\n getVisuallyGroupedData(queryResponse, groupingColumn) {\n let groupData: any = {},\n groupValues: any = [],\n orderByDetails,\n maxLength;\n const chartData: any = [],\n _isAreaChart = isAreaChart(this.type),\n yAxisKey = first(split(this.yaxisdatakey, ','));\n this.xDataKeyArr = [];\n queryResponse = orderBy(queryResponse, split(this.groupby, ','));\n if (this.orderby) {\n orderByDetails = getLodashOrderByFormat(this.orderby);\n queryResponse = orderBy(queryResponse, orderByDetails.columns, orderByDetails.orders);\n }\n queryResponse = groupBy(queryResponse, groupingColumn);\n // In case of area chart all the series data should be of same length\n if (_isAreaChart) {\n maxLength = max(map(queryResponse, obj => obj.length));\n }\n forEach(queryResponse, (values, groupKey) => {\n groupValues = isAreaChart ? fill(new Array(maxLength), [0, 0]) : [];\n forEachRight(values, (value, index) => {\n groupValues[index] = this.valueFinder(value, this.xaxisdatakey, yAxisKey, index);\n });\n groupData = {\n key : groupKey,\n values : groupValues\n };\n chartData.push(groupData);\n });\n return chartData;\n }\n\n /*Decides whether the data should be visually grouped or not\n Visually grouped when a different column is choosen in the group by other than x and y axis and aggregation is not chosen*/\n getGroupingDetails() {\n if (this.isGroupByEnabled() && !this.isAggregationEnabled()) {\n let isVisuallyGrouped = false,\n visualGroupingColumn,\n groupingExpression,\n columns: any = [],\n groupingColumnIndex;\n const groupbyColumns = this.groupby && this.groupby !== NONE ? this.groupby.split(',') : [],\n yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [];\n\n if (groupbyColumns.length > 1) {\n /*Getting the group by column which is not selected either in x or y axis*/\n groupbyColumns.every((column, index) => {\n if (this.xaxisdatakey !== column && $.inArray(column, yAxisKeys) === -1) {\n isVisuallyGrouped = true;\n visualGroupingColumn = column;\n groupingColumnIndex = index;\n groupbyColumns.splice(groupingColumnIndex, 1);\n return false;\n }\n return true;\n });\n // Constructing the groupby expression\n if (visualGroupingColumn) {\n columns.push(visualGroupingColumn);\n }\n\n if (groupbyColumns.length) {\n columns = concat(columns, groupbyColumns);\n }\n }\n // If x and y axis are not included in aggregation need to be included in groupby\n if (this.xaxisdatakey !== this.aggregationcolumn) {\n columns.push(this.xaxisdatakey);\n }\n forEach(yAxisKeys, key => {\n if (key !== this.aggregationcolumn) {\n columns.push(key);\n }\n });\n groupingExpression = columns.join(',');\n // set isVisuallyGrouped flag in scope for later use\n this.isVisuallyGrouped = isVisuallyGrouped;\n\n return {\n expression: groupingExpression,\n isVisuallyGrouped: isVisuallyGrouped,\n visualGroupingColumn: visualGroupingColumn\n };\n }\n return {\n expression: '',\n isVisuallyGrouped: false,\n visualGroupingColumn: ''\n };\n }\n\n // Function to get the aggregated data after applying the aggregation & group by or order by operations.\n getAggregatedData(callback) {\n const variable: any = this.datasource,\n yAxisKeys = this.yaxisdatakey ? this.yaxisdatakey.split(',') : [],\n data: any = {};\n let sortExpr,\n columns: any = [],\n colAlias,\n orderByColumns,\n groupByFields: any = [];\n\n if (!variable) {\n return;\n }\n if (this.isGroupByEnabled()) {\n groupByFields = split(this.groupby, ',');\n }\n if (this.orderby) {\n sortExpr = replace(this.orderby, /:/g, ' ');\n columns = uniq(concat(columns, groupByFields, [this.aggregationcolumn]));\n orderByColumns = getLodashOrderByFormat(this.orderby).columns;\n // If the orderby column is chosen either in groupby or orderby then replace . with $ for that column\n forEach(intersection(columns, orderByColumns), col => {\n colAlias = getValidAliasName(col);\n // @ts-ignore\n sortExpr = replace(sortExpr, col, colAlias);\n });\n }\n if (this.isAggregationEnabled()) {\n // Send the group by in the aggregations api only if aggregation is also chosen\n data.groupByFields = groupByFields;\n data.aggregations = [\n {\n 'field': this.aggregationcolumn,\n 'type': aggregationFnMap[this.aggregation],\n 'alias': getValidAliasName(this.aggregationcolumn)\n }\n ];\n }\n // Execute the query.\n variable.execute('getAggregatedData', {\n 'aggregations' : data,\n 'sort' : sortExpr\n }).then(response => {\n // Transform the result into a format supported by the chart.\n const chartData: any = [],\n aggregationAlias: any = getValidAliasName(this.aggregationcolumn),\n xAxisAliasKey = getValidAliasName(this.xaxisdatakey),\n yAxisAliasKeys = [];\n\n yAxisKeys.forEach(yAxisKey => yAxisAliasKeys.push(getValidAliasName(yAxisKey)));\n\n forEach(response.body.content, (responseContent) => {\n const obj = {};\n // Set the response in the chartData based on 'aggregationColumn', 'xAxisDataKey' & 'yAxisDataKey'.\n if (this.isAggregationEnabled()) {\n obj[this.aggregationcolumn] = responseContent[aggregationAlias];\n obj[this.aggregationcolumn] = get(responseContent, aggregationAlias) || get(responseContent, this.aggregationcolumn);\n }\n\n obj[this.xaxisdatakey] = get(responseContent, xAxisAliasKey) || get(responseContent, this.xaxisdatakey);\n\n yAxisKeys.forEach((yAxisKey, index) => {\n obj[yAxisKey] = responseContent[yAxisAliasKeys[index]];\n obj[yAxisKey] = get(responseContent, yAxisAliasKeys[index]) || get(responseContent, yAxisKey);\n });\n\n chartData.push(obj);\n });\n\n this.chartData = chartData;\n\n triggerFn(callback);\n }, () => {\n this.chartData = [];\n this.setErrMsg('MESSAGE_ERROR_FETCH_DATA');\n triggerFn(callback);\n });\n }\n\n // This function sets maximum width for the labels that can be displayed.This will helpful when they are overlapping\n setLabelsMaxWidth() {\n let xTicks,\n tickWidth,\n maxLength,\n xDist,\n yDist,\n totalHeight,\n maxNoLabels,\n nthElement,\n labelsAvailableWidth,\n barWrapper,\n yAxisWrapper,\n svgWrapper;\n const fontsize = parseInt(this.fontsize, 10) || 12,\n isBarchart = isBarChart(this.type);\n // getting the x ticks in the chart\n xTicks = $('#wmChart' + this.$id + ' svg').find('g.nv-x').find('g.tick').find('text');\n\n // getting the distance between the two visible ticks associated with visible text\n xTicks.each(function () {\n const xTick = $(this);\n let xTransform,\n tickDist;\n if (xTick.text() && xTick.css('opacity') === '1') {\n xTransform = xTick.parent().attr('transform').split(',');\n xDist = parseFloat(xTransform[0].substr(10));\n yDist = parseFloat(xTransform[1] || '0');\n if (!isBarchart && xDist > 0) {\n tickDist = xDist;\n } else if (yDist > 0) {\n tickDist = yDist;\n }\n if (tickWidth) {\n tickWidth = tickDist - tickWidth;\n return false;\n }\n tickWidth = tickDist;\n return true;\n }\n });\n\n // In case of bar chart getting the available space for the labels to be displayed\n if (isBarchart) {\n barWrapper = $('#wmChart' + this.$id + ' svg>g.nv-wrap>g>g.nv-barsWrap')[0];\n yAxisWrapper = $('#wmChart' + this.$id + ' svg>g.nv-wrap>g>g.nv-y')[0];\n svgWrapper = $('#wmChart' + this.$id + ' svg')[0];\n // getting the total height of the chart\n totalHeight = barWrapper ? barWrapper.getBoundingClientRect().height : 0;\n // getting the labels available space\n labelsAvailableWidth = yAxisWrapper ? svgWrapper.getBoundingClientRect().width - yAxisWrapper.getBoundingClientRect().width : svgWrapper.getBoundingClientRect().width;\n // Setting the max length for the label\n maxLength = Math.round(labelsAvailableWidth / fontsize);\n // if available space for each label is less than the font-size\n // then limiting the labels to be displayed\n if (tickWidth < fontsize) {\n // calculate the maximum no of labels to be fitted\n maxNoLabels = totalHeight / fontsize;\n // showing only the nth element\n nthElement = Math.ceil(this.chartData.length / maxNoLabels);\n // showing up only some labels\n d3.select('#wmChart' + this.$id + ' svg').select('g.nv-x').selectAll('g.tick').select('text').each(function (text, i) {\n // hiding every non nth element\n if (i % nthElement !== 0) {\n d3.select(this).attr('opacity', 0);\n }\n });\n }\n } else {\n // Setting the max length for the label\n maxLength = Math.round(tickWidth / fontsize);\n }\n\n // maxLength should always be a positive number\n maxLength = Math.abs(maxLength);\n // Validating if every label exceeds the max length and if so limiting the length and adding ellipsis\n xTicks.each(function () {\n if (this.textContent.length > maxLength) {\n this.textContent = this.textContent.substr(0, maxLength) + '...';\n }\n });\n }\n\n // Returns the columns of that can be choosen in the x and y axis\n getDefaultColumns() {\n let type,\n stringColumn,\n i,\n temp;\n const defaultColumns = [],\n columns = this.datasource.execute(DataSource.Operation.GET_PROPERTIES_MAP) || [];\n\n for (i = 0; i < columns.length && defaultColumns.length <= 2; i += 1) {\n type = columns[i].type;\n if (!columns[i].isRelated && (isNumberType(type))) {\n defaultColumns.push(columns[i].fieldName);\n } else if (type === 'string' && !stringColumn) {\n stringColumn = columns[i].fieldName;\n }\n }\n // Other than bubble chart x: string type y: number type\n // Bubble chart x: number type y: number type\n if (stringColumn && defaultColumns.length > 0 && !isBubbleChart(this.type)) {\n temp = defaultColumns[0];\n defaultColumns[0] = stringColumn;\n defaultColumns[1] = temp;\n }\n\n return defaultColumns;\n }\n\n // Call user defined javascript function when user links it to click event of the widget.\n attachClickEvent() {\n let dataObj;\n d3.select('#wmChart' + this.$id + ' svg').selectAll(chartDataPointXpath[this.type]).style('pointer-events', 'all')\n .on('click', (event, data, index) => {\n switch (this.type) {\n case 'Column':\n case 'Bar':\n dataObj = data._dataObj;\n break;\n case 'Pie':\n case 'Donut':\n dataObj = data.data._dataObj;\n break;\n case 'Area':\n case 'Cumulative Line':\n case 'Line':\n dataObj = data[0]._dataObj;\n break;\n case 'Bubble':\n dataObj = data;\n break;\n }\n this.selecteditem = dataObj;\n this.invokeEventCallback('select', {\n $event: event,\n selectedChartItem: data,\n selectedItem: this.selecteditem\n });\n });\n\n }\n\n /* Returns Y Scale min value\n Ex: Input : 8.97\n Output : 8.87\n\n Input : 8\n Output : 7\n */\n\n postPlotProcess(chart) {\n let chartSvg,\n pieLabels,\n pieGroups,\n angleArray;\n const styleObj = {};\n const element = this.$element;\n\n postPlotChartProcess(this);\n\n if (!isPieType(this.type)) {\n this.setLabelsMaxWidth();\n } else if (!this.showlabelsoutside) {\n /** Nvd3 has a issue in rotating text. So we will use this as a temp fix.\n * If the issue is resolved there, we can remove this.*/\n /* If it is a donut chart, then rotate the text and position them*/\n chartSvg = d3.select('#wmChart' + this.$id + ' svg');\n pieLabels = chartSvg.select('.nv-pieLabels').selectAll('.nv-label');\n pieGroups = chartSvg.select('.nv-pie').selectAll('.nv-slice');\n angleArray = [];\n if (pieGroups && pieGroups.length) {\n pieGroups.each(function () {\n d3.select(this).attr('transform', function (d) {\n angleArray.push(angle(d));\n });\n });\n pieLabels.each(function (d, i) {\n const group = d3.select(this);\n $(group[0][0]).find('text').attr('transform', 'rotate(' + angleArray[i] + ')');\n });\n }\n }\n\n // prepare text style props object and set\n forEach(styleProps, (value, key) => {\n if (key === 'fontsize' || key === 'fontunit') {\n styleObj[value] = this.fontsize + this.fontunit;\n } else {\n styleObj[value] = this[key];\n }\n });\n setTextStyle(styleObj, this.$id);\n\n /*\n * allow window-resize functionality, for only-run mode as\n * updating chart is being handled by watchers of height & width in studio-mode\n * */\n triggerFn(this._resizeFn && this._resizeFn.clear);\n this._resizeFn = nv.utils.windowResize(() => {\n if (element[0].getBoundingClientRect().height) {\n chart.update();\n postPlotChartProcess(this);\n if (!isPieType(this.type)) {\n this.setLabelsMaxWidth();\n }\n } else {\n // TODO: get parents of accordion type\n /*let parent = element.closest('.app-accordion-panel, .tab-pane').isolateScope();\n if (parent) {\n parent.initialized = false;\n }*/\n }\n });\n }\n\n // prepares and configures the chart properties\n configureChart() {\n // Copy the data only in case of pie chart with default data\n // Reason : when multiple pie charts are bound to same data, first chart theme will be applied to all charts\n let xDomainValues;\n let yDomainValues;\n let chart;\n let beforeRenderVal;\n const yformatOptions: any = {};\n\n if (this._processedData.length > 0) {\n if (isAxisDomainValid(this, 'x')) {\n xDomainValues = this.binddataset ? this.getXMinMaxValues(this._processedData[0]) : { 'min' : {'x': 1}, 'max' : {'x' : 5}};\n }\n if (isAxisDomainValid(this, 'y')) {\n yDomainValues = this.binddataset ? this.getYMinMaxValues(this._processedData) : { 'min' : {'y' : 1}, 'max' : {'y' : 5}};\n }\n }\n\n if (isPieType(this.type) && (!this.binddataset || !this.scopedataset)) {\n this._processedData = getClonedObject(this.scopedataset || this._processedData);\n }\n\n // get the chart object\n chart = initChart(this, xDomainValues, yDomainValues, null, !this.binddataset);\n\n if (isArray(this._processedData)) {\n // WMS-19499: To remove chart X-axis old ticks when chart data loaded dynamically.\n const oldgTicks = $('#wmChart' + this.$id + ' svg').find('g.nv-x').find('g.tick');\n if (oldgTicks && oldgTicks.length) {\n oldgTicks.remove();\n }\n beforeRenderVal = this.invokeEventCallback('beforerender', { 'chartInstance' : chart});\n if (beforeRenderVal) {\n chart = beforeRenderVal;\n }\n this.chart = chart;\n // changing the default no data message\n d3.select('#wmChart' + this.$id + ' svg')\n .datum(this._processedData)\n .call(this.chart);\n this.postPlotProcess(chart);\n return chart;\n }\n }\n\n // Plotting the chart with set of the properties set to it\n plotChart() {\n const element = this.$element;\n // call user-transformed function\n this.chartData = (this.invokeEventCallback('transform')) || this.chartData;\n\n // Getting the order by data only in run mode. The order by applies for all the charts other than pie and donut charts\n if (this.isVisuallyGrouped && !isPieType(this.type)) {\n this._processedData = this.chartData;\n } else {\n this._processedData = this.processChartData();\n }\n // checking the parent container before plotting the chart\n if (!element[0].getBoundingClientRect().height) {\n return;\n }\n if (this.clearCanvas) {\n // empty svg to add-new chart\n element.find('svg').replaceWith('<svg></svg>');\n this.clearCanvas = false;\n }\n\n // In case of invalid axis show no data available message\n if (!this.isValidAxis()) {\n this._processedData = [];\n }\n nv.addGraph(() => this.configureChart(), () => {\n /*Bubble chart has an time out delay of 300ms in their implementation due to which we\n * won't be getting required data points on attaching events\n * hence delaying it 600ms*/\n setTimeout( () => {\n this.attachClickEvent();\n }, 600);\n });\n this.isLoadInProgress = false;\n }\n // TODO: Need way to figure out if the datasource is a live source\n get isLiveVariable() {\n // setting the flag for the live variable in the scope for the checks\n const variableObj = this.datasource;\n return variableObj && variableObj.category === 'wm.LiveVariable';\n }\n\n plotChartProxy() {\n this.showContentLoadError = false;\n this.invalidConfig = false;\n // Checking if x and y axis are chosen\n this.isLoadInProgress = true;\n const groupingDetails = this.getGroupingDetails();\n // If aggregation/group by/order by properties have been set, then get the aggregated data and plot the result in the chart.\n // TODO: datasource for live variable detection\n if (this.binddataset && this.isLiveVariable && (this.filterFields || this.isDataFilteringEnabled())) {\n this.getAggregatedData(() => this.plotChart());\n } else { // Else, simply plot the chart.\n // In case of live variable resetting the aggregated data to the normal dataset when the aggregation has been removed\n if (this.dataset && this.isLiveVariable) {\n this.chartData = this.dataset;\n if (this.isGroupByEnabled() && groupingDetails.isVisuallyGrouped) {\n this.chartData = this.getVisuallyGroupedData(this.chartData, groupingDetails.visualGroupingColumn);\n }\n\n }\n this.plotChart();\n }\n }\n\n // sets the default x and y axis options\n setDefaultAxisOptions() {\n const defaultColumns = this.getDefaultColumns();\n // If we get the valid default columns then assign them as the x and y axis\n // In case of service variable we may not get the valid columns because we cannot know the datatypes\n this.xaxisdatakey = defaultColumns[0] || null;\n this.yaxisdatakey = defaultColumns[1] || null;\n }\n\n getCutomizedOptions(prop, fields) {\n const groupByColumns = split(this.groupby, ','),\n aggColumns = split(this.aggregationcolumn, ',');\n if (!this.binddataset) {\n return fields;\n }\n if (!this.axisoptions) {\n this.axisoptions = fields;\n }\n let newOptions;\n switch (prop) {\n case 'xaxisdatakey':\n // If group by enabled, columns chosen in groupby will be populated in x axis options\n if (this.isGroupByEnabled()) {\n newOptions = groupByColumns;\n }\n break;\n case 'yaxisdatakey':\n // If aggregation by enabled, columns chosen in aggregation will be populated in y axis options\n if (this.isAggregationEnabled()) {\n newOptions = aggColumns;\n } else if (this.isLiveVariable) {\n // In case of live variable populating only numeric columns\n newOptions = this.numericColumns;\n }\n break;\n case 'groupby':\n // Filtering only non primary key columns\n if (this.isLiveVariable && this.nonPrimaryColumns && this.nonPrimaryColumns.length) {\n newOptions = this.nonPrimaryColumns;\n }\n break;\n case 'aggregationcolumn':\n // Set the 'aggregationColumn' to show all keys in case of aggregation function is count or to numeric keys in all other cases.\n if (this.isLiveVariable && this.isAggregationEnabled() && this.aggregation !== 'count') {\n newOptions = this.numericColumns;\n }\n break;\n case 'orderby':\n // Set the 'aggregationColumn' to show all keys in case of aggregation function is count or to numeric keys in all other cases.\n if (this.isLiveVariable && this.isAggregationEnabled()) {\n newOptions = uniq(concat(groupByColumns, aggColumns));\n }\n break;\n case 'bubblesize':\n if (this.numericColumns && this.numericColumns.length) {\n newOptions = this.numericColumns;\n }\n break;\n }\n\n return newOptions || fields || this.axisoptions;\n }\n\n // Function that iterates through all the columns and then fetching the numeric and non primary columns among them\n setNumericandNonPrimaryColumns() {\n let columns,\n type;\n const propertiesMap = this.datasource.execute(DataSource.Operation.GET_PROPERTIES_MAP);\n this.numericColumns = [];\n this.nonPrimaryColumns = [];\n // Fetching all the columns\n if (this.dataset && !isEmpty(propertiesMap)) {\n columns = []; // TODO: fetchPropertiesMapColumns(propertiesMap);\n }\n\n if (columns) {\n // Iterating through all the columns and fetching the numeric and non primary key columns\n forEach(Object.keys(columns), (key) => {\n type = columns[key].type;\n if (isNumberType(type)) {\n this.numericColumns.push(key);\n }\n // Hiding only table's primary key\n if (columns[key].isRelatedPk === 'true' || !columns[key].isPrimaryKey) {\n this.nonPrimaryColumns.push(key);\n }\n });\n this.numericColumns = this.numericColumns.sort();\n this.nonPrimaryColumns = this.nonPrimaryColumns.sort();\n }\n }\n\n // plot the chart\n handleDataSet(newVal) {\n this.errMsg = '';\n // Resetting the flag to false when the binding was removed\n if (!newVal && !this.binddataset) {\n this.isVisuallyGrouped = false;\n this.axisoptions = null;\n }\n\n // liveVariables contain data in 'data' property' of the variable\n this.chartData = this.isLiveVariable ? newVal || '' : (newVal && newVal.dataValue === '' && keys(newVal).length === 1) ? '' : newVal;\n\n // if the data returned is an object make it an array of object\n if (!isArray(this.chartData) && isObject(this.chartData)) {\n this.chartData = [this.chartData];\n }\n\n if (newVal && newVal.filterFields) {\n this.filterFields = newVal.filterFields;\n }\n\n // plotchart for only valid data and only after bound variable returns data\n if (this.chartData) {\n this._plotChartProxy();\n }\n }\n\n _plotChartProxy = debounce(this.plotChartProxy.bind(this), 100);\n\n // sets the center label for donut chart type\n setDonutCenterLabel(labelValue) {\n let chartSvg, pieGroups;\n chartSvg = d3.select('#wmChart' + this.$id + ' svg');\n\n pieGroups = chartSvg.select('.nv-wrap.nv-pie').select('.nv-pie');\n pieGroups.text('');\n pieGroups.append('text')\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .attr('class', 'nv-pie-title')\n .text(labelValue)\n .each(function (d) {\n var d3text = d3.select(this),\n circ = d3.select(this.parentElement),\n totalWidth = Number(circ.node().getBoundingClientRect().width),\n // minus the ring width from total width\n availWidth = totalWidth - 30,\n textWidth = this.getComputedTextLength();\n d3text.attr(\"data-scale\", availWidth / textWidth);\n }).style(\"font-size\", function() {\n // 16 is the default font size to multiply with the scaled value and 24 is the maximum font size that can be applied\n var fontSize = 16 * d3.select(this).attr(\"data-scale\");\n return fontSize > 24 ? 24 : fontSize + \"px\";\n });\n }\n\n onPropertyChange(key, newVal, oldVal?) {\n super.onPropertyChange(key, newVal, oldVal);\n switch (key) {\n case 'dataset':\n this.handleDataSet(newVal);\n break;\n case 'centerlabel':\n if (this.chart) {\n this.chart.title(newVal);\n this.setDonutCenterLabel(newVal);\n }\n break;\n case 'type':\n // Based on the change in type deciding the default margins\n if (isPieType(this.type)) {\n this.offsettop = 20;\n this.offsetright = 0;\n this.offsetbottom = 0;\n this.offsetleft = 0;\n } else if (oldVal === 'Pie' || oldVal === 'Donut') {\n this.offsettop = 25;\n this.offsetright = 25;\n this.offsetbottom = 55;\n this.offsetleft = 75;\n }\n\n if (oldVal !== newVal) {\n this.clearCanvas = true;\n }\n // In studio mode, configure properties dependent on chart type\n this._plotChartProxy();\n break;\n default:\n // In RunMode, the plotchart method will not be called for all property change\n this._plotChartProxy();\n break;\n }\n if (includes(advanceDataProps, key)) {\n this._plotChartProxy();\n }\n }\n\n handleLoading(data) {\n const dataSource = this.datasource;\n if (dataSource && dataSource.execute(DataSource.Operation.IS_API_AWARE) && isDataSourceEqual(data.variable, dataSource)) {\n this.variableInflight = data.active;\n this.isLoadInProgress = data.active;\n }\n }\n\n hideTooltip() {\n d3.selectAll('.nvtooltip').style('opacity', 0);\n }\n\n onStyleChange(key, newVal, oldVal) {\n const styleObj = {};\n super.onStyleChange(key, newVal, oldVal);\n switch (key) {\n case 'fontsize':\n case 'fontunit':\n case 'color':\n case 'fontfamily':\n case 'fontweight':\n case 'fontstyle':\n case 'textdecoration':\n styleObj[styleProps[key]] = (key === 'fontsize' || key === 'fontunit') ? this.fontsize + this.fontunit : newVal;\n setTextStyle(styleObj, this.$id);\n break;\n }\n }\n\n constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER, ['fontsize', 'fontunit', 'color', 'fontfamily', 'fontweight', 'fontstyle', 'textdecoration']);\n\n // generate unique id for the component\n this.$id = this.widgetId || Math.random();\n // remove title attribute as the element on hover shows you the hint through-out the element\n removeAttr(this.nativeElement, 'title');\n this.chartReady = false;\n this.binddataset = this.nativeElement.getAttribute('dataset.bind');\n // Show loading status based on the variable life cycle\n this._subsciptions.push(this.app.subscribe('toggle-variable-state', this.handleLoading.bind(this)));\n // Will hide tolltip of a chart in mobile when the user scrolls.\n this._subsciptions.push(this.app.subscribe('iscroll-start', () => {this.hideTooltip();}));\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n // For old projects\n if (!includes(['outside', 'inside', 'hide'], this.showlabels)) {\n this.showlabels = getBooleanValue(this.showlabels);\n this.showlabelsoutside = getBooleanValue(this.showlabelsoutside);\n this.showlabels = this.showlabels ? (this.showlabelsoutside ? 'outside' : 'inside') : 'hide';\n }\n\n if (!this.theme) {\n // Default theme for pie/donut is Azure and for other it is Terrestrial\n this.theme = isPieType(this.type) ? 'Azure' : 'Terrestrial';\n }\n\n this.nativeElement.setAttribute('id', 'wmChart' + this.$id);\n // When there is not value binding, then plot the chart with sample data\n if (!this.binddataset && !this.nativeElement.getAttribute('scopedataset')) {\n this._plotChartProxy();\n }\n }\n\n ngOnDestroy() {\n // destroy all subscriptions to prevent memory leak.\n this.hideTooltip();\n this._subsciptions.forEach((subscription)=>{\n subscription();\n });\n super.ngOnDestroy();\n }\n redraw = this._plotChartProxy.bind(this);\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\nimport { BasicModule } from '@wm/components/basic';\n\nimport { ChartComponent } from './chart.component';\n\nconst components = [\n ChartComponent\n];\n\n@NgModule({\n imports: [\n BasicModule,\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class ChartModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|